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 SDXC_INT_STAT_RESP_ERR_MASK)
88 #define SDXC_STS_DATA_ERR (SDXC_INT_STAT_DATA_TOUT_ERR_MASK | SDXC_INT_STAT_DATA_CRC_ERR_MASK | \
89 SDXC_INT_STAT_DATA_END_BIT_ERR_MASK | SDXC_INT_STAT_ADMA_ERR_MASK)
90 #define SDXC_STS_CARD_ERR (SDXC_INT_STAT_CARD_REMOVAL_MASK)
91 #define SDXC_STS_ERROR (SDXC_INT_STAT_ERR_INTERRUPT_MASK | SDXC_STS_CMD_ERR | SDXC_STS_DATA_ERR | SDXC_STS_CARD_ERR)
92 #define SDXC_STS_CMD_FLAGS (SDXC_STS_CMD_ERR | SDXC_INT_STAT_CMD_COMPLETE_MASK)
94 #define SDXC_STS_ALL_FLAGS (SDXC_INT_STAT_ERR_INTERRUPT_MASK | SDXC_INT_STAT_CQE_EVENT_MASK | \
95 SDXC_INT_STAT_FX_EVENT_MASK | SDXC_INT_STAT_RE_TUNE_EVENT_MASK | SDXC_INT_STAT_CARD_INTERRUPT_MASK | \
96 SDXC_INT_STAT_CARD_REMOVAL_MASK | SDXC_INT_STAT_CARD_INSERTION_MASK | SDXC_INT_STAT_BUF_RD_READY_MASK | \
97 SDXC_INT_STAT_BUF_WR_READY_MASK | SDXC_INT_STAT_DMA_INTERRUPT_MASK | SDXC_INT_STAT_BGAP_EVENT_MASK | \
98 SDXC_INT_STAT_XFER_COMPLETE_MASK | SDXC_INT_STAT_CMD_COMPLETE_MASK | SDXC_INT_STAT_BOOT_ACK_ERR_MASK | \
99 SDXC_INT_STAT_RESP_ERR_MASK | SDXC_INT_STAT_TUNING_ERR_MASK | SDXC_INT_STAT_ADMA_ERR_MASK | \
100 SDXC_INT_STAT_AUTO_CMD_ERR_MASK | SDXC_INT_STAT_CUR_LMT_ERR_MASK | SDXC_INT_STAT_DATA_END_BIT_ERR_MASK |\
101 SDXC_INT_STAT_DATA_CRC_ERR_MASK | SDXC_INT_STAT_DATA_TOUT_ERR_MASK | SDXC_INT_STAT_CMD_IDX_ERR_MASK |\
102 SDXC_INT_STAT_CMD_END_BIT_ERR_MASK | SDXC_INT_STAT_CMD_CRC_ERR_MASK | SDXC_INT_STAT_CMD_TOUT_ERR_MASK)
108 typedef enum _sdxc_software_reset {
117 typedef enum _sdxc_bus_voltage_option {
127 typedef enum _sdxc_wakeup_event {
136 typedef enum _sdxc_dma_type {
146 typedef enum _sdxc_bus_width {
155 typedef enum _sdxc_speed_mode {
177 typedef enum _sdxc_auto_cmd_sel {
187 typedef enum _sdxc_xfer_direction {
195 typedef enum _sdxc_command_type {
206 #define SDXC_CMD_TYPE_NORMAL (0UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
207 #define SDXC_CMD_TYPE_SUSPEND (1UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
208 #define SDXC_CMD_TYPE_RESUME (2UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
209 #define SDXC_CMD_TYPE_ABORT (3UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
214 typedef enum _sdxc_boot_mode {
222 typedef enum _sdxc_response_type {
229 #define SDXC_CMD_RESP_NO_RESPONSE (0UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
230 #define SDXC_CMD_RESP_LEN_136 (1UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
231 #define SDXC_CMD_RESP_LEN_48 (2UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
232 #define SDXC_CMD_RESP_LEN_48B (3UL << SDXC_CMD_XFER_RESP_TYPE_SELECT_SHIFT)
234 #define SDXC_CMD_CMD_IS_MAIN_CMD (0U)
235 #define SDXC_CMD_CMD_IS_SUB_CMD (SDXC_CMD_XFER_SUB_CMD_FLAG_MASK)
237 #define SDXC_CMD_CMD_CRC_CHK_EN (SDXC_CMD_XFER_CMD_CRC_CHK_ENABLE_MASK)
238 #define SDXC_CMD_CMD_CRC_CHK_DIS (0U)
240 #define SDXC_CMD_CMD_IDX_CHK_EN (SDXC_CMD_XFER_CMD_IDX_CHK_ENABLE_MASK)
241 #define SDXC_CMD_CMD_IDX_CHK_DIS (0U)
243 #define SDXC_CMD_DATA_PRESENT (SDXC_CMD_XFER_DATA_PRESENT_SEL_MASK)
244 #define SDXC_CMD_DATA_NO_PRESENT (0U)
246 #define SDXC_CMD_CMD_TYPE_NORMAL (0U)
247 #define SDXC_CMD_CMD_TYPE_SUSPEND (1UL << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
248 #define SDXC_CMD_CMD_TYPE_RESUME (2U << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
249 #define SDXC_CMD_CMD_TYPE_ABORT (3U << SDXC_CMD_XFER_CMD_TYPE_SHIFT)
354 } curr_capabilities1;
359 uint32_t reserved: 24;
362 } curr_capabilities2;
369 typedef enum _sdxc_dev_resp_type {
385 typedef struct _sdxc_command {
387 uint32_t cmd_argument;
391 uint32_t resp_error_flags;
392 uint32_t response[4];
393 uint32_t auto_cmd_resp;
394 uint32_t cmd_timeout_ms;
400 typedef struct _sdxc_data_list {
403 struct _sdxc_data_list *next;
409 typedef struct _sdxc_data {
410 bool enable_auto_cmd12;
411 bool enable_auto_cmd23;
412 bool enable_ignore_error;
419 const uint32_t *tx_data;
440 typedef struct _sdxc_xfer {
448 typedef struct _sdxc_adma_config {
450 uint32_t *adma_table;
451 uint32_t adma_table_words;
452 const uint32_t *adma_desc_ptr;
463 typedef struct _sdxc_config {
464 uint32_t data_timeout;
470 typedef struct _sdxc_adma2_descriptor {
475 uint32_t interrupt: 1;
477 uint32_t len_upper: 10;
478 uint32_t len_lower: 16;
482 const uint32_t *addr;
488 #define SDXC_ADMA2_DESC_VALID_FLAG (1UL << 0)
489 #define SDXC_ADMA2_DESC_END_FLAG (1UL << 1)
490 #define SDXC_ADMA2_DESC_INTERRUPT_FLAG (1UL << 2)
491 #define SDXC_ADMA2_DESC_ACT0_FLAG (1UL << 3)
492 #define SDXC_ADMA2_DESC_ACT1_FLAG (1UL << 4)
493 #define SDXC_ADMA2_DESC_ACT2_FLAG (1UL << 5)
495 #define SDXC_ADMA2_ADDR_LEN (4U)
496 #define SDXC_ADMA2_LEN_ALIGN (4U)
498 #define SDXC_ADMA2_DESC_TYPE_NOP (0U)
499 #define SDXC_ADMA2_DESC_TYPE_TRANS (4U)
500 #define SDXC_ADMA2_DESC_TYPE_LINK (6U)
501 #define SDXC_ADMA3_DESC_TYPE_FOR_SD_MODE (0x1U)
502 #define SDXC_AMDA3_DESC_TYPE_INTEGRATED_LINKER (7U)
503 #define SDXC_ADMA3_INTEGRATED_ATTR_VALID (1UL << 0)
504 #define SDXC_ADMA3_INTEGRATED_ATTR_END (1UL << 1)
505 #define SDXC_ADMA3_INTEGRATED_ATTR_INT (1UL << 2)
506 #define SDXC_ADMA3_CMD_FOR_SD_DESC_ATTR (0x09U)
507 #define SDXC_ADMA3_INTEGRATED_DESC_ATTR (0x39U)
509 #define SDXC_ADMA3_CMD_DESC_ATTR_END (1UL << 1)
511 #define SDXC_ADMA3_CMD_DESC_IDX_32BIT_BLK_CNT (0U)
512 #define SDXC_ADMA3_CMD_DESC_IDX_BLK_SIZE (1U)
513 #define SDXC_ADMA3_CMD_DESC_IDX_ARG (2U)
514 #define SDXC_ADMA3_CMD_DESC_IDX_CMD_XFER (3U)
516 #define SDXC_ADMA3_INTEGRATED_DESC_WORDS (sizeof(sdxc_adma3_integrated_desc_t) / sizeof(uint32_t))
517 #define SDXC_ADMA3_CMD_DESC_WORDS (sizeof(sdxc_adma3_cmd_sd_desc_t) / sizeof(uint32_t))
518 #define SDXC_ADMA2_DESC_WORDS (sizeof(sdxc_adma2_descriptor_t) / sizeof(uint32_t))
520 #define SDXC_IS_DMA_ALIGNED(value) (((uint32_t)(value) % 4UL) == 0U)
524 typedef struct _sdxc_adma3_cmd_sd_desc {
534 typedef struct _sdxc_adma3_integrated_desc {
539 #define SDXC_AMDA3_DESC_MIN_WORDS ((sizeof(sdxc_adma3_integrated_desc_t) + \
540 sizeof(sdxc_adma3_cmd_sd_desc_t) + \
541 sizeof(sdxc_adma2_descriptor_t)) / sizeof(uint32_t))
544 typedef struct _sdxc_adma3_xfer_list {
546 struct _sdxc_adma3_xfer_list *next;
552 typedef struct _sdxc_boot_config {
553 uint32_t ack_timeout_cnt;
557 bool enable_boot_ack;
558 bool enable_auto_stop_at_block_gap;
562 void (*card_inserted)(
SDXC_Type *base,
void *user_data);
564 void (*sdio_interrupt)(
SDXC_Type *base,
void *user_data);
566 void (*xfer_complete)(
SDXC_Type *base,
void *user_data);
588 #if defined(__cplusplus)
1172 uint32_t *num_entries);
1320 #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_PSTATE_DAT_7_4_GET(x)
Definition: hpm_sdxc_regs.h:623
#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_DMA_SEL_MASK
Definition: hpm_sdxc_regs.h:872
#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_PROT_CTRL_DMA_SEL_SET(x)
Definition: hpm_sdxc_regs.h:874
#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:126
#define IS_HPM_BITMASK_CLR(val, mask)
Definition: hpm_common.h:63
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:135
#define IS_HPM_BITMASK_SET(val, mask)
Definition: hpm_common.h:61
@ status_group_sdxc
Definition: hpm_common.h:158
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:995
hpm_stat_t sdxc_set_adma3_desc(sdxc_adma_config_t *dma_config, sdxc_adma3_xfer_list *adma3_xfer_list)
Configures and sets up the ADMA3 descriptor for a transfer.
Definition: hpm_sdxc_drv.c:591
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:980
hpm_stat_t sdxc_get_capabilities(const SDXC_Type *base, sdxc_capabilities_t *capabilities)
Get SDXC capabilities.
Definition: hpm_sdxc_drv.c:253
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:552
static uint32_t sdxc_get_data7_4_level(const SDXC_Type *base)
Get SDXC DATA7-DATA4 IO level.
Definition: hpm_sdxc_drv.h:955
enum _sdxc_command_type sdxc_command_type_t
SDXC Command types.
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:925
static void sdxc_enable_host_version4(SDXC_Type *base, bool enable)
Enable SD Host version 4.
Definition: hpm_sdxc_drv.h:819
static void sdxc_enable_preset(SDXC_Type *base, bool enable)
Enable SDXC Preset support.
Definition: hpm_sdxc_drv.h:805
static bool sdxc_is_write_protected(const SDXC_Type *base)
Check whether SD card is Write Protected.
Definition: hpm_sdxc_drv.h:619
static void sdxc_enable_sd_clock(SDXC_Type *base, bool enable)
Enable/disable SDXC SD clock output.
Definition: hpm_sdxc_drv.h:1044
static void sdxc_stop_at_block_gap_request(SDXC_Type *base, bool enable)
Configure SDXC StopAtBlockGap request.
Definition: hpm_sdxc_drv.h:748
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:866
static void sdxc_enable_interrupt_signal(SDXC_Type *base, uint32_t mask, bool enable)
Enable SDXC interrupt signal.
Definition: hpm_sdxc_drv.h:655
static void sdxc_enable_internal_clock(SDXC_Type *base, bool enable)
Enable/Disable SDXC internal clock.
Definition: hpm_sdxc_drv.h:879
struct _sdxc_config sdxc_config_t
SDXC configuration.
hpm_stat_t sdxc_adma3_transfer_nonblocking(SDXC_Type *base, sdxc_adma_config_t *dma_config, sdxc_adma3_xfer_list *adma3_xfer_list)
SDXC ADMA3 nonblocking transfer.
Definition: hpm_sdxc_drv.c:974
static bool sdxc_is_data_buf_writable(const SDXC_Type *base)
Check whether the Data Buffer is writable or not.
Definition: hpm_sdxc_drv.h:904
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:720
void sdxc_enable_wakeup_event(SDXC_Type *base, sdxc_wakeup_event_t evt, bool enable)
Enable SDXC wakeup interrupt.
Definition: hpm_sdxc_drv.c:855
static uint32_t sdxc_get_interrupt_signal(SDXC_Type *base)
Get the SDXC interrupt Signal Enable Register.
Definition: hpm_sdxc_drv.h:668
static void sdxc_enable_high_speed(SDXC_Type *base, bool enable)
Control the SDXC high-speed support.
Definition: hpm_sdxc_drv.h:762
static void sdxc_continue_request(SDXC_Type *base, bool enable)
Configure SDXC continue request.
Definition: hpm_sdxc_drv.h:734
enum _sdxc_bus_voltage_option sdxc_bus_voltage_option_t
SDXC Bus voltage options.
uint32_t sdxc_get_data_bus_width(const SDXC_Type *base)
Get SDXC Data bus width.
Definition: hpm_sdxc_drv.c:884
static void sdxc_enable_enhanced_strobe(SDXC_Type *base, bool enable)
Enable SDXC enhanced strobe.
Definition: hpm_sdxc_drv.h:1073
static uint32_t sdxc_get_interrupt_status(SDXC_Type *base)
Get the SDXC interrupt status.
Definition: hpm_sdxc_drv.h:597
static bool sdxc_is_card_inserted(const SDXC_Type *base)
Check whether SD card is inserted.
Definition: hpm_sdxc_drv.h:608
static void sdxc_interrupt_at_block_gap(SDXC_Type *base, bool enable)
Configure SDXC interrupt at block gap.
Definition: hpm_sdxc_drv.h:706
static void sdxc_enable_software_tuning(SDXC_Type *base, bool enable)
Enable SDXC software tuning process.
Definition: hpm_sdxc_drv.h:842
static uint32_t sdxc_get_data3_0_level(const SDXC_Type *base)
Get SDXC DATA3-DATA0 IO level.
Definition: hpm_sdxc_drv.h:945
bool sdxc_is_bus_idle(const SDXC_Type *base)
Check whether SDXC Bus is idle.
Definition: hpm_sdxc_drv.c:246
static void sdxc_enable_auto_tuning(SDXC_Type *base, bool enable)
Enable SDXC auto tuning.
Definition: hpm_sdxc_drv.h:965
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:505
hpm_stat_t sdxc_error_recovery(SDXC_Type *base, sdxc_command_t *cmd)
SDXC Error recovery.
Definition: hpm_sdxc_drv.c:1078
static void sdxc_reset_tuning_engine(SDXC_Type *base)
Reset SDXC tuning engine.
Definition: hpm_sdxc_drv.h:855
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:1186
static void sdxc_enable_emmc_support(SDXC_Type *base, bool enable)
Enable EMMC support.
Definition: hpm_sdxc_drv.h:1006
struct _sdxc_adma3_integrated_desc sdxc_adma3_integrated_desc_t
SDXC ADMA3 Integrated Descriptor.
hpm_stat_t sdxc_set_adma2_desc(sdxc_adma_config_t *dma_config, const sdxc_data_t *xfer_data, uint32_t *num_entries)
Set ADMA2 descriptor.
Definition: hpm_sdxc_drv.c:682
struct _sdxc_boot_config sdxc_boot_config_t
SDXC Boot configuration.
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:1154
bool sdxc_reset(SDXC_Type *base, sdxc_sw_reset_type_t reset_type, uint32_t timeout)
Reset SDXC.
Definition: hpm_sdxc_drv.c:812
static bool sdxc_is_data_buf_readable(const SDXC_Type *base)
Check whether the data buffer is readable.
Definition: hpm_sdxc_drv.h:915
static void sdxc_clear_interrupt_status(SDXC_Type *base, uint32_t status_mask)
Clear SDXC interrupt status.
Definition: hpm_sdxc_drv.h:629
static uint8_t sdxc_get_adma_error_status(const SDXC_Type *base)
Get SDXC ADMA error status.
Definition: hpm_sdxc_drv.h:686
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:1062
void sdxc_set_mmc_boot_config(SDXC_Type *base, const sdxc_boot_config_t *config)
Set MMC boot configuration.
Definition: hpm_sdxc_drv.c:531
hpm_stat_t sdxc_receive_cmd_response(const SDXC_Type *base, sdxc_command_t *cmd)
Receive command response.
Definition: hpm_sdxc_drv.c:85
hpm_stat_t sdxc_set_adma_table_config(SDXC_Type *base, sdxc_adma_config_t *dma_cfg, sdxc_data_t *data_cfg, sdxc_command_t *cmd)
Set ADMA table configuration.
Definition: hpm_sdxc_drv.c:775
static void sdxc_select_dma_type(SDXC_Type *base, sdxc_dma_type_t dma_type)
Select DMA type.
Definition: hpm_sdxc_drv.h:1087
hpm_stat_t sdxc_parse_interrupt_status(SDXC_Type *base)
Parse the SDXC interrupt status to HPM encoded status.
Definition: hpm_sdxc_drv.c:332
static void sdxc_switch_to_1v8_signal(SDXC_Type *base, bool enable)
Switch SDXC to 1.8V signaling mode.
Definition: hpm_sdxc_drv.h:865
void sdxc_init(SDXC_Type *base, const sdxc_config_t *config)
Initialize SDXC controller.
Definition: hpm_sdxc_drv.c:469
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:389
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:899
hpm_stat_t sdxc_transfer_nonblocking(SDXC_Type *base, sdxc_adma_config_t *dma_config, const sdxc_xfer_t *xfer)
Start SDXC transfer in nonblocking way.
Definition: hpm_sdxc_drv.c:912
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.
hpm_stat_t sdxc_transfer_blocking(SDXC_Type *base, sdxc_adma_config_t *dma_config, const sdxc_xfer_t *xfer)
Start SDXC transfer in blocking way.
Definition: hpm_sdxc_drv.c:995
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:935
static void sdxc_force_event(SDXC_Type *base, uint32_t mask)
Set SDXC force event.
Definition: hpm_sdxc_drv.h:1034
static void sdxc_execute_tuning(SDXC_Type *base)
Start SDXC tuning process.
Definition: hpm_sdxc_drv.h:832
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:841
static void sdxc_enable_mmc_boot(SDXC_Type *base, bool enable)
Enable/Disable SDXC MMC boot.
Definition: hpm_sdxc_drv.h:1020
static void sdxc_enable_interrupt_status(SDXC_Type *base, uint32_t mask, bool enable)
Enable SDXC interrupt status.
Definition: hpm_sdxc_drv.h:640
hpm_stat_t sdxc_set_dma_config(SDXC_Type *base, const sdxc_adma_config_t *dma_cfg, const uint32_t *data_addr)
Set DMA configuration.
Definition: hpm_sdxc_drv.c:567
struct _sdxc_adma_config sdxc_adma_config_t
SDXC ADMA configuration.
hpm_stat_t sdxc_perform_auto_tuning(SDXC_Type *base, uint8_t tuning_cmd)
Perform SDXC auto-tuning.
Definition: hpm_sdxc_drv.c:1270
enum _sdxc_speed_mode sdxc_speed_mode_t
SDXC Speed mode options.
static uint32_t sdxc_get_present_status(const SDXC_Type *base)
Get Present status register value.
Definition: hpm_sdxc_drv.h:893
hpm_stat_t sdxc_send_command(SDXC_Type *base, const sdxc_command_t *cmd)
Send Command via SDXC.
Definition: hpm_sdxc_drv.c:319
hpm_stat_t(* sdxc_xfer_func_t)(SDXC_Type *base, sdxc_xfer_t *content)
Definition: hpm_sdxc_drv.h:577
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:777
static void sdxc_enable_async_interrupt(SDXC_Type *base, bool enable)
Enable SDXC asynchronous interrupt support.
Definition: hpm_sdxc_drv.h:791
struct _sdxc_adma3_xfer_list sdxc_adma3_xfer_list
static void sdxc_configure_data_timeout(SDXC_Type *base, uint8_t timeout)
Configure SDXC data timeout internal.
Definition: hpm_sdxc_drv.h:696
@ sdxc_adma_desc_multi_flag
Definition: hpm_sdxc_drv.h:457
@ sdxc_adma_desc_single_flag
Definition: hpm_sdxc_drv.h:456
@ sdxc_xfer_data_boot_continuous
Definition: hpm_sdxc_drv.h:434
@ sdxc_xfer_data_boot
Definition: hpm_sdxc_drv.h:433
@ sdxc_xfer_data_normal
Definition: hpm_sdxc_drv.h:432
@ status_sdxc_autocmd_cmd_index_error
Definition: hpm_sdxc_drv.h:276
@ status_sdxc_busy
Definition: hpm_sdxc_drv.h:255
@ status_sdxc_data_timeout_error
Definition: hpm_sdxc_drv.h:262
@ status_sdxc_transfer_data_completed
Definition: hpm_sdxc_drv.h:282
@ status_sdxc_autocmd_end_bit_error
Definition: hpm_sdxc_drv.h:275
@ status_sdxc_non_recoverable_error
Definition: hpm_sdxc_drv.h:289
@ status_sdxc_send_cmd_successful
Definition: hpm_sdxc_drv.h:283
@ status_sdxc_adma_error
Definition: hpm_sdxc_drv.h:266
@ status_sdxc_card_removed
Definition: hpm_sdxc_drv.h:288
@ status_sdxc_response_error
Definition: hpm_sdxc_drv.h:268
@ status_sdxc_tuning_error
Definition: hpm_sdxc_drv.h:267
@ status_sdxc_data_crc_error
Definition: hpm_sdxc_drv.h:263
@ status_sdxc_xfer_size_exceeds_max_limit
Definition: hpm_sdxc_drv.h:292
@ status_sdxc_send_cmd_failed
Definition: hpm_sdxc_drv.h:257
@ status_sdxc_autocmd_cmd_timeout_error
Definition: hpm_sdxc_drv.h:273
@ status_sdxc_retuning_request
Definition: hpm_sdxc_drv.h:270
@ status_sdxc_dma_addr_or_len_unaligned
Definition: hpm_sdxc_drv.h:286
@ status_sdxc_autocmd_cmd_not_issued_auto_cmd12
Definition: hpm_sdxc_drv.h:279
@ status_sdxc_autocmd_cmd_crc_error
Definition: hpm_sdxc_drv.h:274
@ status_sdxc_autocmd_cmd_response_error
Definition: hpm_sdxc_drv.h:277
@ status_sdxc_data_end_bit_error
Definition: hpm_sdxc_drv.h:264
@ status_sdxc_recoverable_error
Definition: hpm_sdxc_drv.h:290
@ status_sdxc_autocmd_cmd12_not_exec
Definition: hpm_sdxc_drv.h:272
@ status_sdxc_cmd_index_error
Definition: hpm_sdxc_drv.h:261
@ status_sdxc_error
Definition: hpm_sdxc_drv.h:256
@ status_sdxc_unsupported
Definition: hpm_sdxc_drv.h:281
@ status_sdxc_transfer_data_failed
Definition: hpm_sdxc_drv.h:285
@ status_sdxc_transfer_dma_completed
Definition: hpm_sdxc_drv.h:284
@ status_sdxc_cmd_end_bit_error
Definition: hpm_sdxc_drv.h:260
@ status_sdxc_cmd_timeout_error
Definition: hpm_sdxc_drv.h:258
@ status_sdxc_cmd_crc_error
Definition: hpm_sdxc_drv.h:259
@ status_sdxc_tuning_failed
Definition: hpm_sdxc_drv.h:287
@ status_sdxc_boot_ack_error
Definition: hpm_sdxc_drv.h:269
@ status_sdxc_adma_table_not_enough
Definition: hpm_sdxc_drv.h:291
@ status_sdxc_auto_cmd_error
Definition: hpm_sdxc_drv.h:265
@ sdxc_emmc_speed_high_speed_ddr
Definition: hpm_sdxc_drv.h:167
@ sdxc_wakeup_card_insert
Definition: hpm_sdxc_drv.h:129
@ sdxc_reset_data_line
Definition: hpm_sdxc_drv.h:111
@ sdxc_sd_speed_sdr12
Definition: hpm_sdxc_drv.h:156
@ sdxc_emmc_speed_hs400
Definition: hpm_sdxc_drv.h:168
@ sdxc_dev_resp_none
Definition: hpm_sdxc_drv.h:370
@ sdxc_bus_width_8bit
Definition: hpm_sdxc_drv.h:149
@ sdxc_auto_cmd_disabled
Definition: hpm_sdxc_drv.h:178
@ sdxc_dev_resp_r5
Definition: hpm_sdxc_drv.h:376
@ sdxc_auto_cmd_auto_select
Definition: hpm_sdxc_drv.h:181
@ sdxc_bus_width_4bit
Definition: hpm_sdxc_drv.h:148
@ sdxc_dev_resp_r7
Definition: hpm_sdxc_drv.h:379
@ sdxc_dmasel_nodma
Definition: hpm_sdxc_drv.h:140
@ sdxc_dmasel_adma3
Definition: hpm_sdxc_drv.h:139
@ sdxc_dmasel_adma2
Definition: hpm_sdxc_drv.h:138
@ sdxc_reset_all
Definition: hpm_sdxc_drv.h:109
@ sdxc_bus_voltage_emmc_3v3
Definition: hpm_sdxc_drv.h:121
@ sdxc_boot_mode_alternative
Definition: hpm_sdxc_drv.h:216
@ sdxc_dev_resp_r1b
Definition: hpm_sdxc_drv.h:372
@ sdxc_reset_cmd_line
Definition: hpm_sdxc_drv.h:110
@ sdxc_sd_speed_sdr25
Definition: hpm_sdxc_drv.h:157
@ sdxc_cmd_type_normal_cmd
Definition: hpm_sdxc_drv.h:196
@ sdxc_sd_speed_sdr50
Definition: hpm_sdxc_drv.h:158
@ sdxc_bus_width_1bit
Definition: hpm_sdxc_drv.h:147
@ sdxc_sdmmc_speed_card_init
Definition: hpm_sdxc_drv.h:170
@ sdxc_wakeup_card_interrupt
Definition: hpm_sdxc_drv.h:130
@ sdxc_cmd_type_empty
Definition: hpm_sdxc_drv.h:200
@ sdxc_bus_voltage_emmc_1v8
Definition: hpm_sdxc_drv.h:120
@ sdxc_dev_resp_r4
Definition: hpm_sdxc_drv.h:375
@ sdxc_bus_voltage_sd_1v8
Definition: hpm_sdxc_drv.h:118
@ sdxc_boot_mode_normal
Definition: hpm_sdxc_drv.h:215
@ sdxc_sd_speed_sdr104
Definition: hpm_sdxc_drv.h:159
@ sdxc_auto_cmd23_enabled
Definition: hpm_sdxc_drv.h:180
@ sdxc_cmd_tye_resume_cmd
Definition: hpm_sdxc_drv.h:198
@ sdxc_emmc_speed_high_speed_sdr
Definition: hpm_sdxc_drv.h:165
@ sdxc_auto_cmd12_enabled
Definition: hpm_sdxc_drv.h:179
@ sdxc_dev_resp_r3
Definition: hpm_sdxc_drv.h:374
@ sdxc_dev_resp_r6
Definition: hpm_sdxc_drv.h:378
@ sdxc_dev_resp_r1
Definition: hpm_sdxc_drv.h:371
@ sdxc_xfer_dir_write
Definition: hpm_sdxc_drv.h:188
@ sdxc_response_type_no_resp
Definition: hpm_sdxc_drv.h:223
@ sdxc_wakeup_card_removal
Definition: hpm_sdxc_drv.h:128
@ sdxc_dev_resp_r2
Definition: hpm_sdxc_drv.h:373
@ sdxc_cmd_type_suspend_cmd
Definition: hpm_sdxc_drv.h:197
@ sdxc_dev_resp_r5b
Definition: hpm_sdxc_drv.h:377
@ sdxc_cmd_type_abort_cmd
Definition: hpm_sdxc_drv.h:199
@ sdxc_dmasel_sdma
Definition: hpm_sdxc_drv.h:137
@ sdxc_response_type_resp_len_48bit
Definition: hpm_sdxc_drv.h:225
@ sdxc_xfer_dir_read
Definition: hpm_sdxc_drv.h:189
@ sdxc_emmc_speed_hs200
Definition: hpm_sdxc_drv.h:166
@ sdxc_response_type_resp_len_136bit
Definition: hpm_sdxc_drv.h:224
@ sdxc_sd_speed_high
Definition: hpm_sdxc_drv.h:162
@ sdxc_emmc_speed_legacy
Definition: hpm_sdxc_drv.h:164
@ sdxc_sd_speed_ddr50
Definition: hpm_sdxc_drv.h:160
@ sdxc_sd_speed_normal
Definition: hpm_sdxc_drv.h:161
@ sdxc_bus_voltage_sd_3v3
Definition: hpm_sdxc_drv.h:119
@ sdxc_response_type_resp_len_48bit_check_busy
Definition: hpm_sdxc_drv.h:226
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:298
uint32_t asysnc_interrupt_support
Definition: hpm_sdxc_drv.h:317
uint32_t base_clk_freq
Definition: hpm_sdxc_drv.h:304
uint32_t voltage_1v8_support
Definition: hpm_sdxc_drv.h:314
uint32_t max_current_1v8
Definition: hpm_sdxc_drv.h:350
uint32_t sdma_support
Definition: hpm_sdxc_drv.h:310
uint32_t ddr50_support
Definition: hpm_sdxc_drv.h:327
uint32_t sdr50_support
Definition: hpm_sdxc_drv.h:325
uint32_t use_tuning_sdr50
Definition: hpm_sdxc_drv.h:335
uint32_t sys_addr_64_bit_v4_support
Definition: hpm_sdxc_drv.h:315
uint32_t suspend_resume_support
Definition: hpm_sdxc_drv.h:311
uint32_t slot_type_r
Definition: hpm_sdxc_drv.h:318
uint32_t reserved
Definition: hpm_sdxc_drv.h:351
uint32_t sdr104_support
Definition: hpm_sdxc_drv.h:326
uint32_t vdd2_1v8_support
Definition: hpm_sdxc_drv.h:340
uint32_t embedded_8_bit_support
Definition: hpm_sdxc_drv.h:306
uint32_t adma3_support
Definition: hpm_sdxc_drv.h:339
uint32_t re_tuning_modes
Definition: hpm_sdxc_drv.h:336
uint32_t drv_type_a
Definition: hpm_sdxc_drv.h:329
uint32_t max_current_3v0
Definition: hpm_sdxc_drv.h:349
uint32_t clk_mul
Definition: hpm_sdxc_drv.h:337
uint32_t uhs2_support
Definition: hpm_sdxc_drv.h:328
uint32_t max_blk_len
Definition: hpm_sdxc_drv.h:305
uint32_t tout_clk_freq
Definition: hpm_sdxc_drv.h:301
uint32_t retune_cnt
Definition: hpm_sdxc_drv.h:333
uint32_t voltage_3v0_support
Definition: hpm_sdxc_drv.h:313
uint32_t U
Definition: hpm_sdxc_drv.h:320
uint32_t adma2_support
Definition: hpm_sdxc_drv.h:307
uint32_t drv_type_c
Definition: hpm_sdxc_drv.h:330
uint32_t sys_addr_64_bit_v3_support
Definition: hpm_sdxc_drv.h:316
uint32_t max_current_vdd2_1v8
Definition: hpm_sdxc_drv.h:358
uint32_t voltage_3v3_support
Definition: hpm_sdxc_drv.h:312
uint32_t drv_type_d
Definition: hpm_sdxc_drv.h:331
uint32_t tout_clk_unit
Definition: hpm_sdxc_drv.h:303
uint32_t high_speed_support
Definition: hpm_sdxc_drv.h:309
uint32_t max_current_3v3
Definition: hpm_sdxc_drv.h:348
uint32_t reserved0
Definition: hpm_sdxc_drv.h:332
Definition: hpm_sdxc_drv.h:569
volatile uint32_t xferred_words
Definition: hpm_sdxc_drv.h:572
sdxc_xfer_callback_t callback
Definition: hpm_sdxc_drv.h:573
sdxc_data_t *volatile data
Definition: hpm_sdxc_drv.h:570
sdxc_command_t *volatile cmd
Definition: hpm_sdxc_drv.h:571
void * user_data
Definition: hpm_sdxc_drv.h:574
Definition: hpm_sdxc_drv.h:579
sdxc_capabilities_t capability
Definition: hpm_sdxc_drv.h:583
sdxc_config_t config
Definition: hpm_sdxc_drv.h:582
sdxc_xfer_func_t xfer
Definition: hpm_sdxc_drv.h:584
SDXC_Type * base
Definition: hpm_sdxc_drv.h:580
uint32_t src_clk_hz
Definition: hpm_sdxc_drv.h:581
Definition: hpm_sdxc_drv.h:561