]> git.ipfire.org Git - u-boot.git/blame - drivers/mmc/mmc.c
mmc: Add a new callback function to perform the 74 clocks cycle sequence
[u-boot.git] / drivers / mmc / mmc.c
CommitLineData
272cc70b
AF
1/*
2 * Copyright 2008, Freescale Semiconductor, Inc
3 * Andy Fleming
4 *
5 * Based vaguely on the Linux code
6 *
1a459660 7 * SPDX-License-Identifier: GPL-2.0+
272cc70b
AF
8 */
9
10#include <config.h>
11#include <common.h>
12#include <command.h>
8e3332e2
SS
13#include <dm.h>
14#include <dm/device-internal.h>
d4622df3 15#include <errno.h>
272cc70b
AF
16#include <mmc.h>
17#include <part.h>
2051aefe 18#include <power/regulator.h>
272cc70b 19#include <malloc.h>
cf92e05c 20#include <memalign.h>
272cc70b 21#include <linux/list.h>
9b1f942c 22#include <div64.h>
da61fa5f 23#include "mmc_private.h"
272cc70b 24
3697e599
PF
25static const unsigned int sd_au_size[] = {
26 0, SZ_16K / 512, SZ_32K / 512,
27 SZ_64K / 512, SZ_128K / 512, SZ_256K / 512,
28 SZ_512K / 512, SZ_1M / 512, SZ_2M / 512,
29 SZ_4M / 512, SZ_8M / 512, (SZ_8M + SZ_4M) / 512,
30 SZ_16M / 512, (SZ_16M + SZ_8M) / 512, SZ_32M / 512, SZ_64M / 512,
31};
32
aff5d3c8
KVA
33static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage);
34
b5b838f1
MV
35#if CONFIG_IS_ENABLED(MMC_TINY)
36static struct mmc mmc_static;
37struct mmc *find_mmc_device(int dev_num)
38{
39 return &mmc_static;
40}
41
42void mmc_do_preinit(void)
43{
44 struct mmc *m = &mmc_static;
45#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
46 mmc_set_preinit(m, 1);
47#endif
48 if (m->preinit)
49 mmc_start_init(m);
50}
51
52struct blk_desc *mmc_get_blk_desc(struct mmc *mmc)
53{
54 return &mmc->block_dev;
55}
56#endif
57
e7881d85 58#if !CONFIG_IS_ENABLED(DM_MMC)
750121c3 59__weak int board_mmc_getwp(struct mmc *mmc)
d23d8d7e
NK
60{
61 return -1;
62}
63
64int mmc_getwp(struct mmc *mmc)
65{
66 int wp;
67
68 wp = board_mmc_getwp(mmc);
69
d4e1da4e 70 if (wp < 0) {
93bfd616
PA
71 if (mmc->cfg->ops->getwp)
72 wp = mmc->cfg->ops->getwp(mmc);
d4e1da4e
PK
73 else
74 wp = 0;
75 }
d23d8d7e
NK
76
77 return wp;
78}
79
cee9ab7c
JH
80__weak int board_mmc_getcd(struct mmc *mmc)
81{
11fdade2
SB
82 return -1;
83}
8ca51e51 84#endif
11fdade2 85
c0c76eba
SG
86#ifdef CONFIG_MMC_TRACE
87void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd)
272cc70b 88{
c0c76eba
SG
89 printf("CMD_SEND:%d\n", cmd->cmdidx);
90 printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
91}
8635ff9e 92
c0c76eba
SG
93void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret)
94{
5db2fe3a
RR
95 int i;
96 u8 *ptr;
97
7863ce58
BM
98 if (ret) {
99 printf("\t\tRET\t\t\t %d\n", ret);
100 } else {
101 switch (cmd->resp_type) {
102 case MMC_RSP_NONE:
103 printf("\t\tMMC_RSP_NONE\n");
104 break;
105 case MMC_RSP_R1:
106 printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
107 cmd->response[0]);
108 break;
109 case MMC_RSP_R1b:
110 printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
111 cmd->response[0]);
112 break;
113 case MMC_RSP_R2:
114 printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
115 cmd->response[0]);
116 printf("\t\t \t\t 0x%08X \n",
117 cmd->response[1]);
118 printf("\t\t \t\t 0x%08X \n",
119 cmd->response[2]);
120 printf("\t\t \t\t 0x%08X \n",
121 cmd->response[3]);
5db2fe3a 122 printf("\n");
7863ce58
BM
123 printf("\t\t\t\t\tDUMPING DATA\n");
124 for (i = 0; i < 4; i++) {
125 int j;
126 printf("\t\t\t\t\t%03d - ", i*4);
127 ptr = (u8 *)&cmd->response[i];
128 ptr += 3;
129 for (j = 0; j < 4; j++)
130 printf("%02X ", *ptr--);
131 printf("\n");
132 }
133 break;
134 case MMC_RSP_R3:
135 printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
136 cmd->response[0]);
137 break;
138 default:
139 printf("\t\tERROR MMC rsp not supported\n");
140 break;
53e8e40b 141 }
5db2fe3a 142 }
c0c76eba
SG
143}
144
145void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd)
146{
147 int status;
148
149 status = (cmd->response[0] & MMC_STATUS_CURR_STATE) >> 9;
150 printf("CURR STATE:%d\n", status);
151}
5db2fe3a 152#endif
c0c76eba 153
35f9e196
JJH
154#if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG)
155const char *mmc_mode_name(enum bus_mode mode)
156{
157 static const char *const names[] = {
158 [MMC_LEGACY] = "MMC legacy",
159 [SD_LEGACY] = "SD Legacy",
160 [MMC_HS] = "MMC High Speed (26MHz)",
161 [SD_HS] = "SD High Speed (50MHz)",
162 [UHS_SDR12] = "UHS SDR12 (25MHz)",
163 [UHS_SDR25] = "UHS SDR25 (50MHz)",
164 [UHS_SDR50] = "UHS SDR50 (100MHz)",
165 [UHS_SDR104] = "UHS SDR104 (208MHz)",
166 [UHS_DDR50] = "UHS DDR50 (50MHz)",
167 [MMC_HS_52] = "MMC High Speed (52MHz)",
168 [MMC_DDR_52] = "MMC DDR52 (52MHz)",
169 [MMC_HS_200] = "HS200 (200MHz)",
170 };
171
172 if (mode >= MMC_MODES_END)
173 return "Unknown mode";
174 else
175 return names[mode];
176}
177#endif
178
05038576
JJH
179static uint mmc_mode2freq(struct mmc *mmc, enum bus_mode mode)
180{
181 static const int freqs[] = {
182 [SD_LEGACY] = 25000000,
183 [MMC_HS] = 26000000,
184 [SD_HS] = 50000000,
185 [UHS_SDR12] = 25000000,
186 [UHS_SDR25] = 50000000,
187 [UHS_SDR50] = 100000000,
188 [UHS_SDR104] = 208000000,
189 [UHS_DDR50] = 50000000,
190 [MMC_HS_52] = 52000000,
191 [MMC_DDR_52] = 52000000,
192 [MMC_HS_200] = 200000000,
193 };
194
195 if (mode == MMC_LEGACY)
196 return mmc->legacy_speed;
197 else if (mode >= MMC_MODES_END)
198 return 0;
199 else
200 return freqs[mode];
201}
202
35f9e196
JJH
203static int mmc_select_mode(struct mmc *mmc, enum bus_mode mode)
204{
205 mmc->selected_mode = mode;
05038576 206 mmc->tran_speed = mmc_mode2freq(mmc, mode);
3862b854 207 mmc->ddr_mode = mmc_is_mode_ddr(mode);
35f9e196
JJH
208 debug("selecting mode %s (freq : %d MHz)\n", mmc_mode_name(mode),
209 mmc->tran_speed / 1000000);
210 return 0;
211}
212
e7881d85 213#if !CONFIG_IS_ENABLED(DM_MMC)
c0c76eba
SG
214int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
215{
216 int ret;
217
218 mmmc_trace_before_send(mmc, cmd);
219 ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
220 mmmc_trace_after_send(mmc, cmd, ret);
221
8635ff9e 222 return ret;
272cc70b 223}
8ca51e51 224#endif
272cc70b 225
da61fa5f 226int mmc_send_status(struct mmc *mmc, int timeout)
5d4fc8d9
RR
227{
228 struct mmc_cmd cmd;
d617c426 229 int err, retries = 5;
5d4fc8d9
RR
230
231 cmd.cmdidx = MMC_CMD_SEND_STATUS;
232 cmd.resp_type = MMC_RSP_R1;
aaf3d41a
MV
233 if (!mmc_host_is_spi(mmc))
234 cmd.cmdarg = mmc->rca << 16;
5d4fc8d9 235
1677eef4 236 while (1) {
5d4fc8d9 237 err = mmc_send_cmd(mmc, &cmd, NULL);
d617c426
JK
238 if (!err) {
239 if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
240 (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
241 MMC_STATE_PRG)
242 break;
d0c221fe
JJH
243
244 if (cmd.response[0] & MMC_STATUS_MASK) {
56196826 245#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
d617c426
JK
246 printf("Status Error: 0x%08X\n",
247 cmd.response[0]);
56196826 248#endif
915ffa52 249 return -ECOMM;
d617c426
JK
250 }
251 } else if (--retries < 0)
5d4fc8d9 252 return err;
5d4fc8d9 253
1677eef4
AG
254 if (timeout-- <= 0)
255 break;
5d4fc8d9 256
1677eef4
AG
257 udelay(1000);
258 }
5d4fc8d9 259
c0c76eba 260 mmc_trace_state(mmc, &cmd);
5b0c942f 261 if (timeout <= 0) {
56196826 262#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
5d4fc8d9 263 printf("Timeout waiting card ready\n");
56196826 264#endif
915ffa52 265 return -ETIMEDOUT;
5d4fc8d9
RR
266 }
267
268 return 0;
269}
270
da61fa5f 271int mmc_set_blocklen(struct mmc *mmc, int len)
272cc70b
AF
272{
273 struct mmc_cmd cmd;
274
786e8f81 275 if (mmc->ddr_mode)
d22e3d46
JC
276 return 0;
277
272cc70b
AF
278 cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
279 cmd.resp_type = MMC_RSP_R1;
280 cmd.cmdarg = len;
272cc70b
AF
281
282 return mmc_send_cmd(mmc, &cmd, NULL);
283}
284
ff8fef56 285static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
fdbb873e 286 lbaint_t blkcnt)
272cc70b
AF
287{
288 struct mmc_cmd cmd;
289 struct mmc_data data;
290
4a1a06bc
AS
291 if (blkcnt > 1)
292 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
293 else
294 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
272cc70b
AF
295
296 if (mmc->high_capacity)
4a1a06bc 297 cmd.cmdarg = start;
272cc70b 298 else
4a1a06bc 299 cmd.cmdarg = start * mmc->read_bl_len;
272cc70b
AF
300
301 cmd.resp_type = MMC_RSP_R1;
272cc70b
AF
302
303 data.dest = dst;
4a1a06bc 304 data.blocks = blkcnt;
272cc70b
AF
305 data.blocksize = mmc->read_bl_len;
306 data.flags = MMC_DATA_READ;
307
4a1a06bc
AS
308 if (mmc_send_cmd(mmc, &cmd, &data))
309 return 0;
272cc70b 310
4a1a06bc
AS
311 if (blkcnt > 1) {
312 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
313 cmd.cmdarg = 0;
314 cmd.resp_type = MMC_RSP_R1b;
4a1a06bc 315 if (mmc_send_cmd(mmc, &cmd, NULL)) {
56196826 316#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
4a1a06bc 317 printf("mmc fail to send stop cmd\n");
56196826 318#endif
4a1a06bc
AS
319 return 0;
320 }
272cc70b
AF
321 }
322
4a1a06bc 323 return blkcnt;
272cc70b
AF
324}
325
c4d660d4 326#if CONFIG_IS_ENABLED(BLK)
7dba0b93 327ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, void *dst)
33fb211d 328#else
7dba0b93
SG
329ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
330 void *dst)
33fb211d 331#endif
272cc70b 332{
c4d660d4 333#if CONFIG_IS_ENABLED(BLK)
33fb211d
SG
334 struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
335#endif
bcce53d0 336 int dev_num = block_dev->devnum;
873cc1d7 337 int err;
4a1a06bc
AS
338 lbaint_t cur, blocks_todo = blkcnt;
339
340 if (blkcnt == 0)
341 return 0;
272cc70b 342
4a1a06bc 343 struct mmc *mmc = find_mmc_device(dev_num);
272cc70b
AF
344 if (!mmc)
345 return 0;
346
b5b838f1
MV
347 if (CONFIG_IS_ENABLED(MMC_TINY))
348 err = mmc_switch_part(mmc, block_dev->hwpart);
349 else
350 err = blk_dselect_hwpart(block_dev, block_dev->hwpart);
351
873cc1d7
SW
352 if (err < 0)
353 return 0;
354
c40fdca6 355 if ((start + blkcnt) > block_dev->lba) {
56196826 356#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
ff8fef56 357 printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
c40fdca6 358 start + blkcnt, block_dev->lba);
56196826 359#endif
d2bf29e3
LW
360 return 0;
361 }
272cc70b 362
11692991
SG
363 if (mmc_set_blocklen(mmc, mmc->read_bl_len)) {
364 debug("%s: Failed to set blocklen\n", __func__);
272cc70b 365 return 0;
11692991 366 }
272cc70b 367
4a1a06bc 368 do {
93bfd616
PA
369 cur = (blocks_todo > mmc->cfg->b_max) ?
370 mmc->cfg->b_max : blocks_todo;
11692991
SG
371 if (mmc_read_blocks(mmc, dst, start, cur) != cur) {
372 debug("%s: Failed to read blocks\n", __func__);
4a1a06bc 373 return 0;
11692991 374 }
4a1a06bc
AS
375 blocks_todo -= cur;
376 start += cur;
377 dst += cur * mmc->read_bl_len;
378 } while (blocks_todo > 0);
272cc70b
AF
379
380 return blkcnt;
381}
382
fdbb873e 383static int mmc_go_idle(struct mmc *mmc)
272cc70b
AF
384{
385 struct mmc_cmd cmd;
386 int err;
387
388 udelay(1000);
389
390 cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
391 cmd.cmdarg = 0;
392 cmd.resp_type = MMC_RSP_NONE;
272cc70b
AF
393
394 err = mmc_send_cmd(mmc, &cmd, NULL);
395
396 if (err)
397 return err;
398
399 udelay(2000);
400
401 return 0;
402}
403
fdbb873e 404static int sd_send_op_cond(struct mmc *mmc)
272cc70b
AF
405{
406 int timeout = 1000;
407 int err;
408 struct mmc_cmd cmd;
409
1677eef4 410 while (1) {
272cc70b
AF
411 cmd.cmdidx = MMC_CMD_APP_CMD;
412 cmd.resp_type = MMC_RSP_R1;
413 cmd.cmdarg = 0;
272cc70b
AF
414
415 err = mmc_send_cmd(mmc, &cmd, NULL);
416
417 if (err)
418 return err;
419
420 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
421 cmd.resp_type = MMC_RSP_R3;
250de12b
SB
422
423 /*
424 * Most cards do not answer if some reserved bits
425 * in the ocr are set. However, Some controller
426 * can set bit 7 (reserved for low voltages), but
427 * how to manage low voltages SD card is not yet
428 * specified.
429 */
d52ebf10 430 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
93bfd616 431 (mmc->cfg->voltages & 0xff8000);
272cc70b
AF
432
433 if (mmc->version == SD_VERSION_2)
434 cmd.cmdarg |= OCR_HCS;
435
436 err = mmc_send_cmd(mmc, &cmd, NULL);
437
438 if (err)
439 return err;
440
1677eef4
AG
441 if (cmd.response[0] & OCR_BUSY)
442 break;
443
444 if (timeout-- <= 0)
915ffa52 445 return -EOPNOTSUPP;
272cc70b 446
1677eef4
AG
447 udelay(1000);
448 }
272cc70b
AF
449
450 if (mmc->version != SD_VERSION_2)
451 mmc->version = SD_VERSION_1_0;
452
d52ebf10
TC
453 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
454 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
455 cmd.resp_type = MMC_RSP_R3;
456 cmd.cmdarg = 0;
d52ebf10
TC
457
458 err = mmc_send_cmd(mmc, &cmd, NULL);
459
460 if (err)
461 return err;
462 }
463
998be3dd 464 mmc->ocr = cmd.response[0];
272cc70b
AF
465
466 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
467 mmc->rca = 0;
468
469 return 0;
470}
471
5289b535 472static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg)
272cc70b 473{
5289b535 474 struct mmc_cmd cmd;
272cc70b
AF
475 int err;
476
5289b535
AG
477 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
478 cmd.resp_type = MMC_RSP_R3;
479 cmd.cmdarg = 0;
5a20397b
RH
480 if (use_arg && !mmc_host_is_spi(mmc))
481 cmd.cmdarg = OCR_HCS |
93bfd616 482 (mmc->cfg->voltages &
a626c8d4
AG
483 (mmc->ocr & OCR_VOLTAGE_MASK)) |
484 (mmc->ocr & OCR_ACCESS_MODE);
e9550449 485
5289b535 486 err = mmc_send_cmd(mmc, &cmd, NULL);
e9550449
CLC
487 if (err)
488 return err;
5289b535 489 mmc->ocr = cmd.response[0];
e9550449
CLC
490 return 0;
491}
492
750121c3 493static int mmc_send_op_cond(struct mmc *mmc)
e9550449 494{
e9550449
CLC
495 int err, i;
496
272cc70b
AF
497 /* Some cards seem to need this */
498 mmc_go_idle(mmc);
499
31cacbab 500 /* Asking to the card its capabilities */
e9550449 501 for (i = 0; i < 2; i++) {
5289b535 502 err = mmc_send_op_cond_iter(mmc, i != 0);
e9550449
CLC
503 if (err)
504 return err;
cd6881b5 505
e9550449 506 /* exit if not busy (flag seems to be inverted) */
a626c8d4 507 if (mmc->ocr & OCR_BUSY)
bd47c135 508 break;
e9550449 509 }
bd47c135
AG
510 mmc->op_cond_pending = 1;
511 return 0;
e9550449 512}
cd6881b5 513
750121c3 514static int mmc_complete_op_cond(struct mmc *mmc)
e9550449
CLC
515{
516 struct mmc_cmd cmd;
517 int timeout = 1000;
518 uint start;
519 int err;
cd6881b5 520
e9550449 521 mmc->op_cond_pending = 0;
cc17c01f 522 if (!(mmc->ocr & OCR_BUSY)) {
d188b113
YL
523 /* Some cards seem to need this */
524 mmc_go_idle(mmc);
525
cc17c01f 526 start = get_timer(0);
1677eef4 527 while (1) {
cc17c01f
AG
528 err = mmc_send_op_cond_iter(mmc, 1);
529 if (err)
530 return err;
1677eef4
AG
531 if (mmc->ocr & OCR_BUSY)
532 break;
cc17c01f 533 if (get_timer(start) > timeout)
915ffa52 534 return -EOPNOTSUPP;
cc17c01f 535 udelay(100);
1677eef4 536 }
cc17c01f 537 }
272cc70b 538
d52ebf10
TC
539 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
540 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
541 cmd.resp_type = MMC_RSP_R3;
542 cmd.cmdarg = 0;
d52ebf10
TC
543
544 err = mmc_send_cmd(mmc, &cmd, NULL);
545
546 if (err)
547 return err;
a626c8d4
AG
548
549 mmc->ocr = cmd.response[0];
d52ebf10
TC
550 }
551
272cc70b 552 mmc->version = MMC_VERSION_UNKNOWN;
272cc70b
AF
553
554 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
def816a2 555 mmc->rca = 1;
272cc70b
AF
556
557 return 0;
558}
559
560
fdbb873e 561static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
272cc70b
AF
562{
563 struct mmc_cmd cmd;
564 struct mmc_data data;
565 int err;
566
567 /* Get the Card Status Register */
568 cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
569 cmd.resp_type = MMC_RSP_R1;
570 cmd.cmdarg = 0;
272cc70b 571
cdfd1ac6 572 data.dest = (char *)ext_csd;
272cc70b 573 data.blocks = 1;
8bfa195e 574 data.blocksize = MMC_MAX_BLOCK_LEN;
272cc70b
AF
575 data.flags = MMC_DATA_READ;
576
577 err = mmc_send_cmd(mmc, &cmd, &data);
578
579 return err;
580}
581
c40704f4 582int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
272cc70b
AF
583{
584 struct mmc_cmd cmd;
5d4fc8d9 585 int timeout = 1000;
a9003dc6 586 int retries = 3;
5d4fc8d9 587 int ret;
272cc70b
AF
588
589 cmd.cmdidx = MMC_CMD_SWITCH;
590 cmd.resp_type = MMC_RSP_R1b;
591 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
5d4fc8d9
RR
592 (index << 16) |
593 (value << 8);
272cc70b 594
a9003dc6
MR
595 while (retries > 0) {
596 ret = mmc_send_cmd(mmc, &cmd, NULL);
5d4fc8d9 597
a9003dc6
MR
598 /* Waiting for the ready status */
599 if (!ret) {
600 ret = mmc_send_status(mmc, timeout);
601 return ret;
602 }
603
604 retries--;
605 }
5d4fc8d9
RR
606
607 return ret;
608
272cc70b
AF
609}
610
3862b854 611static int mmc_set_card_speed(struct mmc *mmc, enum bus_mode mode)
272cc70b 612{
272cc70b 613 int err;
3862b854
JJH
614 int speed_bits;
615
616 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
617
618 switch (mode) {
619 case MMC_HS:
620 case MMC_HS_52:
621 case MMC_DDR_52:
622 speed_bits = EXT_CSD_TIMING_HS;
623 case MMC_LEGACY:
624 speed_bits = EXT_CSD_TIMING_LEGACY;
625 break;
626 default:
627 return -EINVAL;
628 }
629 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
630 speed_bits);
631 if (err)
632 return err;
633
634 if ((mode == MMC_HS) || (mode == MMC_HS_52)) {
635 /* Now check to see that it worked */
636 err = mmc_send_ext_csd(mmc, test_csd);
637 if (err)
638 return err;
639
640 /* No high-speed support */
641 if (!test_csd[EXT_CSD_HS_TIMING])
642 return -ENOTSUPP;
643 }
644
645 return 0;
646}
647
648static int mmc_get_capabilities(struct mmc *mmc)
649{
650 u8 *ext_csd = mmc->ext_csd;
651 char cardtype;
272cc70b 652
d0c221fe 653 mmc->card_caps = MMC_MODE_1BIT;
272cc70b 654
d52ebf10
TC
655 if (mmc_host_is_spi(mmc))
656 return 0;
657
272cc70b
AF
658 /* Only version 4 supports high-speed */
659 if (mmc->version < MMC_VERSION_4)
660 return 0;
661
3862b854
JJH
662 if (!ext_csd) {
663 printf("No ext_csd found!\n"); /* this should enver happen */
664 return -ENOTSUPP;
665 }
272cc70b 666
3862b854 667 mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT;
272cc70b 668
0560db18 669 cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
272cc70b 670
272cc70b 671 /* High Speed is set, there are two types: 52MHz and 26MHz */
d22e3d46 672 if (cardtype & EXT_CSD_CARD_TYPE_52) {
3862b854 673 if (cardtype & EXT_CSD_CARD_TYPE_DDR_52)
d22e3d46 674 mmc->card_caps |= MMC_MODE_DDR_52MHz;
3862b854 675 mmc->card_caps |= MMC_MODE_HS_52MHz;
d22e3d46 676 }
3862b854
JJH
677 if (cardtype & EXT_CSD_CARD_TYPE_26)
678 mmc->card_caps |= MMC_MODE_HS;
272cc70b
AF
679
680 return 0;
681}
682
f866a46d
SW
683static int mmc_set_capacity(struct mmc *mmc, int part_num)
684{
685 switch (part_num) {
686 case 0:
687 mmc->capacity = mmc->capacity_user;
688 break;
689 case 1:
690 case 2:
691 mmc->capacity = mmc->capacity_boot;
692 break;
693 case 3:
694 mmc->capacity = mmc->capacity_rpmb;
695 break;
696 case 4:
697 case 5:
698 case 6:
699 case 7:
700 mmc->capacity = mmc->capacity_gp[part_num - 4];
701 break;
702 default:
703 return -1;
704 }
705
c40fdca6 706 mmc_get_blk_desc(mmc)->lba = lldiv(mmc->capacity, mmc->read_bl_len);
f866a46d
SW
707
708 return 0;
709}
710
7dba0b93 711int mmc_switch_part(struct mmc *mmc, unsigned int part_num)
bc897b1d 712{
f866a46d 713 int ret;
bc897b1d 714
f866a46d
SW
715 ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
716 (mmc->part_config & ~PART_ACCESS_MASK)
717 | (part_num & PART_ACCESS_MASK));
f866a46d 718
6dc93e70
PB
719 /*
720 * Set the capacity if the switch succeeded or was intended
721 * to return to representing the raw device.
722 */
873cc1d7 723 if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) {
6dc93e70 724 ret = mmc_set_capacity(mmc, part_num);
fdbb139f 725 mmc_get_blk_desc(mmc)->hwpart = part_num;
873cc1d7 726 }
6dc93e70
PB
727
728 return ret;
bc897b1d
LW
729}
730
ac9da0e0
DSC
731int mmc_hwpart_config(struct mmc *mmc,
732 const struct mmc_hwpart_conf *conf,
733 enum mmc_hwpart_conf_mode mode)
734{
735 u8 part_attrs = 0;
736 u32 enh_size_mult;
737 u32 enh_start_addr;
738 u32 gp_size_mult[4];
739 u32 max_enh_size_mult;
740 u32 tot_enh_size_mult = 0;
8dda5b0e 741 u8 wr_rel_set;
ac9da0e0
DSC
742 int i, pidx, err;
743 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
744
745 if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE)
746 return -EINVAL;
747
748 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) {
749 printf("eMMC >= 4.4 required for enhanced user data area\n");
750 return -EMEDIUMTYPE;
751 }
752
753 if (!(mmc->part_support & PART_SUPPORT)) {
754 printf("Card does not support partitioning\n");
755 return -EMEDIUMTYPE;
756 }
757
758 if (!mmc->hc_wp_grp_size) {
759 printf("Card does not define HC WP group size\n");
760 return -EMEDIUMTYPE;
761 }
762
763 /* check partition alignment and total enhanced size */
764 if (conf->user.enh_size) {
765 if (conf->user.enh_size % mmc->hc_wp_grp_size ||
766 conf->user.enh_start % mmc->hc_wp_grp_size) {
767 printf("User data enhanced area not HC WP group "
768 "size aligned\n");
769 return -EINVAL;
770 }
771 part_attrs |= EXT_CSD_ENH_USR;
772 enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size;
773 if (mmc->high_capacity) {
774 enh_start_addr = conf->user.enh_start;
775 } else {
776 enh_start_addr = (conf->user.enh_start << 9);
777 }
778 } else {
779 enh_size_mult = 0;
780 enh_start_addr = 0;
781 }
782 tot_enh_size_mult += enh_size_mult;
783
784 for (pidx = 0; pidx < 4; pidx++) {
785 if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) {
786 printf("GP%i partition not HC WP group size "
787 "aligned\n", pidx+1);
788 return -EINVAL;
789 }
790 gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size;
791 if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) {
792 part_attrs |= EXT_CSD_ENH_GP(pidx);
793 tot_enh_size_mult += gp_size_mult[pidx];
794 }
795 }
796
797 if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) {
798 printf("Card does not support enhanced attribute\n");
799 return -EMEDIUMTYPE;
800 }
801
802 err = mmc_send_ext_csd(mmc, ext_csd);
803 if (err)
804 return err;
805
806 max_enh_size_mult =
807 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) +
808 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) +
809 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT];
810 if (tot_enh_size_mult > max_enh_size_mult) {
811 printf("Total enhanced size exceeds maximum (%u > %u)\n",
812 tot_enh_size_mult, max_enh_size_mult);
813 return -EMEDIUMTYPE;
814 }
815
8dda5b0e
DSC
816 /* The default value of EXT_CSD_WR_REL_SET is device
817 * dependent, the values can only be changed if the
818 * EXT_CSD_HS_CTRL_REL bit is set. The values can be
819 * changed only once and before partitioning is completed. */
820 wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
821 if (conf->user.wr_rel_change) {
822 if (conf->user.wr_rel_set)
823 wr_rel_set |= EXT_CSD_WR_DATA_REL_USR;
824 else
825 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR;
826 }
827 for (pidx = 0; pidx < 4; pidx++) {
828 if (conf->gp_part[pidx].wr_rel_change) {
829 if (conf->gp_part[pidx].wr_rel_set)
830 wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx);
831 else
832 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx);
833 }
834 }
835
836 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] &&
837 !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) {
838 puts("Card does not support host controlled partition write "
839 "reliability settings\n");
840 return -EMEDIUMTYPE;
841 }
842
ac9da0e0
DSC
843 if (ext_csd[EXT_CSD_PARTITION_SETTING] &
844 EXT_CSD_PARTITION_SETTING_COMPLETED) {
845 printf("Card already partitioned\n");
846 return -EPERM;
847 }
848
849 if (mode == MMC_HWPART_CONF_CHECK)
850 return 0;
851
852 /* Partitioning requires high-capacity size definitions */
853 if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) {
854 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
855 EXT_CSD_ERASE_GROUP_DEF, 1);
856
857 if (err)
858 return err;
859
860 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
861
862 /* update erase group size to be high-capacity */
863 mmc->erase_grp_size =
864 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
865
866 }
867
868 /* all OK, write the configuration */
869 for (i = 0; i < 4; i++) {
870 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
871 EXT_CSD_ENH_START_ADDR+i,
872 (enh_start_addr >> (i*8)) & 0xFF);
873 if (err)
874 return err;
875 }
876 for (i = 0; i < 3; i++) {
877 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
878 EXT_CSD_ENH_SIZE_MULT+i,
879 (enh_size_mult >> (i*8)) & 0xFF);
880 if (err)
881 return err;
882 }
883 for (pidx = 0; pidx < 4; pidx++) {
884 for (i = 0; i < 3; i++) {
885 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
886 EXT_CSD_GP_SIZE_MULT+pidx*3+i,
887 (gp_size_mult[pidx] >> (i*8)) & 0xFF);
888 if (err)
889 return err;
890 }
891 }
892 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
893 EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs);
894 if (err)
895 return err;
896
897 if (mode == MMC_HWPART_CONF_SET)
898 return 0;
899
8dda5b0e
DSC
900 /* The WR_REL_SET is a write-once register but shall be
901 * written before setting PART_SETTING_COMPLETED. As it is
902 * write-once we can only write it when completing the
903 * partitioning. */
904 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) {
905 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
906 EXT_CSD_WR_REL_SET, wr_rel_set);
907 if (err)
908 return err;
909 }
910
ac9da0e0
DSC
911 /* Setting PART_SETTING_COMPLETED confirms the partition
912 * configuration but it only becomes effective after power
913 * cycle, so we do not adjust the partition related settings
914 * in the mmc struct. */
915
916 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
917 EXT_CSD_PARTITION_SETTING,
918 EXT_CSD_PARTITION_SETTING_COMPLETED);
919 if (err)
920 return err;
921
922 return 0;
923}
924
e7881d85 925#if !CONFIG_IS_ENABLED(DM_MMC)
48972d90
TR
926int mmc_getcd(struct mmc *mmc)
927{
928 int cd;
929
930 cd = board_mmc_getcd(mmc);
931
d4e1da4e 932 if (cd < 0) {
93bfd616
PA
933 if (mmc->cfg->ops->getcd)
934 cd = mmc->cfg->ops->getcd(mmc);
d4e1da4e
PK
935 else
936 cd = 1;
937 }
48972d90
TR
938
939 return cd;
940}
8ca51e51 941#endif
48972d90 942
fdbb873e 943static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
272cc70b
AF
944{
945 struct mmc_cmd cmd;
946 struct mmc_data data;
947
948 /* Switch the frequency */
949 cmd.cmdidx = SD_CMD_SWITCH_FUNC;
950 cmd.resp_type = MMC_RSP_R1;
951 cmd.cmdarg = (mode << 31) | 0xffffff;
952 cmd.cmdarg &= ~(0xf << (group * 4));
953 cmd.cmdarg |= value << (group * 4);
272cc70b
AF
954
955 data.dest = (char *)resp;
956 data.blocksize = 64;
957 data.blocks = 1;
958 data.flags = MMC_DATA_READ;
959
960 return mmc_send_cmd(mmc, &cmd, &data);
961}
962
963
d0c221fe 964static int sd_get_capabilities(struct mmc *mmc)
272cc70b
AF
965{
966 int err;
967 struct mmc_cmd cmd;
18e7c8f6
SM
968 ALLOC_CACHE_ALIGN_BUFFER(__be32, scr, 2);
969 ALLOC_CACHE_ALIGN_BUFFER(__be32, switch_status, 16);
272cc70b
AF
970 struct mmc_data data;
971 int timeout;
972
d0c221fe 973 mmc->card_caps = MMC_MODE_1BIT;
272cc70b 974
d52ebf10
TC
975 if (mmc_host_is_spi(mmc))
976 return 0;
977
272cc70b
AF
978 /* Read the SCR to find out if this card supports higher speeds */
979 cmd.cmdidx = MMC_CMD_APP_CMD;
980 cmd.resp_type = MMC_RSP_R1;
981 cmd.cmdarg = mmc->rca << 16;
272cc70b
AF
982
983 err = mmc_send_cmd(mmc, &cmd, NULL);
984
985 if (err)
986 return err;
987
988 cmd.cmdidx = SD_CMD_APP_SEND_SCR;
989 cmd.resp_type = MMC_RSP_R1;
990 cmd.cmdarg = 0;
272cc70b
AF
991
992 timeout = 3;
993
994retry_scr:
f781dd38 995 data.dest = (char *)scr;
272cc70b
AF
996 data.blocksize = 8;
997 data.blocks = 1;
998 data.flags = MMC_DATA_READ;
999
1000 err = mmc_send_cmd(mmc, &cmd, &data);
1001
1002 if (err) {
1003 if (timeout--)
1004 goto retry_scr;
1005
1006 return err;
1007 }
1008
4e3d89ba
YK
1009 mmc->scr[0] = __be32_to_cpu(scr[0]);
1010 mmc->scr[1] = __be32_to_cpu(scr[1]);
272cc70b
AF
1011
1012 switch ((mmc->scr[0] >> 24) & 0xf) {
53e8e40b
BM
1013 case 0:
1014 mmc->version = SD_VERSION_1_0;
1015 break;
1016 case 1:
1017 mmc->version = SD_VERSION_1_10;
1018 break;
1019 case 2:
1020 mmc->version = SD_VERSION_2;
1021 if ((mmc->scr[0] >> 15) & 0x1)
1022 mmc->version = SD_VERSION_3;
1023 break;
1024 default:
1025 mmc->version = SD_VERSION_1_0;
1026 break;
272cc70b
AF
1027 }
1028
b44c7083
AS
1029 if (mmc->scr[0] & SD_DATA_4BIT)
1030 mmc->card_caps |= MMC_MODE_4BIT;
1031
272cc70b
AF
1032 /* Version 1.0 doesn't support switching */
1033 if (mmc->version == SD_VERSION_1_0)
1034 return 0;
1035
1036 timeout = 4;
1037 while (timeout--) {
1038 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
f781dd38 1039 (u8 *)switch_status);
272cc70b
AF
1040
1041 if (err)
1042 return err;
1043
1044 /* The high-speed function is busy. Try again */
4e3d89ba 1045 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
272cc70b
AF
1046 break;
1047 }
1048
272cc70b 1049 /* If high-speed isn't supported, we return */
d0c221fe
JJH
1050 if (__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED)
1051 mmc->card_caps |= MMC_CAP(SD_HS);
272cc70b 1052
d0c221fe
JJH
1053 return 0;
1054}
1055
1056static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode)
1057{
1058 int err;
1059
1060 ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
2c3fbf4c 1061
f781dd38 1062 err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
d0c221fe
JJH
1063 if (err)
1064 return err;
1065
1066 if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) != 0x01000000)
1067 return -ENOTSUPP;
272cc70b 1068
d0c221fe
JJH
1069 return 0;
1070}
1071
1072int sd_select_bus_width(struct mmc *mmc, int w)
1073{
1074 int err;
1075 struct mmc_cmd cmd;
1076
1077 if ((w != 4) && (w != 1))
1078 return -EINVAL;
1079
1080 cmd.cmdidx = MMC_CMD_APP_CMD;
1081 cmd.resp_type = MMC_RSP_R1;
1082 cmd.cmdarg = mmc->rca << 16;
1083
1084 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b
AF
1085 if (err)
1086 return err;
1087
d0c221fe
JJH
1088 cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1089 cmd.resp_type = MMC_RSP_R1;
1090 if (w == 4)
1091 cmd.cmdarg = 2;
1092 else if (w == 1)
1093 cmd.cmdarg = 0;
1094 err = mmc_send_cmd(mmc, &cmd, NULL);
1095 if (err)
1096 return err;
272cc70b
AF
1097
1098 return 0;
1099}
1100
3697e599
PF
1101static int sd_read_ssr(struct mmc *mmc)
1102{
1103 int err, i;
1104 struct mmc_cmd cmd;
1105 ALLOC_CACHE_ALIGN_BUFFER(uint, ssr, 16);
1106 struct mmc_data data;
1107 int timeout = 3;
1108 unsigned int au, eo, et, es;
1109
1110 cmd.cmdidx = MMC_CMD_APP_CMD;
1111 cmd.resp_type = MMC_RSP_R1;
1112 cmd.cmdarg = mmc->rca << 16;
1113
1114 err = mmc_send_cmd(mmc, &cmd, NULL);
1115 if (err)
1116 return err;
1117
1118 cmd.cmdidx = SD_CMD_APP_SD_STATUS;
1119 cmd.resp_type = MMC_RSP_R1;
1120 cmd.cmdarg = 0;
1121
1122retry_ssr:
1123 data.dest = (char *)ssr;
1124 data.blocksize = 64;
1125 data.blocks = 1;
1126 data.flags = MMC_DATA_READ;
1127
1128 err = mmc_send_cmd(mmc, &cmd, &data);
1129 if (err) {
1130 if (timeout--)
1131 goto retry_ssr;
1132
1133 return err;
1134 }
1135
1136 for (i = 0; i < 16; i++)
1137 ssr[i] = be32_to_cpu(ssr[i]);
1138
1139 au = (ssr[2] >> 12) & 0xF;
1140 if ((au <= 9) || (mmc->version == SD_VERSION_3)) {
1141 mmc->ssr.au = sd_au_size[au];
1142 es = (ssr[3] >> 24) & 0xFF;
1143 es |= (ssr[2] & 0xFF) << 8;
1144 et = (ssr[3] >> 18) & 0x3F;
1145 if (es && et) {
1146 eo = (ssr[3] >> 16) & 0x3;
1147 mmc->ssr.erase_timeout = (et * 1000) / es;
1148 mmc->ssr.erase_offset = eo * 1000;
1149 }
1150 } else {
1151 debug("Invalid Allocation Unit Size.\n");
1152 }
1153
1154 return 0;
1155}
1156
272cc70b
AF
1157/* frequency bases */
1158/* divided by 10 to be nice to platforms without floating point */
5f837c2c 1159static const int fbase[] = {
272cc70b
AF
1160 10000,
1161 100000,
1162 1000000,
1163 10000000,
1164};
1165
1166/* Multiplier values for TRAN_SPEED. Multiplied by 10 to be nice
1167 * to platforms without floating point.
1168 */
61fe076f 1169static const u8 multipliers[] = {
272cc70b
AF
1170 0, /* reserved */
1171 10,
1172 12,
1173 13,
1174 15,
1175 20,
1176 25,
1177 30,
1178 35,
1179 40,
1180 45,
1181 50,
1182 55,
1183 60,
1184 70,
1185 80,
1186};
1187
d0c221fe
JJH
1188static inline int bus_width(uint cap)
1189{
1190 if (cap == MMC_MODE_8BIT)
1191 return 8;
1192 if (cap == MMC_MODE_4BIT)
1193 return 4;
1194 if (cap == MMC_MODE_1BIT)
1195 return 1;
1196 printf("invalid bus witdh capability 0x%x\n", cap);
1197 return 0;
1198}
1199
e7881d85 1200#if !CONFIG_IS_ENABLED(DM_MMC)
318a7a57
JJH
1201static void mmc_send_init_stream(struct mmc *mmc)
1202{
1203}
1204
2a4d212f 1205static int mmc_set_ios(struct mmc *mmc)
272cc70b 1206{
2a4d212f
KVA
1207 int ret = 0;
1208
93bfd616 1209 if (mmc->cfg->ops->set_ios)
2a4d212f
KVA
1210 ret = mmc->cfg->ops->set_ios(mmc);
1211
1212 return ret;
272cc70b 1213}
8ca51e51 1214#endif
272cc70b 1215
2a4d212f 1216int mmc_set_clock(struct mmc *mmc, uint clock)
272cc70b 1217{
93bfd616
PA
1218 if (clock > mmc->cfg->f_max)
1219 clock = mmc->cfg->f_max;
272cc70b 1220
93bfd616
PA
1221 if (clock < mmc->cfg->f_min)
1222 clock = mmc->cfg->f_min;
272cc70b
AF
1223
1224 mmc->clock = clock;
1225
2a4d212f 1226 return mmc_set_ios(mmc);
272cc70b
AF
1227}
1228
2a4d212f 1229static int mmc_set_bus_width(struct mmc *mmc, uint width)
272cc70b
AF
1230{
1231 mmc->bus_width = width;
1232
2a4d212f 1233 return mmc_set_ios(mmc);
272cc70b
AF
1234}
1235
4c9d2aaa
JJH
1236#if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG)
1237/*
1238 * helper function to display the capabilities in a human
1239 * friendly manner. The capabilities include bus width and
1240 * supported modes.
1241 */
1242void mmc_dump_capabilities(const char *text, uint caps)
1243{
1244 enum bus_mode mode;
1245
1246 printf("%s: widths [", text);
1247 if (caps & MMC_MODE_8BIT)
1248 printf("8, ");
1249 if (caps & MMC_MODE_4BIT)
1250 printf("4, ");
d0c221fe
JJH
1251 if (caps & MMC_MODE_1BIT)
1252 printf("1, ");
1253 printf("\b\b] modes [");
4c9d2aaa
JJH
1254 for (mode = MMC_LEGACY; mode < MMC_MODES_END; mode++)
1255 if (MMC_CAP(mode) & caps)
1256 printf("%s, ", mmc_mode_name(mode));
1257 printf("\b\b]\n");
1258}
1259#endif
1260
d0c221fe
JJH
1261struct mode_width_tuning {
1262 enum bus_mode mode;
1263 uint widths;
1264};
1265
aff5d3c8
KVA
1266static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
1267{
1268 mmc->signal_voltage = signal_voltage;
1269 return mmc_set_ios(mmc);
1270}
1271
d0c221fe
JJH
1272static const struct mode_width_tuning sd_modes_by_pref[] = {
1273 {
1274 .mode = SD_HS,
1275 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1276 },
1277 {
1278 .mode = SD_LEGACY,
1279 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1280 }
1281};
1282
1283#define for_each_sd_mode_by_pref(caps, mwt) \
1284 for (mwt = sd_modes_by_pref;\
1285 mwt < sd_modes_by_pref + ARRAY_SIZE(sd_modes_by_pref);\
1286 mwt++) \
1287 if (caps & MMC_CAP(mwt->mode))
1288
1289static int sd_select_mode_and_width(struct mmc *mmc)
8ac8a263
JJH
1290{
1291 int err;
d0c221fe
JJH
1292 uint widths[] = {MMC_MODE_4BIT, MMC_MODE_1BIT};
1293 const struct mode_width_tuning *mwt;
8ac8a263 1294
d0c221fe 1295 err = sd_get_capabilities(mmc);
8ac8a263
JJH
1296 if (err)
1297 return err;
8ac8a263 1298 /* Restrict card's capabilities by what the host can do */
d0c221fe
JJH
1299 mmc->card_caps &= (mmc->cfg->host_caps | MMC_MODE_1BIT);
1300
1301 for_each_sd_mode_by_pref(mmc->card_caps, mwt) {
1302 uint *w;
1303
1304 for (w = widths; w < widths + ARRAY_SIZE(widths); w++) {
1305 if (*w & mmc->card_caps & mwt->widths) {
1306 debug("trying mode %s width %d (at %d MHz)\n",
1307 mmc_mode_name(mwt->mode),
1308 bus_width(*w),
1309 mmc_mode2freq(mmc, mwt->mode) / 1000000);
1310
1311 /* configure the bus width (card + host) */
1312 err = sd_select_bus_width(mmc, bus_width(*w));
1313 if (err)
1314 goto error;
1315 mmc_set_bus_width(mmc, bus_width(*w));
1316
1317 /* configure the bus mode (card) */
1318 err = sd_set_card_speed(mmc, mwt->mode);
1319 if (err)
1320 goto error;
1321
1322 /* configure the bus mode (host) */
1323 mmc_select_mode(mmc, mwt->mode);
1324 mmc_set_clock(mmc, mmc->tran_speed);
1325
1326 err = sd_read_ssr(mmc);
1327 if (!err)
1328 return 0;
1329
1330 printf("bad ssr\n");
1331
1332error:
1333 /* revert to a safer bus speed */
1334 mmc_select_mode(mmc, SD_LEGACY);
1335 mmc_set_clock(mmc, mmc->tran_speed);
1336 }
1337 }
8ac8a263
JJH
1338 }
1339
d0c221fe
JJH
1340 printf("unable to select a mode\n");
1341 return -ENOTSUPP;
8ac8a263
JJH
1342}
1343
7382e691
JJH
1344/*
1345 * read the compare the part of ext csd that is constant.
1346 * This can be used to check that the transfer is working
1347 * as expected.
1348 */
1349static int mmc_read_and_compare_ext_csd(struct mmc *mmc)
8ac8a263 1350{
7382e691 1351 int err;
dfda9d88 1352 const u8 *ext_csd = mmc->ext_csd;
7382e691
JJH
1353 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
1354
1355 err = mmc_send_ext_csd(mmc, test_csd);
1356 if (err)
1357 return err;
1358
1359 /* Only compare read only fields */
1360 if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
1361 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
1362 ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
1363 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
1364 ext_csd[EXT_CSD_REV]
1365 == test_csd[EXT_CSD_REV] &&
1366 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1367 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
1368 memcmp(&ext_csd[EXT_CSD_SEC_CNT],
1369 &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
1370 return 0;
1371
1372 return -EBADMSG;
1373}
1374
3862b854
JJH
1375static const struct mode_width_tuning mmc_modes_by_pref[] = {
1376 {
1377 .mode = MMC_HS_200,
1378 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
1379 },
1380 {
1381 .mode = MMC_DDR_52,
1382 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
1383 },
1384 {
1385 .mode = MMC_HS_52,
1386 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1387 },
1388 {
1389 .mode = MMC_HS,
1390 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1391 },
1392 {
1393 .mode = MMC_LEGACY,
1394 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1395 }
1396};
1397
1398#define for_each_mmc_mode_by_pref(caps, mwt) \
1399 for (mwt = mmc_modes_by_pref;\
1400 mwt < mmc_modes_by_pref + ARRAY_SIZE(mmc_modes_by_pref);\
1401 mwt++) \
1402 if (caps & MMC_CAP(mwt->mode))
1403
1404static const struct ext_csd_bus_width {
1405 uint cap;
1406 bool is_ddr;
1407 uint ext_csd_bits;
1408} ext_csd_bus_width[] = {
1409 {MMC_MODE_8BIT, true, EXT_CSD_DDR_BUS_WIDTH_8},
1410 {MMC_MODE_4BIT, true, EXT_CSD_DDR_BUS_WIDTH_4},
1411 {MMC_MODE_8BIT, false, EXT_CSD_BUS_WIDTH_8},
1412 {MMC_MODE_4BIT, false, EXT_CSD_BUS_WIDTH_4},
1413 {MMC_MODE_1BIT, false, EXT_CSD_BUS_WIDTH_1},
1414};
1415
1416#define for_each_supported_width(caps, ddr, ecbv) \
1417 for (ecbv = ext_csd_bus_width;\
1418 ecbv < ext_csd_bus_width + ARRAY_SIZE(ext_csd_bus_width);\
1419 ecbv++) \
1420 if ((ddr == ecbv->is_ddr) && (caps & ecbv->cap))
1421
1422static int mmc_select_mode_and_width(struct mmc *mmc)
7382e691 1423{
8ac8a263 1424 int err;
3862b854
JJH
1425 const struct mode_width_tuning *mwt;
1426 const struct ext_csd_bus_width *ecbw;
8ac8a263 1427
3862b854 1428 err = mmc_get_capabilities(mmc);
8ac8a263
JJH
1429 if (err)
1430 return err;
1431
1432 /* Restrict card's capabilities by what the host can do */
d0c221fe 1433 mmc->card_caps &= (mmc->cfg->host_caps | MMC_MODE_1BIT);
8ac8a263
JJH
1434
1435 /* Only version 4 of MMC supports wider bus widths */
1436 if (mmc->version < MMC_VERSION_4)
1437 return 0;
1438
dfda9d88
JJH
1439 if (!mmc->ext_csd) {
1440 debug("No ext_csd found!\n"); /* this should enver happen */
1441 return -ENOTSUPP;
1442 }
1443
3862b854
JJH
1444 for_each_mmc_mode_by_pref(mmc->card_caps, mwt) {
1445 for_each_supported_width(mmc->card_caps & mwt->widths,
1446 mmc_is_mode_ddr(mwt->mode), ecbw) {
1447 debug("trying mode %s width %d (at %d MHz)\n",
1448 mmc_mode_name(mwt->mode),
1449 bus_width(ecbw->cap),
1450 mmc_mode2freq(mmc, mwt->mode) / 1000000);
1451 /* configure the bus width (card + host) */
1452 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1453 EXT_CSD_BUS_WIDTH,
1454 ecbw->ext_csd_bits & ~EXT_CSD_DDR_FLAG);
1455 if (err)
1456 goto error;
1457 mmc_set_bus_width(mmc, bus_width(ecbw->cap));
8ac8a263 1458
3862b854
JJH
1459 /* configure the bus speed (card) */
1460 err = mmc_set_card_speed(mmc, mwt->mode);
1461 if (err)
1462 goto error;
1463
1464 /*
1465 * configure the bus width AND the ddr mode (card)
1466 * The host side will be taken care of in the next step
1467 */
1468 if (ecbw->ext_csd_bits & EXT_CSD_DDR_FLAG) {
1469 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1470 EXT_CSD_BUS_WIDTH,
1471 ecbw->ext_csd_bits);
1472 if (err)
1473 goto error;
1474 }
8ac8a263 1475
3862b854
JJH
1476 /* configure the bus mode (host) */
1477 mmc_select_mode(mmc, mwt->mode);
1478 mmc_set_clock(mmc, mmc->tran_speed);
8ac8a263 1479
3862b854
JJH
1480 /* do a transfer to check the configuration */
1481 err = mmc_read_and_compare_ext_csd(mmc);
1482 if (!err)
1483 return 0;
1484error:
1485 /* if an error occured, revert to a safer bus mode */
1486 mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1487 EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_1);
1488 mmc_select_mode(mmc, MMC_LEGACY);
1489 mmc_set_bus_width(mmc, 1);
1490 }
8ac8a263
JJH
1491 }
1492
3862b854 1493 printf("unable to select a mode\n");
8ac8a263 1494
3862b854 1495 return -ENOTSUPP;
8ac8a263
JJH
1496}
1497
dfda9d88 1498static int mmc_startup_v4(struct mmc *mmc)
c744b6f6
JJH
1499{
1500 int err, i;
1501 u64 capacity;
1502 bool has_parts = false;
1503 bool part_completed;
dfda9d88 1504 u8 *ext_csd;
c744b6f6
JJH
1505
1506 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4))
1507 return 0;
1508
dfda9d88
JJH
1509 ext_csd = malloc_cache_aligned(MMC_MAX_BLOCK_LEN);
1510 if (!ext_csd)
1511 return -ENOMEM;
1512
1513 mmc->ext_csd = ext_csd;
1514
c744b6f6
JJH
1515 /* check ext_csd version and capacity */
1516 err = mmc_send_ext_csd(mmc, ext_csd);
1517 if (err)
1518 return err;
1519 if (ext_csd[EXT_CSD_REV] >= 2) {
1520 /*
1521 * According to the JEDEC Standard, the value of
1522 * ext_csd's capacity is valid if the value is more
1523 * than 2GB
1524 */
1525 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1526 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1527 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1528 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1529 capacity *= MMC_MAX_BLOCK_LEN;
1530 if ((capacity >> 20) > 2 * 1024)
1531 mmc->capacity_user = capacity;
1532 }
1533
1534 switch (ext_csd[EXT_CSD_REV]) {
1535 case 1:
1536 mmc->version = MMC_VERSION_4_1;
1537 break;
1538 case 2:
1539 mmc->version = MMC_VERSION_4_2;
1540 break;
1541 case 3:
1542 mmc->version = MMC_VERSION_4_3;
1543 break;
1544 case 5:
1545 mmc->version = MMC_VERSION_4_41;
1546 break;
1547 case 6:
1548 mmc->version = MMC_VERSION_4_5;
1549 break;
1550 case 7:
1551 mmc->version = MMC_VERSION_5_0;
1552 break;
1553 case 8:
1554 mmc->version = MMC_VERSION_5_1;
1555 break;
1556 }
1557
1558 /* The partition data may be non-zero but it is only
1559 * effective if PARTITION_SETTING_COMPLETED is set in
1560 * EXT_CSD, so ignore any data if this bit is not set,
1561 * except for enabling the high-capacity group size
1562 * definition (see below).
1563 */
1564 part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
1565 EXT_CSD_PARTITION_SETTING_COMPLETED);
1566
1567 /* store the partition info of emmc */
1568 mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
1569 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1570 ext_csd[EXT_CSD_BOOT_MULT])
1571 mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
1572 if (part_completed &&
1573 (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
1574 mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
1575
1576 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1577
1578 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1579
1580 for (i = 0; i < 4; i++) {
1581 int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
1582 uint mult = (ext_csd[idx + 2] << 16) +
1583 (ext_csd[idx + 1] << 8) + ext_csd[idx];
1584 if (mult)
1585 has_parts = true;
1586 if (!part_completed)
1587 continue;
1588 mmc->capacity_gp[i] = mult;
1589 mmc->capacity_gp[i] *=
1590 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1591 mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1592 mmc->capacity_gp[i] <<= 19;
1593 }
1594
1595 if (part_completed) {
1596 mmc->enh_user_size =
1597 (ext_csd[EXT_CSD_ENH_SIZE_MULT + 2] << 16) +
1598 (ext_csd[EXT_CSD_ENH_SIZE_MULT + 1] << 8) +
1599 ext_csd[EXT_CSD_ENH_SIZE_MULT];
1600 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1601 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1602 mmc->enh_user_size <<= 19;
1603 mmc->enh_user_start =
1604 (ext_csd[EXT_CSD_ENH_START_ADDR + 3] << 24) +
1605 (ext_csd[EXT_CSD_ENH_START_ADDR + 2] << 16) +
1606 (ext_csd[EXT_CSD_ENH_START_ADDR + 1] << 8) +
1607 ext_csd[EXT_CSD_ENH_START_ADDR];
1608 if (mmc->high_capacity)
1609 mmc->enh_user_start <<= 9;
1610 }
1611
1612 /*
1613 * Host needs to enable ERASE_GRP_DEF bit if device is
1614 * partitioned. This bit will be lost every time after a reset
1615 * or power off. This will affect erase size.
1616 */
1617 if (part_completed)
1618 has_parts = true;
1619 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
1620 (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
1621 has_parts = true;
1622 if (has_parts) {
1623 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1624 EXT_CSD_ERASE_GROUP_DEF, 1);
1625
1626 if (err)
1627 return err;
1628
1629 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
1630 }
1631
1632 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
1633 /* Read out group size from ext_csd */
1634 mmc->erase_grp_size =
1635 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
1636 /*
1637 * if high capacity and partition setting completed
1638 * SEC_COUNT is valid even if it is smaller than 2 GiB
1639 * JEDEC Standard JESD84-B45, 6.2.4
1640 */
1641 if (mmc->high_capacity && part_completed) {
1642 capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
1643 (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
1644 (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
1645 (ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
1646 capacity *= MMC_MAX_BLOCK_LEN;
1647 mmc->capacity_user = capacity;
1648 }
1649 } else {
1650 /* Calculate the group size from the csd value. */
1651 int erase_gsz, erase_gmul;
1652
1653 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1654 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1655 mmc->erase_grp_size = (erase_gsz + 1)
1656 * (erase_gmul + 1);
1657 }
1658
1659 mmc->hc_wp_grp_size = 1024
1660 * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1661 * ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1662
1663 mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
1664
1665 return 0;
1666}
1667
fdbb873e 1668static int mmc_startup(struct mmc *mmc)
272cc70b 1669{
f866a46d 1670 int err, i;
272cc70b 1671 uint mult, freq;
c744b6f6 1672 u64 cmult, csize;
272cc70b 1673 struct mmc_cmd cmd;
c40fdca6 1674 struct blk_desc *bdesc;
272cc70b 1675
d52ebf10
TC
1676#ifdef CONFIG_MMC_SPI_CRC_ON
1677 if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
1678 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
1679 cmd.resp_type = MMC_RSP_R1;
1680 cmd.cmdarg = 1;
d52ebf10
TC
1681 err = mmc_send_cmd(mmc, &cmd, NULL);
1682
1683 if (err)
1684 return err;
1685 }
1686#endif
1687
272cc70b 1688 /* Put the Card in Identify Mode */
d52ebf10
TC
1689 cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
1690 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
272cc70b
AF
1691 cmd.resp_type = MMC_RSP_R2;
1692 cmd.cmdarg = 0;
272cc70b
AF
1693
1694 err = mmc_send_cmd(mmc, &cmd, NULL);
1695
1696 if (err)
1697 return err;
1698
1699 memcpy(mmc->cid, cmd.response, 16);
1700
1701 /*
1702 * For MMC cards, set the Relative Address.
1703 * For SD cards, get the Relatvie Address.
1704 * This also puts the cards into Standby State
1705 */
d52ebf10
TC
1706 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1707 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
1708 cmd.cmdarg = mmc->rca << 16;
1709 cmd.resp_type = MMC_RSP_R6;
272cc70b 1710
d52ebf10 1711 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b 1712
d52ebf10
TC
1713 if (err)
1714 return err;
272cc70b 1715
d52ebf10
TC
1716 if (IS_SD(mmc))
1717 mmc->rca = (cmd.response[0] >> 16) & 0xffff;
1718 }
272cc70b
AF
1719
1720 /* Get the Card-Specific Data */
1721 cmd.cmdidx = MMC_CMD_SEND_CSD;
1722 cmd.resp_type = MMC_RSP_R2;
1723 cmd.cmdarg = mmc->rca << 16;
272cc70b
AF
1724
1725 err = mmc_send_cmd(mmc, &cmd, NULL);
1726
1727 if (err)
1728 return err;
1729
998be3dd
RV
1730 mmc->csd[0] = cmd.response[0];
1731 mmc->csd[1] = cmd.response[1];
1732 mmc->csd[2] = cmd.response[2];
1733 mmc->csd[3] = cmd.response[3];
272cc70b
AF
1734
1735 if (mmc->version == MMC_VERSION_UNKNOWN) {
0b453ffe 1736 int version = (cmd.response[0] >> 26) & 0xf;
272cc70b
AF
1737
1738 switch (version) {
53e8e40b
BM
1739 case 0:
1740 mmc->version = MMC_VERSION_1_2;
1741 break;
1742 case 1:
1743 mmc->version = MMC_VERSION_1_4;
1744 break;
1745 case 2:
1746 mmc->version = MMC_VERSION_2_2;
1747 break;
1748 case 3:
1749 mmc->version = MMC_VERSION_3;
1750 break;
1751 case 4:
1752 mmc->version = MMC_VERSION_4;
1753 break;
1754 default:
1755 mmc->version = MMC_VERSION_1_2;
1756 break;
272cc70b
AF
1757 }
1758 }
1759
1760 /* divide frequency by 10, since the mults are 10x bigger */
0b453ffe
RV
1761 freq = fbase[(cmd.response[0] & 0x7)];
1762 mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
272cc70b 1763
35f9e196 1764 mmc->legacy_speed = freq * mult;
35f9e196 1765 mmc_select_mode(mmc, MMC_LEGACY);
272cc70b 1766
ab71188c 1767 mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
998be3dd 1768 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
272cc70b
AF
1769
1770 if (IS_SD(mmc))
1771 mmc->write_bl_len = mmc->read_bl_len;
1772 else
998be3dd 1773 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
272cc70b
AF
1774
1775 if (mmc->high_capacity) {
1776 csize = (mmc->csd[1] & 0x3f) << 16
1777 | (mmc->csd[2] & 0xffff0000) >> 16;
1778 cmult = 8;
1779 } else {
1780 csize = (mmc->csd[1] & 0x3ff) << 2
1781 | (mmc->csd[2] & 0xc0000000) >> 30;
1782 cmult = (mmc->csd[2] & 0x00038000) >> 15;
1783 }
1784
f866a46d
SW
1785 mmc->capacity_user = (csize + 1) << (cmult + 2);
1786 mmc->capacity_user *= mmc->read_bl_len;
1787 mmc->capacity_boot = 0;
1788 mmc->capacity_rpmb = 0;
1789 for (i = 0; i < 4; i++)
1790 mmc->capacity_gp[i] = 0;
272cc70b 1791
8bfa195e
SG
1792 if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
1793 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
272cc70b 1794
8bfa195e
SG
1795 if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
1796 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
272cc70b 1797
ab71188c
MN
1798 if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
1799 cmd.cmdidx = MMC_CMD_SET_DSR;
1800 cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
1801 cmd.resp_type = MMC_RSP_NONE;
1802 if (mmc_send_cmd(mmc, &cmd, NULL))
1803 printf("MMC: SET_DSR failed\n");
1804 }
1805
272cc70b 1806 /* Select the card, and put it into Transfer Mode */
d52ebf10
TC
1807 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1808 cmd.cmdidx = MMC_CMD_SELECT_CARD;
fe8f7066 1809 cmd.resp_type = MMC_RSP_R1;
d52ebf10 1810 cmd.cmdarg = mmc->rca << 16;
d52ebf10 1811 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b 1812
d52ebf10
TC
1813 if (err)
1814 return err;
1815 }
272cc70b 1816
e6f99a56
LW
1817 /*
1818 * For SD, its erase group is always one sector
1819 */
1820 mmc->erase_grp_size = 1;
bc897b1d 1821 mmc->part_config = MMCPART_NOAVAILABLE;
1937e5aa 1822
dfda9d88 1823 err = mmc_startup_v4(mmc);
c744b6f6
JJH
1824 if (err)
1825 return err;
d23e2c09 1826
c40fdca6 1827 err = mmc_set_capacity(mmc, mmc_get_blk_desc(mmc)->hwpart);
f866a46d
SW
1828 if (err)
1829 return err;
1830
272cc70b 1831 if (IS_SD(mmc))
d0c221fe 1832 err = sd_select_mode_and_width(mmc);
272cc70b 1833 else
3862b854 1834 err = mmc_select_mode_and_width(mmc);
272cc70b
AF
1835
1836 if (err)
1837 return err;
1838
ad5fd922 1839
5af8f45c
AG
1840 /* Fix the block length for DDR mode */
1841 if (mmc->ddr_mode) {
1842 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1843 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1844 }
1845
272cc70b 1846 /* fill in device description */
c40fdca6
SG
1847 bdesc = mmc_get_blk_desc(mmc);
1848 bdesc->lun = 0;
1849 bdesc->hwpart = 0;
1850 bdesc->type = 0;
1851 bdesc->blksz = mmc->read_bl_len;
1852 bdesc->log2blksz = LOG2(bdesc->blksz);
1853 bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len);
fc011f64
SS
1854#if !defined(CONFIG_SPL_BUILD) || \
1855 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
1856 !defined(CONFIG_USE_TINY_PRINTF))
c40fdca6 1857 sprintf(bdesc->vendor, "Man %06x Snr %04x%04x",
babce5f6
TH
1858 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1859 (mmc->cid[3] >> 16) & 0xffff);
c40fdca6 1860 sprintf(bdesc->product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
babce5f6
TH
1861 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1862 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1863 (mmc->cid[2] >> 24) & 0xff);
c40fdca6 1864 sprintf(bdesc->revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
babce5f6 1865 (mmc->cid[2] >> 16) & 0xf);
56196826 1866#else
c40fdca6
SG
1867 bdesc->vendor[0] = 0;
1868 bdesc->product[0] = 0;
1869 bdesc->revision[0] = 0;
56196826 1870#endif
122efd43 1871#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
c40fdca6 1872 part_init(bdesc);
122efd43 1873#endif
272cc70b
AF
1874
1875 return 0;
1876}
1877
fdbb873e 1878static int mmc_send_if_cond(struct mmc *mmc)
272cc70b
AF
1879{
1880 struct mmc_cmd cmd;
1881 int err;
1882
1883 cmd.cmdidx = SD_CMD_SEND_IF_COND;
1884 /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
93bfd616 1885 cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
272cc70b 1886 cmd.resp_type = MMC_RSP_R7;
272cc70b
AF
1887
1888 err = mmc_send_cmd(mmc, &cmd, NULL);
1889
1890 if (err)
1891 return err;
1892
998be3dd 1893 if ((cmd.response[0] & 0xff) != 0xaa)
915ffa52 1894 return -EOPNOTSUPP;
272cc70b
AF
1895 else
1896 mmc->version = SD_VERSION_2;
1897
1898 return 0;
1899}
1900
c4d660d4 1901#if !CONFIG_IS_ENABLED(DM_MMC)
95de9ab2
PK
1902/* board-specific MMC power initializations. */
1903__weak void board_mmc_power_init(void)
1904{
1905}
05cbeb7c 1906#endif
95de9ab2 1907
2051aefe
PF
1908static int mmc_power_init(struct mmc *mmc)
1909{
c4d660d4 1910#if CONFIG_IS_ENABLED(DM_MMC)
06ec045f 1911#if CONFIG_IS_ENABLED(DM_REGULATOR)
2051aefe
PF
1912 int ret;
1913
1914 ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
06ec045f
JJH
1915 &mmc->vmmc_supply);
1916 if (ret)
288db7c7 1917 debug("%s: No vmmc supply\n", mmc->dev->name);
2051aefe 1918
06ec045f
JJH
1919 ret = device_get_supply_regulator(mmc->dev, "vqmmc-supply",
1920 &mmc->vqmmc_supply);
1921 if (ret)
1922 debug("%s: No vqmmc supply\n", mmc->dev->name);
1923
1924 if (mmc->vmmc_supply) {
1925 ret = regulator_set_enable(mmc->vmmc_supply, true);
1926 if (ret) {
1927 puts("Error enabling VMMC supply\n");
1928 return ret;
1929 }
2051aefe 1930 }
05cbeb7c
SG
1931#endif
1932#else /* !CONFIG_DM_MMC */
1933 /*
1934 * Driver model should use a regulator, as above, rather than calling
1935 * out to board code.
1936 */
1937 board_mmc_power_init();
2051aefe
PF
1938#endif
1939 return 0;
1940}
1941
e9550449 1942int mmc_start_init(struct mmc *mmc)
272cc70b 1943{
8ca51e51 1944 bool no_card;
afd5932b 1945 int err;
272cc70b 1946
ab769f22 1947 /* we pretend there's no card when init is NULL */
8ca51e51 1948 no_card = mmc_getcd(mmc) == 0;
e7881d85 1949#if !CONFIG_IS_ENABLED(DM_MMC)
8ca51e51
SG
1950 no_card = no_card || (mmc->cfg->ops->init == NULL);
1951#endif
1952 if (no_card) {
48972d90 1953 mmc->has_init = 0;
56196826 1954#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
48972d90 1955 printf("MMC: no card present\n");
56196826 1956#endif
915ffa52 1957 return -ENOMEDIUM;
48972d90
TR
1958 }
1959
bc897b1d
LW
1960 if (mmc->has_init)
1961 return 0;
1962
5a8dbdc6
YL
1963#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
1964 mmc_adapter_card_type_ident();
1965#endif
2051aefe
PF
1966 err = mmc_power_init(mmc);
1967 if (err)
1968 return err;
95de9ab2 1969
e7881d85 1970#if CONFIG_IS_ENABLED(DM_MMC)
8ca51e51
SG
1971 /* The device has already been probed ready for use */
1972#else
ab769f22 1973 /* made sure it's not NULL earlier */
93bfd616 1974 err = mmc->cfg->ops->init(mmc);
272cc70b
AF
1975 if (err)
1976 return err;
8ca51e51 1977#endif
786e8f81 1978 mmc->ddr_mode = 0;
aff5d3c8
KVA
1979
1980 /* First try to set 3.3V. If it fails set to 1.8V */
1981 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_330);
1982 if (err != 0)
1983 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
1984 if (err != 0)
1985 printf("failed to set signal voltage\n");
1986
b86b85e2
IY
1987 mmc_set_bus_width(mmc, 1);
1988 mmc_set_clock(mmc, 1);
1989
318a7a57
JJH
1990 mmc_send_init_stream(mmc);
1991
272cc70b
AF
1992 /* Reset the Card */
1993 err = mmc_go_idle(mmc);
1994
1995 if (err)
1996 return err;
1997
bc897b1d 1998 /* The internal partition reset to user partition(0) at every CMD0*/
c40fdca6 1999 mmc_get_blk_desc(mmc)->hwpart = 0;
bc897b1d 2000
272cc70b 2001 /* Test for SD version 2 */
afd5932b 2002 err = mmc_send_if_cond(mmc);
272cc70b 2003
272cc70b
AF
2004 /* Now try to get the SD card's operating condition */
2005 err = sd_send_op_cond(mmc);
2006
2007 /* If the command timed out, we check for an MMC card */
915ffa52 2008 if (err == -ETIMEDOUT) {
272cc70b
AF
2009 err = mmc_send_op_cond(mmc);
2010
bd47c135 2011 if (err) {
56196826 2012#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
272cc70b 2013 printf("Card did not respond to voltage select!\n");
56196826 2014#endif
915ffa52 2015 return -EOPNOTSUPP;
272cc70b
AF
2016 }
2017 }
2018
bd47c135 2019 if (!err)
e9550449
CLC
2020 mmc->init_in_progress = 1;
2021
2022 return err;
2023}
2024
2025static int mmc_complete_init(struct mmc *mmc)
2026{
2027 int err = 0;
2028
bd47c135 2029 mmc->init_in_progress = 0;
e9550449
CLC
2030 if (mmc->op_cond_pending)
2031 err = mmc_complete_op_cond(mmc);
2032
2033 if (!err)
2034 err = mmc_startup(mmc);
bc897b1d
LW
2035 if (err)
2036 mmc->has_init = 0;
2037 else
2038 mmc->has_init = 1;
e9550449
CLC
2039 return err;
2040}
2041
2042int mmc_init(struct mmc *mmc)
2043{
bd47c135 2044 int err = 0;
ce9eca94 2045 __maybe_unused unsigned start;
c4d660d4 2046#if CONFIG_IS_ENABLED(DM_MMC)
33fb211d 2047 struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc->dev);
e9550449 2048
33fb211d
SG
2049 upriv->mmc = mmc;
2050#endif
e9550449
CLC
2051 if (mmc->has_init)
2052 return 0;
d803fea5
MZ
2053
2054 start = get_timer(0);
2055
e9550449
CLC
2056 if (!mmc->init_in_progress)
2057 err = mmc_start_init(mmc);
2058
bd47c135 2059 if (!err)
e9550449 2060 err = mmc_complete_init(mmc);
919b4858
JT
2061 if (err)
2062 printf("%s: %d, time %lu\n", __func__, err, get_timer(start));
2063
bc897b1d 2064 return err;
272cc70b
AF
2065}
2066
ab71188c
MN
2067int mmc_set_dsr(struct mmc *mmc, u16 val)
2068{
2069 mmc->dsr = val;
2070 return 0;
2071}
2072
cee9ab7c
JH
2073/* CPU-specific MMC initializations */
2074__weak int cpu_mmc_init(bd_t *bis)
272cc70b
AF
2075{
2076 return -1;
2077}
2078
cee9ab7c
JH
2079/* board-specific MMC initializations. */
2080__weak int board_mmc_init(bd_t *bis)
2081{
2082 return -1;
2083}
272cc70b 2084
e9550449
CLC
2085void mmc_set_preinit(struct mmc *mmc, int preinit)
2086{
2087 mmc->preinit = preinit;
2088}
2089
c4d660d4 2090#if CONFIG_IS_ENABLED(DM_MMC) && defined(CONFIG_SPL_BUILD)
8e3332e2
SS
2091static int mmc_probe(bd_t *bis)
2092{
2093 return 0;
2094}
c4d660d4 2095#elif CONFIG_IS_ENABLED(DM_MMC)
8e3332e2
SS
2096static int mmc_probe(bd_t *bis)
2097{
4a1db6d8 2098 int ret, i;
8e3332e2 2099 struct uclass *uc;
4a1db6d8 2100 struct udevice *dev;
8e3332e2
SS
2101
2102 ret = uclass_get(UCLASS_MMC, &uc);
2103 if (ret)
2104 return ret;
2105
4a1db6d8
SG
2106 /*
2107 * Try to add them in sequence order. Really with driver model we
2108 * should allow holes, but the current MMC list does not allow that.
2109 * So if we request 0, 1, 3 we will get 0, 1, 2.
2110 */
2111 for (i = 0; ; i++) {
2112 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
2113 if (ret == -ENODEV)
2114 break;
2115 }
2116 uclass_foreach_dev(dev, uc) {
2117 ret = device_probe(dev);
8e3332e2 2118 if (ret)
4a1db6d8 2119 printf("%s - probe failed: %d\n", dev->name, ret);
8e3332e2
SS
2120 }
2121
2122 return 0;
2123}
2124#else
2125static int mmc_probe(bd_t *bis)
2126{
2127 if (board_mmc_init(bis) < 0)
2128 cpu_mmc_init(bis);
2129
2130 return 0;
2131}
2132#endif
e9550449 2133
272cc70b
AF
2134int mmc_initialize(bd_t *bis)
2135{
1b26bab1 2136 static int initialized = 0;
8e3332e2 2137 int ret;
1b26bab1
DK
2138 if (initialized) /* Avoid initializing mmc multiple times */
2139 return 0;
2140 initialized = 1;
2141
c4d660d4 2142#if !CONFIG_IS_ENABLED(BLK)
b5b838f1 2143#if !CONFIG_IS_ENABLED(MMC_TINY)
c40fdca6 2144 mmc_list_init();
b5b838f1 2145#endif
c40fdca6 2146#endif
8e3332e2
SS
2147 ret = mmc_probe(bis);
2148 if (ret)
2149 return ret;
272cc70b 2150
bb0dc108 2151#ifndef CONFIG_SPL_BUILD
272cc70b 2152 print_mmc_devices(',');
bb0dc108 2153#endif
272cc70b 2154
c40fdca6 2155 mmc_do_preinit();
272cc70b
AF
2156 return 0;
2157}
cd3d4880
TM
2158
2159#ifdef CONFIG_CMD_BKOPS_ENABLE
2160int mmc_set_bkops_enable(struct mmc *mmc)
2161{
2162 int err;
2163 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
2164
2165 err = mmc_send_ext_csd(mmc, ext_csd);
2166 if (err) {
2167 puts("Could not get ext_csd register values\n");
2168 return err;
2169 }
2170
2171 if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
2172 puts("Background operations not supported on device\n");
2173 return -EMEDIUMTYPE;
2174 }
2175
2176 if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) {
2177 puts("Background operations already enabled\n");
2178 return 0;
2179 }
2180
2181 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1);
2182 if (err) {
2183 puts("Failed to enable manual background operations\n");
2184 return err;
2185 }
2186
2187 puts("Enabled manual background operations\n");
2188
2189 return 0;
2190}
2191#endif