40#define MMC_MODE_HS (1 << 0)
41#define MMC_MODE_HS_52MHz (1 << 1)
42#define MMC_MODE_4BIT (1 << 2)
43#define MMC_MODE_8BIT (1 << 3)
44#define MMC_MODE_SPI (1 << 4)
45#define MMC_MODE_HC (1 << 5)
46#define MMC_MODE_DDR_52MHz (1 << 6)
47#define MMC_MODE_HS200 (1 << 7)
48#define MMC_MODE_HS400 (1 << 8)
50#define SD_DATA_4BIT 0x00040000
52#define MMC_DATA_READ (1U << 0)
53#define MMC_DATA_WRITE (1U << 1)
55#define MMC_CMD_MANUAL 1
57#define NO_CARD_ERR -16
58#define UNUSABLE_ERR -17
62#define MMC_CMD_GO_IDLE_STATE 0
63#define MMC_CMD_SEND_OP_COND 1
64#define MMC_CMD_ALL_SEND_CID 2
65#define MMC_CMD_SET_RELATIVE_ADDR 3
66#define MMC_CMD_SET_DSR 4
67#define MMC_CMD_SWITCH 6
68#define MMC_CMD_SELECT_CARD 7
69#define MMC_CMD_SEND_EXT_CSD 8
70#define MMC_CMD_SEND_CSD 9
71#define MMC_CMD_SEND_CID 10
72#define MMC_CMD_STOP_TRANSMISSION 12
73#define MMC_CMD_SEND_STATUS 13
74#define MMC_CMD_SET_BLOCKLEN 16
75#define MMC_CMD_READ_SINGLE_BLOCK 17
76#define MMC_CMD_READ_MULTIPLE_BLOCK 18
77#define MMC_CMD_WRITE_SINGLE_BLOCK 24
78#define MMC_CMD_WRITE_MULTIPLE_BLOCK 25
79#define MMC_CMD_ERASE_GROUP_START 35
80#define MMC_CMD_ERASE_GROUP_END 36
81#define MMC_CMD_ERASE 38
82#define MMC_CMD_APP_CMD 55
83#define MMC_CMD_SPI_READ_OCR 58
84#define MMC_CMD_SPI_CRC_ON_OFF 59
86#define SD_CMD_SEND_RELATIVE_ADDR 3
87#define SD_CMD_SWITCH_FUNC 6
88#define SD_CMD_SEND_IF_COND 8
90#define SD_CMD_APP_SET_BUS_WIDTH 6
91#define SD_CMD_ERASE_WR_BLK_START 32
92#define SD_CMD_ERASE_WR_BLK_END 33
93#define SD_CMD_APP_SEND_OP_COND 41
94#define SD_CMD_APP_SEND_SCR 51
97#define SD_HIGHSPEED_BUSY 0x00020000
98#define SD_HIGHSPEED_SUPPORTED 0x00020000
100#define MMC_HS_TIMING 0x00000100
101#define MMC_HS_52MHZ 0x2
102#define MMC_DDR_52MHZ 0x4
104#define OCR_BUSY 0x80000000
105#define OCR_HCS 0x40000000
106#define OCR_VOLTAGE_MASK 0x007FFF80
107#define OCR_ACCESS_MODE 0x60000000
109#define SECURE_ERASE 0x80000000
111#define MMC_STATUS_MASK (~0x0206BF7F)
112#define MMC_STATUS_RDY_FOR_DATA (1 << 8)
113#define MMC_STATUS_CURR_STATE (0xf << 9)
114#define MMC_STATUS_ERROR (1 << 19)
116#define MMC_VDD_165_195 0x00000080
117#define MMC_VDD_20_21 0x00000100
118#define MMC_VDD_21_22 0x00000200
119#define MMC_VDD_22_23 0x00000400
120#define MMC_VDD_23_24 0x00000800
121#define MMC_VDD_24_25 0x00001000
122#define MMC_VDD_25_26 0x00002000
123#define MMC_VDD_26_27 0x00004000
124#define MMC_VDD_27_28 0x00008000
125#define MMC_VDD_28_29 0x00010000
126#define MMC_VDD_29_30 0x00020000
127#define MMC_VDD_30_31 0x00040000
128#define MMC_VDD_31_32 0x00080000
129#define MMC_VDD_32_33 0x00100000
130#define MMC_VDD_33_34 0x00200000
131#define MMC_VDD_34_35 0x00400000
132#define MMC_VDD_35_36 0x00800000
134#define MMC_SWITCH_MODE_CMD_SET 0x00
135#define MMC_SWITCH_MODE_SET_BITS 0x01
136#define MMC_SWITCH_MODE_CLEAR_BITS 0x02
137#define MMC_SWITCH_MODE_WRITE_BYTE 0x03
139#define SD_SWITCH_CHECK 0
140#define SD_SWITCH_SWITCH 1
145#define EXT_CSD_CMDQ_MODE_EN 15
146#define EXT_CSD_FLUSH_CACHE 32
147#define EXT_CSD_CACHE_CTRL 33
148#define EXT_CSD_POWER_OFF_NOTIFICATION 34
149#define EXT_CSD_PACKED_FAILURE_INDEX 35
150#define EXT_CSD_PACKED_CMD_STATUS 36
151#define EXT_CSD_EXP_EVENTS_STATUS 54
152#define EXT_CSD_EXP_EVENTS_CTRL 56
153#define EXT_CSD_DATA_SECTOR_SIZE 61
154#define EXT_CSD_GP_SIZE_MULT 143
155#define EXT_CSD_PARTITION_SETTING_COMPLETED 155
156#define EXT_CSD_PARTITION_ATTRIBUTE 156
157#define EXT_CSD_PARTITION_SUPPORT 160
158#define EXT_CSD_HPI_MGMT 161
159#define EXT_CSD_RST_N_FUNCTION 162
160#define EXT_CSD_BKOPS_EN 163
161#define EXT_CSD_BKOPS_START 164
162#define EXT_CSD_SANITIZE_START 165
163#define EXT_CSD_WR_REL_PARAM 166
164#define EXT_CSD_RPMB_MULT 168
165#define EXT_CSD_FW_CONFIG 169
166#define EXT_CSD_BOOT_WP 173
167#define EXT_CSD_ERASE_GROUP_DEF 175
168#define EXT_CSD_PART_CONFIG 179
169#define EXT_CSD_ERASED_MEM_CONT 181
170#define EXT_CSD_BUS_WIDTH 183
171#define EXT_CSD_STROBE_SUPPORT 184
172#define EXT_CSD_HS_TIMING 185
173#define EXT_CSD_POWER_CLASS 187
174#define EXT_CSD_REV 192
175#define EXT_CSD_STRUCTURE 194
176#define EXT_CSD_CARD_TYPE 196
177#define EXT_CSD_DRIVER_STRENGTH 197
178#define EXT_CSD_OUT_OF_INTERRUPT_TIME 198
179#define EXT_CSD_PART_SWITCH_TIME 199
180#define EXT_CSD_PWR_CL_52_195 200
181#define EXT_CSD_PWR_CL_26_195 201
182#define EXT_CSD_PWR_CL_52_360 202
183#define EXT_CSD_PWR_CL_26_360 203
184#define EXT_CSD_SEC_CNT 212
185#define EXT_CSD_S_A_TIMEOUT 217
186#define EXT_CSD_REL_WR_SEC_C 222
187#define EXT_CSD_HC_WP_GRP_SIZE 221
188#define EXT_CSD_ERASE_TIMEOUT_MULT 223
189#define EXT_CSD_HC_ERASE_GRP_SIZE 224
190#define EXT_CSD_BOOT_MULT 226
191#define EXT_CSD_SEC_TRIM_MULT 229
192#define EXT_CSD_SEC_ERASE_MULT 230
193#define EXT_CSD_SEC_FEATURE_SUPPORT 231
194#define EXT_CSD_TRIM_MULT 232
195#define EXT_CSD_PWR_CL_200_195 236
196#define EXT_CSD_PWR_CL_200_360 237
197#define EXT_CSD_PWR_CL_DDR_52_195 238
198#define EXT_CSD_PWR_CL_DDR_52_360 239
199#define EXT_CSD_BKOPS_STATUS 246
200#define EXT_CSD_POWER_OFF_LONG_TIME 247
201#define EXT_CSD_GENERIC_CMD6_TIME 248
202#define EXT_CSD_CACHE_SIZE 249
203#define EXT_CSD_PWR_CL_DDR_200_360 253
204#define EXT_CSD_FIRMWARE_VERSION 254
205#define EXT_CSD_PRE_EOL_INFO 267
206#define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A 268
207#define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B 269
208#define EXT_CSD_CMDQ_DEPTH 307
209#define EXT_CSD_CMDQ_SUPPORT 308
210#define EXT_CSD_SUPPORTED_MODE 493
211#define EXT_CSD_TAG_UNIT_SIZE 498
212#define EXT_CSD_DATA_TAG_SUPPORT 499
213#define EXT_CSD_MAX_PACKED_WRITES 500
214#define EXT_CSD_MAX_PACKED_READS 501
215#define EXT_CSD_BKOPS_SUPPORT 502
216#define EXT_CSD_HPI_FEATURES 503
221#define EXT_CSD_CMD_SET_NORMAL (1 << 0)
222#define EXT_CSD_CMD_SET_SECURE (1 << 1)
223#define EXT_CSD_CMD_SET_CPSECURE (1 << 2)
226#define EXT_CSD_CARD_TYPE_HS_26 (1 << 0)
227#define EXT_CSD_CARD_TYPE_HS_52 (1 << 1)
228#define EXT_CSD_CARD_TYPE_HS (EXT_CSD_CARD_TYPE_HS_26 | EXT_CSD_CARD_TYPE_HS_52)
229#define EXT_CSD_CARD_TYPE_DDR_1_8V (1 << 2)
230#define EXT_CSD_CARD_TYPE_DDR_1_2V (1 << 3)
231#define EXT_CSD_CARD_TYPE_DDR_52 (EXT_CSD_CARD_TYPE_DDR_1_8V | EXT_CSD_CARD_TYPE_DDR_1_2V)
232#define EXT_CSD_CARD_TYPE_HS200_1_8V (1 << 4)
233#define EXT_CSD_CARD_TYPE_HS200_1_2V (1 << 5)
234#define EXT_CSD_CARD_TYPE_HS200 (EXT_CSD_CARD_TYPE_HS200_1_8V | EXT_CSD_CARD_TYPE_HS200_1_2V)
235#define EXT_CSD_CARD_TYPE_HS400_1_8V (1 << 6)
236#define EXT_CSD_CARD_TYPE_HS400_1_2V (1 << 7)
237#define EXT_CSD_CARD_TYPE_HS400 (EXT_CSD_CARD_TYPE_HS400_1_8V | EXT_CSD_CARD_TYPE_HS400_1_2V)
240#define EXT_CSD_BUS_WIDTH_1 0
241#define EXT_CSD_BUS_WIDTH_4 1
242#define EXT_CSD_BUS_WIDTH_8 2
243#define EXT_CSD_BUS_DDR_4 5
244#define EXT_CSD_BUS_DDR_8 6
247#define EXT_CSD_TIMING_BC 0
248#define EXT_CSD_TIMING_HS 1
249#define EXT_CSD_TIMING_HS200 2
250#define EXT_CSD_TIMING_HS400 3
252#define R1_ILLEGAL_COMMAND (1 << 22)
253#define R1_APP_CMD (1 << 5)
255#define MMC_RSP_PRESENT (1 << 0)
256#define MMC_RSP_136 (1 << 1)
257#define MMC_RSP_CRC (1 << 2)
258#define MMC_RSP_BUSY (1 << 3)
259#define MMC_RSP_OPCODE (1 << 4)
261#define MMC_RSP_NONE (0)
262#define MMC_RSP_R1 (MMC_RSP_PRESENT | MMC_RSP_CRC | MMC_RSP_OPCODE)
263#define MMC_RSP_R1b (MMC_RSP_PRESENT | MMC_RSP_CRC | MMC_RSP_OPCODE | MMC_RSP_BUSY)
264#define MMC_RSP_R2 (MMC_RSP_PRESENT | MMC_RSP_136 | MMC_RSP_CRC)
265#define MMC_RSP_R3 (MMC_RSP_PRESENT)
266#define MMC_RSP_R4 (MMC_RSP_PRESENT)
267#define MMC_RSP_R5 (MMC_RSP_PRESENT | MMC_RSP_CRC | MMC_RSP_OPCODE)
268#define MMC_RSP_R6 (MMC_RSP_PRESENT | MMC_RSP_CRC | MMC_RSP_OPCODE)
269#define MMC_RSP_R7 (MMC_RSP_PRESENT | MMC_RSP_CRC | MMC_RSP_OPCODE)
271#define MMCPART_NOAVAILABLE (0xff)
272#define PART_ACCESS_MASK (0x7)
273#define PART_SUPPORT (0x1)
275#define be32_to_cpu(x) ((0x000000ff & ((x) >> 24)) | (0x0000ff00 & ((x) >> 8)) | (0x00ff0000 & ((x) << 8)) | (0xff000000 & ((x) << 24)))
309#define SUNXI_MMC_1X_2X_MODE_CONTROL_REG (0x03000024)
u64_t uint64_t
Definition stdint.h:16
u32_t uint32_t
Definition stdint.h:13
uint32_t response[4]
Definition sys-mmc.h:319
uint32_t flags
Definition sys-mmc.h:320
uint32_t resp_type
Definition sys-mmc.h:317
uint32_t cmdidx
Definition sys-mmc.h:316
uint32_t cmdarg
Definition sys-mmc.h:318
char * dest
Definition sys-mmc.h:325
uint32_t blocksize
Definition sys-mmc.h:330
uint32_t flags
Definition sys-mmc.h:328
const char * src
Definition sys-mmc.h:326
uint32_t blocks
Definition sys-mmc.h:329
uint32_t f_max_ddr
Definition sys-mmc.h:339
uint32_t csd[4]
Definition sys-mmc.h:346
uint32_t f_min
Definition sys-mmc.h:337
uint32_t scr[2]
Definition sys-mmc.h:345
uint32_t part_num
Definition sys-mmc.h:350
uint32_t card_caps
Definition sys-mmc.h:342
uint32_t rca
Definition sys-mmc.h:348
uint32_t part_config
Definition sys-mmc.h:349
int high_capacity
Definition sys-mmc.h:340
uint32_t host_caps
Definition sys-mmc.h:343
uint32_t erase_grp_size
Definition sys-mmc.h:354
uint32_t speed_mode
Definition sys-mmc.h:361
uint32_t clock
Definition sys-mmc.h:341
uint32_t ocr
Definition sys-mmc.h:344
uint32_t cid[4]
Definition sys-mmc.h:347
uint32_t read_bl_len
Definition sys-mmc.h:352
char revision[8+8]
Definition sys-mmc.h:360
uint32_t f_max
Definition sys-mmc.h:338
uint32_t write_bl_len
Definition sys-mmc.h:353
uint32_t voltages
Definition sys-mmc.h:334
tune_sdly_t tune_sdly
Definition sys-mmc.h:356
uint32_t bus_width
Definition sys-mmc.h:336
uint32_t version
Definition sys-mmc.h:335
uint32_t blksz
Definition sys-mmc.h:359
uint32_t tran_speed
Definition sys-mmc.h:351
uint32_t lba
Definition sys-mmc.h:358
uint32_t b_max
Definition sys-mmc.h:357
uint64_t capacity
Definition sys-mmc.h:355
uint32_t tm4_smx_fx[12]
Definition sys-mmc.h:312
@ MMC_VERSION_4_5
Definition sys-mmc.h:35
@ MMC_VERSION_2_2
Definition sys-mmc.h:28
@ SD_VERSION_2
Definition sys-mmc.h:20
@ MMC_VERSION_4_41
Definition sys-mmc.h:34
@ MMC_VERSION_4_2
Definition sys-mmc.h:32
@ MMC_VERSION_MMC
Definition sys-mmc.h:24
@ SD_VERSION_SD
Definition sys-mmc.h:18
@ MMC_VERSION_UNKNOWN
Definition sys-mmc.h:25
@ MMC_VERSION_1_2
Definition sys-mmc.h:26
@ MMC_VERSION_5_0
Definition sys-mmc.h:36
@ MMC_VERSION_4_1
Definition sys-mmc.h:31
@ SD_VERSION_1_10
Definition sys-mmc.h:22
@ MMC_VERSION_3
Definition sys-mmc.h:29
@ MMC_VERSION_1_4
Definition sys-mmc.h:27
@ SD_VERSION_3
Definition sys-mmc.h:19
@ MMC_VERSION_4_3
Definition sys-mmc.h:33
@ SD_VERSION_1_0
Definition sys-mmc.h:21
@ MMC_VERSION_5_1
Definition sys-mmc.h:37
@ MMC_VERSION_4
Definition sys-mmc.h:30
struct mmc_data mmc_data_t
sdhci_freq_point_t
Definition sys-mmc.h:286
@ MMC_CLK_200M
Definition sys-mmc.h:292
@ MMC_MAX_CLK_FREQ_NUM
Definition sys-mmc.h:293
@ MMC_CLK_25M
Definition sys-mmc.h:288
@ MMC_CLK_50M
Definition sys-mmc.h:289
@ MMC_CLK_100M
Definition sys-mmc.h:290
@ MMC_CLK_400K
Definition sys-mmc.h:287
@ MMC_CLK_150M
Definition sys-mmc.h:291
struct tune_sdly tune_sdly_t
sdhci_timing_mode
Definition sys-mmc.h:303
@ MMC_TIMING_MODE_4
Definition sys-mmc.h:306
@ MMC_TIMING_MODE_1
Definition sys-mmc.h:304
@ MMC_TIMING_MODE_3
Definition sys-mmc.h:305
uint32_t sunxi_mmc_blk_write(void *sdhci, void *dst, uint32_t start, uint32_t blkcnt)
Writes blocks of data to the MMC device using the specified SDHCI instance.
Definition sys-mmc.c:1854
uint32_t sunxi_mmc_blk_read(void *sdhci, void *dst, uint32_t start, uint32_t blkcnt)
Read blocks from the Sunxi MMC block device.
Definition sys-mmc.c:1835
sdhci_speed_mode_t
Definition sys-mmc.h:277
@ MMC_HSSDR52_SDR25
Definition sys-mmc.h:279
@ MMC_HS200_SDR104
Definition sys-mmc.h:281
@ MMC_DS26_SDR12
Definition sys-mmc.h:278
@ MMC_MAX_SPD_MD_NUM
Definition sys-mmc.h:283
@ MMC_HSDDR52_DDR50
Definition sys-mmc.h:280
@ MMC_HS400
Definition sys-mmc.h:282
int sunxi_mmc_init(void *sdhci_hdl)
Initializes the SD/MMC host controller and attached card.
Definition sys-mmc.c:1758