]> git.ipfire.org Git - people/ms/u-boot.git/blame - drivers/mmc/mmc.c
dm: mmc: rockchip: Support only CONFIG_BLK
[people/ms/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>
18#include <malloc.h>
cf92e05c 19#include <memalign.h>
272cc70b 20#include <linux/list.h>
9b1f942c 21#include <div64.h>
da61fa5f 22#include "mmc_private.h"
272cc70b 23
750121c3 24__weak int board_mmc_getwp(struct mmc *mmc)
d23d8d7e
NK
25{
26 return -1;
27}
28
29int mmc_getwp(struct mmc *mmc)
30{
31 int wp;
32
33 wp = board_mmc_getwp(mmc);
34
d4e1da4e 35 if (wp < 0) {
93bfd616
PA
36 if (mmc->cfg->ops->getwp)
37 wp = mmc->cfg->ops->getwp(mmc);
d4e1da4e
PK
38 else
39 wp = 0;
40 }
d23d8d7e
NK
41
42 return wp;
43}
44
cee9ab7c
JH
45__weak int board_mmc_getcd(struct mmc *mmc)
46{
11fdade2
SB
47 return -1;
48}
49
da61fa5f 50int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
272cc70b 51{
5db2fe3a 52 int ret;
8635ff9e 53
8635ff9e 54#ifdef CONFIG_MMC_TRACE
5db2fe3a
RR
55 int i;
56 u8 *ptr;
57
58 printf("CMD_SEND:%d\n", cmd->cmdidx);
59 printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
93bfd616 60 ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
7863ce58
BM
61 if (ret) {
62 printf("\t\tRET\t\t\t %d\n", ret);
63 } else {
64 switch (cmd->resp_type) {
65 case MMC_RSP_NONE:
66 printf("\t\tMMC_RSP_NONE\n");
67 break;
68 case MMC_RSP_R1:
69 printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08X \n",
70 cmd->response[0]);
71 break;
72 case MMC_RSP_R1b:
73 printf("\t\tMMC_RSP_R1b\t\t 0x%08X \n",
74 cmd->response[0]);
75 break;
76 case MMC_RSP_R2:
77 printf("\t\tMMC_RSP_R2\t\t 0x%08X \n",
78 cmd->response[0]);
79 printf("\t\t \t\t 0x%08X \n",
80 cmd->response[1]);
81 printf("\t\t \t\t 0x%08X \n",
82 cmd->response[2]);
83 printf("\t\t \t\t 0x%08X \n",
84 cmd->response[3]);
5db2fe3a 85 printf("\n");
7863ce58
BM
86 printf("\t\t\t\t\tDUMPING DATA\n");
87 for (i = 0; i < 4; i++) {
88 int j;
89 printf("\t\t\t\t\t%03d - ", i*4);
90 ptr = (u8 *)&cmd->response[i];
91 ptr += 3;
92 for (j = 0; j < 4; j++)
93 printf("%02X ", *ptr--);
94 printf("\n");
95 }
96 break;
97 case MMC_RSP_R3:
98 printf("\t\tMMC_RSP_R3,4\t\t 0x%08X \n",
99 cmd->response[0]);
100 break;
101 default:
102 printf("\t\tERROR MMC rsp not supported\n");
103 break;
53e8e40b 104 }
5db2fe3a 105 }
5db2fe3a 106#else
93bfd616 107 ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
5db2fe3a 108#endif
8635ff9e 109 return ret;
272cc70b
AF
110}
111
da61fa5f 112int mmc_send_status(struct mmc *mmc, int timeout)
5d4fc8d9
RR
113{
114 struct mmc_cmd cmd;
d617c426 115 int err, retries = 5;
5d4fc8d9
RR
116#ifdef CONFIG_MMC_TRACE
117 int status;
118#endif
119
120 cmd.cmdidx = MMC_CMD_SEND_STATUS;
121 cmd.resp_type = MMC_RSP_R1;
aaf3d41a
MV
122 if (!mmc_host_is_spi(mmc))
123 cmd.cmdarg = mmc->rca << 16;
5d4fc8d9 124
1677eef4 125 while (1) {
5d4fc8d9 126 err = mmc_send_cmd(mmc, &cmd, NULL);
d617c426
JK
127 if (!err) {
128 if ((cmd.response[0] & MMC_STATUS_RDY_FOR_DATA) &&
129 (cmd.response[0] & MMC_STATUS_CURR_STATE) !=
130 MMC_STATE_PRG)
131 break;
132 else if (cmd.response[0] & MMC_STATUS_MASK) {
56196826 133#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
d617c426
JK
134 printf("Status Error: 0x%08X\n",
135 cmd.response[0]);
56196826 136#endif
d617c426
JK
137 return COMM_ERR;
138 }
139 } else if (--retries < 0)
5d4fc8d9 140 return err;
5d4fc8d9 141
1677eef4
AG
142 if (timeout-- <= 0)
143 break;
5d4fc8d9 144
1677eef4
AG
145 udelay(1000);
146 }
5d4fc8d9 147
5db2fe3a
RR
148#ifdef CONFIG_MMC_TRACE
149 status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
150 printf("CURR STATE:%d\n", status);
151#endif
5b0c942f 152 if (timeout <= 0) {
56196826 153#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
5d4fc8d9 154 printf("Timeout waiting card ready\n");
56196826 155#endif
5d4fc8d9
RR
156 return TIMEOUT;
157 }
158
159 return 0;
160}
161
da61fa5f 162int mmc_set_blocklen(struct mmc *mmc, int len)
272cc70b
AF
163{
164 struct mmc_cmd cmd;
165
786e8f81 166 if (mmc->ddr_mode)
d22e3d46
JC
167 return 0;
168
272cc70b
AF
169 cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
170 cmd.resp_type = MMC_RSP_R1;
171 cmd.cmdarg = len;
272cc70b
AF
172
173 return mmc_send_cmd(mmc, &cmd, NULL);
174}
175
ff8fef56 176static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
fdbb873e 177 lbaint_t blkcnt)
272cc70b
AF
178{
179 struct mmc_cmd cmd;
180 struct mmc_data data;
181
4a1a06bc
AS
182 if (blkcnt > 1)
183 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
184 else
185 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
272cc70b
AF
186
187 if (mmc->high_capacity)
4a1a06bc 188 cmd.cmdarg = start;
272cc70b 189 else
4a1a06bc 190 cmd.cmdarg = start * mmc->read_bl_len;
272cc70b
AF
191
192 cmd.resp_type = MMC_RSP_R1;
272cc70b
AF
193
194 data.dest = dst;
4a1a06bc 195 data.blocks = blkcnt;
272cc70b
AF
196 data.blocksize = mmc->read_bl_len;
197 data.flags = MMC_DATA_READ;
198
4a1a06bc
AS
199 if (mmc_send_cmd(mmc, &cmd, &data))
200 return 0;
272cc70b 201
4a1a06bc
AS
202 if (blkcnt > 1) {
203 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
204 cmd.cmdarg = 0;
205 cmd.resp_type = MMC_RSP_R1b;
4a1a06bc 206 if (mmc_send_cmd(mmc, &cmd, NULL)) {
56196826 207#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
4a1a06bc 208 printf("mmc fail to send stop cmd\n");
56196826 209#endif
4a1a06bc
AS
210 return 0;
211 }
272cc70b
AF
212 }
213
4a1a06bc 214 return blkcnt;
272cc70b
AF
215}
216
33fb211d 217#ifdef CONFIG_BLK
7dba0b93 218ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, void *dst)
33fb211d 219#else
7dba0b93
SG
220ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
221 void *dst)
33fb211d 222#endif
272cc70b 223{
33fb211d
SG
224#ifdef CONFIG_BLK
225 struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
226#endif
bcce53d0 227 int dev_num = block_dev->devnum;
873cc1d7 228 int err;
4a1a06bc
AS
229 lbaint_t cur, blocks_todo = blkcnt;
230
231 if (blkcnt == 0)
232 return 0;
272cc70b 233
4a1a06bc 234 struct mmc *mmc = find_mmc_device(dev_num);
272cc70b
AF
235 if (!mmc)
236 return 0;
237
69f45cd5 238 err = blk_dselect_hwpart(block_dev, block_dev->hwpart);
873cc1d7
SW
239 if (err < 0)
240 return 0;
241
c40fdca6 242 if ((start + blkcnt) > block_dev->lba) {
56196826 243#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
ff8fef56 244 printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
c40fdca6 245 start + blkcnt, block_dev->lba);
56196826 246#endif
d2bf29e3
LW
247 return 0;
248 }
272cc70b 249
11692991
SG
250 if (mmc_set_blocklen(mmc, mmc->read_bl_len)) {
251 debug("%s: Failed to set blocklen\n", __func__);
272cc70b 252 return 0;
11692991 253 }
272cc70b 254
4a1a06bc 255 do {
93bfd616
PA
256 cur = (blocks_todo > mmc->cfg->b_max) ?
257 mmc->cfg->b_max : blocks_todo;
11692991
SG
258 if (mmc_read_blocks(mmc, dst, start, cur) != cur) {
259 debug("%s: Failed to read blocks\n", __func__);
4a1a06bc 260 return 0;
11692991 261 }
4a1a06bc
AS
262 blocks_todo -= cur;
263 start += cur;
264 dst += cur * mmc->read_bl_len;
265 } while (blocks_todo > 0);
272cc70b
AF
266
267 return blkcnt;
268}
269
fdbb873e 270static int mmc_go_idle(struct mmc *mmc)
272cc70b
AF
271{
272 struct mmc_cmd cmd;
273 int err;
274
275 udelay(1000);
276
277 cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
278 cmd.cmdarg = 0;
279 cmd.resp_type = MMC_RSP_NONE;
272cc70b
AF
280
281 err = mmc_send_cmd(mmc, &cmd, NULL);
282
283 if (err)
284 return err;
285
286 udelay(2000);
287
288 return 0;
289}
290
fdbb873e 291static int sd_send_op_cond(struct mmc *mmc)
272cc70b
AF
292{
293 int timeout = 1000;
294 int err;
295 struct mmc_cmd cmd;
296
1677eef4 297 while (1) {
272cc70b
AF
298 cmd.cmdidx = MMC_CMD_APP_CMD;
299 cmd.resp_type = MMC_RSP_R1;
300 cmd.cmdarg = 0;
272cc70b
AF
301
302 err = mmc_send_cmd(mmc, &cmd, NULL);
303
304 if (err)
305 return err;
306
307 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
308 cmd.resp_type = MMC_RSP_R3;
250de12b
SB
309
310 /*
311 * Most cards do not answer if some reserved bits
312 * in the ocr are set. However, Some controller
313 * can set bit 7 (reserved for low voltages), but
314 * how to manage low voltages SD card is not yet
315 * specified.
316 */
d52ebf10 317 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
93bfd616 318 (mmc->cfg->voltages & 0xff8000);
272cc70b
AF
319
320 if (mmc->version == SD_VERSION_2)
321 cmd.cmdarg |= OCR_HCS;
322
323 err = mmc_send_cmd(mmc, &cmd, NULL);
324
325 if (err)
326 return err;
327
1677eef4
AG
328 if (cmd.response[0] & OCR_BUSY)
329 break;
330
331 if (timeout-- <= 0)
332 return UNUSABLE_ERR;
272cc70b 333
1677eef4
AG
334 udelay(1000);
335 }
272cc70b
AF
336
337 if (mmc->version != SD_VERSION_2)
338 mmc->version = SD_VERSION_1_0;
339
d52ebf10
TC
340 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
341 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
342 cmd.resp_type = MMC_RSP_R3;
343 cmd.cmdarg = 0;
d52ebf10
TC
344
345 err = mmc_send_cmd(mmc, &cmd, NULL);
346
347 if (err)
348 return err;
349 }
350
998be3dd 351 mmc->ocr = cmd.response[0];
272cc70b
AF
352
353 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
354 mmc->rca = 0;
355
356 return 0;
357}
358
5289b535 359static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg)
272cc70b 360{
5289b535 361 struct mmc_cmd cmd;
272cc70b
AF
362 int err;
363
5289b535
AG
364 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
365 cmd.resp_type = MMC_RSP_R3;
366 cmd.cmdarg = 0;
5a20397b
RH
367 if (use_arg && !mmc_host_is_spi(mmc))
368 cmd.cmdarg = OCR_HCS |
93bfd616 369 (mmc->cfg->voltages &
a626c8d4
AG
370 (mmc->ocr & OCR_VOLTAGE_MASK)) |
371 (mmc->ocr & OCR_ACCESS_MODE);
e9550449 372
5289b535 373 err = mmc_send_cmd(mmc, &cmd, NULL);
e9550449
CLC
374 if (err)
375 return err;
5289b535 376 mmc->ocr = cmd.response[0];
e9550449
CLC
377 return 0;
378}
379
750121c3 380static int mmc_send_op_cond(struct mmc *mmc)
e9550449 381{
e9550449
CLC
382 int err, i;
383
272cc70b
AF
384 /* Some cards seem to need this */
385 mmc_go_idle(mmc);
386
31cacbab 387 /* Asking to the card its capabilities */
e9550449 388 for (i = 0; i < 2; i++) {
5289b535 389 err = mmc_send_op_cond_iter(mmc, i != 0);
e9550449
CLC
390 if (err)
391 return err;
cd6881b5 392
e9550449 393 /* exit if not busy (flag seems to be inverted) */
a626c8d4 394 if (mmc->ocr & OCR_BUSY)
bd47c135 395 break;
e9550449 396 }
bd47c135
AG
397 mmc->op_cond_pending = 1;
398 return 0;
e9550449 399}
cd6881b5 400
750121c3 401static int mmc_complete_op_cond(struct mmc *mmc)
e9550449
CLC
402{
403 struct mmc_cmd cmd;
404 int timeout = 1000;
405 uint start;
406 int err;
cd6881b5 407
e9550449 408 mmc->op_cond_pending = 0;
cc17c01f
AG
409 if (!(mmc->ocr & OCR_BUSY)) {
410 start = get_timer(0);
1677eef4 411 while (1) {
cc17c01f
AG
412 err = mmc_send_op_cond_iter(mmc, 1);
413 if (err)
414 return err;
1677eef4
AG
415 if (mmc->ocr & OCR_BUSY)
416 break;
cc17c01f
AG
417 if (get_timer(start) > timeout)
418 return UNUSABLE_ERR;
419 udelay(100);
1677eef4 420 }
cc17c01f 421 }
272cc70b 422
d52ebf10
TC
423 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
424 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
425 cmd.resp_type = MMC_RSP_R3;
426 cmd.cmdarg = 0;
d52ebf10
TC
427
428 err = mmc_send_cmd(mmc, &cmd, NULL);
429
430 if (err)
431 return err;
a626c8d4
AG
432
433 mmc->ocr = cmd.response[0];
d52ebf10
TC
434 }
435
272cc70b 436 mmc->version = MMC_VERSION_UNKNOWN;
272cc70b
AF
437
438 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
def816a2 439 mmc->rca = 1;
272cc70b
AF
440
441 return 0;
442}
443
444
fdbb873e 445static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
272cc70b
AF
446{
447 struct mmc_cmd cmd;
448 struct mmc_data data;
449 int err;
450
451 /* Get the Card Status Register */
452 cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
453 cmd.resp_type = MMC_RSP_R1;
454 cmd.cmdarg = 0;
272cc70b 455
cdfd1ac6 456 data.dest = (char *)ext_csd;
272cc70b 457 data.blocks = 1;
8bfa195e 458 data.blocksize = MMC_MAX_BLOCK_LEN;
272cc70b
AF
459 data.flags = MMC_DATA_READ;
460
461 err = mmc_send_cmd(mmc, &cmd, &data);
462
463 return err;
464}
465
c40704f4 466int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
272cc70b
AF
467{
468 struct mmc_cmd cmd;
5d4fc8d9
RR
469 int timeout = 1000;
470 int ret;
272cc70b
AF
471
472 cmd.cmdidx = MMC_CMD_SWITCH;
473 cmd.resp_type = MMC_RSP_R1b;
474 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
5d4fc8d9
RR
475 (index << 16) |
476 (value << 8);
272cc70b 477
5d4fc8d9
RR
478 ret = mmc_send_cmd(mmc, &cmd, NULL);
479
480 /* Waiting for the ready status */
93ad0d18
JK
481 if (!ret)
482 ret = mmc_send_status(mmc, timeout);
5d4fc8d9
RR
483
484 return ret;
485
272cc70b
AF
486}
487
fdbb873e 488static int mmc_change_freq(struct mmc *mmc)
272cc70b 489{
8bfa195e 490 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
272cc70b
AF
491 char cardtype;
492 int err;
493
fc5b32fb 494 mmc->card_caps = 0;
272cc70b 495
d52ebf10
TC
496 if (mmc_host_is_spi(mmc))
497 return 0;
498
272cc70b
AF
499 /* Only version 4 supports high-speed */
500 if (mmc->version < MMC_VERSION_4)
501 return 0;
502
fc5b32fb
AG
503 mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT;
504
272cc70b
AF
505 err = mmc_send_ext_csd(mmc, ext_csd);
506
507 if (err)
508 return err;
509
0560db18 510 cardtype = ext_csd[EXT_CSD_CARD_TYPE] & 0xf;
272cc70b
AF
511
512 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
513
514 if (err)
a5e27b41 515 return err;
272cc70b
AF
516
517 /* Now check to see that it worked */
518 err = mmc_send_ext_csd(mmc, ext_csd);
519
520 if (err)
521 return err;
522
523 /* No high-speed support */
0560db18 524 if (!ext_csd[EXT_CSD_HS_TIMING])
272cc70b
AF
525 return 0;
526
527 /* High Speed is set, there are two types: 52MHz and 26MHz */
d22e3d46 528 if (cardtype & EXT_CSD_CARD_TYPE_52) {
201d5ac4 529 if (cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V)
d22e3d46 530 mmc->card_caps |= MMC_MODE_DDR_52MHz;
272cc70b 531 mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
d22e3d46 532 } else {
272cc70b 533 mmc->card_caps |= MMC_MODE_HS;
d22e3d46 534 }
272cc70b
AF
535
536 return 0;
537}
538
f866a46d
SW
539static int mmc_set_capacity(struct mmc *mmc, int part_num)
540{
541 switch (part_num) {
542 case 0:
543 mmc->capacity = mmc->capacity_user;
544 break;
545 case 1:
546 case 2:
547 mmc->capacity = mmc->capacity_boot;
548 break;
549 case 3:
550 mmc->capacity = mmc->capacity_rpmb;
551 break;
552 case 4:
553 case 5:
554 case 6:
555 case 7:
556 mmc->capacity = mmc->capacity_gp[part_num - 4];
557 break;
558 default:
559 return -1;
560 }
561
c40fdca6 562 mmc_get_blk_desc(mmc)->lba = lldiv(mmc->capacity, mmc->read_bl_len);
f866a46d
SW
563
564 return 0;
565}
566
7dba0b93 567int mmc_switch_part(struct mmc *mmc, unsigned int part_num)
bc897b1d 568{
f866a46d 569 int ret;
bc897b1d 570
f866a46d
SW
571 ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
572 (mmc->part_config & ~PART_ACCESS_MASK)
573 | (part_num & PART_ACCESS_MASK));
f866a46d 574
6dc93e70
PB
575 /*
576 * Set the capacity if the switch succeeded or was intended
577 * to return to representing the raw device.
578 */
873cc1d7 579 if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) {
6dc93e70 580 ret = mmc_set_capacity(mmc, part_num);
fdbb139f 581 mmc_get_blk_desc(mmc)->hwpart = part_num;
873cc1d7 582 }
6dc93e70
PB
583
584 return ret;
bc897b1d
LW
585}
586
ac9da0e0
DSC
587int mmc_hwpart_config(struct mmc *mmc,
588 const struct mmc_hwpart_conf *conf,
589 enum mmc_hwpart_conf_mode mode)
590{
591 u8 part_attrs = 0;
592 u32 enh_size_mult;
593 u32 enh_start_addr;
594 u32 gp_size_mult[4];
595 u32 max_enh_size_mult;
596 u32 tot_enh_size_mult = 0;
8dda5b0e 597 u8 wr_rel_set;
ac9da0e0
DSC
598 int i, pidx, err;
599 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
600
601 if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE)
602 return -EINVAL;
603
604 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) {
605 printf("eMMC >= 4.4 required for enhanced user data area\n");
606 return -EMEDIUMTYPE;
607 }
608
609 if (!(mmc->part_support & PART_SUPPORT)) {
610 printf("Card does not support partitioning\n");
611 return -EMEDIUMTYPE;
612 }
613
614 if (!mmc->hc_wp_grp_size) {
615 printf("Card does not define HC WP group size\n");
616 return -EMEDIUMTYPE;
617 }
618
619 /* check partition alignment and total enhanced size */
620 if (conf->user.enh_size) {
621 if (conf->user.enh_size % mmc->hc_wp_grp_size ||
622 conf->user.enh_start % mmc->hc_wp_grp_size) {
623 printf("User data enhanced area not HC WP group "
624 "size aligned\n");
625 return -EINVAL;
626 }
627 part_attrs |= EXT_CSD_ENH_USR;
628 enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size;
629 if (mmc->high_capacity) {
630 enh_start_addr = conf->user.enh_start;
631 } else {
632 enh_start_addr = (conf->user.enh_start << 9);
633 }
634 } else {
635 enh_size_mult = 0;
636 enh_start_addr = 0;
637 }
638 tot_enh_size_mult += enh_size_mult;
639
640 for (pidx = 0; pidx < 4; pidx++) {
641 if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) {
642 printf("GP%i partition not HC WP group size "
643 "aligned\n", pidx+1);
644 return -EINVAL;
645 }
646 gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size;
647 if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) {
648 part_attrs |= EXT_CSD_ENH_GP(pidx);
649 tot_enh_size_mult += gp_size_mult[pidx];
650 }
651 }
652
653 if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) {
654 printf("Card does not support enhanced attribute\n");
655 return -EMEDIUMTYPE;
656 }
657
658 err = mmc_send_ext_csd(mmc, ext_csd);
659 if (err)
660 return err;
661
662 max_enh_size_mult =
663 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) +
664 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) +
665 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT];
666 if (tot_enh_size_mult > max_enh_size_mult) {
667 printf("Total enhanced size exceeds maximum (%u > %u)\n",
668 tot_enh_size_mult, max_enh_size_mult);
669 return -EMEDIUMTYPE;
670 }
671
8dda5b0e
DSC
672 /* The default value of EXT_CSD_WR_REL_SET is device
673 * dependent, the values can only be changed if the
674 * EXT_CSD_HS_CTRL_REL bit is set. The values can be
675 * changed only once and before partitioning is completed. */
676 wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
677 if (conf->user.wr_rel_change) {
678 if (conf->user.wr_rel_set)
679 wr_rel_set |= EXT_CSD_WR_DATA_REL_USR;
680 else
681 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR;
682 }
683 for (pidx = 0; pidx < 4; pidx++) {
684 if (conf->gp_part[pidx].wr_rel_change) {
685 if (conf->gp_part[pidx].wr_rel_set)
686 wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx);
687 else
688 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx);
689 }
690 }
691
692 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] &&
693 !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) {
694 puts("Card does not support host controlled partition write "
695 "reliability settings\n");
696 return -EMEDIUMTYPE;
697 }
698
ac9da0e0
DSC
699 if (ext_csd[EXT_CSD_PARTITION_SETTING] &
700 EXT_CSD_PARTITION_SETTING_COMPLETED) {
701 printf("Card already partitioned\n");
702 return -EPERM;
703 }
704
705 if (mode == MMC_HWPART_CONF_CHECK)
706 return 0;
707
708 /* Partitioning requires high-capacity size definitions */
709 if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) {
710 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
711 EXT_CSD_ERASE_GROUP_DEF, 1);
712
713 if (err)
714 return err;
715
716 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
717
718 /* update erase group size to be high-capacity */
719 mmc->erase_grp_size =
720 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
721
722 }
723
724 /* all OK, write the configuration */
725 for (i = 0; i < 4; i++) {
726 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
727 EXT_CSD_ENH_START_ADDR+i,
728 (enh_start_addr >> (i*8)) & 0xFF);
729 if (err)
730 return err;
731 }
732 for (i = 0; i < 3; i++) {
733 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
734 EXT_CSD_ENH_SIZE_MULT+i,
735 (enh_size_mult >> (i*8)) & 0xFF);
736 if (err)
737 return err;
738 }
739 for (pidx = 0; pidx < 4; pidx++) {
740 for (i = 0; i < 3; i++) {
741 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
742 EXT_CSD_GP_SIZE_MULT+pidx*3+i,
743 (gp_size_mult[pidx] >> (i*8)) & 0xFF);
744 if (err)
745 return err;
746 }
747 }
748 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
749 EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs);
750 if (err)
751 return err;
752
753 if (mode == MMC_HWPART_CONF_SET)
754 return 0;
755
8dda5b0e
DSC
756 /* The WR_REL_SET is a write-once register but shall be
757 * written before setting PART_SETTING_COMPLETED. As it is
758 * write-once we can only write it when completing the
759 * partitioning. */
760 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) {
761 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
762 EXT_CSD_WR_REL_SET, wr_rel_set);
763 if (err)
764 return err;
765 }
766
ac9da0e0
DSC
767 /* Setting PART_SETTING_COMPLETED confirms the partition
768 * configuration but it only becomes effective after power
769 * cycle, so we do not adjust the partition related settings
770 * in the mmc struct. */
771
772 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
773 EXT_CSD_PARTITION_SETTING,
774 EXT_CSD_PARTITION_SETTING_COMPLETED);
775 if (err)
776 return err;
777
778 return 0;
779}
780
48972d90
TR
781int mmc_getcd(struct mmc *mmc)
782{
783 int cd;
784
785 cd = board_mmc_getcd(mmc);
786
d4e1da4e 787 if (cd < 0) {
93bfd616
PA
788 if (mmc->cfg->ops->getcd)
789 cd = mmc->cfg->ops->getcd(mmc);
d4e1da4e
PK
790 else
791 cd = 1;
792 }
48972d90
TR
793
794 return cd;
795}
796
fdbb873e 797static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
272cc70b
AF
798{
799 struct mmc_cmd cmd;
800 struct mmc_data data;
801
802 /* Switch the frequency */
803 cmd.cmdidx = SD_CMD_SWITCH_FUNC;
804 cmd.resp_type = MMC_RSP_R1;
805 cmd.cmdarg = (mode << 31) | 0xffffff;
806 cmd.cmdarg &= ~(0xf << (group * 4));
807 cmd.cmdarg |= value << (group * 4);
272cc70b
AF
808
809 data.dest = (char *)resp;
810 data.blocksize = 64;
811 data.blocks = 1;
812 data.flags = MMC_DATA_READ;
813
814 return mmc_send_cmd(mmc, &cmd, &data);
815}
816
817
fdbb873e 818static int sd_change_freq(struct mmc *mmc)
272cc70b
AF
819{
820 int err;
821 struct mmc_cmd cmd;
f781dd38
A
822 ALLOC_CACHE_ALIGN_BUFFER(uint, scr, 2);
823 ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
272cc70b
AF
824 struct mmc_data data;
825 int timeout;
826
827 mmc->card_caps = 0;
828
d52ebf10
TC
829 if (mmc_host_is_spi(mmc))
830 return 0;
831
272cc70b
AF
832 /* Read the SCR to find out if this card supports higher speeds */
833 cmd.cmdidx = MMC_CMD_APP_CMD;
834 cmd.resp_type = MMC_RSP_R1;
835 cmd.cmdarg = mmc->rca << 16;
272cc70b
AF
836
837 err = mmc_send_cmd(mmc, &cmd, NULL);
838
839 if (err)
840 return err;
841
842 cmd.cmdidx = SD_CMD_APP_SEND_SCR;
843 cmd.resp_type = MMC_RSP_R1;
844 cmd.cmdarg = 0;
272cc70b
AF
845
846 timeout = 3;
847
848retry_scr:
f781dd38 849 data.dest = (char *)scr;
272cc70b
AF
850 data.blocksize = 8;
851 data.blocks = 1;
852 data.flags = MMC_DATA_READ;
853
854 err = mmc_send_cmd(mmc, &cmd, &data);
855
856 if (err) {
857 if (timeout--)
858 goto retry_scr;
859
860 return err;
861 }
862
4e3d89ba
YK
863 mmc->scr[0] = __be32_to_cpu(scr[0]);
864 mmc->scr[1] = __be32_to_cpu(scr[1]);
272cc70b
AF
865
866 switch ((mmc->scr[0] >> 24) & 0xf) {
53e8e40b
BM
867 case 0:
868 mmc->version = SD_VERSION_1_0;
869 break;
870 case 1:
871 mmc->version = SD_VERSION_1_10;
872 break;
873 case 2:
874 mmc->version = SD_VERSION_2;
875 if ((mmc->scr[0] >> 15) & 0x1)
876 mmc->version = SD_VERSION_3;
877 break;
878 default:
879 mmc->version = SD_VERSION_1_0;
880 break;
272cc70b
AF
881 }
882
b44c7083
AS
883 if (mmc->scr[0] & SD_DATA_4BIT)
884 mmc->card_caps |= MMC_MODE_4BIT;
885
272cc70b
AF
886 /* Version 1.0 doesn't support switching */
887 if (mmc->version == SD_VERSION_1_0)
888 return 0;
889
890 timeout = 4;
891 while (timeout--) {
892 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
f781dd38 893 (u8 *)switch_status);
272cc70b
AF
894
895 if (err)
896 return err;
897
898 /* The high-speed function is busy. Try again */
4e3d89ba 899 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
272cc70b
AF
900 break;
901 }
902
272cc70b 903 /* If high-speed isn't supported, we return */
4e3d89ba 904 if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
272cc70b
AF
905 return 0;
906
2c3fbf4c
ML
907 /*
908 * If the host doesn't support SD_HIGHSPEED, do not switch card to
909 * HIGHSPEED mode even if the card support SD_HIGHSPPED.
910 * This can avoid furthur problem when the card runs in different
911 * mode between the host.
912 */
93bfd616
PA
913 if (!((mmc->cfg->host_caps & MMC_MODE_HS_52MHz) &&
914 (mmc->cfg->host_caps & MMC_MODE_HS)))
2c3fbf4c
ML
915 return 0;
916
f781dd38 917 err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
272cc70b
AF
918
919 if (err)
920 return err;
921
4e3d89ba 922 if ((__be32_to_cpu(switch_status[4]) & 0x0f000000) == 0x01000000)
272cc70b
AF
923 mmc->card_caps |= MMC_MODE_HS;
924
925 return 0;
926}
927
928/* frequency bases */
929/* divided by 10 to be nice to platforms without floating point */
5f837c2c 930static const int fbase[] = {
272cc70b
AF
931 10000,
932 100000,
933 1000000,
934 10000000,
935};
936
937/* Multiplier values for TRAN_SPEED. Multiplied by 10 to be nice
938 * to platforms without floating point.
939 */
61fe076f 940static const u8 multipliers[] = {
272cc70b
AF
941 0, /* reserved */
942 10,
943 12,
944 13,
945 15,
946 20,
947 25,
948 30,
949 35,
950 40,
951 45,
952 50,
953 55,
954 60,
955 70,
956 80,
957};
958
fdbb873e 959static void mmc_set_ios(struct mmc *mmc)
272cc70b 960{
93bfd616
PA
961 if (mmc->cfg->ops->set_ios)
962 mmc->cfg->ops->set_ios(mmc);
272cc70b
AF
963}
964
965void mmc_set_clock(struct mmc *mmc, uint clock)
966{
93bfd616
PA
967 if (clock > mmc->cfg->f_max)
968 clock = mmc->cfg->f_max;
272cc70b 969
93bfd616
PA
970 if (clock < mmc->cfg->f_min)
971 clock = mmc->cfg->f_min;
272cc70b
AF
972
973 mmc->clock = clock;
974
975 mmc_set_ios(mmc);
976}
977
fdbb873e 978static void mmc_set_bus_width(struct mmc *mmc, uint width)
272cc70b
AF
979{
980 mmc->bus_width = width;
981
982 mmc_set_ios(mmc);
983}
984
fdbb873e 985static int mmc_startup(struct mmc *mmc)
272cc70b 986{
f866a46d 987 int err, i;
272cc70b 988 uint mult, freq;
639b7827 989 u64 cmult, csize, capacity;
272cc70b 990 struct mmc_cmd cmd;
8bfa195e
SG
991 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
992 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
5d4fc8d9 993 int timeout = 1000;
0c453bb7 994 bool has_parts = false;
8a0cf490 995 bool part_completed;
c40fdca6 996 struct blk_desc *bdesc;
272cc70b 997
d52ebf10
TC
998#ifdef CONFIG_MMC_SPI_CRC_ON
999 if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
1000 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
1001 cmd.resp_type = MMC_RSP_R1;
1002 cmd.cmdarg = 1;
d52ebf10
TC
1003 err = mmc_send_cmd(mmc, &cmd, NULL);
1004
1005 if (err)
1006 return err;
1007 }
1008#endif
1009
272cc70b 1010 /* Put the Card in Identify Mode */
d52ebf10
TC
1011 cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
1012 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
272cc70b
AF
1013 cmd.resp_type = MMC_RSP_R2;
1014 cmd.cmdarg = 0;
272cc70b
AF
1015
1016 err = mmc_send_cmd(mmc, &cmd, NULL);
1017
1018 if (err)
1019 return err;
1020
1021 memcpy(mmc->cid, cmd.response, 16);
1022
1023 /*
1024 * For MMC cards, set the Relative Address.
1025 * For SD cards, get the Relatvie Address.
1026 * This also puts the cards into Standby State
1027 */
d52ebf10
TC
1028 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1029 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
1030 cmd.cmdarg = mmc->rca << 16;
1031 cmd.resp_type = MMC_RSP_R6;
272cc70b 1032
d52ebf10 1033 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b 1034
d52ebf10
TC
1035 if (err)
1036 return err;
272cc70b 1037
d52ebf10
TC
1038 if (IS_SD(mmc))
1039 mmc->rca = (cmd.response[0] >> 16) & 0xffff;
1040 }
272cc70b
AF
1041
1042 /* Get the Card-Specific Data */
1043 cmd.cmdidx = MMC_CMD_SEND_CSD;
1044 cmd.resp_type = MMC_RSP_R2;
1045 cmd.cmdarg = mmc->rca << 16;
272cc70b
AF
1046
1047 err = mmc_send_cmd(mmc, &cmd, NULL);
1048
5d4fc8d9
RR
1049 /* Waiting for the ready status */
1050 mmc_send_status(mmc, timeout);
1051
272cc70b
AF
1052 if (err)
1053 return err;
1054
998be3dd
RV
1055 mmc->csd[0] = cmd.response[0];
1056 mmc->csd[1] = cmd.response[1];
1057 mmc->csd[2] = cmd.response[2];
1058 mmc->csd[3] = cmd.response[3];
272cc70b
AF
1059
1060 if (mmc->version == MMC_VERSION_UNKNOWN) {
0b453ffe 1061 int version = (cmd.response[0] >> 26) & 0xf;
272cc70b
AF
1062
1063 switch (version) {
53e8e40b
BM
1064 case 0:
1065 mmc->version = MMC_VERSION_1_2;
1066 break;
1067 case 1:
1068 mmc->version = MMC_VERSION_1_4;
1069 break;
1070 case 2:
1071 mmc->version = MMC_VERSION_2_2;
1072 break;
1073 case 3:
1074 mmc->version = MMC_VERSION_3;
1075 break;
1076 case 4:
1077 mmc->version = MMC_VERSION_4;
1078 break;
1079 default:
1080 mmc->version = MMC_VERSION_1_2;
1081 break;
272cc70b
AF
1082 }
1083 }
1084
1085 /* divide frequency by 10, since the mults are 10x bigger */
0b453ffe
RV
1086 freq = fbase[(cmd.response[0] & 0x7)];
1087 mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
272cc70b
AF
1088
1089 mmc->tran_speed = freq * mult;
1090
ab71188c 1091 mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
998be3dd 1092 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
272cc70b
AF
1093
1094 if (IS_SD(mmc))
1095 mmc->write_bl_len = mmc->read_bl_len;
1096 else
998be3dd 1097 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
272cc70b
AF
1098
1099 if (mmc->high_capacity) {
1100 csize = (mmc->csd[1] & 0x3f) << 16
1101 | (mmc->csd[2] & 0xffff0000) >> 16;
1102 cmult = 8;
1103 } else {
1104 csize = (mmc->csd[1] & 0x3ff) << 2
1105 | (mmc->csd[2] & 0xc0000000) >> 30;
1106 cmult = (mmc->csd[2] & 0x00038000) >> 15;
1107 }
1108
f866a46d
SW
1109 mmc->capacity_user = (csize + 1) << (cmult + 2);
1110 mmc->capacity_user *= mmc->read_bl_len;
1111 mmc->capacity_boot = 0;
1112 mmc->capacity_rpmb = 0;
1113 for (i = 0; i < 4; i++)
1114 mmc->capacity_gp[i] = 0;
272cc70b 1115
8bfa195e
SG
1116 if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
1117 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
272cc70b 1118
8bfa195e
SG
1119 if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
1120 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
272cc70b 1121
ab71188c
MN
1122 if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
1123 cmd.cmdidx = MMC_CMD_SET_DSR;
1124 cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
1125 cmd.resp_type = MMC_RSP_NONE;
1126 if (mmc_send_cmd(mmc, &cmd, NULL))
1127 printf("MMC: SET_DSR failed\n");
1128 }
1129
272cc70b 1130 /* Select the card, and put it into Transfer Mode */
d52ebf10
TC
1131 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
1132 cmd.cmdidx = MMC_CMD_SELECT_CARD;
fe8f7066 1133 cmd.resp_type = MMC_RSP_R1;
d52ebf10 1134 cmd.cmdarg = mmc->rca << 16;
d52ebf10 1135 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b 1136
d52ebf10
TC
1137 if (err)
1138 return err;
1139 }
272cc70b 1140
e6f99a56
LW
1141 /*
1142 * For SD, its erase group is always one sector
1143 */
1144 mmc->erase_grp_size = 1;
bc897b1d 1145 mmc->part_config = MMCPART_NOAVAILABLE;
d23e2c09
SG
1146 if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
1147 /* check ext_csd version and capacity */
1148 err = mmc_send_ext_csd(mmc, ext_csd);
9cf199eb
DSC
1149 if (err)
1150 return err;
1151 if (ext_csd[EXT_CSD_REV] >= 2) {
639b7827
YS
1152 /*
1153 * According to the JEDEC Standard, the value of
1154 * ext_csd's capacity is valid if the value is more
1155 * than 2GB
1156 */
0560db18
LW
1157 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1158 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1159 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1160 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
8bfa195e 1161 capacity *= MMC_MAX_BLOCK_LEN;
b1f1e821 1162 if ((capacity >> 20) > 2 * 1024)
f866a46d 1163 mmc->capacity_user = capacity;
d23e2c09 1164 }
bc897b1d 1165
64f4a619
JC
1166 switch (ext_csd[EXT_CSD_REV]) {
1167 case 1:
1168 mmc->version = MMC_VERSION_4_1;
1169 break;
1170 case 2:
1171 mmc->version = MMC_VERSION_4_2;
1172 break;
1173 case 3:
1174 mmc->version = MMC_VERSION_4_3;
1175 break;
1176 case 5:
1177 mmc->version = MMC_VERSION_4_41;
1178 break;
1179 case 6:
1180 mmc->version = MMC_VERSION_4_5;
1181 break;
edab723b
MN
1182 case 7:
1183 mmc->version = MMC_VERSION_5_0;
1184 break;
1a3619cf
SW
1185 case 8:
1186 mmc->version = MMC_VERSION_5_1;
1187 break;
64f4a619
JC
1188 }
1189
8a0cf490
DSC
1190 /* The partition data may be non-zero but it is only
1191 * effective if PARTITION_SETTING_COMPLETED is set in
1192 * EXT_CSD, so ignore any data if this bit is not set,
1193 * except for enabling the high-capacity group size
1194 * definition (see below). */
1195 part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
1196 EXT_CSD_PARTITION_SETTING_COMPLETED);
1197
0c453bb7
DSC
1198 /* store the partition info of emmc */
1199 mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
1200 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
1201 ext_csd[EXT_CSD_BOOT_MULT])
1202 mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
8a0cf490
DSC
1203 if (part_completed &&
1204 (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
0c453bb7
DSC
1205 mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
1206
1207 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
1208
1209 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
1210
1211 for (i = 0; i < 4; i++) {
1212 int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
8a0cf490 1213 uint mult = (ext_csd[idx + 2] << 16) +
0c453bb7 1214 (ext_csd[idx + 1] << 8) + ext_csd[idx];
8a0cf490
DSC
1215 if (mult)
1216 has_parts = true;
1217 if (!part_completed)
1218 continue;
1219 mmc->capacity_gp[i] = mult;
0c453bb7
DSC
1220 mmc->capacity_gp[i] *=
1221 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1222 mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
f8e89d67 1223 mmc->capacity_gp[i] <<= 19;
0c453bb7
DSC
1224 }
1225
8a0cf490
DSC
1226 if (part_completed) {
1227 mmc->enh_user_size =
1228 (ext_csd[EXT_CSD_ENH_SIZE_MULT+2] << 16) +
1229 (ext_csd[EXT_CSD_ENH_SIZE_MULT+1] << 8) +
1230 ext_csd[EXT_CSD_ENH_SIZE_MULT];
1231 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
1232 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
1233 mmc->enh_user_size <<= 19;
1234 mmc->enh_user_start =
1235 (ext_csd[EXT_CSD_ENH_START_ADDR+3] << 24) +
1236 (ext_csd[EXT_CSD_ENH_START_ADDR+2] << 16) +
1237 (ext_csd[EXT_CSD_ENH_START_ADDR+1] << 8) +
1238 ext_csd[EXT_CSD_ENH_START_ADDR];
1239 if (mmc->high_capacity)
1240 mmc->enh_user_start <<= 9;
1241 }
a7f852b6 1242
e6f99a56 1243 /*
1937e5aa
OM
1244 * Host needs to enable ERASE_GRP_DEF bit if device is
1245 * partitioned. This bit will be lost every time after a reset
1246 * or power off. This will affect erase size.
e6f99a56 1247 */
8a0cf490 1248 if (part_completed)
0c453bb7 1249 has_parts = true;
1937e5aa 1250 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
0c453bb7
DSC
1251 (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
1252 has_parts = true;
1253 if (has_parts) {
1937e5aa
OM
1254 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1255 EXT_CSD_ERASE_GROUP_DEF, 1);
1256
1257 if (err)
1258 return err;
021a8055
HP
1259 else
1260 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
037dc0ab 1261 }
1937e5aa 1262
037dc0ab 1263 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
1937e5aa 1264 /* Read out group size from ext_csd */
0560db18 1265 mmc->erase_grp_size =
a4ff9f83 1266 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
d7b29129
MN
1267 /*
1268 * if high capacity and partition setting completed
1269 * SEC_COUNT is valid even if it is smaller than 2 GiB
1270 * JEDEC Standard JESD84-B45, 6.2.4
1271 */
8a0cf490 1272 if (mmc->high_capacity && part_completed) {
d7b29129
MN
1273 capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
1274 (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
1275 (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
1276 (ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
1277 capacity *= MMC_MAX_BLOCK_LEN;
1278 mmc->capacity_user = capacity;
1279 }
8bfa195e 1280 } else {
1937e5aa 1281 /* Calculate the group size from the csd value. */
e6f99a56
LW
1282 int erase_gsz, erase_gmul;
1283 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
1284 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
1285 mmc->erase_grp_size = (erase_gsz + 1)
1286 * (erase_gmul + 1);
1287 }
037dc0ab
DSC
1288
1289 mmc->hc_wp_grp_size = 1024
1290 * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1291 * ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
9e41a00b
DSC
1292
1293 mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
d23e2c09
SG
1294 }
1295
c40fdca6 1296 err = mmc_set_capacity(mmc, mmc_get_blk_desc(mmc)->hwpart);
f866a46d
SW
1297 if (err)
1298 return err;
1299
272cc70b
AF
1300 if (IS_SD(mmc))
1301 err = sd_change_freq(mmc);
1302 else
1303 err = mmc_change_freq(mmc);
1304
1305 if (err)
1306 return err;
1307
1308 /* Restrict card's capabilities by what the host can do */
93bfd616 1309 mmc->card_caps &= mmc->cfg->host_caps;
272cc70b
AF
1310
1311 if (IS_SD(mmc)) {
1312 if (mmc->card_caps & MMC_MODE_4BIT) {
1313 cmd.cmdidx = MMC_CMD_APP_CMD;
1314 cmd.resp_type = MMC_RSP_R1;
1315 cmd.cmdarg = mmc->rca << 16;
272cc70b
AF
1316
1317 err = mmc_send_cmd(mmc, &cmd, NULL);
1318 if (err)
1319 return err;
1320
1321 cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1322 cmd.resp_type = MMC_RSP_R1;
1323 cmd.cmdarg = 2;
272cc70b
AF
1324 err = mmc_send_cmd(mmc, &cmd, NULL);
1325 if (err)
1326 return err;
1327
1328 mmc_set_bus_width(mmc, 4);
1329 }
1330
1331 if (mmc->card_caps & MMC_MODE_HS)
ad5fd922 1332 mmc->tran_speed = 50000000;
272cc70b 1333 else
ad5fd922 1334 mmc->tran_speed = 25000000;
fc5b32fb
AG
1335 } else if (mmc->version >= MMC_VERSION_4) {
1336 /* Only version 4 of MMC supports wider bus widths */
7798f6db
AF
1337 int idx;
1338
1339 /* An array of possible bus widths in order of preference */
1340 static unsigned ext_csd_bits[] = {
d22e3d46
JC
1341 EXT_CSD_DDR_BUS_WIDTH_8,
1342 EXT_CSD_DDR_BUS_WIDTH_4,
7798f6db
AF
1343 EXT_CSD_BUS_WIDTH_8,
1344 EXT_CSD_BUS_WIDTH_4,
1345 EXT_CSD_BUS_WIDTH_1,
1346 };
1347
1348 /* An array to map CSD bus widths to host cap bits */
1349 static unsigned ext_to_hostcaps[] = {
786e8f81
AG
1350 [EXT_CSD_DDR_BUS_WIDTH_4] =
1351 MMC_MODE_DDR_52MHz | MMC_MODE_4BIT,
1352 [EXT_CSD_DDR_BUS_WIDTH_8] =
1353 MMC_MODE_DDR_52MHz | MMC_MODE_8BIT,
7798f6db
AF
1354 [EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
1355 [EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
1356 };
1357
1358 /* An array to map chosen bus width to an integer */
1359 static unsigned widths[] = {
d22e3d46 1360 8, 4, 8, 4, 1,
7798f6db
AF
1361 };
1362
1363 for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
1364 unsigned int extw = ext_csd_bits[idx];
786e8f81 1365 unsigned int caps = ext_to_hostcaps[extw];
7798f6db 1366
bf477073
AG
1367 /*
1368 * If the bus width is still not changed,
1369 * don't try to set the default again.
1370 * Otherwise, recover from switch attempts
1371 * by switching to 1-bit bus width.
1372 */
1373 if (extw == EXT_CSD_BUS_WIDTH_1 &&
1374 mmc->bus_width == 1) {
1375 err = 0;
1376 break;
1377 }
1378
7798f6db 1379 /*
786e8f81
AG
1380 * Check to make sure the card and controller support
1381 * these capabilities
7798f6db 1382 */
786e8f81 1383 if ((mmc->card_caps & caps) != caps)
7798f6db
AF
1384 continue;
1385
272cc70b 1386 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
7798f6db 1387 EXT_CSD_BUS_WIDTH, extw);
272cc70b
AF
1388
1389 if (err)
4137894e 1390 continue;
272cc70b 1391
786e8f81 1392 mmc->ddr_mode = (caps & MMC_MODE_DDR_52MHz) ? 1 : 0;
7798f6db 1393 mmc_set_bus_width(mmc, widths[idx]);
4137894e
LW
1394
1395 err = mmc_send_ext_csd(mmc, test_csd);
786e8f81
AG
1396
1397 if (err)
1398 continue;
1399
786a27b7 1400 /* Only compare read only fields */
786e8f81
AG
1401 if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
1402 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
1403 ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
1404 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
1405 ext_csd[EXT_CSD_REV]
1406 == test_csd[EXT_CSD_REV] &&
1407 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1408 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
1409 memcmp(&ext_csd[EXT_CSD_SEC_CNT],
1410 &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
4137894e 1411 break;
786e8f81
AG
1412 else
1413 err = SWITCH_ERR;
272cc70b
AF
1414 }
1415
786e8f81
AG
1416 if (err)
1417 return err;
1418
272cc70b
AF
1419 if (mmc->card_caps & MMC_MODE_HS) {
1420 if (mmc->card_caps & MMC_MODE_HS_52MHz)
ad5fd922 1421 mmc->tran_speed = 52000000;
272cc70b 1422 else
ad5fd922
JC
1423 mmc->tran_speed = 26000000;
1424 }
272cc70b
AF
1425 }
1426
ad5fd922
JC
1427 mmc_set_clock(mmc, mmc->tran_speed);
1428
5af8f45c
AG
1429 /* Fix the block length for DDR mode */
1430 if (mmc->ddr_mode) {
1431 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
1432 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
1433 }
1434
272cc70b 1435 /* fill in device description */
c40fdca6
SG
1436 bdesc = mmc_get_blk_desc(mmc);
1437 bdesc->lun = 0;
1438 bdesc->hwpart = 0;
1439 bdesc->type = 0;
1440 bdesc->blksz = mmc->read_bl_len;
1441 bdesc->log2blksz = LOG2(bdesc->blksz);
1442 bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len);
fc011f64
SS
1443#if !defined(CONFIG_SPL_BUILD) || \
1444 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
1445 !defined(CONFIG_USE_TINY_PRINTF))
c40fdca6 1446 sprintf(bdesc->vendor, "Man %06x Snr %04x%04x",
babce5f6
TH
1447 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
1448 (mmc->cid[3] >> 16) & 0xffff);
c40fdca6 1449 sprintf(bdesc->product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
babce5f6
TH
1450 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
1451 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
1452 (mmc->cid[2] >> 24) & 0xff);
c40fdca6 1453 sprintf(bdesc->revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
babce5f6 1454 (mmc->cid[2] >> 16) & 0xf);
56196826 1455#else
c40fdca6
SG
1456 bdesc->vendor[0] = 0;
1457 bdesc->product[0] = 0;
1458 bdesc->revision[0] = 0;
56196826 1459#endif
122efd43 1460#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
c40fdca6 1461 part_init(bdesc);
122efd43 1462#endif
272cc70b
AF
1463
1464 return 0;
1465}
1466
fdbb873e 1467static int mmc_send_if_cond(struct mmc *mmc)
272cc70b
AF
1468{
1469 struct mmc_cmd cmd;
1470 int err;
1471
1472 cmd.cmdidx = SD_CMD_SEND_IF_COND;
1473 /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
93bfd616 1474 cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
272cc70b 1475 cmd.resp_type = MMC_RSP_R7;
272cc70b
AF
1476
1477 err = mmc_send_cmd(mmc, &cmd, NULL);
1478
1479 if (err)
1480 return err;
1481
998be3dd 1482 if ((cmd.response[0] & 0xff) != 0xaa)
272cc70b
AF
1483 return UNUSABLE_ERR;
1484 else
1485 mmc->version = SD_VERSION_2;
1486
1487 return 0;
1488}
1489
95de9ab2
PK
1490/* board-specific MMC power initializations. */
1491__weak void board_mmc_power_init(void)
1492{
1493}
1494
e9550449 1495int mmc_start_init(struct mmc *mmc)
272cc70b 1496{
afd5932b 1497 int err;
272cc70b 1498
ab769f22 1499 /* we pretend there's no card when init is NULL */
93bfd616 1500 if (mmc_getcd(mmc) == 0 || mmc->cfg->ops->init == NULL) {
48972d90 1501 mmc->has_init = 0;
56196826 1502#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
48972d90 1503 printf("MMC: no card present\n");
56196826 1504#endif
48972d90
TR
1505 return NO_CARD_ERR;
1506 }
1507
bc897b1d
LW
1508 if (mmc->has_init)
1509 return 0;
1510
5a8dbdc6
YL
1511#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
1512 mmc_adapter_card_type_ident();
1513#endif
95de9ab2
PK
1514 board_mmc_power_init();
1515
ab769f22 1516 /* made sure it's not NULL earlier */
93bfd616 1517 err = mmc->cfg->ops->init(mmc);
272cc70b
AF
1518
1519 if (err)
1520 return err;
1521
786e8f81 1522 mmc->ddr_mode = 0;
b86b85e2
IY
1523 mmc_set_bus_width(mmc, 1);
1524 mmc_set_clock(mmc, 1);
1525
272cc70b
AF
1526 /* Reset the Card */
1527 err = mmc_go_idle(mmc);
1528
1529 if (err)
1530 return err;
1531
bc897b1d 1532 /* The internal partition reset to user partition(0) at every CMD0*/
c40fdca6 1533 mmc_get_blk_desc(mmc)->hwpart = 0;
bc897b1d 1534
272cc70b 1535 /* Test for SD version 2 */
afd5932b 1536 err = mmc_send_if_cond(mmc);
272cc70b 1537
272cc70b
AF
1538 /* Now try to get the SD card's operating condition */
1539 err = sd_send_op_cond(mmc);
1540
1541 /* If the command timed out, we check for an MMC card */
1542 if (err == TIMEOUT) {
1543 err = mmc_send_op_cond(mmc);
1544
bd47c135 1545 if (err) {
56196826 1546#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
272cc70b 1547 printf("Card did not respond to voltage select!\n");
56196826 1548#endif
272cc70b
AF
1549 return UNUSABLE_ERR;
1550 }
1551 }
1552
bd47c135 1553 if (!err)
e9550449
CLC
1554 mmc->init_in_progress = 1;
1555
1556 return err;
1557}
1558
1559static int mmc_complete_init(struct mmc *mmc)
1560{
1561 int err = 0;
1562
bd47c135 1563 mmc->init_in_progress = 0;
e9550449
CLC
1564 if (mmc->op_cond_pending)
1565 err = mmc_complete_op_cond(mmc);
1566
1567 if (!err)
1568 err = mmc_startup(mmc);
bc897b1d
LW
1569 if (err)
1570 mmc->has_init = 0;
1571 else
1572 mmc->has_init = 1;
e9550449
CLC
1573 return err;
1574}
1575
1576int mmc_init(struct mmc *mmc)
1577{
bd47c135 1578 int err = 0;
d803fea5 1579 unsigned start;
33fb211d
SG
1580#ifdef CONFIG_DM_MMC
1581 struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc->dev);
e9550449 1582
33fb211d
SG
1583 upriv->mmc = mmc;
1584#endif
e9550449
CLC
1585 if (mmc->has_init)
1586 return 0;
d803fea5
MZ
1587
1588 start = get_timer(0);
1589
e9550449
CLC
1590 if (!mmc->init_in_progress)
1591 err = mmc_start_init(mmc);
1592
bd47c135 1593 if (!err)
e9550449
CLC
1594 err = mmc_complete_init(mmc);
1595 debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
bc897b1d 1596 return err;
272cc70b
AF
1597}
1598
ab71188c
MN
1599int mmc_set_dsr(struct mmc *mmc, u16 val)
1600{
1601 mmc->dsr = val;
1602 return 0;
1603}
1604
cee9ab7c
JH
1605/* CPU-specific MMC initializations */
1606__weak int cpu_mmc_init(bd_t *bis)
272cc70b
AF
1607{
1608 return -1;
1609}
1610
cee9ab7c
JH
1611/* board-specific MMC initializations. */
1612__weak int board_mmc_init(bd_t *bis)
1613{
1614 return -1;
1615}
272cc70b 1616
e9550449
CLC
1617void mmc_set_preinit(struct mmc *mmc, int preinit)
1618{
1619 mmc->preinit = preinit;
1620}
1621
8e3332e2
SS
1622#if defined(CONFIG_DM_MMC) && defined(CONFIG_SPL_BUILD)
1623static int mmc_probe(bd_t *bis)
1624{
1625 return 0;
1626}
1627#elif defined(CONFIG_DM_MMC)
1628static int mmc_probe(bd_t *bis)
1629{
4a1db6d8 1630 int ret, i;
8e3332e2 1631 struct uclass *uc;
4a1db6d8 1632 struct udevice *dev;
8e3332e2
SS
1633
1634 ret = uclass_get(UCLASS_MMC, &uc);
1635 if (ret)
1636 return ret;
1637
4a1db6d8
SG
1638 /*
1639 * Try to add them in sequence order. Really with driver model we
1640 * should allow holes, but the current MMC list does not allow that.
1641 * So if we request 0, 1, 3 we will get 0, 1, 2.
1642 */
1643 for (i = 0; ; i++) {
1644 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
1645 if (ret == -ENODEV)
1646 break;
1647 }
1648 uclass_foreach_dev(dev, uc) {
1649 ret = device_probe(dev);
8e3332e2 1650 if (ret)
4a1db6d8 1651 printf("%s - probe failed: %d\n", dev->name, ret);
8e3332e2
SS
1652 }
1653
1654 return 0;
1655}
1656#else
1657static int mmc_probe(bd_t *bis)
1658{
1659 if (board_mmc_init(bis) < 0)
1660 cpu_mmc_init(bis);
1661
1662 return 0;
1663}
1664#endif
e9550449 1665
272cc70b
AF
1666int mmc_initialize(bd_t *bis)
1667{
1b26bab1 1668 static int initialized = 0;
8e3332e2 1669 int ret;
1b26bab1
DK
1670 if (initialized) /* Avoid initializing mmc multiple times */
1671 return 0;
1672 initialized = 1;
1673
c40fdca6
SG
1674#ifndef CONFIG_BLK
1675 mmc_list_init();
1676#endif
8e3332e2
SS
1677 ret = mmc_probe(bis);
1678 if (ret)
1679 return ret;
272cc70b 1680
bb0dc108 1681#ifndef CONFIG_SPL_BUILD
272cc70b 1682 print_mmc_devices(',');
bb0dc108 1683#endif
272cc70b 1684
c40fdca6 1685 mmc_do_preinit();
272cc70b
AF
1686 return 0;
1687}