HPM SDK
HPMicro Software Development Kit
hpm_sdxc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 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  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)
93 
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)
103 
104 
108 typedef enum _sdxc_software_reset {
113 
117 typedef enum _sdxc_bus_voltage_option {
123 
127 typedef enum _sdxc_wakeup_event {
132 
136 typedef enum _sdxc_dma_type {
142 
146 typedef enum _sdxc_bus_width {
151 
155 typedef enum _sdxc_speed_mode {
171 
173 
177 typedef enum _sdxc_auto_cmd_sel {
183 
187 typedef enum _sdxc_xfer_direction {
191 
195 typedef enum _sdxc_command_type {
202 
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)
210 
214 typedef enum _sdxc_boot_mode {
218 
222 typedef enum _sdxc_response_type {
228 
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)
233 
234 #define SDXC_CMD_CMD_IS_MAIN_CMD (0U)
235 #define SDXC_CMD_CMD_IS_SUB_CMD (SDXC_CMD_XFER_SUB_CMD_FLAG_MASK)
236 
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)
239 
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)
242 
243 #define SDXC_CMD_DATA_PRESENT (SDXC_CMD_XFER_DATA_PRESENT_SEL_MASK)
244 #define SDXC_CMD_DATA_NO_PRESENT (0U)
245 
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)
250 
254 enum {
271  /* SDXC Auto CMD12 command not executed */
278  /* SDXC Auto CMD not issued auto CMD12 */
293 };
294 
298 typedef struct {
299  union {
300  struct {
301  uint32_t tout_clk_freq: 6;
302  uint32_t : 1;
303  uint32_t tout_clk_unit: 1;
304  uint32_t base_clk_freq: 8;
305  uint32_t max_blk_len: 2;
307  uint32_t adma2_support: 1;
308  uint32_t : 1;
309  uint32_t high_speed_support: 1;
310  uint32_t sdma_support: 1;
312  uint32_t voltage_3v3_support: 1;
313  uint32_t voltage_3v0_support: 1;
314  uint32_t voltage_1v8_support: 1;
318  uint32_t slot_type_r: 2;
319  };
320  uint32_t U;
321  } capabilities1;
322 
323  union {
324  struct {
325  uint32_t sdr50_support: 1;
326  uint32_t sdr104_support: 1;
327  uint32_t ddr50_support: 1;
328  uint32_t uhs2_support: 1;
329  uint32_t drv_type_a: 1;
330  uint32_t drv_type_c: 1;
331  uint32_t drv_type_d: 1;
332  uint32_t reserved0: 1;
333  uint32_t retune_cnt: 4;
334  uint32_t : 1;
335  uint32_t use_tuning_sdr50: 1;
336  uint32_t re_tuning_modes: 2;
337  uint32_t clk_mul: 8;
338  uint32_t : 3;
339  uint32_t adma3_support: 1;
340  uint32_t vdd2_1v8_support: 1;
341  uint32_t : 3;
342  };
343  uint32_t U;
344  } capabilities2;
345 
346  union {
347  struct {
348  uint32_t max_current_3v3: 8;
349  uint32_t max_current_3v0: 8;
350  uint32_t max_current_1v8: 8;
351  uint32_t reserved: 8;
352  };
353  uint32_t U;
354  } curr_capabilities1;
355 
356  union {
357  struct {
358  uint32_t max_current_vdd2_1v8: 8;
359  uint32_t reserved: 24;
360  };
361  uint32_t U;
362  } curr_capabilities2;
363 
365 
369 typedef enum _sdxc_dev_resp_type {
381 
385 typedef struct _sdxc_command {
386  uint32_t cmd_index;
387  uint32_t cmd_argument;
388  uint32_t cmd_flags;
389  sdxc_command_type_t cmd_type;
390  sdxc_dev_resp_type_t resp_type;
391  uint32_t resp_error_flags;
392  uint32_t response[4];
393  uint32_t auto_cmd_resp;
394  uint32_t cmd_timeout_ms;
396 
400 typedef struct _sdxc_data_list {
401  uint32_t *data_addr;
402  uint32_t data_size;
403  struct _sdxc_data_list *next;
405 
409 typedef struct _sdxc_data {
410  bool enable_auto_cmd12;
411  bool enable_auto_cmd23;
412  bool enable_ignore_error;
413  bool use_data_list;
414  uint32_t block_size;
415  uint32_t block_cnt;
416  union {
417  struct {
418  uint32_t *rx_data;
419  const uint32_t *tx_data;
420  };
421  struct {
422  sdxc_data_list_t *tx_data_list;
423  sdxc_data_list_t *rx_data_list;
424  };
425  };
427 
431 enum {
435 };
436 
440 typedef struct _sdxc_xfer {
441  sdxc_data_t *data;
442  sdxc_command_t *command;
444 
448 typedef struct _sdxc_adma_config {
449  sdxc_dma_type_t dma_type;
450  uint32_t *adma_table;
451  uint32_t adma_table_words;
452  const uint32_t *adma_desc_ptr;
454 
455 enum {
458 };
459 
463 typedef struct _sdxc_config {
464  uint32_t data_timeout;
466 
470 typedef struct _sdxc_adma2_descriptor {
471  union {
472  struct {
473  uint32_t valid: 1;
474  uint32_t end: 1;
475  uint32_t interrupt: 1;
476  uint32_t act: 3;
477  uint32_t len_upper: 10;
478  uint32_t len_lower: 16;
479  };
480  uint32_t len_attr;
481  };
482  const uint32_t *addr;
484 
485 /****************************************************************
486  * ADMA related definitions
487  *****************************************************************/
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)
494 
495 #define SDXC_ADMA2_ADDR_LEN (4U)
496 #define SDXC_ADMA2_LEN_ALIGN (4U)
497 
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)
508 
509 #define SDXC_ADMA3_CMD_DESC_ATTR_END (1UL << 1)
510 
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)
515 
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))
519 
520 #define SDXC_IS_DMA_ALIGNED(value) (((uint32_t)(value) % 4UL) == 0U)
524 typedef struct _sdxc_adma3_cmd_sd_desc {
525  struct {
526  uint32_t attr;
527  uint32_t data;
528  } entry[4];
530 
534 typedef struct _sdxc_adma3_integrated_desc {
535  uint32_t attr;
536  sdxc_adma3_cmd_sd_desc_t *cmd_desc_ptr;
538 
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))
542 
543 
544 typedef struct _sdxc_adma3_xfer_list {
545  sdxc_xfer_t *sdxc_xfer;
546  struct _sdxc_adma3_xfer_list *next;
548 
552 typedef struct _sdxc_boot_config {
553  uint32_t ack_timeout_cnt;
554  sdxc_boot_mode_t boot_mode;
555  uint32_t block_cnt;
556  uint32_t block_size;
557  bool enable_boot_ack;
558  bool enable_auto_stop_at_block_gap;
560 
561 typedef struct {
562  void (*card_inserted)(SDXC_Type *base, void *user_data);
563  void (*card_removed)(SDXC_Type *base, void *user_data);
564  void (*sdio_interrupt)(SDXC_Type *base, void *user_data);
565  void (*block_gap)(SDXC_Type *base, void *user_data);
566  void (*xfer_complete)(SDXC_Type *base, void *user_data);
568 
569 typedef struct {
570  sdxc_data_t *volatile data;
571  sdxc_command_t *volatile cmd;
572  volatile uint32_t xferred_words;
574  void *user_data;
575 } sdxc_handle_t;
576 
577 typedef hpm_stat_t (*sdxc_xfer_func_t)(SDXC_Type *base, sdxc_xfer_t *content);
578 
579 typedef struct {
581  uint32_t src_clk_hz;
585 } sdxc_host_t;
586 
587 
588 #if defined(__cplusplus)
589 extern "C" {
590 #endif
591 
597 static inline uint32_t sdxc_get_interrupt_status(SDXC_Type *base)
598 {
599  return base->INT_STAT;
600 }
601 
608 static inline bool sdxc_is_card_inserted(const SDXC_Type *base)
609 {
611 }
612 
619 static inline bool sdxc_is_write_protected(const SDXC_Type *base)
620 {
622 }
623 
629 static inline void sdxc_clear_interrupt_status(SDXC_Type *base, uint32_t status_mask)
630 {
631  base->INT_STAT = status_mask;
632 }
633 
640 static inline void sdxc_enable_interrupt_status(SDXC_Type *base, uint32_t mask, bool enable)
641 {
642  if (enable) {
643  base->INT_STAT_EN |= mask;
644  } else {
645  base->INT_STAT_EN &= ~mask;
646  }
647 }
648 
655 static inline void sdxc_enable_interrupt_signal(SDXC_Type *base, uint32_t mask, bool enable)
656 {
657  if (enable) {
658  base->INT_SIGNAL_EN |= mask;
659  } else {
660  base->INT_SIGNAL_EN &= ~mask;
661  }
662 }
663 
668 static inline uint32_t sdxc_get_interrupt_signal(SDXC_Type *base)
669 {
670  return base->INT_SIGNAL_EN;
671 }
672 
679 
680 
686 static inline uint8_t sdxc_get_adma_error_status(const SDXC_Type *base)
687 {
688  return base->ADMA_ERR_STAT;
689 }
690 
696 static inline void sdxc_configure_data_timeout(SDXC_Type *base, uint8_t timeout)
697 {
699 }
700 
706 static inline void sdxc_interrupt_at_block_gap(SDXC_Type *base, bool enable)
707 {
708  if (enable) {
710  } else {
712  }
713 }
714 
720 static inline void sdxc_read_wait_control(SDXC_Type *base, bool enable)
721 {
722  if (enable) {
724  } else {
726  }
727 }
728 
734 static inline void sdxc_continue_request(SDXC_Type *base, bool enable)
735 {
736  if (enable) {
738  } else {
740  }
741 }
742 
748 static inline void sdxc_stop_at_block_gap_request(SDXC_Type *base, bool enable)
749 {
750  if (enable) {
752  } else {
754  }
755 }
756 
762 static inline void sdxc_enable_high_speed(SDXC_Type *base, bool enable)
763 {
764  if (enable) {
766  } else {
768  }
769 }
770 
777 static inline void sdxc_enable_power(SDXC_Type *base, bool enable)
778 {
779  if (enable) {
781  } else {
783  }
784 }
785 
791 static inline void sdxc_enable_async_interrupt(SDXC_Type *base, bool enable)
792 {
793  if (enable) {
795  } else {
797  }
798 }
799 
805 static inline void sdxc_enable_preset(SDXC_Type *base, bool enable)
806 {
807  if (enable) {
809  } else {
811  }
812 }
813 
819 static inline void sdxc_enable_host_version4(SDXC_Type *base, bool enable)
820 {
821  if (enable) {
823  } else {
825  }
826 }
827 
832 static inline void sdxc_execute_tuning(SDXC_Type *base)
833 {
835 }
836 
842 static inline void sdxc_enable_software_tuning(SDXC_Type *base, bool enable)
843 {
844  if (enable) {
846  } else {
848  }
849 }
850 
855 static inline void sdxc_reset_tuning_engine(SDXC_Type *base)
856 {
858 }
859 
865 static inline void sdxc_switch_to_1v8_signal(SDXC_Type *base, bool enable)
866 {
867  if (enable) {
869  } else {
871  }
872 }
873 
879 static inline void sdxc_enable_internal_clock(SDXC_Type *base, bool enable)
880 {
881  if (enable) {
883  } else {
885  }
886 }
887 
893 static inline uint32_t sdxc_get_present_status(const SDXC_Type *base)
894 {
895  return base->PSTATE;
896 }
897 
904 static inline bool sdxc_is_data_buf_writable(const SDXC_Type *base)
905 {
906  return ((base->PSTATE & SDXC_PSTATE_BUF_WR_ENABLE_MASK) != 0U);
907 }
908 
915 static inline bool sdxc_is_data_buf_readable(const SDXC_Type *base)
916 {
917  return ((base->PSTATE & SDXC_PSTATE_BUF_RD_ENABLE_MASK) != 0U);
918 }
919 
925 static inline uint32_t sdxc_read_data(SDXC_Type *base)
926 {
927  return base->BUF_DATA;
928 }
929 
935 static inline void sdxc_write_data(SDXC_Type *base, uint32_t data)
936 {
937  base->BUF_DATA = data;
938 }
939 
945 static inline uint32_t sdxc_get_data3_0_level(const SDXC_Type *base)
946 {
947  return SDXC_PSTATE_DAT_3_0_GET(base->PSTATE);
948 }
949 
955 static inline uint32_t sdxc_get_data7_4_level(const SDXC_Type *base)
956 {
957  return SDXC_PSTATE_DAT_7_4_GET(base->PSTATE);
958 }
959 
965 static inline void sdxc_enable_auto_tuning(SDXC_Type *base, bool enable)
966 {
967  if (enable) {
969  } else {
971  }
972 }
973 
980 static inline void sdxc_stop_clock_during_phase_code_change(SDXC_Type *base, bool enable)
981 {
982  if (enable) {
984  } else {
986  }
987 }
988 
995 static inline void sdxc_set_post_change_delay(SDXC_Type *base, uint8_t delay_cnt)
996 {
999 }
1000 
1006 static inline void sdxc_enable_emmc_support(SDXC_Type *base, bool enable)
1007 {
1008  if (enable) {
1010  } else {
1012  }
1013 }
1014 
1020 static inline void sdxc_enable_mmc_boot(SDXC_Type *base, bool enable)
1021 {
1022  if (enable) {
1024  } else {
1026  }
1027 }
1028 
1034 static inline void sdxc_force_event(SDXC_Type *base, uint32_t mask)
1035 {
1036  base->FORCE_EVENT = mask;
1037 }
1038 
1044 static inline void sdxc_enable_sd_clock(SDXC_Type *base, bool enable)
1045 {
1046  if (enable) {
1049  }
1050  } else {
1053  }
1054  }
1055 }
1056 
1062 static inline void sdxc_set_center_phase_code(SDXC_Type *base, uint32_t value)
1063 {
1066 }
1067 
1073 static inline void sdxc_enable_enhanced_strobe(SDXC_Type *base, bool enable)
1074 {
1075  if (enable) {
1077  } else {
1079  }
1080 }
1081 
1087 static inline void sdxc_select_dma_type(SDXC_Type *base, sdxc_dma_type_t dma_type)
1088 {
1089  if (dma_type != sdxc_dmasel_nodma) {
1091  }
1092 }
1093 
1099 bool sdxc_is_bus_idle(const SDXC_Type *base);
1100 
1106 void sdxc_set_mmc_boot_config(SDXC_Type *base, const sdxc_boot_config_t *config);
1107 
1116 
1124 
1131 
1139 hpm_stat_t sdxc_wait_cmd_done(SDXC_Type *base, sdxc_command_t *cmd, bool polling_cmd_done);
1140 
1148 void sdxc_set_data_config(SDXC_Type *base, sdxc_xfer_direction_t data_dir, uint32_t block_cnt, uint32_t block_size);
1149 
1159  sdxc_adma_config_t *dma_cfg,
1160  sdxc_data_t *data_cfg,
1161  sdxc_command_t *cmd);
1162 
1171  const sdxc_data_t *xfer_data,
1172  uint32_t *num_entries);
1173 
1174 
1188 
1196 hpm_stat_t sdxc_set_dma_config(SDXC_Type *base, const sdxc_adma_config_t *dma_cfg, const uint32_t *data_addr);
1197 
1203 void sdxc_init(SDXC_Type *base, const sdxc_config_t *config);
1204 
1211 void sdxc_set_data_timeout(SDXC_Type *base, uint32_t timeout_in_ms, uint32_t *actual_timeout_ms);
1212 
1219 
1220 
1227 
1233 uint32_t sdxc_get_data_bus_width(const SDXC_Type *base);
1234 
1241 
1249 bool sdxc_reset(SDXC_Type *base, sdxc_sw_reset_type_t reset_type, uint32_t timeout);
1250 
1257 void sdxc_enable_wakeup_event(SDXC_Type *base, sdxc_wakeup_event_t evt, bool enable);
1258 
1267 
1276  sdxc_adma_config_t *dma_config,
1277  sdxc_adma3_xfer_list *adma3_xfer_list);
1278 
1287 
1295 
1302 hpm_stat_t sdxc_perform_tuning_flow_sequence(SDXC_Type *base, uint8_t tuning_cmd);
1303 
1310 hpm_stat_t sdxc_perform_software_tuning(SDXC_Type *base, uint8_t tuning_cmd);
1311 
1318 hpm_stat_t sdxc_perform_auto_tuning(SDXC_Type *base, uint8_t tuning_cmd);
1319 
1320 #if defined(__cplusplus)
1321 }
1322 #endif
1323 
1328 #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: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