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