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