21 #include "hpm_sdxc_regs.h"
22 #include "hpm_sdxc_soc_drv.h"
39 #define SDXC_HOST_SUPPORT_1V8 (1UL << 0)
40 #define SDXC_HOST_SUPPORT_4BIT (1UL << 1)
41 #define SDXC_HOST_SUPPORT_8BIT (1UL << 2)
42 #define SDXC_HOST_SUPPORT_EMMC (1UL << 3)
47 #define SDXC_HOST_SUPPORT_CD (1UL << 16)
48 #define SDXC_HOST_SUPPORT_VSEL (1UL << 17)
49 #define SDXC_HOST_SUPPORT_PWR (1UL << 18)
50 #define SDXC_HOST_SUPPORT_WP (1UL << 19)
51 #define SDXC_HOST_SUPPORT_RST (1UL << 20)
52 #define SDXC_HOST_SUPPORT_DS (1UL << 21)
57 #define SDXC_HOST_CD_IN_IP (SDXC_HOST_SUPPORT_CD << 8)
58 #define SDXC_HOST_VSEL_IN_IP (SDXC_HOST_SUPPORT_VSEL << 8)
59 #define SDXC_HOST_PWR_IN_IP (SDXC_HOST_SUPPORT_PWR << 8)
60 #define SDXC_HOST_WP_IN_IP (SDXC_HOST_SUPPORT_WP << 8)
61 #define SDXC_HOST_RST_IN_IP (SDXC_HOST_SUPPORT_RST << 8)
70 #define SDXC_HOST_VSEL_PIN_POLARITY (SDXC_HOST_SUPPORT_CD << 16)
71 #define SDXC_HOST_CD_PIN_POLARITY (SDXC_HOST_VSEL_IN_IP << 16)
72 #define SDXC_HOST_PWR_PIN_POLARITY (SDXC_HOST_SUPPORT_PWR << 16)
73 #define SDXC_HOST_WP_PIN_POLARITY (SDXC_HOST_SUPPORT_WP << 16)
74 #define SDXC_HOST_RST_IN_POLARITY (SDXC_HOST_SUPPORT_DS << 16)
79 #define SDXC_CMD_RESP_TYPE_NO_RESP (0U)
80 #define SDXC_CMD_RESP_TYPE_RESP_LEN_136 (1U)
81 #define SDXC_CMD_RESP_TYPE_RESP_LEN_48 (2U)
82 #define SDXC_CMD_RESP_TYPE_RESP_LEN_48B (3U)
85 #define SDXC_STS_CMD_ERR (SDXC_INT_STAT_CMD_TOUT_ERR_MASK | SDXC_INT_STAT_CMD_CRC_ERR_MASK |\
86 SDXC_INT_STAT_CMD_END_BIT_ERR_MASK | SDXC_INT_STAT_CMD_IDX_ERR_MASK | SDXC_INT_STAT_AUTO_CMD_ERR_MASK)
87 #define SDXC_STS_DATA_ERR (SDXC_INT_STAT_DATA_TOUT_ERR_MASK | SDXC_INT_STAT_DATA_CRC_ERR_MASK | \
88 SDXC_INT_STAT_DATA_END_BIT_ERR_MASK)
89 #define SDXC_STS_CARD_ERR (SDXC_INT_STAT_CARD_REMOVAL_MASK)
90 #define SDXC_STS_ERROR (SDXC_INT_STAT_ERR_INTERRUPT_MASK | SDXC_STS_CMD_ERR | SDXC_STS_DATA_ERR | SDXC_STS_CARD_ERR)
91 #define SDXC_STS_CMD_FLAGS (SDXC_STS_CMD_ERR | SDXC_INT_STAT_CMD_COMPLETE_MASK)
93 #define SDXC_STS_ALL_FLAGS (SDXC_INT_STAT_ERR_INTERRUPT_MASK | SDXC_INT_STAT_CQE_EVENT_MASK | \
94 SDXC_INT_STAT_FX_EVENT_MASK | SDXC_INT_STAT_RE_TUNE_EVENT_MASK | SDXC_INT_STAT_CARD_INTERRUPT_MASK | \
95 SDXC_INT_STAT_CARD_REMOVAL_MASK | SDXC_INT_STAT_CARD_INSERTION_MASK | SDXC_INT_STAT_BUF_RD_READY_MASK | \
96 SDXC_INT_STAT_BUF_WR_READY_MASK | SDXC_INT_STAT_DMA_INTERRUPT_MASK | SDXC_INT_STAT_BGAP_EVENT_MASK | \
97 SDXC_INT_STAT_XFER_COMPLETE_MASK | SDXC_INT_STAT_CMD_COMPLETE_MASK | SDXC_INT_STAT_BOOT_ACK_ERR_MASK | \
98 SDXC_INT_STAT_RESP_ERR_MASK | SDXC_INT_STAT_TUNING_ERR_MASK | SDXC_INT_STAT_ADMA_ERR_MASK | \
99 SDXC_INT_STAT_AUTO_CMD_ERR_MASK | SDXC_INT_STAT_CUR_LMT_ERR_MASK | SDXC_INT_STAT_DATA_END_BIT_ERR_MASK |\
100 SDXC_INT_STAT_DATA_CRC_ERR_MASK | SDXC_INT_STAT_DATA_TOUT_ERR_MASK | SDXC_INT_STAT_CMD_IDX_ERR_MASK |\
101 SDXC_INT_STAT_CMD_END_BIT_ERR_MASK | SDXC_INT_STAT_CMD_CRC_ERR_MASK | SDXC_INT_STAT_CMD_TOUT_ERR_MASK)
107 typedef enum _sdxc_software_reset {
116 typedef enum _sdxc_bus_voltage_option {
126 typedef enum _sdxc_wakeup_event {
135 typedef enum _sdxc_dma_type {
145 typedef enum _sdxc_bus_width {
154 typedef enum _sdxc_speed_mode {
176 typedef enum _sdxc_auto_cmd_sel {
186 typedef enum _sdxc_xfer_direction {
194 typedef enum _sdxc_command_type {
205 #define SDXC_CMD_TYPE_NORMAL (0UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
206 #define SDXC_CMD_TYPE_SUSPEND (1UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
207 #define SDXC_CMD_TYPE_RESUME (2UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
208 #define SDXC_CMD_TYPE_ABORT (3UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
213 typedef enum _sdxc_boot_mode {
221 typedef enum _sdxc_response_type {
228 #define SDXC_CMD_RESP_NO_RESPONSE (0UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
229 #define SDXC_CMD_RESP_LEN_136 (1UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
230 #define SDXC_CMD_RESP_LEN_48 (2UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
231 #define SDXC_CMD_RESP_LEN_48B (3UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
233 #define SDXC_CMD_CMD_IS_MAIN_CMD (0U)
234 #define SDXC_CMD_CMD_IS_SUB_CMD (SDXC_CMD_XFER_SUB_CMD_FLAG_MASK)
236 #define SDXC_CMD_CMD_CRC_CHK_EN (SDXC_CMD_XFER_CMD_CRC_CHK_ENABLE_MASK)
237 #define SDXC_CMD_CMD_CRC_CHK_DIS (0U)
239 #define SDXC_CMD_CMD_IDX_CHK_EN (SDXC_CMD_XFER_CMD_IDX_CHK_ENABLE_MASK)
240 #define SDXC_CMD_CMD_IDX_CHK_DIS (0U)
242 #define SDXC_CMD_DATA_PRESENT (SDXC_CMD_XFER_DATA_PRESENT_SEL_MASK)
243 #define SDXC_CMD_DATA_NO_PRESENT (0U)
245 #define SDXC_CMD_CMD_TYPE_NORMAL (0U)
246 #define SDXC_CMD_CMD_TYPE_SUSPEND (1UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
247 #define SDXC_CMD_CMD_TYPE_RESUME (2U << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
248 #define SDXC_CMD_CMD_TYPE_ABORT (3U << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
351 } curr_capabilities1;
356 uint32_t reserved: 24;
359 } curr_capabilities2;
366 typedef enum _sdxc_dev_resp_type {
382 typedef struct _sdxc_command {
384 uint32_t cmd_argument;
388 uint32_t resp_error_flags;
389 uint32_t response[4];
390 uint32_t auto_cmd_resp;
391 uint32_t cmd_timeout_ms;
397 typedef struct _sdxc_data_list {
400 struct _sdxc_data_list *data_list;
406 typedef struct _sdxc_data {
407 bool enable_auto_cmd12;
408 bool enable_auto_cmd23;
409 bool enable_ignore_error;
414 const uint32_t *tx_data;
429 typedef struct _sdxc_xfer {
437 typedef struct _sdxc_adma_config {
439 uint32_t *adma_table;
440 uint32_t adma_table_words;
451 typedef struct _sdxc_config {
452 uint32_t data_timeout;
458 typedef struct _sdxc_adma2_descriptor {
463 uint32_t interrupt: 1;
465 uint32_t len_upper: 10;
466 uint32_t len_lower: 16;
470 const uint32_t *addr;
473 #define SDXC_ADMA2_DESC_VALID_FLAG (1UL << 0)
474 #define SDXC_ADMA2_DESC_END_FLAG (1UL << 1)
475 #define SDXC_ADMA2_DESC_INTERRUPT_FLAG (1UL << 2)
476 #define SDXC_ADMA2_DESC_ACT0_FLAG (1UL << 3)
477 #define SDXC_ADMA2_DESC_ACT1_FLAG (1UL << 4)
478 #define SDXC_ADMA2_DESC_ACT2_FLAG (1UL << 5)
480 #define SDXC_ADMA2_ADDR_LEN (4U)
481 #define SDXC_ADMA2_LEN_ALIGN (4U)
483 #define SDXC_ADMA2_DESC_TYPE_NOP (0U)
484 #define SDXC_ADMA2_DESC_TYPE_TRANS (4U)
485 #define SDXC_ADMA2_DESC_TYPE_LINK (6U)
486 #define SDXC_ADMA3_DESC_TYPE_FOR_SD_MODE (0x1U)
487 #define SDXC_AMDA3_DESC_TYPE_INTEGRATED_LINKER (7U)
489 #define SDXC_ADMA3_CMD_FOR_SD_DESC_ATTR (0x09U)
490 #define SDXC_ADMA3_INTEGRATED_DESC_ATTR (0x39U)
492 #define SDXC_ADMA3_CMD_DESC_IDX_32BIT_BLK_CNT (0U)
493 #define SDXC_ADMA3_CMD_DESC_IDX_BLK_SIZE (1U)
494 #define SDXC_ADMA3_CMD_DESC_IDX_ARG (2U)
495 #define SDXC_ADMA3_CMD_DESC_IDX_CMD_XFER (3U)
500 typedef struct _sdxc_adma3_cmd_sd_desc {
510 typedef struct _sdxc_adma3_integrated_desc {
518 typedef struct _sdxc_boot_config {
519 uint32_t ack_timeout_cnt;
523 bool enable_boot_ack;
524 bool enable_auto_stop_at_block_gap;
528 void (*card_inserted)(
SDXC_Type *base,
void *user_data);
530 void (*sdio_interrupt)(
SDXC_Type *base,
void *user_data);
532 void (*xfer_complete)(
SDXC_Type *base,
void *user_data);
554 #if defined(__cplusplus)
1101 uint32_t adma_table_words,
1102 const uint32_t *data_buf,
1103 uint32_t data_bytes,
1116 const uint32_t *data_addr,
1117 bool enable_auto_cmd23);
1229 #if defined(__cplusplus)
#define SDXC_EMMC_BOOT_CTRL_CARD_IS_EMMC_MASK
Definition: hpm_sdxc_regs.h:4112
#define SDXC_AC_HOST_CTRL_PRESET_VAL_ENABLE_MASK
Definition: hpm_sdxc_regs.h:2190
#define SDXC_EMMC_BOOT_CTRL_MAN_BOOT_EN_MASK
Definition: hpm_sdxc_regs.h:4011
#define SDXC_SYS_CTRL_INTERNAL_CLK_EN_MASK
Definition: hpm_sdxc_regs.h:1120
#define SDXC_PSTATE_DAT_3_0_GET(x)
Definition: hpm_sdxc_regs.h:509
#define SDXC_AC_HOST_CTRL_EXEC_TUNING_MASK
Definition: hpm_sdxc_regs.h:2285
#define SDXC_SYS_CTRL_TOUT_CNT_SET(x)
Definition: hpm_sdxc_regs.h:998
#define SDXC_AUTO_TUNING_CTRL_SW_TUNE_EN_MASK
Definition: hpm_sdxc_regs.h:4206
#define SDXC_AUTO_TUNING_CTRL_TUNE_CLK_STOP_EN_MASK
Definition: hpm_sdxc_regs.h:4178
#define SDXC_AUTO_TUNING_CTRL_POST_CHANGE_DLY_MASK
Definition: hpm_sdxc_regs.h:4147
#define SDXC_AUTO_TUNING_CTRL_POST_CHANGE_DLY_SET(x)
Definition: hpm_sdxc_regs.h:4149
#define SDXC_AUTO_TUNING_CTRL_AT_EN_MASK
Definition: hpm_sdxc_regs.h:4264
#define SDXC_EMMC_BOOT_CTRL_ENH_STROBE_ENABLE_MASK
Definition: hpm_sdxc_regs.h:4053
#define SDXC_AC_HOST_CTRL_ASYNC_INT_ENABLE_MASK
Definition: hpm_sdxc_regs.h:2204
#define SDXC_PROT_CTRL_RD_WAIT_CTRL_MASK
Definition: hpm_sdxc_regs.h:752
#define SDXC_AC_HOST_CTRL_HOST_VER4_ENABLE_MASK
Definition: hpm_sdxc_regs.h:2226
#define SDXC_PROT_CTRL_CONTINUE_REQ_MASK
Definition: hpm_sdxc_regs.h:768
#define SDXC_PROT_CTRL_INT_AT_BGAP_MASK
Definition: hpm_sdxc_regs.h:737
#define SDXC_AC_HOST_CTRL_SIGNALING_EN_MASK
Definition: hpm_sdxc_regs.h:2302
#define SDXC_PSTATE_WR_PROTECT_SW_LVL_MASK
Definition: hpm_sdxc_regs.h:520
#define SDXC_SYS_CTRL_SD_CLK_EN_MASK
Definition: hpm_sdxc_regs.h:1087
#define SDXC_PROT_CTRL_SD_BUS_PWR_VDD1_MASK
Definition: hpm_sdxc_regs.h:832
#define SDXC_PSTATE_BUF_WR_ENABLE_MASK
Definition: hpm_sdxc_regs.h:585
#define SDXC_AUTO_TUNING_STAT_CENTER_PH_CODE_SET(x)
Definition: hpm_sdxc_regs.h:4295
#define SDXC_AUTO_TUNING_STAT_CENTER_PH_CODE_MASK
Definition: hpm_sdxc_regs.h:4293
#define SDXC_PSTATE_BUF_RD_ENABLE_MASK
Definition: hpm_sdxc_regs.h:572
#define SDXC_PROT_CTRL_STOP_BG_REQ_MASK
Definition: hpm_sdxc_regs.h:782
#define SDXC_AC_HOST_CTRL_SAMPLE_CLK_SEL_MASK
Definition: hpm_sdxc_regs.h:2271
#define SDXC_SYS_CTRL_TOUT_CNT_MASK
Definition: hpm_sdxc_regs.h:996
#define SDXC_PSTATE_CARD_INSERTED_MASK
Definition: hpm_sdxc_regs.h:559
#define SDXC_PROT_CTRL_HIGH_SPEED_EN_MASK
Definition: hpm_sdxc_regs.h:888
uint32_t hpm_stat_t
Definition: hpm_common.h:123
#define IS_HPM_BITMASK_CLR(val, mask)
Definition: hpm_common.h:63
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:132
#define IS_HPM_BITMASK_SET(val, mask)
Definition: hpm_common.h:61
@ status_group_sdxc
Definition: hpm_common.h:155
static void sdxc_set_post_change_delay(SDXC_Type *base, uint8_t delay_cnt)
Set The delay cycles during phase switching and stable clock out.
Definition: hpm_sdxc_drv.h:942
static void sdxc_stop_clock_during_phase_code_change(SDXC_Type *base, bool enable)
Stop Clock During Phase Code Change.
Definition: hpm_sdxc_drv.h:927
void sdxc_set_data_config(SDXC_Type *base, sdxc_xfer_direction_t data_dir, uint32_t block_cnt, uint32_t block_size)
Set Data transfer configuration.
Definition: hpm_sdxc_drv.c:571
enum _sdxc_command_type sdxc_command_type_t
SDXC Command types.
hpm_stat_t sdxc_set_adma_table_config(SDXC_Type *base, sdxc_adma_config_t *dma_cfg, sdxc_data_t *data_cfg, uint32_t flags)
Set ADMA table configuration.
Definition: hpm_sdxc_drv.c:696
enum _sdxc_auto_cmd_sel sdxc_auto_cmd_sel_t
SDXC auto command types.
static uint32_t sdxc_read_data(SDXC_Type *base)
Read data from SDXC using non-DMA mode.
Definition: hpm_sdxc_drv.h:882
static void sdxc_enable_host_version4(SDXC_Type *base, bool enable)
Enable SD Host version 4.
Definition: hpm_sdxc_drv.h:776
hpm_stat_t sdxc_get_capabilities(SDXC_Type *base, sdxc_capabilities_t *capabilities)
Get SDXC capabilities.
Definition: hpm_sdxc_drv.c:272
hpm_stat_t sdxc_set_adma2_desc(uint32_t *adma_tbl, uint32_t adma_table_words, const uint32_t *data_buf, uint32_t data_bytes, uint32_t flags)
Set ADMA2 descriptor.
Definition: hpm_sdxc_drv.c:611
static void sdxc_enable_preset(SDXC_Type *base, bool enable)
Enable SDXC Preset support.
Definition: hpm_sdxc_drv.h:762
hpm_stat_t sdxc_send_command(SDXC_Type *base, sdxc_command_t *cmd)
Send Command via SDXC.
Definition: hpm_sdxc_drv.c:289
static void sdxc_enable_sd_clock(SDXC_Type *base, bool enable)
Enable/disable SDXC SD clock output.
Definition: hpm_sdxc_drv.h:991
static void sdxc_stop_at_block_gap_request(SDXC_Type *base, bool enable)
Configure SDXC StopAtBlockGap request.
Definition: hpm_sdxc_drv.h:705
static bool sdxc_is_card_inserted(SDXC_Type *base)
Check whether SD card is inserted.
Definition: hpm_sdxc_drv.h:574
enum _sdxc_dma_type sdxc_dma_type_t
SDXC DMA types.
void sdxc_set_data_bus_width(SDXC_Type *base, sdxc_bus_width_t width)
Set SDXC Data bus width.
Definition: hpm_sdxc_drv.c:791
static void sdxc_enable_interrupt_signal(SDXC_Type *base, uint32_t mask, bool enable)
Enable SDXC interrupt signal.
Definition: hpm_sdxc_drv.h:621
static void sdxc_enable_internal_clock(SDXC_Type *base, bool enable)
Enable/Disable SDXC internal clock.
Definition: hpm_sdxc_drv.h:836
struct _sdxc_config sdxc_config_t
SDXC configuration.
enum _sdxc_xfer_direction sdxc_xfer_direction_t
SDXC transfer direction options.
static void sdxc_read_wait_control(SDXC_Type *base, bool enable)
Enable or Disable SDXC Read Wait.
Definition: hpm_sdxc_drv.h:677
void sdxc_enable_wakeup_event(SDXC_Type *base, sdxc_wakeup_event_t evt, bool enable)
Enable SDXC wakeup interrupt.
Definition: hpm_sdxc_drv.c:780
static void sdxc_enable_high_speed(SDXC_Type *base, bool enable)
Control the SDXC high-speed support.
Definition: hpm_sdxc_drv.h:719
static void sdxc_continue_request(SDXC_Type *base, bool enable)
Configure SDXC continue request.
Definition: hpm_sdxc_drv.h:691
static uint32_t sdxc_get_present_status(SDXC_Type *base)
Get Present status register value.
Definition: hpm_sdxc_drv.h:850
hpm_stat_t sdxc_set_dma_config(SDXC_Type *base, sdxc_adma_config_t *dma_cfg, const uint32_t *data_addr, bool enable_auto_cmd23)
Set DMA configuration.
Definition: hpm_sdxc_drv.c:586
enum _sdxc_bus_voltage_option sdxc_bus_voltage_option_t
SDXC Bus voltage options.
static void sdxc_enable_enhanced_strobe(SDXC_Type *base, bool enable)
Enable SDXC enhanced strobe.
Definition: hpm_sdxc_drv.h:1020
static uint32_t sdxc_get_interrupt_status(SDXC_Type *base)
Get the SDXC interrupt status.
Definition: hpm_sdxc_drv.h:563
static void sdxc_interrupt_at_block_gap(SDXC_Type *base, bool enable)
Configure SDXC interrupt at block gap.
Definition: hpm_sdxc_drv.h:663
static void sdxc_enable_software_tuning(SDXC_Type *base, bool enable)
Enable SDXC software tuning process.
Definition: hpm_sdxc_drv.h:799
static void sdxc_enable_auto_tuning(SDXC_Type *base, bool enable)
Enable SDXC auto tuning.
Definition: hpm_sdxc_drv.h:912
void sdxc_set_data_timeout(SDXC_Type *base, uint32_t timeout_in_ms, uint32_t *actual_timeout_ms)
Set the Data Timeout Counter value for an SD/eMMC device.
Definition: hpm_sdxc_drv.c:524
static uint8_t sdxc_get_adma_error_status(SDXC_Type *base)
Get SDXC ADMA error status.
Definition: hpm_sdxc_drv.h:643
static void sdxc_reset_tuning_engine(SDXC_Type *base)
Reset SDXC tuning engine.
Definition: hpm_sdxc_drv.h:812
struct _sdxc_command sdxc_command_t
SDXC command structure.
hpm_stat_t sdxc_perform_software_tuning(SDXC_Type *base, uint8_t tuning_cmd)
Perform SDXC software tuning.
Definition: hpm_sdxc_drv.c:1011
static bool sdxc_is_data_buf_writable(SDXC_Type *base)
Check whether the Data Buffer is writable or not.
Definition: hpm_sdxc_drv.h:861
static void sdxc_enable_emmc_support(SDXC_Type *base, bool enable)
Enable EMMC support.
Definition: hpm_sdxc_drv.h:953
struct _sdxc_adma3_integrated_desc sdxc_adma3_integrated_desc_t
SDXC ADMA3 Integrated Descriptor.
static bool sdxc_is_write_protected(SDXC_Type *base)
Check whether SD card is Write Protected.
Definition: hpm_sdxc_drv.h:585
struct _sdxc_boot_config sdxc_boot_config_t
SDXC Boot confituration.
struct _sdxc_data sdxc_data_t
SDXC data structure.
enum _sdxc_bus_width sdxc_bus_width_t
SDXC Bus width options.
hpm_stat_t sdxc_perform_tuning_flow_sequence(SDXC_Type *base, uint8_t tuning_cmd)
Perform SDXC tuning flow sequence.
Definition: hpm_sdxc_drv.c:979
bool sdxc_reset(SDXC_Type *base, sdxc_sw_reset_type_t reset_type, uint32_t timeout)
Reset SDXC.
Definition: hpm_sdxc_drv.c:737
hpm_stat_t sdxc_error_recovery(SDXC_Type *base)
SDXC Error recovery.
Definition: hpm_sdxc_drv.c:916
static bool sdxc_is_data_buf_readable(SDXC_Type *base)
Check whether the data buffer is readable.
Definition: hpm_sdxc_drv.h:872
static void sdxc_clear_interrupt_status(SDXC_Type *base, uint32_t status_mask)
Clear SDXC interrupt status.
Definition: hpm_sdxc_drv.h:595
struct _sdxc_data_list sdxc_data_list_t
SDXC data list.
static void sdxc_set_center_phase_code(SDXC_Type *base, uint32_t value)
Set SDXC center phase code.
Definition: hpm_sdxc_drv.h:1009
void sdxc_set_mmc_boot_config(SDXC_Type *base, const sdxc_boot_config_t *config)
Set MMC boot configuration.
Definition: hpm_sdxc_drv.c:550
hpm_stat_t sdxc_parse_interrupt_status(SDXC_Type *base)
Parse the SDXC interrupt status to HPM encoded status.
Definition: hpm_sdxc_drv.c:355
static void sdxc_switch_to_1v8_signal(SDXC_Type *base, bool enable)
Switch SDXC to 1.8V signaling mode.
Definition: hpm_sdxc_drv.h:822
void sdxc_init(SDXC_Type *base, const sdxc_config_t *config)
Initialize SDXC controller.
Definition: hpm_sdxc_drv.c:488
struct _sdxc_xfer sdxc_xfer_t
SDXC transfer context.
hpm_stat_t sdxc_wait_cmd_done(SDXC_Type *base, sdxc_command_t *cmd, bool polling_cmd_done)
Wait until SDXC command completes.
Definition: hpm_sdxc_drv.c:412
hpm_stat_t sdxc_transfer_nonblocking(SDXC_Type *base, sdxc_adma_config_t *dma_config, sdxc_xfer_t *xfer)
Start SDXC transfer in nonblocking way.
Definition: hpm_sdxc_drv.c:837
enum _sdxc_wakeup_event sdxc_wakeup_event_t
SDXC wakeup events.
void sdxc_set_speed_mode(SDXC_Type *base, sdxc_speed_mode_t mode)
Set SDXC speed mode.
Definition: hpm_sdxc_drv.c:824
enum _sdxc_dev_resp_type sdxc_dev_resp_type_t
SDXC Device response type.
struct _sdxc_adma3_cmd_sd_desc sdxc_adma3_cmd_sd_desc_t
ADMA3 command descriptor.
enum _sdxc_boot_mode sdxc_boot_mode_t
SDXC boot mode types.
static void sdxc_write_data(SDXC_Type *base, uint32_t data)
Write data to SDXC using non-DMA mode.
Definition: hpm_sdxc_drv.h:892
static void sdxc_force_event(SDXC_Type *base, uint32_t mask)
Set SDXC force event.
Definition: hpm_sdxc_drv.h:981
static void sdxc_execute_tuning(SDXC_Type *base)
Start SDXC tuning process.
Definition: hpm_sdxc_drv.h:789
hpm_stat_t sdxc_receive_cmd_response(SDXC_Type *base, sdxc_command_t *cmd)
Receive command response.
Definition: hpm_sdxc_drv.c:106
enum _sdxc_software_reset sdxc_sw_reset_type_t
Software reset flag definitions.
void sdxc_select_voltage(SDXC_Type *base, sdxc_bus_voltage_option_t option)
Set SDXC IO voltage.
Definition: hpm_sdxc_drv.c:766
static uint32_t sdxc_get_data3_0_level(SDXC_Type *base)
Get SDXC DATA3-DATA0 IO level.
Definition: hpm_sdxc_drv.h:902
static void sdxc_enable_mmc_boot(SDXC_Type *base, bool enable)
Enable/Disable SDXC MMC boot.
Definition: hpm_sdxc_drv.h:967
static void sdxc_enable_interrupt_status(SDXC_Type *base, uint32_t mask, bool enable)
Enable SDXC interrupt status.
Definition: hpm_sdxc_drv.h:606
struct _sdxc_adma_config sdxc_adma_config_t
SDXC ADMA configuration.
uint32_t sdxc_get_data_bus_width(SDXC_Type *base)
Get SDXC Data bus width.
Definition: hpm_sdxc_drv.c:809
hpm_stat_t sdxc_perform_auto_tuning(SDXC_Type *base, uint8_t tuning_cmd)
Perform SDXC auto tuning.
Definition: hpm_sdxc_drv.c:1095
enum _sdxc_speed_mode sdxc_speed_mode_t
SDXC Speed mode options.
hpm_stat_t(* sdxc_xfer_func_t)(SDXC_Type *base, sdxc_xfer_t *content)
Definition: hpm_sdxc_drv.h:543
enum _sdxc_response_type sdxc_response_type_t
SDXC response types.
struct _sdxc_adma2_descriptor sdxc_adma2_descriptor_t
SDXC ADMA2 descriptor.
static void sdxc_enable_power(SDXC_Type *base, bool enable)
Control the SDXC power pin.
Definition: hpm_sdxc_drv.h:734
hpm_stat_t sdxc_transfer_blocking(SDXC_Type *base, sdxc_adma_config_t *dma_config, sdxc_xfer_t *xfer)
Start SDXC transfer in blocking way.
Definition: hpm_sdxc_drv.c:892
static void sdxc_enable_async_interrupt(SDXC_Type *base, bool enable)
Enable SDXC asynchronous interrupt support.
Definition: hpm_sdxc_drv.h:748
static void sdxc_configure_data_timeout(SDXC_Type *base, uint8_t timeout)
Configure SDXC data timeout internal.
Definition: hpm_sdxc_drv.h:653
@ sdxc_xfer_data_boot_continuous
Definition: hpm_sdxc_drv.h:423
@ sdxc_xfer_data_boot
Definition: hpm_sdxc_drv.h:422
@ sdxc_xfer_data_normal
Definition: hpm_sdxc_drv.h:421
@ status_sdxc_autocmd_cmd_index_error
Definition: hpm_sdxc_drv.h:275
@ status_sdxc_busy
Definition: hpm_sdxc_drv.h:254
@ status_sdxc_data_timeout_error
Definition: hpm_sdxc_drv.h:261
@ status_sdxc_transfer_data_completed
Definition: hpm_sdxc_drv.h:281
@ status_sdxc_autocmd_end_bit_error
Definition: hpm_sdxc_drv.h:274
@ status_sdxc_non_recoverable_error
Definition: hpm_sdxc_drv.h:288
@ status_sdxc_send_cmd_successful
Definition: hpm_sdxc_drv.h:282
@ status_sdxc_adma_error
Definition: hpm_sdxc_drv.h:265
@ status_sdxc_card_removed
Definition: hpm_sdxc_drv.h:287
@ status_sdxc_response_error
Definition: hpm_sdxc_drv.h:267
@ status_sdxc_tuning_error
Definition: hpm_sdxc_drv.h:266
@ status_sdxc_data_crc_error
Definition: hpm_sdxc_drv.h:262
@ status_sdxc_send_cmd_failed
Definition: hpm_sdxc_drv.h:256
@ status_sdxc_autocmd_cmd_timeout_error
Definition: hpm_sdxc_drv.h:272
@ status_sdxc_retuning_request
Definition: hpm_sdxc_drv.h:269
@ status_sdxc_autocmd_cmd_not_issued_auto_cmd12
Definition: hpm_sdxc_drv.h:278
@ status_sdxc_autocmd_cmd_crc_error
Definition: hpm_sdxc_drv.h:273
@ status_sdxc_autocmd_cmd_response_error
Definition: hpm_sdxc_drv.h:276
@ status_sdxc_data_end_bit_error
Definition: hpm_sdxc_drv.h:263
@ status_sdxc_recoverable_error
Definition: hpm_sdxc_drv.h:289
@ status_sdxc_autocmd_cmd12_not_exec
Definition: hpm_sdxc_drv.h:271
@ status_sdxc_dma_addr_unaligned
Definition: hpm_sdxc_drv.h:285
@ status_sdxc_cmd_index_error
Definition: hpm_sdxc_drv.h:260
@ status_sdxc_error
Definition: hpm_sdxc_drv.h:255
@ status_sdxc_unsupported
Definition: hpm_sdxc_drv.h:280
@ status_sdxc_transfer_data_failed
Definition: hpm_sdxc_drv.h:284
@ status_sdxc_transfer_dma_completed
Definition: hpm_sdxc_drv.h:283
@ status_sdxc_cmd_end_bit_error
Definition: hpm_sdxc_drv.h:259
@ status_sdxc_cmd_timeout_error
Definition: hpm_sdxc_drv.h:257
@ status_sdxc_cmd_crc_error
Definition: hpm_sdxc_drv.h:258
@ status_sdxc_tuning_failed
Definition: hpm_sdxc_drv.h:286
@ status_sdxc_boot_ack_error
Definition: hpm_sdxc_drv.h:268
@ status_sdxc_auto_cmd_error
Definition: hpm_sdxc_drv.h:264
@ sdxc_adma_desc_multi_flag
Definition: hpm_sdxc_drv.h:445
@ sdxc_adma_desc_single_flag
Definition: hpm_sdxc_drv.h:444
@ sdxc_dmasel_adma2_or_3
Definition: hpm_sdxc_drv.h:138
@ sdxc_emmc_speed_high_speed_ddr
Definition: hpm_sdxc_drv.h:166
@ sdxc_wakeup_card_insert
Definition: hpm_sdxc_drv.h:128
@ sdxc_reset_data_line
Definition: hpm_sdxc_drv.h:110
@ sdxc_sd_speed_sdr12
Definition: hpm_sdxc_drv.h:155
@ sdxc_emmc_speed_hs400
Definition: hpm_sdxc_drv.h:167
@ sdxc_dev_resp_none
Definition: hpm_sdxc_drv.h:367
@ sdxc_bus_width_8bit
Definition: hpm_sdxc_drv.h:148
@ sdxc_auto_cmd_disabled
Definition: hpm_sdxc_drv.h:177
@ sdxc_dev_resp_r5
Definition: hpm_sdxc_drv.h:373
@ sdxc_auto_cmd_auto_select
Definition: hpm_sdxc_drv.h:180
@ sdxc_bus_width_4bit
Definition: hpm_sdxc_drv.h:147
@ sdxc_dev_resp_r7
Definition: hpm_sdxc_drv.h:376
@ sdxc_dmasel_nodma
Definition: hpm_sdxc_drv.h:139
@ sdxc_dmasel_adma2
Definition: hpm_sdxc_drv.h:137
@ sdxc_reset_all
Definition: hpm_sdxc_drv.h:108
@ sdxc_bus_voltage_emmc_3v3
Definition: hpm_sdxc_drv.h:120
@ sdxc_boot_mode_alternative
Definition: hpm_sdxc_drv.h:215
@ sdxc_dev_resp_r1b
Definition: hpm_sdxc_drv.h:369
@ sdxc_reset_cmd_line
Definition: hpm_sdxc_drv.h:109
@ sdxc_sd_speed_sdr25
Definition: hpm_sdxc_drv.h:156
@ sdxc_cmd_type_normal_cmd
Definition: hpm_sdxc_drv.h:195
@ sdxc_sd_speed_sdr50
Definition: hpm_sdxc_drv.h:157
@ sdxc_bus_width_1bit
Definition: hpm_sdxc_drv.h:146
@ sdxc_sdmmc_speed_card_init
Definition: hpm_sdxc_drv.h:169
@ sdxc_wakeup_card_interrupt
Definition: hpm_sdxc_drv.h:129
@ sdxc_cmd_type_empty
Definition: hpm_sdxc_drv.h:199
@ sdxc_bus_voltage_emmc_1v8
Definition: hpm_sdxc_drv.h:119
@ sdxc_dev_resp_r4
Definition: hpm_sdxc_drv.h:372
@ sdxc_bus_voltage_sd_1v8
Definition: hpm_sdxc_drv.h:117
@ sdxc_boot_mode_normal
Definition: hpm_sdxc_drv.h:214
@ sdxc_sd_speed_sdr104
Definition: hpm_sdxc_drv.h:158
@ sdxc_auto_cmd23_enabled
Definition: hpm_sdxc_drv.h:179
@ sdxc_cmd_tye_resume_cmd
Definition: hpm_sdxc_drv.h:197
@ sdxc_emmc_speed_high_speed_sdr
Definition: hpm_sdxc_drv.h:164
@ sdxc_auto_cmd12_enabled
Definition: hpm_sdxc_drv.h:178
@ sdxc_dev_resp_r3
Definition: hpm_sdxc_drv.h:371
@ sdxc_dev_resp_r6
Definition: hpm_sdxc_drv.h:375
@ sdxc_dev_resp_r1
Definition: hpm_sdxc_drv.h:368
@ sdxc_xfer_dir_write
Definition: hpm_sdxc_drv.h:187
@ sdxc_response_type_no_resp
Definition: hpm_sdxc_drv.h:222
@ sdxc_wakeup_card_removal
Definition: hpm_sdxc_drv.h:127
@ sdxc_dev_resp_r2
Definition: hpm_sdxc_drv.h:370
@ sdxc_cmd_type_suspend_cmd
Definition: hpm_sdxc_drv.h:196
@ sdxc_dev_resp_r5b
Definition: hpm_sdxc_drv.h:374
@ sdxc_cmd_type_abort_cmd
Definition: hpm_sdxc_drv.h:198
@ sdxc_dmasel_sdma
Definition: hpm_sdxc_drv.h:136
@ sdxc_response_type_resp_len_48bit
Definition: hpm_sdxc_drv.h:224
@ sdxc_xfer_dir_read
Definition: hpm_sdxc_drv.h:188
@ sdxc_emmc_speed_hs200
Definition: hpm_sdxc_drv.h:165
@ sdxc_response_type_resp_len_136bit
Definition: hpm_sdxc_drv.h:223
@ sdxc_sd_speed_high
Definition: hpm_sdxc_drv.h:161
@ sdxc_emmc_speed_legacy
Definition: hpm_sdxc_drv.h:163
@ sdxc_sd_speed_ddr50
Definition: hpm_sdxc_drv.h:159
@ sdxc_sd_speed_normal
Definition: hpm_sdxc_drv.h:160
@ sdxc_bus_voltage_sd_3v3
Definition: hpm_sdxc_drv.h:118
@ sdxc_response_type_resp_len_48bit_check_busy
Definition: hpm_sdxc_drv.h:225
Definition: hpm_sdxc_regs.h:12
__RW uint32_t AUTO_TUNING_CTRL
Definition: hpm_sdxc_regs.h:74
__R uint32_t PSTATE
Definition: hpm_sdxc_regs.h:19
__R uint32_t ADMA_ERR_STAT
Definition: hpm_sdxc_regs.h:31
__RW uint32_t AUTO_TUNING_STAT
Definition: hpm_sdxc_regs.h:75
__RW uint32_t AC_HOST_CTRL
Definition: hpm_sdxc_regs.h:25
__W uint32_t FORCE_EVENT
Definition: hpm_sdxc_regs.h:30
__RW uint32_t BUF_DATA
Definition: hpm_sdxc_regs.h:18
__RW uint32_t INT_SIGNAL_EN
Definition: hpm_sdxc_regs.h:24
__RW uint32_t PROT_CTRL
Definition: hpm_sdxc_regs.h:20
__RW uint32_t EMMC_BOOT_CTRL
Definition: hpm_sdxc_regs.h:72
__RW uint32_t INT_STAT_EN
Definition: hpm_sdxc_regs.h:23
__RW uint32_t SYS_CTRL
Definition: hpm_sdxc_regs.h:21
__RW uint32_t INT_STAT
Definition: hpm_sdxc_regs.h:22
SDXC Capacities.
Definition: hpm_sdxc_drv.h:295
uint32_t asysnc_interrupt_support
Definition: hpm_sdxc_drv.h:314
uint32_t base_clk_freq
Definition: hpm_sdxc_drv.h:301
uint32_t voltage_1v8_support
Definition: hpm_sdxc_drv.h:311
uint32_t max_current_1v8
Definition: hpm_sdxc_drv.h:347
uint32_t sdma_support
Definition: hpm_sdxc_drv.h:307
uint32_t ddr50_support
Definition: hpm_sdxc_drv.h:324
uint32_t sdr50_support
Definition: hpm_sdxc_drv.h:322
uint32_t use_tuning_sdr50
Definition: hpm_sdxc_drv.h:332
uint32_t sys_addr_64_bit_v4_support
Definition: hpm_sdxc_drv.h:312
uint32_t suspend_resume_support
Definition: hpm_sdxc_drv.h:308
uint32_t slot_type_r
Definition: hpm_sdxc_drv.h:315
uint32_t reserved
Definition: hpm_sdxc_drv.h:348
uint32_t sdr104_support
Definition: hpm_sdxc_drv.h:323
uint32_t vdd2_1v8_support
Definition: hpm_sdxc_drv.h:337
uint32_t embedded_8_bit_support
Definition: hpm_sdxc_drv.h:303
uint32_t adma3_support
Definition: hpm_sdxc_drv.h:336
uint32_t re_tuning_modes
Definition: hpm_sdxc_drv.h:333
uint32_t drv_type_a
Definition: hpm_sdxc_drv.h:326
uint32_t max_current_3v0
Definition: hpm_sdxc_drv.h:346
uint32_t clk_mul
Definition: hpm_sdxc_drv.h:334
uint32_t uhs2_support
Definition: hpm_sdxc_drv.h:325
uint32_t max_blk_len
Definition: hpm_sdxc_drv.h:302
uint32_t tout_clk_freq
Definition: hpm_sdxc_drv.h:298
uint32_t retune_cnt
Definition: hpm_sdxc_drv.h:330
uint32_t voltage_3v0_support
Definition: hpm_sdxc_drv.h:310
uint32_t U
Definition: hpm_sdxc_drv.h:317
uint32_t adma2_support
Definition: hpm_sdxc_drv.h:304
uint32_t drv_type_c
Definition: hpm_sdxc_drv.h:327
uint32_t sys_addr_64_bit_v3_support
Definition: hpm_sdxc_drv.h:313
uint32_t max_current_vdd2_1v8
Definition: hpm_sdxc_drv.h:355
uint32_t voltage_3v3_support
Definition: hpm_sdxc_drv.h:309
uint32_t drv_type_d
Definition: hpm_sdxc_drv.h:328
uint32_t tout_clk_unit
Definition: hpm_sdxc_drv.h:300
uint32_t high_speed_support
Definition: hpm_sdxc_drv.h:306
uint32_t max_current_3v3
Definition: hpm_sdxc_drv.h:345
uint32_t reserved0
Definition: hpm_sdxc_drv.h:329
Definition: hpm_sdxc_drv.h:535
volatile uint32_t xferred_words
Definition: hpm_sdxc_drv.h:538
sdxc_xfer_callback_t callback
Definition: hpm_sdxc_drv.h:539
sdxc_data_t *volatile data
Definition: hpm_sdxc_drv.h:536
sdxc_command_t *volatile cmd
Definition: hpm_sdxc_drv.h:537
void * user_data
Definition: hpm_sdxc_drv.h:540
Definition: hpm_sdxc_drv.h:545
sdxc_capabilities_t capability
Definition: hpm_sdxc_drv.h:549
sdxc_config_t config
Definition: hpm_sdxc_drv.h:548
sdxc_xfer_func_t xfer
Definition: hpm_sdxc_drv.h:550
SDXC_Type * base
Definition: hpm_sdxc_drv.h:546
uint32_t src_clk_hz
Definition: hpm_sdxc_drv.h:547
Definition: hpm_sdxc_drv.h:527