SemiDrive SSDK Appication Program Interface PTG3.0
sdrv_sdhci.h
Go to the documentation of this file.
1
9#ifndef SDRV_SDHCI_H_
10#define SDRV_SDHCI_H_
11#include <reg.h>
12#include <udelay/udelay.h>
13#if CONFIG_OS_FREERTOS
14#include <FreeRTOS.h>
15#include <queue.h>
16#include <semphr.h>
17#include <task.h>
18#include <irq.h>
19#include <timers.h>
20#endif
21#include "sdrv_common.h"
22
23#undef BIT
24#define BIT(nr) (1U << (nr))
25
26#define SDHCI_CMD_SW_TIMEOUT 0x100
27#define SDHCI_DATA_SW_TIMEOUT 0x1000
28
29#define SDHCI_INHIBIT_COUNT 0x100
30
31#define ADMA_DESC_LIST_SIZE (64)
32
33#define SDHCI_HW_TUNING_MIN_COUNT 40
34
35#ifdef SDHCI_DESC_ADDR_64BITS
36#define desc_entry desc_entry_a64
37#else
38#define desc_entry desc_entry_a32
39#endif
40
41#define SDHCI_MMC_RETRY
42
43#ifdef SDHCI_MMC_RETRY
44#define MMC_CMD_RETRIES 0x3
45#else
46#define MMC_CMD_RETRIES 0x0
47#endif
48
49#define SDHCI_TRANS_COUNT_MAX 0x10
50
56struct host_caps {
57 uint32_t base_clk_rate;
58 uint32_t max_blk_len;
60 uint8_t spec_version;
61 uint8_t adma2_support;
62 uint8_t addr_64bit_v3;
63 uint8_t addr_64bit_v4;
64 uint8_t voltage;
65 uint8_t sdr_support;
66 uint8_t ddr_support;
67 uint8_t sdr50_support;
69 uint8_t hs200_support;
70 uint8_t hs400_support;
72 uint8_t uhs_support;
73};
74
76struct mmc_data {
77 void *data_ptr;
79 uint32_t blk_sz;
80 uint32_t
82};
85 uint16_t cmd_index;
86 uint32_t argument;
87 uint8_t data_present;
88 uint8_t cmd_type;
89 uint16_t resp_type;
90 uint32_t resp[4];
91 uint32_t trans_mode;
92 uint32_t cmd_retry;
93 uint32_t cmd23_support;
94 uint64_t cmd_timeout;
96 uint32_t error;
97 uint32_t retries;
98 struct mmc_data data;
99 // uint32_t data_complete; /**< non zero: complete*/
100};
101
104 uint32_t slot;
105 addr_t base;
106 uint32_t irq;
108#define SDHCI_SYNC_MODE (0)
109#define SDHCI_ASYNC_MODE (1)
110 uint32_t async_mode;
111#if CONFIG_OS_FREERTOS
112 SemaphoreHandle_t cmd_sema;
113 SemaphoreHandle_t data_sema;
114 SemaphoreHandle_t data_complete_sema;
115 SemaphoreHandle_t timer_sema;
116 TimerHandle_t data_timer;
118#endif
119 //spin_lock_t spin_lock; /**< reverse */
120
121 uint32_t cur_clk_rate;
122 uint32_t max_clk_rate;
123 uint32_t timing;
124 uint32_t card_type;
125 uint32_t bus_width;
131 void *priv_data;
132 void *parent;
133 struct sdhci_ops *ops;
134};
135
136
138struct sdhci_ops {
139 void (*priv_init)(struct sdhci_host *host);
140 void (*hw_reset)(struct sdhci_host *host);
141 status_t (*set_clock)(struct sdhci_host *host, unsigned int clock);
142 void (*set_power)(struct sdhci_host *host);
143 void (*config_pin)(struct sdhci_host *host);
144 void (*set_uhs_mode)(struct sdhci_host *host, uint32_t mode);
145 bool (*mmc_ending_trans)(struct sdhci_host *host);
146 status_t (*platform_execute_tuning)(struct sdhci_host *host, uint32_t opcode,
147 uint32_t bus_width);
148};
149
150
153 uint32_t tran_att;
154 uint32_t addr;
155};
156
159 uint32_t tran_att;
160 uint32_t addr_l;
161 uint32_t addr_h;
162 uint32_t rsvd;
163};
164
165
167typedef enum {
174
175
177typedef enum {
183
185typedef enum {
191
192
196#define readhw(a) (*REG16(a))
197#define writehw(v, a) (*REG16(a) = (v))
198
199#define REG_READ8(host, a) readb(((host)->base) + (a))
200#define REG_WRITE8(host, v, a) writeb((v), (((host)->base) + (a)))
201
202#define REG_READ32(host, a) readl(((host)->base) + (a))
203#define REG_WRITE32(host, v, a) writel((v), (((host)->base) + (a)))
204#define REG_RMW32(host, a, s, w, v) RMWREG32((((host)->base) + (a)), (s), (w), (v))
205
206#define REG_READ16(host, a) readhw(((host)->base) + (a))
207#define REG_WRITE16(host, v, a) writehw((v), (((host)->base) + (a)))
208
212#define SDHCI_CMD_EVENT_FLAG 0x1u
213#define SDHCI_DATA_EVENT_FLAG 0x1u
214#define SDHCI_DATA_COMPLETE_EVENT_FLAG 0x1u
215
219#define SDHCI_SDMASA_BLKCNT_REG (0x000)
220#define SDHCI_BLKSZ_REG (0x004)
221#define SDHCI_BLK_CNT_REG (0x006)
222#define SDHCI_ARGUMENT_REG (0x008)
223#define SDHCI_TRANS_MODE_REG (0x00C)
224#define SDHCI_CMD_REG (0x00E)
225#define SDHCI_RESP_REG (0x010)
226#define SDHCI_BUF_DATA (0x020)
227#define SDHCI_PRESENT_STATE_REG (0x024)
228#define SDHCI_HOST_CTRL1_REG (0x028)
229#define SDHCI_PWR_CTRL_REG (0x029)
230#define SDHCI_CLK_CTRL_REG (0x02C)
231#define SDHCI_TIMEOUT_REG (0x02E)
232#define SDHCI_RESET_REG (0x02F)
233#define SDHCI_NRML_INT_STS_REG (0x030)
234#define SDHCI_ERR_INT_STS_REG (0x032)
235#define SDHCI_NRML_INT_STS_EN_REG (0x034)
236#define SDHCI_ERR_INT_STS_EN_REG (0x036)
237#define SDHCI_NRML_INT_SIG_EN_REG (0x038)
238#define SDHCI_ERR_INT_SIG_EN_REG (0x03A)
239#define SDHCI_AUTO_CMD_ERR (0x03C)
240#define SDHCI_HOST_CTRL2_REG (0x03E)
241#define SDHCI_CAPS_REG1 (0x040)
242#define SDHCI_CAPS_REG2 (0x044)
243#define SDHCI_ADM_ERR_REG (0x054)
244#define SDHCI_ADM_ADDR_REG (0x058)
245#define SDHCI_VENDOR_BASE_REG (0xE8)
246#define SDHCI_SPEC_VERSION_REG (0xFE)
247
248#define SDHCI_VENDER_AT_CTRL_REG (0x40)
249#define SDHCI_TUNE_SWIN_TH_VAL_MASK 0xFF
250#define SDHCI_TUNE_SWIN_TH_VAL_LSB (24)
251#define SDHCI_TUNE_CLK_STOP_EN_MASK BIT(16)
252
256#define SDHCI_SOFT_RESET BIT(0)
257#define SOFT_RESET_CMD BIT(1)
258#define SOFT_RESET_DATA BIT(2)
259#define SDHCI_RESET_MAX_TIMEOUT 0x64
260#define SDHCI_1_8_VOL_SET BIT(3)
261
265#define SDHCI_NRML_INT_STS_EN 0x003B
266#define SDHCI_ERR_INT_STS_EN 0xFFFF
267#define SDHCI_NRML_INT_SIG_EN 0x003B
268#define SDHCI_ERR_INT_SIG_EN 0xFFFF
269
270#define SDCC_HC_INT_CARD_REMOVE BIT(7)
271#define SDCC_HC_INT_CARD_INSERT BIT(6)
272
273#define SDHCI_INT_RESPONSE BIT(0)
274#define SDHCI_INT_DATA_END BIT(1)
275#define SDHCI_INT_BLK_GAP BIT(2)
276#define SDHCI_INT_DMA_END BIT(3)
277#define SDHCI_INT_SPACE_AVAIL BIT(4)
278#define SDHCI_INT_DATA_AVAIL BIT(5)
279#define SDHCI_INT_CARD_INSERT BIT(6)
280#define SDHCI_INT_CARD_REMOVE BIT(7)
281#define SDHCI_INT_CARD_INT BIT(8)
282#define SDHCI_INT_RETUNE BIT(12)
283#define SDHCI_INT_CQE BIT(14)
284#define SDHCI_INT_ERROR BIT(15)
285#define SDHCI_INT_TIMEOUT BIT(16)
286#define SDHCI_INT_CRC BIT(17)
287#define SDHCI_INT_END_BIT BIT(18)
288#define SDHCI_INT_INDEX BIT(19)
289#define SDHCI_INT_DATA_TIMEOUT BIT(20)
290#define SDHCI_INT_DATA_CRC BIT(21)
291#define SDHCI_INT_DATA_END_BIT BIT(22)
292#define SDHCI_INT_BUS_POWER BIT(23)
293#define SDHCI_INT_ACMD12ERR BIT(24)
294#define SDHCI_INT_ADMA_ERROR BIT(25)
295#define SDHCI_INT_NORMAL_MASK 0x00007FFF
296#define SDHCI_INT_ERROR_MASK 0xFFFF8000
297
298#define SDHCI_INT_CMD_MASK \
299 (SDHCI_INT_RESPONSE | SDHCI_INT_TIMEOUT | SDHCI_INT_CRC | \
300 SDHCI_INT_END_BIT | SDHCI_INT_INDEX | SDHCI_INT_ACMD12ERR)
301#define SDHCI_INT_DATA_MASK \
302 (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | SDHCI_INT_DATA_AVAIL | \
303 SDHCI_INT_SPACE_AVAIL | SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \
304 SDHCI_INT_DATA_END_BIT | SDHCI_INT_ADMA_ERROR | SDHCI_INT_BLK_GAP)
305#define SDHCI_INT_ABORT_MASK \
306 (SDHCI_INT_TIMEOUT | SDHCI_INT_CRC | SDHCI_INT_END_BIT | \
307 SDHCI_INT_INDEX)
308
312#define SDHCI_HC_MODE_EN BIT(0)
313#define SDHCI_HC_MODE_DIS (0 << 1)
314
318#define SDHCI_CLK_MAX_DIV 2046
319#define SDHCI_SDCLK_FREQ_SEL 8
320#define SDHCI_SDCLK_UP_BIT_SEL 6
321#define SDHCI_SDCLK_FREQ_MASK 0xFF
322#define SDHC_SDCLK_UP_BIT_MASK 0x300
323#define SDHCI_INT_CLK_EN BIT(0)
324#define SDHCI_CLK_STABLE_MASK BIT(1)
325#define SDHCI_CLK_STABLE BIT(1)
326#define SDHCI_CLK_EN BIT(2)
327#define SDHCI_CLK_DIS (0 << 2)
328#define SDHCI_CLK_PLL_EN BIT(3)
329#define SDHCI_CLK_RATE_MASK 0x0000FF00
330#define SDHCI_CLK_RATE_BIT 8
331
332#define SDHCI_CMD_ACT BIT(0)
333#define SDHCI_DAT_ACT BIT(1)
334
338#define SDHCI_BUS_VOL_SEL 1
339#define SDHCI_BUS_PWR_EN BIT(0)
340#define SDHCI_VOL_1_8 5
341#define SDHCI_VOL_3_0 6
342#define SDHCI_EMMC_VOL_1_8 5
343#define SDHCI_EMMC_VOL_3_0 6
344#define SDHCI_VOL_3_3 7
345#define SDHCI_3_3_VOL_MASK 0x01000000
346#define SDHCI_3_0_VOL_MASK 0x02000000
347#define SDHCI_1_8_VOL_MASK 0x04000000
348
352#define SDHCI_8BIT_WIDTH_MASK 0x00040000
353
354#define SDHCI_BUS_WITDH_1BIT (0)
355#define SDHCI_BUS_WITDH_4BIT BIT(1)
356#define SDHCI_BUS_WITDH_8BIT BIT(5)
357
361#define SDHCI_BLK_LEN_MASK 0x00030000
362#define SDHCI_BLK_LEN_BIT 16
363#define SDHCI_BLK_ADMA_MASK 0x00080000
364#define SDHCI_INT_STS_TRANS_COMPLETE BIT(1)
365#define SDHCI_STATE_CMD_MASK BIT(0)
366#define SDHCI_STATE_DAT_MASK BIT(1)
367#define SDHCI_STATE_CMD_DAT_MASK 0x0003
368#define SDHCI_INT_STS_CMD_COMPLETE BIT(0)
369#define SDHCI_ERR_INT_STAT_MASK 0x8000
370#define SDHCI_ADMA_DESC_LINE_SZ 0x10000
371#define SDHCI_ADMA_MAX_TRANS_SZ (0xFFFFFFFFF * 512)
372#define SDHCI_ADMA_TRANS_VALID BIT(0)
373#define SDHCI_ADMA_TRANS_END BIT(1)
374#define SDHCI_ADMA_TRANS_INT BIT(2)
375#define SDHCI_ADMA_TRANS_DATA BIT(5)
376#define SDHCI_ADMA_DATA_VALID SDHCI_ADMA_TRANS_DATA | SDHCI_ADMA_TRANS_VALID
377#define SDHCI_ADMA_DATA_VALID_END SDHCI_ADMA_TRANS_DATA | SDHCI_ADMA_TRANS_VALID | SDHCI_ADMA_TRANS_END
378#define SDHCI_ADMA_NOP_END_VALID SDHCI_ADMA_TRANS_END | SDHCI_ADMA_TRANS_VALID
379#define SDHCI_MMC_BLK_SZ 512
380#define SDHCI_MMC_CUR_BLK_CNT_BIT 16
381#define SDHCI_MMC_BLK_SZ_BIT 0
382#define SDHCI_TRANS_MULTI BIT(5)
383#define SDHCI_TRANS_SINGLE (0 << 5)
384#define SDHCI_BLK_CNT_EN BIT(1)
385#define SDHCI_DMA_EN BIT(0)
386#define SDHCI_AUTO_CMD23_EN BIT(3)
387#define SDHCI_AUTO_CMD12_EN BIT(2)
388#define SDHCI_ADMA_32BIT BIT(4)
389#define SDHCI_ADMA_64BIT (BIT(3) | BIT(4))
390#define SDHCI_ADMA2_SEL BIT(4)
391#define SDHCI_ADMA23_SEL (BIT(3) | BIT(4))
392#define SDHCI_ADMA_SEL_MASK (BIT(3) | BIT(4))
393
397#define SDHCI_SPEC_VER4_NUM (0x3)
398#define SDHCI_CAP_ADDR_64BIT_V3 BIT(28)
399#define SDHCI_CAP_ADDR_64BIT_V4 BIT(27)
400#define SDHCI_ADMA_64BIT_V4 BIT(13)
401#define SDHCI_VER4_ENABLE BIT(12)
402#define SDHCI_ADMA2_26BIT_LEN_MODE BIT(10)
403#define SDHCI_ADMA2_DESC_LINE_SZ_V4 0x1000000
404#define SDHCI_ADMA2_MAX_TRANS_SZ_V4 (0xFFFFFFFF * 512)
405#define SDHCI_ADMA2_DESC_26BIT_LEN_LSB (6)
406#define SDHCI_ADMA2_DESC_16BIT_LEN_LSB (16)
407
411#define SDHCI_CMD_RESP_TYPE_SEL_BIT 0
412#define SDHCI_CMD_CRC_CHECK_BIT 3
413#define SDHCI_CMD_IDX_CHECK_BIT 4
414#define SDHCI_CMD_DATA_PRESENT_BIT 5
415#define SDHCI_CMD_CMD_TYPE_BIT 6
416#define SDHCI_CMD_CMD_IDX_BIT 8
417#define SDHCI_CMD_TIMEOUT_MASK BIT(0)
418#define SDHCI_CMD_CRC_MASK BIT(1)
419#define SDHCI_CMD_END_BIT_MASK BIT(2)
420#define SDHCI_CMD_IDX_MASK BIT(3)
421#define SDHCI_DAT_TIMEOUT_MASK BIT(4)
422#define SDHCI_DAT_CRC_MASK BIT(5)
423#define SDHCI_DAT_END_BIT_MASK BIT(6)
424#define SDHCI_CUR_LIM_MASK BIT(7)
425#define SDHCI_AUTO_CMD12_MASK BIT(8)
426#define SDHCI_CMD_SW_TIMEOUT_MASK BIT(16)
427#define SDHCI_DAT_SW_TIMEOUT_MASK BIT(17)
428
429#define SDHCI_ADMA_MASK BIT(9)
430#define SDHCI_READ_MODE BIT(4)
431#define SDHCI_SWITCH_CMD 6
432#define SDHCI_CMD_TIMEOUT 0xE
433#define SDHCI_MAX_CMD_RETRY 5000000
434#define SDHCI_MAX_TRANS_RETRY 10000000
435#define SDHCI_CMD_ERR_MASK \
436 (SDHCI_CMD_TIMEOUT_MASK | SDHCI_CMD_CRC_MASK | SDHCI_CMD_END_BIT_MASK | \
437 SDHCI_CMD_IDX_MASK | SDHCI_AUTO_CMD12_MASK)
438#define SDHCI_DATA_ERR_MASK \
439 (SDHCI_DAT_TIMEOUT_MASK | SDHCI_DAT_CRC_MASK | SDHCI_DAT_END_BIT_MASK | \
440 SDHCI_ADMA_MASK) /* end of Command related */
444
445#define SDHCI_HIGH_SPEED_EN BIT(2)
446
447#define SDHCI_SAMPLE_CLK_SEL BIT(7)
448#define SDHCI_EXEC_TUNING BIT(6)
449
450#define SDHCI_PREP_CMD(c, f) ((((c)&0xff) << 8) | ((f)&0xff))
451
455#define SDHCI_RESP_LSHIFT 8
456#define SDHCI_RESP_RSHIFT 24
457
461#define SDCC_HC_PWR_CTRL_INT 0xF
462#define SDCC_HC_BUS_ON BIT(0)
463#define SDCC_HC_BUS_OFF BIT(1)
464#define SDCC_HC_BUS_ON_OFF_SUCC BIT(0)
465#define SDCC_HC_IO_SIG_LOW BIT(2)
466#define SDCC_HC_IO_SIG_HIGH BIT(3)
467#define SDCC_HC_IO_SIG_SUCC BIT(2)
468
472#define SDHCI_CMD_RESP_NONE 0
473#define SDHCI_CMD_RESP_R1 BIT(0)
474#define SDHCI_CMD_RESP_R1B BIT(1)
475#define SDHCI_CMD_RESP_R2 BIT(2)
476#define SDHCI_CMD_RESP_R3 BIT(3)
477#define SDHCI_CMD_RESP_R6 BIT(6)
478#define SDHCI_CMD_RESP_R7 BIT(7)
479
483#define SDHCI_CLK_400KHZ 400000
484#define SDHCI_CLK_25MHZ 25000000
485#define SDHCI_CLK_50MHZ 50000000
486#define SDHCI_CLK_100MHZ 100000000
487#define SDHCI_CLK_200MHZ 200000000
488#define SDHCI_CLK_400MHZ 400000000
489
491#define SDHCI_UHS_MODE_MASK 0x0007
492
496#define SDHCI_SDR50_MODE_MASK BIT(0)
497#define SDHCI_SDR104_MODE_MASK BIT(1)
498#define SDHCI_DDR50_MODE_MASK BIT(2)
499
500#define SDHCI_UHS_SDR104_MODE 0x3
501#define SDHCI_UHS_SDR50_MODE 0x2
502#define SDHCI_UHS_DDR50_MODE 0x4
503#define SDHCI_UHS_SDR25_MODE 0x1
504#define SDHCI_UHS_SDR12_MODE 0x0
505
506#define SDHCI_EMMC_HS400_MODE 0x7
507#define SDHCI_EMMC_DDR52_MODE 0x4
508#define SDHCI_EMMC_HS200_MODE 0x3
509#define SDHCI_EMMC_HISPEED_MODE 0x1
510#define SDHCI_EMMC_LEGACY_MODE 0x0
511
515#define MMC_BUS_WIDTH_1BIT 0
516#define MMC_BUS_WIDTH_4BIT 1
517#define MMC_BUS_WIDTH_8BIT 2
518
522#define SDHCI_PSTATE_DAT_3_0_MASK 0x00f00000
523#define SDHCI_PSTATE_DAT_7_4_MASK 0x000000f0
524#define SDHCI_PSTATE_CMD_INHIBIT_DAT_MASK BIT(1)
525#define SDHCI_PSTATE_CMD_INHIBIT_MASK BIT(0)
526
527#define SDHCI_PRESENT_STATE_DAT_MASK (SDHCI_PSTATE_DAT_3_0_MASK | SDHCI_PSTATE_DAT_7_4_MASK)
528#define SDHCI_PRESENT_STATE_DAT_8BIT_MASK (SDHCI_PSTATE_DAT_3_0_MASK | SDHCI_PSTATE_DAT_7_4_MASK)
529#define SDHCI_PRESENT_STATE_DAT_4BIT_MASK (SDHCI_PSTATE_DAT_3_0_MASK)
530#define SDHCI_PRESENT_STATE_DAT_1BIT_MASK (SDHCI_PSTATE_DAT_3_0_MASK & 0x00100000)
531
535#define SDHCI_MMC_WRITE 0
536#define SDHCI_MMC_READ 1
537
541#define MMC_DATA_BUS_WIDTH_1BIT 0
542#define MMC_DATA_BUS_WIDTH_4BIT 1
543#define MMC_DATA_BUS_WIDTH_8BIT 2
544#define MMC_DATA_DDR_BUS_WIDTH_4BIT 5
545#define MMC_DATA_DDR_BUS_WIDTH_8BIT 6
546
547#ifndef DETAIL_PRINTF
548#define DETAIL_PRINTF(level, x...) \
549{ \
550 ssdk_printf(level, "[%s|%d|%s]\n",__FILE__,__LINE__,__func__); \
551 ssdk_printf(level,x); \
552}
553#endif
554 /* end of group mmc data bus width */
558
559#define FV_ADMA2_ATTR_LEN(v) \
560 ((((v)&0xffffU) << 16) | ((((v)&0x3ff0000U)) >> 10))
561
563inline static status_t sdrv_sdhci_wait_for_bit(struct sdhci_host *host, addr_t reg,
564 uint16_t mask, bool clear, uint32_t ms)
565{
566 uint32_t val;
567 uint32_t timeout;
568
569 timeout = ms * 1000;
570
571 //reserve
572 //timeout = current_time() + ms;
573
574 while (timeout --) {
575 val = REG_READ16(host, reg);
576
577 if (clear)
578 val = ~val;
579
580 val &= mask;
581
582 if (val == mask)
583 return SDRV_STATUS_OK;
584
585 //if (current_time() > timeout)
586 if (timeout == 0)
587 return SDRV_STATUS_TIMEOUT;
588
589 udelay(1);
590 }
591
592 return SDRV_STATUS_FAIL;
593}
594
600void sdrv_sdhci_init(struct sdhci_host *host);
601
613 struct mmc_command *cmd);
614
624
635status_t sdrv_sdhci_execute_tuning(struct sdhci_host *host, uint32_t opcode,
636 uint32_t bus_width);
645uint32_t sdrv_sdhci_clk_supply(struct sdhci_host *host, uint32_t type);
646
653void sdrv_sdhci_set_uhs_mode(struct sdhci_host *host, uint32_t mode);
654
660status_t sdrv_sdhci_reset(struct sdhci_host *host, uint8_t mask);
661
667
673
679
689status_t sdrv_sdhci_tuning_sequence(struct sdhci_host *host, uint32_t opcode,
690 uint32_t bus_width);
691
692#endif /* SDRV_SDHCI_H_ */
Interrupt interface hearder file.
unsigned int width
Definition: logo_rgb565.h:32912
#define udelay(us)
Definition: sdrv-cam-os-def.h:121
SemiDrive driver common header file.
int32_t status_t
Type used for all status and error return values.
Definition: sdrv_common.h:82
@ SDRV_STATUS_FAIL
Definition: sdrv_common.h:73
@ SDRV_STATUS_OK
Definition: sdrv_common.h:72
@ SDRV_STATUS_TIMEOUT
Definition: sdrv_common.h:75
status_t sdrv_sdhci_execute_tuning(struct sdhci_host *host, uint32_t opcode, uint32_t bus_width)
sdhci execute tuning
#define SDHCI_CMD_RESP_NONE
Definition: sdrv_sdhci.h:472
#define REG_READ16(host, a)
Definition: sdrv_sdhci.h:206
status_t sdrv_sdhci_tuning_sequence(struct sdhci_host *host, uint32_t opcode, uint32_t bus_width)
sdhci clk supply
sdhci_resp_type
Response type values for sdhci.
Definition: sdrv_sdhci.h:185
@ SDHCI_CMD_RESP_48_BUSY
Definition: sdrv_sdhci.h:189
@ SDHCI_CMD_RESP_136
Definition: sdrv_sdhci.h:187
@ SDHCI_CMD_RESP_48
Definition: sdrv_sdhci.h:188
uint32_t sdrv_sdhci_clk_supply(struct sdhci_host *host, uint32_t type)
sdhci clk supply
void sdrv_sdhci_start_tuning(struct sdhci_host *host)
start tuning
void sdrv_sdhci_reset_tuning(struct sdhci_host *host)
sdhci reset tuning
void sdrv_sdhci_init(struct sdhci_host *host)
initialize the controller.
sdhci_cmd_type
Command types for sdhci.
Definition: sdrv_sdhci.h:177
@ SDHCI_CMD_TYPE_SUSPEND
Definition: sdrv_sdhci.h:179
@ SDHCI_CMD_TYPE_ABORT
Definition: sdrv_sdhci.h:181
@ SDHCI_CMD_TYPE_RESUME
Definition: sdrv_sdhci.h:180
@ SDHCI_CMD_TYPE_NORMAL
Definition: sdrv_sdhci.h:178
status_t sdrv_sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
sdhci send command
status_t sdrv_sdhci_set_bus_width(struct sdhci_host *host, uint16_t width)
set the bus width for controller
void sdrv_sdhci_abort_tuning(struct sdhci_host *host)
sdhci abort tuning
void sdrv_sdhci_set_uhs_mode(struct sdhci_host *host, uint32_t mode)
sdhci clk supply
status_t sdrv_sdhci_reset(struct sdhci_host *host, uint8_t mask)
Soft reset for the controller.
#define desc_entry
Definition: sdrv_sdhci.h:38
static status_t sdrv_sdhci_wait_for_bit(struct sdhci_host *host, addr_t reg, uint16_t mask, bool clear, uint32_t ms)
sdhci wait for bit mask
Definition: sdrv_sdhci.h:563
sdhci_card_type
Card types for sdhci.
Definition: sdrv_sdhci.h:167
@ SDHCI_CARD_TYPE_ABORT
Definition: sdrv_sdhci.h:172
@ SDHCI_SD_CARD
Definition: sdrv_sdhci.h:169
@ SDHCI_SDIO_CARD
Definition: sdrv_sdhci.h:171
@ SDHCI_EMMC_CARD
Definition: sdrv_sdhci.h:168
@ SDHCI_UHS2_CARD
Definition: sdrv_sdhci.h:170
Descriptor table for adma.
Definition: sdrv_sdhci.h:152
uint32_t addr
Definition: sdrv_sdhci.h:154
uint32_t tran_att
Definition: sdrv_sdhci.h:153
Descriptor table for adma.
Definition: sdrv_sdhci.h:158
uint32_t addr_h
Definition: sdrv_sdhci.h:161
uint32_t addr_l
Definition: sdrv_sdhci.h:160
uint32_t rsvd
Definition: sdrv_sdhci.h:162
uint32_t tran_att
Definition: sdrv_sdhci.h:159
Capabilities for the host controller These values are read from the capabilities egister in the contr...
Definition: sdrv_sdhci.h:56
uint8_t addr_64bit_v4
Definition: sdrv_sdhci.h:63
uint8_t sdr50_support
Definition: sdrv_sdhci.h:67
uint8_t hw_reset_support
Definition: sdrv_sdhci.h:71
uint8_t adma2_support
Definition: sdrv_sdhci.h:61
uint8_t spec_version
Definition: sdrv_sdhci.h:60
uint8_t sdr104_support
Definition: sdrv_sdhci.h:68
uint8_t bus_width_8bit
Definition: sdrv_sdhci.h:59
uint8_t hs200_support
Definition: sdrv_sdhci.h:69
uint8_t voltage
Definition: sdrv_sdhci.h:64
uint8_t addr_64bit_v3
Definition: sdrv_sdhci.h:62
uint32_t max_blk_len
Definition: sdrv_sdhci.h:58
uint8_t sdr_support
Definition: sdrv_sdhci.h:65
uint32_t base_clk_rate
Definition: sdrv_sdhci.h:57
uint8_t hs400_support
Definition: sdrv_sdhci.h:70
uint8_t ddr_support
Definition: sdrv_sdhci.h:66
uint8_t uhs_support
Definition: sdrv_sdhci.h:72
mmc command structure as per the spec
Definition: sdrv_sdhci.h:84
uint32_t resp[4]
Definition: sdrv_sdhci.h:90
uint64_t cmd_timeout
Definition: sdrv_sdhci.h:94
uint16_t resp_type
Definition: sdrv_sdhci.h:89
uint32_t argument
Definition: sdrv_sdhci.h:86
uint8_t cmd_type
Definition: sdrv_sdhci.h:88
uint8_t data_present
Definition: sdrv_sdhci.h:87
struct mmc_data data
Definition: sdrv_sdhci.h:98
uint32_t cmd_retry
Definition: sdrv_sdhci.h:92
bool write_flag
Definition: sdrv_sdhci.h:95
uint32_t cmd23_support
Definition: sdrv_sdhci.h:93
uint32_t error
Definition: sdrv_sdhci.h:96
uint32_t trans_mode
Definition: sdrv_sdhci.h:91
uint16_t cmd_index
Definition: sdrv_sdhci.h:85
uint32_t retries
Definition: sdrv_sdhci.h:97
Data pointer to be read/written.
Definition: sdrv_sdhci.h:76
uint32_t blk_sz
Definition: sdrv_sdhci.h:79
uint32_t num_blocks
Definition: sdrv_sdhci.h:81
struct desc_entry * sg_list
Definition: sdrv_sdhci.h:78
void * data_ptr
Definition: sdrv_sdhci.h:77
sdhci host structure, holding information about host controller parameters
Definition: sdrv_sdhci.h:103
uint8_t tuning_in_progress
Definition: sdrv_sdhci.h:126
uint32_t irq
Definition: sdrv_sdhci.h:106
uint32_t card_type
Definition: sdrv_sdhci.h:124
SemaphoreHandle_t data_sema
Definition: sdrv_sdhci.h:113
void * priv_data
Definition: sdrv_sdhci.h:131
struct sdhci_ops * ops
Definition: sdrv_sdhci.h:133
void * parent
Definition: sdrv_sdhci.h:132
TimerHandle_t data_timer
Definition: sdrv_sdhci.h:116
SemaphoreHandle_t data_complete_sema
Definition: sdrv_sdhci.h:114
uint32_t data_end_trans_count
Definition: sdrv_sdhci.h:117
struct mmc_command * cmd
Definition: sdrv_sdhci.h:128
uint32_t async_mode
Definition: sdrv_sdhci.h:110
uint32_t cur_clk_rate
Definition: sdrv_sdhci.h:121
struct mmc_command data_cmd
Definition: sdrv_sdhci.h:129
uint32_t slot
Definition: sdrv_sdhci.h:104
addr_t base
Definition: sdrv_sdhci.h:105
uint8_t sw_tuning_in_progress
Definition: sdrv_sdhci.h:127
struct host_caps caps
Definition: sdrv_sdhci.h:130
SemaphoreHandle_t cmd_sema
Definition: sdrv_sdhci.h:112
uint32_t timing
Definition: sdrv_sdhci.h:123
SemaphoreHandle_t timer_sema
Definition: sdrv_sdhci.h:115
uint32_t max_clk_rate
Definition: sdrv_sdhci.h:122
uint32_t bus_width
Definition: sdrv_sdhci.h:125
sdhci platform ops, hw Specific interface controller parameters
Definition: sdrv_sdhci.h:138
void(* config_pin)(struct sdhci_host *host)
Definition: sdrv_sdhci.h:143
status_t(* set_clock)(struct sdhci_host *host, unsigned int clock)
Definition: sdrv_sdhci.h:141
status_t(* platform_execute_tuning)(struct sdhci_host *host, uint32_t opcode, uint32_t bus_width)
Definition: sdrv_sdhci.h:146
void(* set_uhs_mode)(struct sdhci_host *host, uint32_t mode)
Definition: sdrv_sdhci.h:144
void(* hw_reset)(struct sdhci_host *host)
Definition: sdrv_sdhci.h:140
void(* set_power)(struct sdhci_host *host)
Definition: sdrv_sdhci.h:142
bool(* mmc_ending_trans)(struct sdhci_host *host)
Definition: sdrv_sdhci.h:145
void(* priv_init)(struct sdhci_host *host)
Definition: sdrv_sdhci.h:139