HPM SDK
HPMicro Software Development Kit
hpm_sdxc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2024 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 | SDXC_INT_STAT_ADMA_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 */
292 };
293 
297 typedef struct {
298  union {
299  struct {
300  uint32_t tout_clk_freq: 6;
301  uint32_t : 1;
302  uint32_t tout_clk_unit: 1;
303  uint32_t base_clk_freq: 8;
304  uint32_t max_blk_len: 2;
306  uint32_t adma2_support: 1;
307  uint32_t : 1;
308  uint32_t high_speed_support: 1;
309  uint32_t sdma_support: 1;
311  uint32_t voltage_3v3_support: 1;
312  uint32_t voltage_3v0_support: 1;
313  uint32_t voltage_1v8_support: 1;
317  uint32_t slot_type_r: 2;
318  };
319  uint32_t U;
320  } capabilities1;
321 
322  union {
323  struct {
324  uint32_t sdr50_support: 1;
325  uint32_t sdr104_support: 1;
326  uint32_t ddr50_support: 1;
327  uint32_t uhs2_support: 1;
328  uint32_t drv_type_a: 1;
329  uint32_t drv_type_c: 1;
330  uint32_t drv_type_d: 1;
331  uint32_t reserved0: 1;
332  uint32_t retune_cnt: 4;
333  uint32_t : 1;
334  uint32_t use_tuning_sdr50: 1;
335  uint32_t re_tuning_modes: 2;
336  uint32_t clk_mul: 8;
337  uint32_t : 3;
338  uint32_t adma3_support: 1;
339  uint32_t vdd2_1v8_support: 1;
340  uint32_t : 3;
341  };
342  uint32_t U;
343  } capabilities2;
344 
345  union {
346  struct {
347  uint32_t max_current_3v3: 8;
348  uint32_t max_current_3v0: 8;
349  uint32_t max_current_1v8: 8;
350  uint32_t reserved: 8;
351  };
352  uint32_t U;
353  } curr_capabilities1;
354 
355  union {
356  struct {
357  uint32_t max_current_vdd2_1v8: 8;
358  uint32_t reserved: 24;
359  };
360  uint32_t U;
361  } curr_capabilities2;
362 
364 
368 typedef enum _sdxc_dev_resp_type {
380 
384 typedef struct _sdxc_command {
385  uint32_t cmd_index;
386  uint32_t cmd_argument;
387  uint32_t cmd_flags;
388  sdxc_command_type_t cmd_type;
389  sdxc_dev_resp_type_t resp_type;
390  uint32_t resp_error_flags;
391  uint32_t response[4];
392  uint32_t auto_cmd_resp;
393  uint32_t cmd_timeout_ms;
395 
399 typedef struct _sdxc_data_list {
400  uint32_t *data_addr;
401  uint32_t data_size;
402  struct _sdxc_data_list *next;
404 
408 typedef struct _sdxc_data {
409  bool enable_auto_cmd12;
410  bool enable_auto_cmd23;
411  bool enable_ignore_error;
412  bool use_data_list;
413  uint32_t block_size;
414  uint32_t block_cnt;
415  union {
416  struct {
417  uint32_t *rx_data;
418  const uint32_t *tx_data;
419  };
420  struct {
421  sdxc_data_list_t *tx_data_list;
422  sdxc_data_list_t *rx_data_list;
423  };
424  };
426 
430 enum {
434 };
435 
439 typedef struct _sdxc_xfer {
440  sdxc_data_t *data;
441  sdxc_command_t *command;
443 
447 typedef struct _sdxc_adma_config {
448  sdxc_dma_type_t dma_type;
449  uint32_t *adma_table;
450  uint32_t adma_table_words;
451  const uint32_t *adma_desc_ptr;
453 
454 enum {
457 };
458 
462 typedef struct _sdxc_config {
463  uint32_t data_timeout;
465 
469 typedef struct _sdxc_adma2_descriptor {
470  union {
471  struct {
472  uint32_t valid: 1;
473  uint32_t end: 1;
474  uint32_t interrupt: 1;
475  uint32_t act: 3;
476  uint32_t len_upper: 10;
477  uint32_t len_lower: 16;
478  };
479  uint32_t len_attr;
480  };
481  const uint32_t *addr;
483 
484 /****************************************************************
485  * ADMA related definitions
486  *****************************************************************/
487 #define SDXC_ADMA2_DESC_VALID_FLAG (1UL << 0)
488 #define SDXC_ADMA2_DESC_END_FLAG (1UL << 1)
489 #define SDXC_ADMA2_DESC_INTERRUPT_FLAG (1UL << 2)
490 #define SDXC_ADMA2_DESC_ACT0_FLAG (1UL << 3)
491 #define SDXC_ADMA2_DESC_ACT1_FLAG (1UL << 4)
492 #define SDXC_ADMA2_DESC_ACT2_FLAG (1UL << 5)
493 
494 #define SDXC_ADMA2_ADDR_LEN (4U)
495 #define SDXC_ADMA2_LEN_ALIGN (4U)
496 
497 #define SDXC_ADMA2_DESC_TYPE_NOP (0U)
498 #define SDXC_ADMA2_DESC_TYPE_TRANS (4U)
499 #define SDXC_ADMA2_DESC_TYPE_LINK (6U)
500 #define SDXC_ADMA3_DESC_TYPE_FOR_SD_MODE (0x1U)
501 #define SDXC_AMDA3_DESC_TYPE_INTEGRATED_LINKER (7U)
502 #define SDXC_ADMA3_INTEGRATED_ATTR_VALID (1UL << 0)
503 #define SDXC_ADMA3_INTEGRATED_ATTR_END (1UL << 1)
504 #define SDXC_ADMA3_INTEGRATED_ATTR_INT (1UL << 2)
505 #define SDXC_ADMA3_CMD_FOR_SD_DESC_ATTR (0x09U)
506 #define SDXC_ADMA3_INTEGRATED_DESC_ATTR (0x39U)
507 
508 #define SDXC_ADMA3_CMD_DESC_ATTR_END (1UL << 1)
509 
510 #define SDXC_ADMA3_CMD_DESC_IDX_32BIT_BLK_CNT (0U)
511 #define SDXC_ADMA3_CMD_DESC_IDX_BLK_SIZE (1U)
512 #define SDXC_ADMA3_CMD_DESC_IDX_ARG (2U)
513 #define SDXC_ADMA3_CMD_DESC_IDX_CMD_XFER (3U)
514 
515 #define SDXC_ADMA3_INTEGRATED_DESC_WORDS (sizeof(sdxc_adma3_integrated_desc_t) / sizeof(uint32_t))
516 #define SDXC_ADMA3_CMD_DESC_WORDS (sizeof(sdxc_adma3_cmd_sd_desc_t) / sizeof(uint32_t))
517 #define SDXC_ADMA2_DESC_WORDS (sizeof(sdxc_adma2_descriptor_t) / sizeof(uint32_t))
518 
519 #define SDXC_IS_DMA_ALIGNED(value) (((uint32_t)(value) % 4UL) == 0U)
523 typedef struct _sdxc_adma3_cmd_sd_desc {
524  struct {
525  uint32_t attr;
526  uint32_t data;
527  } entry[4];
529 
533 typedef struct _sdxc_adma3_integrated_desc {
534  uint32_t attr;
535  sdxc_adma3_cmd_sd_desc_t *cmd_desc_ptr;
537 
538 #define SDXC_AMDA3_DESC_MIN_WORDS ((sizeof(sdxc_adma3_integrated_desc_t) + \
539  sizeof(sdxc_adma3_cmd_sd_desc_t) + \
540  sizeof(sdxc_adma2_descriptor_t)) / sizeof(uint32_t))
541 
542 
543 typedef struct _sdxc_adma3_xfer_list {
544  sdxc_xfer_t *sdxc_xfer;
545  struct _sdxc_adma3_xfer_list *next;
547 
551 typedef struct _sdxc_boot_config {
552  uint32_t ack_timeout_cnt;
553  sdxc_boot_mode_t boot_mode;
554  uint32_t block_cnt;
555  uint32_t block_size;
556  bool enable_boot_ack;
557  bool enable_auto_stop_at_block_gap;
559 
560 typedef struct {
561  void (*card_inserted)(SDXC_Type *base, void *user_data);
562  void (*card_removed)(SDXC_Type *base, void *user_data);
563  void (*sdio_interrupt)(SDXC_Type *base, void *user_data);
564  void (*block_gap)(SDXC_Type *base, void *user_data);
565  void (*xfer_complete)(SDXC_Type *base, void *user_data);
567 
568 typedef struct {
569  sdxc_data_t *volatile data;
570  sdxc_command_t *volatile cmd;
571  volatile uint32_t xferred_words;
573  void *user_data;
574 } sdxc_handle_t;
575 
576 typedef hpm_stat_t (*sdxc_xfer_func_t)(SDXC_Type *base, sdxc_xfer_t *content);
577 
578 typedef struct {
580  uint32_t src_clk_hz;
584 } sdxc_host_t;
585 
586 
587 #if defined(__cplusplus)
588 extern "C" {
589 #endif
590 
596 static inline uint32_t sdxc_get_interrupt_status(SDXC_Type *base)
597 {
598  return base->INT_STAT;
599 }
600 
607 static inline bool sdxc_is_card_inserted(const SDXC_Type *base)
608 {
610 }
611 
618 static inline bool sdxc_is_write_protected(const SDXC_Type *base)
619 {
621 }
622 
628 static inline void sdxc_clear_interrupt_status(SDXC_Type *base, uint32_t status_mask)
629 {
630  base->INT_STAT = status_mask;
631 }
632 
639 static inline void sdxc_enable_interrupt_status(SDXC_Type *base, uint32_t mask, bool enable)
640 {
641  if (enable) {
642  base->INT_STAT_EN |= mask;
643  } else {
644  base->INT_STAT_EN &= ~mask;
645  }
646 }
647 
654 static inline void sdxc_enable_interrupt_signal(SDXC_Type *base, uint32_t mask, bool enable)
655 {
656  if (enable) {
657  base->INT_SIGNAL_EN |= mask;
658  } else {
659  base->INT_SIGNAL_EN &= ~mask;
660  }
661 }
662 
667 static inline uint32_t sdxc_get_interrupt_signal(SDXC_Type *base)
668 {
669  return base->INT_SIGNAL_EN;
670 }
671 
678 
679 
685 static inline uint8_t sdxc_get_adma_error_status(const SDXC_Type *base)
686 {
687  return base->ADMA_ERR_STAT;
688 }
689 
695 static inline void sdxc_configure_data_timeout(SDXC_Type *base, uint8_t timeout)
696 {
698 }
699 
705 static inline void sdxc_interrupt_at_block_gap(SDXC_Type *base, bool enable)
706 {
707  if (enable) {
709  } else {
711  }
712 }
713 
719 static inline void sdxc_read_wait_control(SDXC_Type *base, bool enable)
720 {
721  if (enable) {
723  } else {
725  }
726 }
727 
733 static inline void sdxc_continue_request(SDXC_Type *base, bool enable)
734 {
735  if (enable) {
737  } else {
739  }
740 }
741 
747 static inline void sdxc_stop_at_block_gap_request(SDXC_Type *base, bool enable)
748 {
749  if (enable) {
751  } else {
753  }
754 }
755 
761 static inline void sdxc_enable_high_speed(SDXC_Type *base, bool enable)
762 {
763  if (enable) {
765  } else {
767  }
768 }
769 
776 static inline void sdxc_enable_power(SDXC_Type *base, bool enable)
777 {
778  if (enable) {
780  } else {
782  }
783 }
784 
790 static inline void sdxc_enable_async_interrupt(SDXC_Type *base, bool enable)
791 {
792  if (enable) {
794  } else {
796  }
797 }
798 
804 static inline void sdxc_enable_preset(SDXC_Type *base, bool enable)
805 {
806  if (enable) {
808  } else {
810  }
811 }
812 
818 static inline void sdxc_enable_host_version4(SDXC_Type *base, bool enable)
819 {
820  if (enable) {
822  } else {
824  }
825 }
826 
831 static inline void sdxc_execute_tuning(SDXC_Type *base)
832 {
834 }
835 
841 static inline void sdxc_enable_software_tuning(SDXC_Type *base, bool enable)
842 {
843  if (enable) {
845  } else {
847  }
848 }
849 
854 static inline void sdxc_reset_tuning_engine(SDXC_Type *base)
855 {
857 }
858 
864 static inline void sdxc_switch_to_1v8_signal(SDXC_Type *base, bool enable)
865 {
866  if (enable) {
868  } else {
870  }
871 }
872 
878 static inline void sdxc_enable_internal_clock(SDXC_Type *base, bool enable)
879 {
880  if (enable) {
882  } else {
884  }
885 }
886 
892 static inline uint32_t sdxc_get_present_status(const SDXC_Type *base)
893 {
894  return base->PSTATE;
895 }
896 
903 static inline bool sdxc_is_data_buf_writable(const SDXC_Type *base)
904 {
905  return ((base->PSTATE & SDXC_PSTATE_BUF_WR_ENABLE_MASK) != 0U);
906 }
907 
914 static inline bool sdxc_is_data_buf_readable(const SDXC_Type *base)
915 {
916  return ((base->PSTATE & SDXC_PSTATE_BUF_RD_ENABLE_MASK) != 0U);
917 }
918 
924 static inline uint32_t sdxc_read_data(SDXC_Type *base)
925 {
926  return base->BUF_DATA;
927 }
928 
934 static inline void sdxc_write_data(SDXC_Type *base, uint32_t data)
935 {
936  base->BUF_DATA = data;
937 }
938 
944 static inline uint32_t sdxc_get_data3_0_level(const SDXC_Type *base)
945 {
946  return SDXC_PSTATE_DAT_3_0_GET(base->PSTATE);
947 }
948 
954 static inline uint32_t sdxc_get_data7_4_level(const SDXC_Type *base)
955 {
956  return SDXC_PSTATE_DAT_7_4_GET(base->PSTATE);
957 }
958 
964 static inline void sdxc_enable_auto_tuning(SDXC_Type *base, bool enable)
965 {
966  if (enable) {
968  } else {
970  }
971 }
972 
979 static inline void sdxc_stop_clock_during_phase_code_change(SDXC_Type *base, bool enable)
980 {
981  if (enable) {
983  } else {
985  }
986 }
987 
994 static inline void sdxc_set_post_change_delay(SDXC_Type *base, uint8_t delay_cnt)
995 {
998 }
999 
1005 static inline void sdxc_enable_emmc_support(SDXC_Type *base, bool enable)
1006 {
1007  if (enable) {
1009  } else {
1011  }
1012 }
1013 
1019 static inline void sdxc_enable_mmc_boot(SDXC_Type *base, bool enable)
1020 {
1021  if (enable) {
1023  } else {
1025  }
1026 }
1027 
1033 static inline void sdxc_force_event(SDXC_Type *base, uint32_t mask)
1034 {
1035  base->FORCE_EVENT = mask;
1036 }
1037 
1043 static inline void sdxc_enable_sd_clock(SDXC_Type *base, bool enable)
1044 {
1045  if (enable) {
1048  }
1049  } else {
1052  }
1053  }
1054 }
1055 
1061 static inline void sdxc_set_center_phase_code(SDXC_Type *base, uint32_t value)
1062 {
1065 }
1066 
1072 static inline void sdxc_enable_enhanced_strobe(SDXC_Type *base, bool enable)
1073 {
1074  if (enable) {
1076  } else {
1078  }
1079 }
1080 
1086 static inline void sdxc_select_dma_type(SDXC_Type *base, sdxc_dma_type_t dma_type)
1087 {
1088  if (dma_type != sdxc_dmasel_nodma) {
1090  }
1091 }
1092 
1098 bool sdxc_is_bus_idle(const SDXC_Type *base);
1099 
1105 void sdxc_set_mmc_boot_config(SDXC_Type *base, const sdxc_boot_config_t *config);
1106 
1115 
1123 
1130 
1138 hpm_stat_t sdxc_wait_cmd_done(SDXC_Type *base, sdxc_command_t *cmd, bool polling_cmd_done);
1139 
1147 void sdxc_set_data_config(SDXC_Type *base, sdxc_xfer_direction_t data_dir, uint32_t block_cnt, uint32_t block_size);
1148 
1158  sdxc_adma_config_t *dma_cfg,
1159  sdxc_data_t *data_cfg,
1160  sdxc_command_t *cmd);
1161 
1171  const sdxc_data_t *xfer_data,
1172  uint32_t *num_entries);
1173 
1186 
1194 hpm_stat_t sdxc_set_dma_config(SDXC_Type *base, const sdxc_adma_config_t *dma_cfg, const uint32_t *data_addr);
1195 
1201 void sdxc_init(SDXC_Type *base, const sdxc_config_t *config);
1202 
1209 void sdxc_set_data_timeout(SDXC_Type *base, uint32_t timeout_in_ms, uint32_t *actual_timeout_ms);
1210 
1217 
1218 
1225 
1231 uint32_t sdxc_get_data_bus_width(const SDXC_Type *base);
1232 
1239 
1247 bool sdxc_reset(SDXC_Type *base, sdxc_sw_reset_type_t reset_type, uint32_t timeout);
1248 
1255 void sdxc_enable_wakeup_event(SDXC_Type *base, sdxc_wakeup_event_t evt, bool enable);
1256 
1265 
1274  sdxc_adma_config_t *dma_config,
1275  sdxc_adma3_xfer_list *adma3_xfer_list);
1276 
1285 
1293 
1300 hpm_stat_t sdxc_perform_tuning_flow_sequence(SDXC_Type *base, uint8_t tuning_cmd);
1301 
1308 hpm_stat_t sdxc_perform_software_tuning(SDXC_Type *base, uint8_t tuning_cmd);
1309 
1316 hpm_stat_t sdxc_perform_auto_tuning(SDXC_Type *base, uint8_t tuning_cmd);
1317 
1318 #if defined(__cplusplus)
1319 }
1320 #endif
1321 
1326 #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_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: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:994
hpm_stat_t sdxc_set_adma3_desc(sdxc_adma_config_t *dma_config, sdxc_adma3_xfer_list *adma3_xfer_list)
Set ADMA3 descriptor.
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:979
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:954
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:924
static void sdxc_enable_host_version4(SDXC_Type *base, bool enable)
Enable SD Host version 4.
Definition: hpm_sdxc_drv.h:818
static void sdxc_enable_preset(SDXC_Type *base, bool enable)
Enable SDXC Preset support.
Definition: hpm_sdxc_drv.h:804
static bool sdxc_is_write_protected(const SDXC_Type *base)
Check whether SD card is Write Protected.
Definition: hpm_sdxc_drv.h:618
static void sdxc_enable_sd_clock(SDXC_Type *base, bool enable)
Enable/disable SDXC SD clock output.
Definition: hpm_sdxc_drv.h:1043
static void sdxc_stop_at_block_gap_request(SDXC_Type *base, bool enable)
Configure SDXC StopAtBlockGap request.
Definition: hpm_sdxc_drv.h:747
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:654
static void sdxc_enable_internal_clock(SDXC_Type *base, bool enable)
Enable/Disable SDXC internal clock.
Definition: hpm_sdxc_drv.h:878
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:903
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:719
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:667
static void sdxc_enable_high_speed(SDXC_Type *base, bool enable)
Control the SDXC high-speed support.
Definition: hpm_sdxc_drv.h:761
static void sdxc_continue_request(SDXC_Type *base, bool enable)
Configure SDXC continue request.
Definition: hpm_sdxc_drv.h:733
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:1072
static uint32_t sdxc_get_interrupt_status(SDXC_Type *base)
Get the SDXC interrupt status.
Definition: hpm_sdxc_drv.h:596
static bool sdxc_is_card_inserted(const SDXC_Type *base)
Check whether SD card is inserted.
Definition: hpm_sdxc_drv.h:607
static void sdxc_interrupt_at_block_gap(SDXC_Type *base, bool enable)
Configure SDXC interrupt at block gap.
Definition: hpm_sdxc_drv.h:705
static void sdxc_enable_software_tuning(SDXC_Type *base, bool enable)
Enable SDXC software tuning process.
Definition: hpm_sdxc_drv.h:841
static uint32_t sdxc_get_data3_0_level(const SDXC_Type *base)
Get SDXC DATA3-DATA0 IO level.
Definition: hpm_sdxc_drv.h:944
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:964
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:854
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:1005
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:914
static void sdxc_clear_interrupt_status(SDXC_Type *base, uint32_t status_mask)
Clear SDXC interrupt status.
Definition: hpm_sdxc_drv.h:628
static uint8_t sdxc_get_adma_error_status(const SDXC_Type *base)
Get SDXC ADMA error status.
Definition: hpm_sdxc_drv.h:685
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:1061
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:1086
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:864
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:934
static void sdxc_force_event(SDXC_Type *base, uint32_t mask)
Set SDXC force event.
Definition: hpm_sdxc_drv.h:1033
static void sdxc_execute_tuning(SDXC_Type *base)
Start SDXC tuning process.
Definition: hpm_sdxc_drv.h:831
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:1019
static void sdxc_enable_interrupt_status(SDXC_Type *base, uint32_t mask, bool enable)
Enable SDXC interrupt status.
Definition: hpm_sdxc_drv.h:639
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:892
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:576
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:776
static void sdxc_enable_async_interrupt(SDXC_Type *base, bool enable)
Enable SDXC asynchronous interrupt support.
Definition: hpm_sdxc_drv.h:790
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:695
@ sdxc_adma_desc_multi_flag
Definition: hpm_sdxc_drv.h:456
@ sdxc_adma_desc_single_flag
Definition: hpm_sdxc_drv.h:455
@ sdxc_xfer_data_boot_continuous
Definition: hpm_sdxc_drv.h:433
@ sdxc_xfer_data_boot
Definition: hpm_sdxc_drv.h:432
@ sdxc_xfer_data_normal
Definition: hpm_sdxc_drv.h:431
@ 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_xfer_size_exceeds_max_limit
Definition: hpm_sdxc_drv.h:291
@ 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_dma_addr_or_len_unaligned
Definition: hpm_sdxc_drv.h:285
@ 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_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_adma_table_not_enough
Definition: hpm_sdxc_drv.h:290
@ status_sdxc_auto_cmd_error
Definition: hpm_sdxc_drv.h:264
@ 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:369
@ 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:375
@ 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:378
@ sdxc_dmasel_nodma
Definition: hpm_sdxc_drv.h:139
@ sdxc_dmasel_adma3
Definition: hpm_sdxc_drv.h:138
@ 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:371
@ 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:374
@ 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:373
@ sdxc_dev_resp_r6
Definition: hpm_sdxc_drv.h:377
@ sdxc_dev_resp_r1
Definition: hpm_sdxc_drv.h:370
@ 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:372
@ sdxc_cmd_type_suspend_cmd
Definition: hpm_sdxc_drv.h:196
@ sdxc_dev_resp_r5b
Definition: hpm_sdxc_drv.h:376
@ 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:297
uint32_t asysnc_interrupt_support
Definition: hpm_sdxc_drv.h:316
uint32_t base_clk_freq
Definition: hpm_sdxc_drv.h:303
uint32_t voltage_1v8_support
Definition: hpm_sdxc_drv.h:313
uint32_t max_current_1v8
Definition: hpm_sdxc_drv.h:349
uint32_t sdma_support
Definition: hpm_sdxc_drv.h:309
uint32_t ddr50_support
Definition: hpm_sdxc_drv.h:326
uint32_t sdr50_support
Definition: hpm_sdxc_drv.h:324
uint32_t use_tuning_sdr50
Definition: hpm_sdxc_drv.h:334
uint32_t sys_addr_64_bit_v4_support
Definition: hpm_sdxc_drv.h:314
uint32_t suspend_resume_support
Definition: hpm_sdxc_drv.h:310
uint32_t slot_type_r
Definition: hpm_sdxc_drv.h:317
uint32_t reserved
Definition: hpm_sdxc_drv.h:350
uint32_t sdr104_support
Definition: hpm_sdxc_drv.h:325
uint32_t vdd2_1v8_support
Definition: hpm_sdxc_drv.h:339
uint32_t embedded_8_bit_support
Definition: hpm_sdxc_drv.h:305
uint32_t adma3_support
Definition: hpm_sdxc_drv.h:338
uint32_t re_tuning_modes
Definition: hpm_sdxc_drv.h:335
uint32_t drv_type_a
Definition: hpm_sdxc_drv.h:328
uint32_t max_current_3v0
Definition: hpm_sdxc_drv.h:348
uint32_t clk_mul
Definition: hpm_sdxc_drv.h:336
uint32_t uhs2_support
Definition: hpm_sdxc_drv.h:327
uint32_t max_blk_len
Definition: hpm_sdxc_drv.h:304
uint32_t tout_clk_freq
Definition: hpm_sdxc_drv.h:300
uint32_t retune_cnt
Definition: hpm_sdxc_drv.h:332
uint32_t voltage_3v0_support
Definition: hpm_sdxc_drv.h:312
uint32_t U
Definition: hpm_sdxc_drv.h:319
uint32_t adma2_support
Definition: hpm_sdxc_drv.h:306
uint32_t drv_type_c
Definition: hpm_sdxc_drv.h:329
uint32_t sys_addr_64_bit_v3_support
Definition: hpm_sdxc_drv.h:315
uint32_t max_current_vdd2_1v8
Definition: hpm_sdxc_drv.h:357
uint32_t voltage_3v3_support
Definition: hpm_sdxc_drv.h:311
uint32_t drv_type_d
Definition: hpm_sdxc_drv.h:330
uint32_t tout_clk_unit
Definition: hpm_sdxc_drv.h:302
uint32_t high_speed_support
Definition: hpm_sdxc_drv.h:308
uint32_t max_current_3v3
Definition: hpm_sdxc_drv.h:347
uint32_t reserved0
Definition: hpm_sdxc_drv.h:331
Definition: hpm_sdxc_drv.h:568
volatile uint32_t xferred_words
Definition: hpm_sdxc_drv.h:571
sdxc_xfer_callback_t callback
Definition: hpm_sdxc_drv.h:572
sdxc_data_t *volatile data
Definition: hpm_sdxc_drv.h:569
sdxc_command_t *volatile cmd
Definition: hpm_sdxc_drv.h:570
void * user_data
Definition: hpm_sdxc_drv.h:573
Definition: hpm_sdxc_drv.h:578
sdxc_capabilities_t capability
Definition: hpm_sdxc_drv.h:582
sdxc_config_t config
Definition: hpm_sdxc_drv.h:581
sdxc_xfer_func_t xfer
Definition: hpm_sdxc_drv.h:583
SDXC_Type * base
Definition: hpm_sdxc_drv.h:579
uint32_t src_clk_hz
Definition: hpm_sdxc_drv.h:580
Definition: hpm_sdxc_drv.h:560