HPM SDK
HPMicro Software Development Kit
hpm_sdxc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_SDXC_DRV_H
9 #define HPM_SDXC_DRV_H
10 
20 #include "hpm_common.h"
21 #include "hpm_sdxc_regs.h"
22 #include "hpm_sdxc_soc_drv.h"
23 
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)
75 
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)
92 
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)
102 
103 
107 typedef enum _sdxc_software_reset {
112 
116 typedef enum _sdxc_bus_voltage_option {
122 
126 typedef enum _sdxc_wakeup_event {
131 
135 typedef enum _sdxc_dma_type {
141 
145 typedef enum _sdxc_bus_width {
150 
154 typedef enum _sdxc_speed_mode {
170 
172 
176 typedef enum _sdxc_auto_cmd_sel {
182 
186 typedef enum _sdxc_xfer_direction {
190 
194 typedef enum _sdxc_command_type {
201 
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)
209 
213 typedef enum _sdxc_boot_mode {
217 
221 typedef enum _sdxc_response_type {
227 
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)
232 
233 #define SDXC_CMD_CMD_IS_MAIN_CMD (0U)
234 #define SDXC_CMD_CMD_IS_SUB_CMD (SDXC_CMD_XFER_SUB_CMD_FLAG_MASK)
235 
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)
238 
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)
241 
242 #define SDXC_CMD_DATA_PRESENT (SDXC_CMD_XFER_DATA_PRESENT_SEL_MASK)
243 #define SDXC_CMD_DATA_NO_PRESENT (0U)
244 
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)
249 
253 enum {
270  /* SDXC Auto CMD12 command not executed */
277  /* SDXC Auto CMD not issued auto CMD12 */
290 };
291 
295 typedef struct {
296  union {
297  struct {
298  uint32_t tout_clk_freq: 6;
299  uint32_t : 1;
300  uint32_t tout_clk_unit: 1;
301  uint32_t base_clk_freq: 8;
302  uint32_t max_blk_len: 2;
304  uint32_t adma2_support: 1;
305  uint32_t : 1;
306  uint32_t high_speed_support: 1;
307  uint32_t sdma_support: 1;
309  uint32_t voltage_3v3_support: 1;
310  uint32_t voltage_3v0_support: 1;
311  uint32_t voltage_1v8_support: 1;
315  uint32_t slot_type_r: 2;
316  };
317  uint32_t U;
318  } capabilities1;
319 
320  union {
321  struct {
322  uint32_t sdr50_support: 1;
323  uint32_t sdr104_support: 1;
324  uint32_t ddr50_support: 1;
325  uint32_t uhs2_support: 1;
326  uint32_t drv_type_a: 1;
327  uint32_t drv_type_c: 1;
328  uint32_t drv_type_d: 1;
329  uint32_t reserved0: 1;
330  uint32_t retune_cnt: 4;
331  uint32_t : 1;
332  uint32_t use_tuning_sdr50: 1;
333  uint32_t re_tuning_modes: 2;
334  uint32_t clk_mul: 8;
335  uint32_t : 3;
336  uint32_t adma3_support: 1;
337  uint32_t vdd2_1v8_support: 1;
338  uint32_t : 3;
339  };
340  uint32_t U;
341  } capabilities2;
342 
343  union {
344  struct {
345  uint32_t max_current_3v3: 8;
346  uint32_t max_current_3v0: 8;
347  uint32_t max_current_1v8: 8;
348  uint32_t reserved: 8;
349  };
350  uint32_t U;
351  } curr_capabilities1;
352 
353  union {
354  struct {
355  uint32_t max_current_vdd2_1v8: 8;
356  uint32_t reserved: 24;
357  };
358  uint32_t U;
359  } curr_capabilities2;
360 
362 
366 typedef enum _sdxc_dev_resp_type {
378 
382 typedef struct _sdxc_command {
383  uint32_t cmd_index;
384  uint32_t cmd_argument;
385  uint32_t cmd_flags;
386  sdxc_command_type_t cmd_type;
387  sdxc_dev_resp_type_t resp_type;
388  uint32_t resp_error_flags;
389  uint32_t response[4];
390  uint32_t auto_cmd_resp;
391  uint32_t cmd_timeout_ms;
393 
397 typedef struct _sdxc_data_list {
398  uint32_t *data_addr;
399  uint32_t data_size;
400  struct _sdxc_data_list *data_list;
402 
406 typedef struct _sdxc_data {
407  bool enable_auto_cmd12;
408  bool enable_auto_cmd23;
409  bool enable_ignore_error;
410  uint8_t data_type;
411  uint32_t block_size;
412  uint32_t block_cnt;
413  uint32_t *rx_data;
414  const uint32_t *tx_data;
416 
420 enum {
424 };
425 
429 typedef struct _sdxc_xfer {
430  sdxc_data_t *data;
431  sdxc_command_t *command;
433 
437 typedef struct _sdxc_adma_config {
438  sdxc_dma_type_t dma_type;
439  uint32_t *adma_table;
440  uint32_t adma_table_words;
442 
443 enum {
446 };
447 
451 typedef struct _sdxc_config {
452  uint32_t data_timeout;
454 
458 typedef struct _sdxc_adma2_descriptor {
459  union {
460  struct {
461  uint32_t valid: 1;
462  uint32_t end: 1;
463  uint32_t interrupt: 1;
464  uint32_t act: 3;
465  uint32_t len_upper: 10;
466  uint32_t len_lower: 16;
467  };
468  uint32_t len_attr;
469  };
470  const uint32_t *addr;
472 
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)
479 
480 #define SDXC_ADMA2_ADDR_LEN (4U)
481 #define SDXC_ADMA2_LEN_ALIGN (4U)
482 
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)
488 
489 #define SDXC_ADMA3_CMD_FOR_SD_DESC_ATTR (0x09U)
490 #define SDXC_ADMA3_INTEGRATED_DESC_ATTR (0x39U)
491 
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)
496 
500 typedef struct _sdxc_adma3_cmd_sd_desc {
501  struct {
502  uint32_t attr;
503  uint32_t data;
504  } entry[4];
506 
510 typedef struct _sdxc_adma3_integrated_desc {
511  uint32_t attr;
512  sdxc_adma3_cmd_sd_desc_t *cmd_desc_ptr;
514 
518 typedef struct _sdxc_boot_config {
519  uint32_t ack_timeout_cnt;
520  sdxc_boot_mode_t boot_mode;
521  uint32_t block_cnt;
522  uint32_t block_size;
523  bool enable_boot_ack;
524  bool enable_auto_stop_at_block_gap;
526 
527 typedef struct {
528  void (*card_inserted)(SDXC_Type *base, void *user_data);
529  void (*card_removed)(SDXC_Type *base, void *user_data);
530  void (*sdio_interrupt)(SDXC_Type *base, void *user_data);
531  void (*block_gap)(SDXC_Type *base, void *user_data);
532  void (*xfer_complete)(SDXC_Type *base, void *user_data);
534 
535 typedef struct {
536  sdxc_data_t *volatile data;
537  sdxc_command_t *volatile cmd;
538  volatile uint32_t xferred_words;
540  void *user_data;
541 } sdxc_handle_t;
542 
543 typedef hpm_stat_t (*sdxc_xfer_func_t)(SDXC_Type *base, sdxc_xfer_t *content);
544 
545 typedef struct {
547  uint32_t src_clk_hz;
551 } sdxc_host_t;
552 
553 
554 #if defined(__cplusplus)
555 extern "C" {
556 #endif
557 
563 static inline uint32_t sdxc_get_interrupt_status(SDXC_Type *base)
564 {
565  return base->INT_STAT;
566 }
567 
574 static inline bool sdxc_is_card_inserted(SDXC_Type *base)
575 {
577 }
578 
585 static inline bool sdxc_is_write_protected(SDXC_Type *base)
586 {
588 }
589 
595 static inline void sdxc_clear_interrupt_status(SDXC_Type *base, uint32_t status_mask)
596 {
597  base->INT_STAT = status_mask;
598 }
599 
606 static inline void sdxc_enable_interrupt_status(SDXC_Type *base, uint32_t mask, bool enable)
607 {
608  if (enable) {
609  base->INT_STAT_EN |= mask;
610  } else {
611  base->INT_STAT_EN &= ~mask;
612  }
613 }
614 
621 static inline void sdxc_enable_interrupt_signal(SDXC_Type *base, uint32_t mask, bool enable)
622 {
623  if (enable) {
624  base->INT_SIGNAL_EN |= mask;
625  } else {
626  base->INT_SIGNAL_EN &= ~mask;
627  }
628 }
629 
636 
637 
643 static inline uint8_t sdxc_get_adma_error_status(SDXC_Type *base)
644 {
645  return base->ADMA_ERR_STAT;
646 }
647 
653 static inline void sdxc_configure_data_timeout(SDXC_Type *base, uint8_t timeout)
654 {
656 }
657 
663 static inline void sdxc_interrupt_at_block_gap(SDXC_Type *base, bool enable)
664 {
665  if (enable) {
667  } else {
669  }
670 }
671 
677 static inline void sdxc_read_wait_control(SDXC_Type *base, bool enable)
678 {
679  if (enable) {
681  } else {
683  }
684 }
685 
691 static inline void sdxc_continue_request(SDXC_Type *base, bool enable)
692 {
693  if (enable) {
695  } else {
697  }
698 }
699 
705 static inline void sdxc_stop_at_block_gap_request(SDXC_Type *base, bool enable)
706 {
707  if (enable) {
709  } else {
711  }
712 }
713 
719 static inline void sdxc_enable_high_speed(SDXC_Type *base, bool enable)
720 {
721  if (enable) {
723  } else {
725  }
726 }
727 
734 static inline void sdxc_enable_power(SDXC_Type *base, bool enable)
735 {
736  if (enable) {
738  } else {
740  }
741 }
742 
748 static inline void sdxc_enable_async_interrupt(SDXC_Type *base, bool enable)
749 {
750  if (enable) {
752  } else {
754  }
755 }
756 
762 static inline void sdxc_enable_preset(SDXC_Type *base, bool enable)
763 {
764  if (enable) {
766  } else {
768  }
769 }
770 
776 static inline void sdxc_enable_host_version4(SDXC_Type *base, bool enable)
777 {
778  if (enable) {
780  } else {
782  }
783 }
784 
789 static inline void sdxc_execute_tuning(SDXC_Type *base)
790 {
792 }
793 
799 static inline void sdxc_enable_software_tuning(SDXC_Type *base, bool enable)
800 {
801  if (enable) {
803  } else {
805  }
806 }
807 
812 static inline void sdxc_reset_tuning_engine(SDXC_Type *base)
813 {
815 }
816 
822 static inline void sdxc_switch_to_1v8_signal(SDXC_Type *base, bool enable)
823 {
824  if (enable) {
826  } else {
828  }
829 }
830 
836 static inline void sdxc_enable_internal_clock(SDXC_Type *base, bool enable)
837 {
838  if (enable) {
840  } else {
842  }
843 }
844 
850 static inline uint32_t sdxc_get_present_status(SDXC_Type *base)
851 {
852  return base->PSTATE;
853 }
854 
861 static inline bool sdxc_is_data_buf_writable(SDXC_Type *base)
862 {
863  return ((base->PSTATE & SDXC_PSTATE_BUF_WR_ENABLE_MASK) != 0U);
864 }
865 
872 static inline bool sdxc_is_data_buf_readable(SDXC_Type *base)
873 {
874  return ((base->PSTATE & SDXC_PSTATE_BUF_RD_ENABLE_MASK) != 0U);
875 }
876 
882 static inline uint32_t sdxc_read_data(SDXC_Type *base)
883 {
884  return base->BUF_DATA;
885 }
886 
892 static inline void sdxc_write_data(SDXC_Type *base, uint32_t data)
893 {
894  base->BUF_DATA = data;
895 }
896 
902 static inline uint32_t sdxc_get_data3_0_level(SDXC_Type *base)
903 {
904  return SDXC_PSTATE_DAT_3_0_GET(base->PSTATE);
905 }
906 
912 static inline void sdxc_enable_auto_tuning(SDXC_Type *base, bool enable)
913 {
914  if (enable) {
916  } else {
918  }
919 }
920 
927 static inline void sdxc_stop_clock_during_phase_code_change(SDXC_Type *base, bool enable)
928 {
929  if (enable) {
931  } else {
933  }
934 }
935 
942 static inline void sdxc_set_post_change_delay(SDXC_Type *base, uint8_t delay_cnt)
943 {
946 }
947 
953 static inline void sdxc_enable_emmc_support(SDXC_Type *base, bool enable)
954 {
955  if (enable) {
957  } else {
959  }
960 }
961 
967 static inline void sdxc_enable_mmc_boot(SDXC_Type *base, bool enable)
968 {
969  if (enable) {
971  } else {
973  }
974 }
975 
981 static inline void sdxc_force_event(SDXC_Type *base, uint32_t mask)
982 {
983  base->FORCE_EVENT = mask;
984 }
985 
991 static inline void sdxc_enable_sd_clock(SDXC_Type *base, bool enable)
992 {
993  if (enable) {
996  }
997  } else {
1000  }
1001  }
1002 }
1003 
1009 static inline void sdxc_set_center_phase_code(SDXC_Type *base, uint32_t value)
1010 {
1013 }
1014 
1020 static inline void sdxc_enable_enhanced_strobe(SDXC_Type *base, bool enable)
1021 {
1022  if (enable) {
1024  } else {
1026  }
1027 }
1028 
1034 void sdxc_set_mmc_boot_config(SDXC_Type *base, const sdxc_boot_config_t *config);
1035 
1044 
1052 
1059 
1067 hpm_stat_t sdxc_wait_cmd_done(SDXC_Type *base, sdxc_command_t *cmd, bool polling_cmd_done);
1068 
1076 void sdxc_set_data_config(SDXC_Type *base, sdxc_xfer_direction_t data_dir, uint32_t block_cnt, uint32_t block_size);
1077 
1087  sdxc_adma_config_t *dma_cfg,
1088  sdxc_data_t *data_cfg,
1089  uint32_t flags);
1090 
1100 hpm_stat_t sdxc_set_adma2_desc(uint32_t *adma_tbl,
1101  uint32_t adma_table_words,
1102  const uint32_t *data_buf,
1103  uint32_t data_bytes,
1104  uint32_t flags);
1105 
1115  sdxc_adma_config_t *dma_cfg,
1116  const uint32_t *data_addr,
1117  bool enable_auto_cmd23);
1118 
1124 void sdxc_init(SDXC_Type *base, const sdxc_config_t *config);
1125 
1132 void sdxc_set_data_timeout(SDXC_Type *base, uint32_t timeout_in_ms, uint32_t *actual_timeout_ms);
1133 
1140 
1141 
1148 
1154 uint32_t sdxc_get_data_bus_width(SDXC_Type *base);
1155 
1162 
1170 bool sdxc_reset(SDXC_Type *base, sdxc_sw_reset_type_t reset_type, uint32_t timeout);
1171 
1178 void sdxc_enable_wakeup_event(SDXC_Type *base, sdxc_wakeup_event_t evt, bool enable);
1179 
1188 
1197 
1204 
1211 hpm_stat_t sdxc_perform_tuning_flow_sequence(SDXC_Type *base, uint8_t tuning_cmd);
1212 
1219 hpm_stat_t sdxc_perform_software_tuning(SDXC_Type *base, uint8_t tuning_cmd);
1220 
1227 hpm_stat_t sdxc_perform_auto_tuning(SDXC_Type *base, uint8_t tuning_cmd);
1228 
1229 #if defined(__cplusplus)
1230 }
1231 #endif
1232 
1237 #endif /*HPM_SDXC_DRV_H */
#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