]> Git Repo - J-u-boot.git/blame - drivers/mmc/mmc.c
mmc: fsl_esdhc_imx: fix config check issue when building in SPL
[J-u-boot.git] / drivers / mmc / mmc.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
272cc70b
AF
2/*
3 * Copyright 2008, Freescale Semiconductor, Inc
4 * Andy Fleming
5 *
6 * Based vaguely on the Linux code
272cc70b
AF
7 */
8
9#include <config.h>
10#include <common.h>
11#include <command.h>
8e3332e2
SS
12#include <dm.h>
13#include <dm/device-internal.h>
d4622df3 14#include <errno.h>
272cc70b
AF
15#include <mmc.h>
16#include <part.h>
2051aefe 17#include <power/regulator.h>
272cc70b 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
39320c53
JJH
24#define DEFAULT_CMD6_TIMEOUT_MS 500
25
aff5d3c8 26static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage);
fb7c3beb 27static int mmc_power_cycle(struct mmc *mmc);
62d77cea 28#if !CONFIG_IS_ENABLED(MMC_TINY)
01298da3 29static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps);
b5b838f1
MV
30#endif
31
e7881d85 32#if !CONFIG_IS_ENABLED(DM_MMC)
c10b85d6
JJH
33
34static int mmc_wait_dat0(struct mmc *mmc, int state, int timeout)
35{
36 return -ENOSYS;
37}
38
750121c3 39__weak int board_mmc_getwp(struct mmc *mmc)
d23d8d7e
NK
40{
41 return -1;
42}
43
44int mmc_getwp(struct mmc *mmc)
45{
46 int wp;
47
48 wp = board_mmc_getwp(mmc);
49
d4e1da4e 50 if (wp < 0) {
93bfd616
PA
51 if (mmc->cfg->ops->getwp)
52 wp = mmc->cfg->ops->getwp(mmc);
d4e1da4e
PK
53 else
54 wp = 0;
55 }
d23d8d7e
NK
56
57 return wp;
58}
59
cee9ab7c
JH
60__weak int board_mmc_getcd(struct mmc *mmc)
61{
11fdade2
SB
62 return -1;
63}
8ca51e51 64#endif
11fdade2 65
c0c76eba
SG
66#ifdef CONFIG_MMC_TRACE
67void mmmc_trace_before_send(struct mmc *mmc, struct mmc_cmd *cmd)
272cc70b 68{
c0c76eba 69 printf("CMD_SEND:%d\n", cmd->cmdidx);
7d5ccb1a 70 printf("\t\tARG\t\t\t 0x%08x\n", cmd->cmdarg);
c0c76eba 71}
8635ff9e 72
c0c76eba
SG
73void mmmc_trace_after_send(struct mmc *mmc, struct mmc_cmd *cmd, int ret)
74{
5db2fe3a
RR
75 int i;
76 u8 *ptr;
77
7863ce58
BM
78 if (ret) {
79 printf("\t\tRET\t\t\t %d\n", ret);
80 } else {
81 switch (cmd->resp_type) {
82 case MMC_RSP_NONE:
83 printf("\t\tMMC_RSP_NONE\n");
84 break;
85 case MMC_RSP_R1:
7d5ccb1a 86 printf("\t\tMMC_RSP_R1,5,6,7 \t 0x%08x \n",
7863ce58
BM
87 cmd->response[0]);
88 break;
89 case MMC_RSP_R1b:
7d5ccb1a 90 printf("\t\tMMC_RSP_R1b\t\t 0x%08x \n",
7863ce58
BM
91 cmd->response[0]);
92 break;
93 case MMC_RSP_R2:
7d5ccb1a 94 printf("\t\tMMC_RSP_R2\t\t 0x%08x \n",
7863ce58 95 cmd->response[0]);
7d5ccb1a 96 printf("\t\t \t\t 0x%08x \n",
7863ce58 97 cmd->response[1]);
7d5ccb1a 98 printf("\t\t \t\t 0x%08x \n",
7863ce58 99 cmd->response[2]);
7d5ccb1a 100 printf("\t\t \t\t 0x%08x \n",
7863ce58 101 cmd->response[3]);
5db2fe3a 102 printf("\n");
7863ce58
BM
103 printf("\t\t\t\t\tDUMPING DATA\n");
104 for (i = 0; i < 4; i++) {
105 int j;
106 printf("\t\t\t\t\t%03d - ", i*4);
107 ptr = (u8 *)&cmd->response[i];
108 ptr += 3;
109 for (j = 0; j < 4; j++)
7d5ccb1a 110 printf("%02x ", *ptr--);
7863ce58
BM
111 printf("\n");
112 }
113 break;
114 case MMC_RSP_R3:
7d5ccb1a 115 printf("\t\tMMC_RSP_R3,4\t\t 0x%08x \n",
7863ce58
BM
116 cmd->response[0]);
117 break;
118 default:
119 printf("\t\tERROR MMC rsp not supported\n");
120 break;
53e8e40b 121 }
5db2fe3a 122 }
c0c76eba
SG
123}
124
125void mmc_trace_state(struct mmc *mmc, struct mmc_cmd *cmd)
126{
127 int status;
128
129 status = (cmd->response[0] & MMC_STATUS_CURR_STATE) >> 9;
130 printf("CURR STATE:%d\n", status);
131}
5db2fe3a 132#endif
c0c76eba 133
35f9e196
JJH
134#if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG)
135const char *mmc_mode_name(enum bus_mode mode)
136{
137 static const char *const names[] = {
138 [MMC_LEGACY] = "MMC legacy",
139 [SD_LEGACY] = "SD Legacy",
140 [MMC_HS] = "MMC High Speed (26MHz)",
141 [SD_HS] = "SD High Speed (50MHz)",
142 [UHS_SDR12] = "UHS SDR12 (25MHz)",
143 [UHS_SDR25] = "UHS SDR25 (50MHz)",
144 [UHS_SDR50] = "UHS SDR50 (100MHz)",
145 [UHS_SDR104] = "UHS SDR104 (208MHz)",
146 [UHS_DDR50] = "UHS DDR50 (50MHz)",
147 [MMC_HS_52] = "MMC High Speed (52MHz)",
148 [MMC_DDR_52] = "MMC DDR52 (52MHz)",
149 [MMC_HS_200] = "HS200 (200MHz)",
3dd2626f 150 [MMC_HS_400] = "HS400 (200MHz)",
35f9e196
JJH
151 };
152
153 if (mode >= MMC_MODES_END)
154 return "Unknown mode";
155 else
156 return names[mode];
157}
158#endif
159
05038576
JJH
160static uint mmc_mode2freq(struct mmc *mmc, enum bus_mode mode)
161{
162 static const int freqs[] = {
1b313aa3 163 [MMC_LEGACY] = 25000000,
05038576
JJH
164 [SD_LEGACY] = 25000000,
165 [MMC_HS] = 26000000,
166 [SD_HS] = 50000000,
1b313aa3
JC
167 [MMC_HS_52] = 52000000,
168 [MMC_DDR_52] = 52000000,
05038576
JJH
169 [UHS_SDR12] = 25000000,
170 [UHS_SDR25] = 50000000,
171 [UHS_SDR50] = 100000000,
05038576 172 [UHS_DDR50] = 50000000,
f99c2efe 173 [UHS_SDR104] = 208000000,
05038576 174 [MMC_HS_200] = 200000000,
3dd2626f 175 [MMC_HS_400] = 200000000,
05038576
JJH
176 };
177
178 if (mode == MMC_LEGACY)
179 return mmc->legacy_speed;
180 else if (mode >= MMC_MODES_END)
181 return 0;
182 else
183 return freqs[mode];
184}
185
35f9e196
JJH
186static int mmc_select_mode(struct mmc *mmc, enum bus_mode mode)
187{
188 mmc->selected_mode = mode;
05038576 189 mmc->tran_speed = mmc_mode2freq(mmc, mode);
3862b854 190 mmc->ddr_mode = mmc_is_mode_ddr(mode);
d4d64889
MY
191 pr_debug("selecting mode %s (freq : %d MHz)\n", mmc_mode_name(mode),
192 mmc->tran_speed / 1000000);
35f9e196
JJH
193 return 0;
194}
195
e7881d85 196#if !CONFIG_IS_ENABLED(DM_MMC)
c0c76eba
SG
197int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
198{
199 int ret;
200
201 mmmc_trace_before_send(mmc, cmd);
202 ret = mmc->cfg->ops->send_cmd(mmc, cmd, data);
203 mmmc_trace_after_send(mmc, cmd, ret);
204
8635ff9e 205 return ret;
272cc70b 206}
8ca51e51 207#endif
272cc70b 208
863d1004 209int mmc_send_status(struct mmc *mmc, unsigned int *status)
5d4fc8d9
RR
210{
211 struct mmc_cmd cmd;
d617c426 212 int err, retries = 5;
5d4fc8d9
RR
213
214 cmd.cmdidx = MMC_CMD_SEND_STATUS;
215 cmd.resp_type = MMC_RSP_R1;
aaf3d41a
MV
216 if (!mmc_host_is_spi(mmc))
217 cmd.cmdarg = mmc->rca << 16;
5d4fc8d9 218
863d1004 219 while (retries--) {
5d4fc8d9 220 err = mmc_send_cmd(mmc, &cmd, NULL);
d617c426 221 if (!err) {
863d1004
JJH
222 mmc_trace_state(mmc, &cmd);
223 *status = cmd.response[0];
224 return 0;
225 }
226 }
227 mmc_trace_state(mmc, &cmd);
228 return -ECOMM;
229}
230
231int mmc_poll_for_busy(struct mmc *mmc, int timeout)
232{
233 unsigned int status;
234 int err;
d0c221fe 235
cd0b80ec
JJH
236 err = mmc_wait_dat0(mmc, 1, timeout);
237 if (err != -ENOSYS)
238 return err;
239
863d1004
JJH
240 while (1) {
241 err = mmc_send_status(mmc, &status);
242 if (err)
243 return err;
244
245 if ((status & MMC_STATUS_RDY_FOR_DATA) &&
246 (status & MMC_STATUS_CURR_STATE) !=
247 MMC_STATE_PRG)
248 break;
249
250 if (status & MMC_STATUS_MASK) {
56196826 251#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
863d1004 252 pr_err("Status Error: 0x%08x\n", status);
56196826 253#endif
863d1004
JJH
254 return -ECOMM;
255 }
5d4fc8d9 256
1677eef4
AG
257 if (timeout-- <= 0)
258 break;
5d4fc8d9 259
1677eef4
AG
260 udelay(1000);
261 }
5d4fc8d9 262
5b0c942f 263 if (timeout <= 0) {
56196826 264#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
d8e3d420 265 pr_err("Timeout waiting card ready\n");
56196826 266#endif
915ffa52 267 return -ETIMEDOUT;
5d4fc8d9
RR
268 }
269
270 return 0;
271}
272
da61fa5f 273int mmc_set_blocklen(struct mmc *mmc, int len)
272cc70b
AF
274{
275 struct mmc_cmd cmd;
83dc4227 276 int err;
272cc70b 277
786e8f81 278 if (mmc->ddr_mode)
d22e3d46
JC
279 return 0;
280
272cc70b
AF
281 cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
282 cmd.resp_type = MMC_RSP_R1;
283 cmd.cmdarg = len;
272cc70b 284
83dc4227
KVA
285 err = mmc_send_cmd(mmc, &cmd, NULL);
286
287#ifdef CONFIG_MMC_QUIRKS
288 if (err && (mmc->quirks & MMC_QUIRK_RETRY_SET_BLOCKLEN)) {
289 int retries = 4;
290 /*
291 * It has been seen that SET_BLOCKLEN may fail on the first
292 * attempt, let's try a few more time
293 */
294 do {
295 err = mmc_send_cmd(mmc, &cmd, NULL);
296 if (!err)
297 break;
298 } while (retries--);
299 }
300#endif
301
302 return err;
272cc70b
AF
303}
304
f99c2efe 305#ifdef MMC_SUPPORTS_TUNING
9815e3ba
JJH
306static const u8 tuning_blk_pattern_4bit[] = {
307 0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
308 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
309 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
310 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
311 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
312 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
313 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
314 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
315};
316
317static const u8 tuning_blk_pattern_8bit[] = {
318 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
319 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
320 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
321 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
322 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
323 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
324 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
325 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
326 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
327 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
328 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
329 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
330 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
331 0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
332 0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
333 0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
334};
335
336int mmc_send_tuning(struct mmc *mmc, u32 opcode, int *cmd_error)
337{
338 struct mmc_cmd cmd;
339 struct mmc_data data;
340 const u8 *tuning_block_pattern;
341 int size, err;
342
343 if (mmc->bus_width == 8) {
344 tuning_block_pattern = tuning_blk_pattern_8bit;
345 size = sizeof(tuning_blk_pattern_8bit);
346 } else if (mmc->bus_width == 4) {
347 tuning_block_pattern = tuning_blk_pattern_4bit;
348 size = sizeof(tuning_blk_pattern_4bit);
349 } else {
350 return -EINVAL;
351 }
352
353 ALLOC_CACHE_ALIGN_BUFFER(u8, data_buf, size);
354
355 cmd.cmdidx = opcode;
356 cmd.cmdarg = 0;
357 cmd.resp_type = MMC_RSP_R1;
358
359 data.dest = (void *)data_buf;
360 data.blocks = 1;
361 data.blocksize = size;
362 data.flags = MMC_DATA_READ;
363
364 err = mmc_send_cmd(mmc, &cmd, &data);
365 if (err)
366 return err;
367
368 if (memcmp(data_buf, tuning_block_pattern, size))
369 return -EIO;
370
371 return 0;
372}
f99c2efe 373#endif
9815e3ba 374
ff8fef56 375static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
fdbb873e 376 lbaint_t blkcnt)
272cc70b
AF
377{
378 struct mmc_cmd cmd;
379 struct mmc_data data;
380
4a1a06bc
AS
381 if (blkcnt > 1)
382 cmd.cmdidx = MMC_CMD_READ_MULTIPLE_BLOCK;
383 else
384 cmd.cmdidx = MMC_CMD_READ_SINGLE_BLOCK;
272cc70b
AF
385
386 if (mmc->high_capacity)
4a1a06bc 387 cmd.cmdarg = start;
272cc70b 388 else
4a1a06bc 389 cmd.cmdarg = start * mmc->read_bl_len;
272cc70b
AF
390
391 cmd.resp_type = MMC_RSP_R1;
272cc70b
AF
392
393 data.dest = dst;
4a1a06bc 394 data.blocks = blkcnt;
272cc70b
AF
395 data.blocksize = mmc->read_bl_len;
396 data.flags = MMC_DATA_READ;
397
4a1a06bc
AS
398 if (mmc_send_cmd(mmc, &cmd, &data))
399 return 0;
272cc70b 400
4a1a06bc
AS
401 if (blkcnt > 1) {
402 cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
403 cmd.cmdarg = 0;
404 cmd.resp_type = MMC_RSP_R1b;
4a1a06bc 405 if (mmc_send_cmd(mmc, &cmd, NULL)) {
56196826 406#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
d8e3d420 407 pr_err("mmc fail to send stop cmd\n");
56196826 408#endif
4a1a06bc
AS
409 return 0;
410 }
272cc70b
AF
411 }
412
4a1a06bc 413 return blkcnt;
272cc70b
AF
414}
415
c4d660d4 416#if CONFIG_IS_ENABLED(BLK)
7dba0b93 417ulong mmc_bread(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, void *dst)
33fb211d 418#else
7dba0b93
SG
419ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
420 void *dst)
33fb211d 421#endif
272cc70b 422{
c4d660d4 423#if CONFIG_IS_ENABLED(BLK)
33fb211d
SG
424 struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
425#endif
bcce53d0 426 int dev_num = block_dev->devnum;
873cc1d7 427 int err;
4a1a06bc
AS
428 lbaint_t cur, blocks_todo = blkcnt;
429
430 if (blkcnt == 0)
431 return 0;
272cc70b 432
4a1a06bc 433 struct mmc *mmc = find_mmc_device(dev_num);
272cc70b
AF
434 if (!mmc)
435 return 0;
436
b5b838f1
MV
437 if (CONFIG_IS_ENABLED(MMC_TINY))
438 err = mmc_switch_part(mmc, block_dev->hwpart);
439 else
440 err = blk_dselect_hwpart(block_dev, block_dev->hwpart);
441
873cc1d7
SW
442 if (err < 0)
443 return 0;
444
c40fdca6 445 if ((start + blkcnt) > block_dev->lba) {
56196826 446#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
d8e3d420
JJH
447 pr_err("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
448 start + blkcnt, block_dev->lba);
56196826 449#endif
d2bf29e3
LW
450 return 0;
451 }
272cc70b 452
11692991 453 if (mmc_set_blocklen(mmc, mmc->read_bl_len)) {
d4d64889 454 pr_debug("%s: Failed to set blocklen\n", __func__);
272cc70b 455 return 0;
11692991 456 }
272cc70b 457
4a1a06bc 458 do {
93bfd616
PA
459 cur = (blocks_todo > mmc->cfg->b_max) ?
460 mmc->cfg->b_max : blocks_todo;
11692991 461 if (mmc_read_blocks(mmc, dst, start, cur) != cur) {
d4d64889 462 pr_debug("%s: Failed to read blocks\n", __func__);
4a1a06bc 463 return 0;
11692991 464 }
4a1a06bc
AS
465 blocks_todo -= cur;
466 start += cur;
467 dst += cur * mmc->read_bl_len;
468 } while (blocks_todo > 0);
272cc70b
AF
469
470 return blkcnt;
471}
472
fdbb873e 473static int mmc_go_idle(struct mmc *mmc)
272cc70b
AF
474{
475 struct mmc_cmd cmd;
476 int err;
477
478 udelay(1000);
479
480 cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
481 cmd.cmdarg = 0;
482 cmd.resp_type = MMC_RSP_NONE;
272cc70b
AF
483
484 err = mmc_send_cmd(mmc, &cmd, NULL);
485
486 if (err)
487 return err;
488
489 udelay(2000);
490
491 return 0;
492}
493
f99c2efe 494#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
c10b85d6
JJH
495static int mmc_switch_voltage(struct mmc *mmc, int signal_voltage)
496{
497 struct mmc_cmd cmd;
498 int err = 0;
499
500 /*
501 * Send CMD11 only if the request is to switch the card to
502 * 1.8V signalling.
503 */
504 if (signal_voltage == MMC_SIGNAL_VOLTAGE_330)
505 return mmc_set_signal_voltage(mmc, signal_voltage);
506
507 cmd.cmdidx = SD_CMD_SWITCH_UHS18V;
508 cmd.cmdarg = 0;
509 cmd.resp_type = MMC_RSP_R1;
510
511 err = mmc_send_cmd(mmc, &cmd, NULL);
512 if (err)
513 return err;
514
515 if (!mmc_host_is_spi(mmc) && (cmd.response[0] & MMC_STATUS_ERROR))
516 return -EIO;
517
518 /*
519 * The card should drive cmd and dat[0:3] low immediately
520 * after the response of cmd11, but wait 100 us to be sure
521 */
522 err = mmc_wait_dat0(mmc, 0, 100);
523 if (err == -ENOSYS)
524 udelay(100);
525 else if (err)
526 return -ETIMEDOUT;
527
528 /*
529 * During a signal voltage level switch, the clock must be gated
530 * for 5 ms according to the SD spec
531 */
65117182 532 mmc_set_clock(mmc, mmc->clock, MMC_CLK_DISABLE);
c10b85d6
JJH
533
534 err = mmc_set_signal_voltage(mmc, signal_voltage);
535 if (err)
536 return err;
537
538 /* Keep clock gated for at least 10 ms, though spec only says 5 ms */
539 mdelay(10);
65117182 540 mmc_set_clock(mmc, mmc->clock, MMC_CLK_ENABLE);
c10b85d6
JJH
541
542 /*
543 * Failure to switch is indicated by the card holding
544 * dat[0:3] low. Wait for at least 1 ms according to spec
545 */
546 err = mmc_wait_dat0(mmc, 1, 1000);
547 if (err == -ENOSYS)
548 udelay(1000);
549 else if (err)
550 return -ETIMEDOUT;
551
552 return 0;
553}
f99c2efe 554#endif
c10b85d6
JJH
555
556static int sd_send_op_cond(struct mmc *mmc, bool uhs_en)
272cc70b
AF
557{
558 int timeout = 1000;
559 int err;
560 struct mmc_cmd cmd;
561
1677eef4 562 while (1) {
272cc70b
AF
563 cmd.cmdidx = MMC_CMD_APP_CMD;
564 cmd.resp_type = MMC_RSP_R1;
565 cmd.cmdarg = 0;
272cc70b
AF
566
567 err = mmc_send_cmd(mmc, &cmd, NULL);
568
569 if (err)
570 return err;
571
572 cmd.cmdidx = SD_CMD_APP_SEND_OP_COND;
573 cmd.resp_type = MMC_RSP_R3;
250de12b
SB
574
575 /*
576 * Most cards do not answer if some reserved bits
577 * in the ocr are set. However, Some controller
578 * can set bit 7 (reserved for low voltages), but
579 * how to manage low voltages SD card is not yet
580 * specified.
581 */
d52ebf10 582 cmd.cmdarg = mmc_host_is_spi(mmc) ? 0 :
93bfd616 583 (mmc->cfg->voltages & 0xff8000);
272cc70b
AF
584
585 if (mmc->version == SD_VERSION_2)
586 cmd.cmdarg |= OCR_HCS;
587
c10b85d6
JJH
588 if (uhs_en)
589 cmd.cmdarg |= OCR_S18R;
590
272cc70b
AF
591 err = mmc_send_cmd(mmc, &cmd, NULL);
592
593 if (err)
594 return err;
595
1677eef4
AG
596 if (cmd.response[0] & OCR_BUSY)
597 break;
598
599 if (timeout-- <= 0)
915ffa52 600 return -EOPNOTSUPP;
272cc70b 601
1677eef4
AG
602 udelay(1000);
603 }
272cc70b
AF
604
605 if (mmc->version != SD_VERSION_2)
606 mmc->version = SD_VERSION_1_0;
607
d52ebf10
TC
608 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
609 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
610 cmd.resp_type = MMC_RSP_R3;
611 cmd.cmdarg = 0;
d52ebf10
TC
612
613 err = mmc_send_cmd(mmc, &cmd, NULL);
614
615 if (err)
616 return err;
617 }
618
998be3dd 619 mmc->ocr = cmd.response[0];
272cc70b 620
f99c2efe 621#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
c10b85d6
JJH
622 if (uhs_en && !(mmc_host_is_spi(mmc)) && (cmd.response[0] & 0x41000000)
623 == 0x41000000) {
624 err = mmc_switch_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
625 if (err)
626 return err;
627 }
f99c2efe 628#endif
c10b85d6 629
272cc70b
AF
630 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
631 mmc->rca = 0;
632
633 return 0;
634}
635
5289b535 636static int mmc_send_op_cond_iter(struct mmc *mmc, int use_arg)
272cc70b 637{
5289b535 638 struct mmc_cmd cmd;
272cc70b
AF
639 int err;
640
5289b535
AG
641 cmd.cmdidx = MMC_CMD_SEND_OP_COND;
642 cmd.resp_type = MMC_RSP_R3;
643 cmd.cmdarg = 0;
5a20397b
RH
644 if (use_arg && !mmc_host_is_spi(mmc))
645 cmd.cmdarg = OCR_HCS |
93bfd616 646 (mmc->cfg->voltages &
a626c8d4
AG
647 (mmc->ocr & OCR_VOLTAGE_MASK)) |
648 (mmc->ocr & OCR_ACCESS_MODE);
e9550449 649
5289b535 650 err = mmc_send_cmd(mmc, &cmd, NULL);
e9550449
CLC
651 if (err)
652 return err;
5289b535 653 mmc->ocr = cmd.response[0];
e9550449
CLC
654 return 0;
655}
656
750121c3 657static int mmc_send_op_cond(struct mmc *mmc)
e9550449 658{
e9550449
CLC
659 int err, i;
660
272cc70b
AF
661 /* Some cards seem to need this */
662 mmc_go_idle(mmc);
663
31cacbab 664 /* Asking to the card its capabilities */
e9550449 665 for (i = 0; i < 2; i++) {
5289b535 666 err = mmc_send_op_cond_iter(mmc, i != 0);
e9550449
CLC
667 if (err)
668 return err;
cd6881b5 669
e9550449 670 /* exit if not busy (flag seems to be inverted) */
a626c8d4 671 if (mmc->ocr & OCR_BUSY)
bd47c135 672 break;
e9550449 673 }
bd47c135
AG
674 mmc->op_cond_pending = 1;
675 return 0;
e9550449 676}
cd6881b5 677
750121c3 678static int mmc_complete_op_cond(struct mmc *mmc)
e9550449
CLC
679{
680 struct mmc_cmd cmd;
681 int timeout = 1000;
36332b6e 682 ulong start;
e9550449 683 int err;
cd6881b5 684
e9550449 685 mmc->op_cond_pending = 0;
cc17c01f 686 if (!(mmc->ocr & OCR_BUSY)) {
d188b113
YL
687 /* Some cards seem to need this */
688 mmc_go_idle(mmc);
689
cc17c01f 690 start = get_timer(0);
1677eef4 691 while (1) {
cc17c01f
AG
692 err = mmc_send_op_cond_iter(mmc, 1);
693 if (err)
694 return err;
1677eef4
AG
695 if (mmc->ocr & OCR_BUSY)
696 break;
cc17c01f 697 if (get_timer(start) > timeout)
915ffa52 698 return -EOPNOTSUPP;
cc17c01f 699 udelay(100);
1677eef4 700 }
cc17c01f 701 }
272cc70b 702
d52ebf10
TC
703 if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
704 cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
705 cmd.resp_type = MMC_RSP_R3;
706 cmd.cmdarg = 0;
d52ebf10
TC
707
708 err = mmc_send_cmd(mmc, &cmd, NULL);
709
710 if (err)
711 return err;
a626c8d4
AG
712
713 mmc->ocr = cmd.response[0];
d52ebf10
TC
714 }
715
272cc70b 716 mmc->version = MMC_VERSION_UNKNOWN;
272cc70b
AF
717
718 mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
def816a2 719 mmc->rca = 1;
272cc70b
AF
720
721 return 0;
722}
723
724
fdbb873e 725static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
272cc70b
AF
726{
727 struct mmc_cmd cmd;
728 struct mmc_data data;
729 int err;
730
731 /* Get the Card Status Register */
732 cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
733 cmd.resp_type = MMC_RSP_R1;
734 cmd.cmdarg = 0;
272cc70b 735
cdfd1ac6 736 data.dest = (char *)ext_csd;
272cc70b 737 data.blocks = 1;
8bfa195e 738 data.blocksize = MMC_MAX_BLOCK_LEN;
272cc70b
AF
739 data.flags = MMC_DATA_READ;
740
741 err = mmc_send_cmd(mmc, &cmd, &data);
742
743 return err;
744}
745
6892550c
MV
746static int __mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value,
747 bool send_status)
272cc70b 748{
bb98b8c5 749 unsigned int status, start;
272cc70b 750 struct mmc_cmd cmd;
39320c53 751 int timeout = DEFAULT_CMD6_TIMEOUT_MS;
513e00b6
JJH
752 bool is_part_switch = (set == EXT_CSD_CMD_SET_NORMAL) &&
753 (index == EXT_CSD_PART_CONF);
a9003dc6 754 int retries = 3;
5d4fc8d9 755 int ret;
272cc70b 756
39320c53
JJH
757 if (mmc->gen_cmd6_time)
758 timeout = mmc->gen_cmd6_time * 10;
759
513e00b6
JJH
760 if (is_part_switch && mmc->part_switch_time)
761 timeout = mmc->part_switch_time * 10;
762
272cc70b
AF
763 cmd.cmdidx = MMC_CMD_SWITCH;
764 cmd.resp_type = MMC_RSP_R1b;
765 cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
5d4fc8d9
RR
766 (index << 16) |
767 (value << 8);
272cc70b 768
bb98b8c5 769 do {
a9003dc6 770 ret = mmc_send_cmd(mmc, &cmd, NULL);
bb98b8c5 771 } while (ret && retries-- > 0);
5d4fc8d9 772
bb98b8c5
JJH
773 if (ret)
774 return ret;
6892550c 775
bb98b8c5 776 start = get_timer(0);
a9003dc6 777
bb98b8c5
JJH
778 /* poll dat0 for rdy/buys status */
779 ret = mmc_wait_dat0(mmc, 1, timeout);
780 if (ret && ret != -ENOSYS)
781 return ret;
5d4fc8d9 782
bb98b8c5
JJH
783 /*
784 * In cases when not allowed to poll by using CMD13 or because we aren't
785 * capable of polling by using mmc_wait_dat0, then rely on waiting the
786 * stated timeout to be sufficient.
787 */
788 if (ret == -ENOSYS && !send_status)
789 mdelay(timeout);
790
791 /* Finally wait until the card is ready or indicates a failure
792 * to switch. It doesn't hurt to use CMD13 here even if send_status
793 * is false, because by now (after 'timeout' ms) the bus should be
794 * reliable.
795 */
796 do {
797 ret = mmc_send_status(mmc, &status);
798
799 if (!ret && (status & MMC_STATUS_SWITCH_ERROR)) {
800 pr_debug("switch failed %d/%d/0x%x !\n", set, index,
801 value);
802 return -EIO;
803 }
804 if (!ret && (status & MMC_STATUS_RDY_FOR_DATA))
805 return 0;
806 udelay(100);
807 } while (get_timer(start) < timeout);
5d4fc8d9 808
bb98b8c5 809 return -ETIMEDOUT;
272cc70b
AF
810}
811
6892550c
MV
812int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
813{
814 return __mmc_switch(mmc, set, index, value, true);
815}
816
62d77cea 817#if !CONFIG_IS_ENABLED(MMC_TINY)
b9a2a0e2
MV
818static int mmc_set_card_speed(struct mmc *mmc, enum bus_mode mode,
819 bool hsdowngrade)
272cc70b 820{
272cc70b 821 int err;
3862b854
JJH
822 int speed_bits;
823
824 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
825
826 switch (mode) {
827 case MMC_HS:
828 case MMC_HS_52:
829 case MMC_DDR_52:
830 speed_bits = EXT_CSD_TIMING_HS;
634d4849 831 break;
baef2070 832#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)
634d4849
KVA
833 case MMC_HS_200:
834 speed_bits = EXT_CSD_TIMING_HS200;
835 break;
3dd2626f
PF
836#endif
837#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
838 case MMC_HS_400:
839 speed_bits = EXT_CSD_TIMING_HS400;
840 break;
baef2070 841#endif
3862b854
JJH
842 case MMC_LEGACY:
843 speed_bits = EXT_CSD_TIMING_LEGACY;
844 break;
845 default:
846 return -EINVAL;
847 }
6892550c
MV
848
849 err = __mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
850 speed_bits, !hsdowngrade);
3862b854
JJH
851 if (err)
852 return err;
853
b9a2a0e2
MV
854#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) || \
855 CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
856 /*
857 * In case the eMMC is in HS200/HS400 mode and we are downgrading
858 * to HS mode, the card clock are still running much faster than
859 * the supported HS mode clock, so we can not reliably read out
860 * Extended CSD. Reconfigure the controller to run at HS mode.
861 */
862 if (hsdowngrade) {
863 mmc_select_mode(mmc, MMC_HS);
864 mmc_set_clock(mmc, mmc_mode2freq(mmc, MMC_HS), false);
865 }
866#endif
867
3862b854
JJH
868 if ((mode == MMC_HS) || (mode == MMC_HS_52)) {
869 /* Now check to see that it worked */
870 err = mmc_send_ext_csd(mmc, test_csd);
871 if (err)
872 return err;
873
874 /* No high-speed support */
875 if (!test_csd[EXT_CSD_HS_TIMING])
876 return -ENOTSUPP;
877 }
878
879 return 0;
880}
881
882static int mmc_get_capabilities(struct mmc *mmc)
883{
884 u8 *ext_csd = mmc->ext_csd;
885 char cardtype;
272cc70b 886
00e446fa 887 mmc->card_caps = MMC_MODE_1BIT | MMC_CAP(MMC_LEGACY);
272cc70b 888
d52ebf10
TC
889 if (mmc_host_is_spi(mmc))
890 return 0;
891
272cc70b
AF
892 /* Only version 4 supports high-speed */
893 if (mmc->version < MMC_VERSION_4)
894 return 0;
895
3862b854 896 if (!ext_csd) {
d8e3d420 897 pr_err("No ext_csd found!\n"); /* this should enver happen */
3862b854
JJH
898 return -ENOTSUPP;
899 }
272cc70b 900
3862b854 901 mmc->card_caps |= MMC_MODE_4BIT | MMC_MODE_8BIT;
272cc70b 902
3dd2626f 903 cardtype = ext_csd[EXT_CSD_CARD_TYPE];
bc1e3272 904 mmc->cardtype = cardtype;
272cc70b 905
baef2070 906#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)
634d4849
KVA
907 if (cardtype & (EXT_CSD_CARD_TYPE_HS200_1_2V |
908 EXT_CSD_CARD_TYPE_HS200_1_8V)) {
909 mmc->card_caps |= MMC_MODE_HS200;
910 }
3dd2626f
PF
911#endif
912#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
913 if (cardtype & (EXT_CSD_CARD_TYPE_HS400_1_2V |
914 EXT_CSD_CARD_TYPE_HS400_1_8V)) {
915 mmc->card_caps |= MMC_MODE_HS400;
916 }
baef2070 917#endif
d22e3d46 918 if (cardtype & EXT_CSD_CARD_TYPE_52) {
3862b854 919 if (cardtype & EXT_CSD_CARD_TYPE_DDR_52)
d22e3d46 920 mmc->card_caps |= MMC_MODE_DDR_52MHz;
3862b854 921 mmc->card_caps |= MMC_MODE_HS_52MHz;
d22e3d46 922 }
3862b854
JJH
923 if (cardtype & EXT_CSD_CARD_TYPE_26)
924 mmc->card_caps |= MMC_MODE_HS;
272cc70b
AF
925
926 return 0;
927}
62d77cea 928#endif
272cc70b 929
f866a46d
SW
930static int mmc_set_capacity(struct mmc *mmc, int part_num)
931{
932 switch (part_num) {
933 case 0:
934 mmc->capacity = mmc->capacity_user;
935 break;
936 case 1:
937 case 2:
938 mmc->capacity = mmc->capacity_boot;
939 break;
940 case 3:
941 mmc->capacity = mmc->capacity_rpmb;
942 break;
943 case 4:
944 case 5:
945 case 6:
946 case 7:
947 mmc->capacity = mmc->capacity_gp[part_num - 4];
948 break;
949 default:
950 return -1;
951 }
952
c40fdca6 953 mmc_get_blk_desc(mmc)->lba = lldiv(mmc->capacity, mmc->read_bl_len);
f866a46d
SW
954
955 return 0;
956}
957
7dba0b93 958int mmc_switch_part(struct mmc *mmc, unsigned int part_num)
bc897b1d 959{
f866a46d 960 int ret;
0538477c 961 int retry = 3;
bc897b1d 962
0538477c
JJH
963 do {
964 ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
965 EXT_CSD_PART_CONF,
966 (mmc->part_config & ~PART_ACCESS_MASK)
967 | (part_num & PART_ACCESS_MASK));
968 } while (ret && retry--);
f866a46d 969
6dc93e70
PB
970 /*
971 * Set the capacity if the switch succeeded or was intended
972 * to return to representing the raw device.
973 */
873cc1d7 974 if ((ret == 0) || ((ret == -ENODEV) && (part_num == 0))) {
6dc93e70 975 ret = mmc_set_capacity(mmc, part_num);
fdbb139f 976 mmc_get_blk_desc(mmc)->hwpart = part_num;
873cc1d7 977 }
6dc93e70
PB
978
979 return ret;
bc897b1d
LW
980}
981
cf17789e 982#if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING)
ac9da0e0
DSC
983int mmc_hwpart_config(struct mmc *mmc,
984 const struct mmc_hwpart_conf *conf,
985 enum mmc_hwpart_conf_mode mode)
986{
987 u8 part_attrs = 0;
988 u32 enh_size_mult;
989 u32 enh_start_addr;
990 u32 gp_size_mult[4];
991 u32 max_enh_size_mult;
992 u32 tot_enh_size_mult = 0;
8dda5b0e 993 u8 wr_rel_set;
ac9da0e0
DSC
994 int i, pidx, err;
995 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
996
997 if (mode < MMC_HWPART_CONF_CHECK || mode > MMC_HWPART_CONF_COMPLETE)
998 return -EINVAL;
999
1000 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4_41)) {
d8e3d420 1001 pr_err("eMMC >= 4.4 required for enhanced user data area\n");
ac9da0e0
DSC
1002 return -EMEDIUMTYPE;
1003 }
1004
1005 if (!(mmc->part_support & PART_SUPPORT)) {
d8e3d420 1006 pr_err("Card does not support partitioning\n");
ac9da0e0
DSC
1007 return -EMEDIUMTYPE;
1008 }
1009
1010 if (!mmc->hc_wp_grp_size) {
d8e3d420 1011 pr_err("Card does not define HC WP group size\n");
ac9da0e0
DSC
1012 return -EMEDIUMTYPE;
1013 }
1014
1015 /* check partition alignment and total enhanced size */
1016 if (conf->user.enh_size) {
1017 if (conf->user.enh_size % mmc->hc_wp_grp_size ||
1018 conf->user.enh_start % mmc->hc_wp_grp_size) {
d8e3d420 1019 pr_err("User data enhanced area not HC WP group "
ac9da0e0
DSC
1020 "size aligned\n");
1021 return -EINVAL;
1022 }
1023 part_attrs |= EXT_CSD_ENH_USR;
1024 enh_size_mult = conf->user.enh_size / mmc->hc_wp_grp_size;
1025 if (mmc->high_capacity) {
1026 enh_start_addr = conf->user.enh_start;
1027 } else {
1028 enh_start_addr = (conf->user.enh_start << 9);
1029 }
1030 } else {
1031 enh_size_mult = 0;
1032 enh_start_addr = 0;
1033 }
1034 tot_enh_size_mult += enh_size_mult;
1035
1036 for (pidx = 0; pidx < 4; pidx++) {
1037 if (conf->gp_part[pidx].size % mmc->hc_wp_grp_size) {
d8e3d420 1038 pr_err("GP%i partition not HC WP group size "
ac9da0e0
DSC
1039 "aligned\n", pidx+1);
1040 return -EINVAL;
1041 }
1042 gp_size_mult[pidx] = conf->gp_part[pidx].size / mmc->hc_wp_grp_size;
1043 if (conf->gp_part[pidx].size && conf->gp_part[pidx].enhanced) {
1044 part_attrs |= EXT_CSD_ENH_GP(pidx);
1045 tot_enh_size_mult += gp_size_mult[pidx];
1046 }
1047 }
1048
1049 if (part_attrs && ! (mmc->part_support & ENHNCD_SUPPORT)) {
d8e3d420 1050 pr_err("Card does not support enhanced attribute\n");
ac9da0e0
DSC
1051 return -EMEDIUMTYPE;
1052 }
1053
1054 err = mmc_send_ext_csd(mmc, ext_csd);
1055 if (err)
1056 return err;
1057
1058 max_enh_size_mult =
1059 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+2] << 16) +
1060 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT+1] << 8) +
1061 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT];
1062 if (tot_enh_size_mult > max_enh_size_mult) {
d8e3d420 1063 pr_err("Total enhanced size exceeds maximum (%u > %u)\n",
ac9da0e0
DSC
1064 tot_enh_size_mult, max_enh_size_mult);
1065 return -EMEDIUMTYPE;
1066 }
1067
8dda5b0e
DSC
1068 /* The default value of EXT_CSD_WR_REL_SET is device
1069 * dependent, the values can only be changed if the
1070 * EXT_CSD_HS_CTRL_REL bit is set. The values can be
1071 * changed only once and before partitioning is completed. */
1072 wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
1073 if (conf->user.wr_rel_change) {
1074 if (conf->user.wr_rel_set)
1075 wr_rel_set |= EXT_CSD_WR_DATA_REL_USR;
1076 else
1077 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_USR;
1078 }
1079 for (pidx = 0; pidx < 4; pidx++) {
1080 if (conf->gp_part[pidx].wr_rel_change) {
1081 if (conf->gp_part[pidx].wr_rel_set)
1082 wr_rel_set |= EXT_CSD_WR_DATA_REL_GP(pidx);
1083 else
1084 wr_rel_set &= ~EXT_CSD_WR_DATA_REL_GP(pidx);
1085 }
1086 }
1087
1088 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET] &&
1089 !(ext_csd[EXT_CSD_WR_REL_PARAM] & EXT_CSD_HS_CTRL_REL)) {
1090 puts("Card does not support host controlled partition write "
1091 "reliability settings\n");
1092 return -EMEDIUMTYPE;
1093 }
1094
ac9da0e0
DSC
1095 if (ext_csd[EXT_CSD_PARTITION_SETTING] &
1096 EXT_CSD_PARTITION_SETTING_COMPLETED) {
d8e3d420 1097 pr_err("Card already partitioned\n");
ac9da0e0
DSC
1098 return -EPERM;
1099 }
1100
1101 if (mode == MMC_HWPART_CONF_CHECK)
1102 return 0;
1103
1104 /* Partitioning requires high-capacity size definitions */
1105 if (!(ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01)) {
1106 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1107 EXT_CSD_ERASE_GROUP_DEF, 1);
1108
1109 if (err)
1110 return err;
1111
1112 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
1113
1114 /* update erase group size to be high-capacity */
1115 mmc->erase_grp_size =
1116 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
1117
1118 }
1119
1120 /* all OK, write the configuration */
1121 for (i = 0; i < 4; i++) {
1122 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1123 EXT_CSD_ENH_START_ADDR+i,
1124 (enh_start_addr >> (i*8)) & 0xFF);
1125 if (err)
1126 return err;
1127 }
1128 for (i = 0; i < 3; i++) {
1129 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1130 EXT_CSD_ENH_SIZE_MULT+i,
1131 (enh_size_mult >> (i*8)) & 0xFF);
1132 if (err)
1133 return err;
1134 }
1135 for (pidx = 0; pidx < 4; pidx++) {
1136 for (i = 0; i < 3; i++) {
1137 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1138 EXT_CSD_GP_SIZE_MULT+pidx*3+i,
1139 (gp_size_mult[pidx] >> (i*8)) & 0xFF);
1140 if (err)
1141 return err;
1142 }
1143 }
1144 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1145 EXT_CSD_PARTITIONS_ATTRIBUTE, part_attrs);
1146 if (err)
1147 return err;
1148
1149 if (mode == MMC_HWPART_CONF_SET)
1150 return 0;
1151
8dda5b0e
DSC
1152 /* The WR_REL_SET is a write-once register but shall be
1153 * written before setting PART_SETTING_COMPLETED. As it is
1154 * write-once we can only write it when completing the
1155 * partitioning. */
1156 if (wr_rel_set != ext_csd[EXT_CSD_WR_REL_SET]) {
1157 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1158 EXT_CSD_WR_REL_SET, wr_rel_set);
1159 if (err)
1160 return err;
1161 }
1162
ac9da0e0
DSC
1163 /* Setting PART_SETTING_COMPLETED confirms the partition
1164 * configuration but it only becomes effective after power
1165 * cycle, so we do not adjust the partition related settings
1166 * in the mmc struct. */
1167
1168 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1169 EXT_CSD_PARTITION_SETTING,
1170 EXT_CSD_PARTITION_SETTING_COMPLETED);
1171 if (err)
1172 return err;
1173
1174 return 0;
1175}
cf17789e 1176#endif
ac9da0e0 1177
e7881d85 1178#if !CONFIG_IS_ENABLED(DM_MMC)
48972d90
TR
1179int mmc_getcd(struct mmc *mmc)
1180{
1181 int cd;
1182
1183 cd = board_mmc_getcd(mmc);
1184
d4e1da4e 1185 if (cd < 0) {
93bfd616
PA
1186 if (mmc->cfg->ops->getcd)
1187 cd = mmc->cfg->ops->getcd(mmc);
d4e1da4e
PK
1188 else
1189 cd = 1;
1190 }
48972d90
TR
1191
1192 return cd;
1193}
8ca51e51 1194#endif
48972d90 1195
62d77cea 1196#if !CONFIG_IS_ENABLED(MMC_TINY)
fdbb873e 1197static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
272cc70b
AF
1198{
1199 struct mmc_cmd cmd;
1200 struct mmc_data data;
1201
1202 /* Switch the frequency */
1203 cmd.cmdidx = SD_CMD_SWITCH_FUNC;
1204 cmd.resp_type = MMC_RSP_R1;
1205 cmd.cmdarg = (mode << 31) | 0xffffff;
1206 cmd.cmdarg &= ~(0xf << (group * 4));
1207 cmd.cmdarg |= value << (group * 4);
272cc70b
AF
1208
1209 data.dest = (char *)resp;
1210 data.blocksize = 64;
1211 data.blocks = 1;
1212 data.flags = MMC_DATA_READ;
1213
1214 return mmc_send_cmd(mmc, &cmd, &data);
1215}
1216
d0c221fe 1217static int sd_get_capabilities(struct mmc *mmc)
272cc70b
AF
1218{
1219 int err;
1220 struct mmc_cmd cmd;
18e7c8f6
SM
1221 ALLOC_CACHE_ALIGN_BUFFER(__be32, scr, 2);
1222 ALLOC_CACHE_ALIGN_BUFFER(__be32, switch_status, 16);
272cc70b
AF
1223 struct mmc_data data;
1224 int timeout;
f99c2efe 1225#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
c10b85d6 1226 u32 sd3_bus_mode;
f99c2efe 1227#endif
272cc70b 1228
00e446fa 1229 mmc->card_caps = MMC_MODE_1BIT | MMC_CAP(SD_LEGACY);
272cc70b 1230
d52ebf10
TC
1231 if (mmc_host_is_spi(mmc))
1232 return 0;
1233
272cc70b
AF
1234 /* Read the SCR to find out if this card supports higher speeds */
1235 cmd.cmdidx = MMC_CMD_APP_CMD;
1236 cmd.resp_type = MMC_RSP_R1;
1237 cmd.cmdarg = mmc->rca << 16;
272cc70b
AF
1238
1239 err = mmc_send_cmd(mmc, &cmd, NULL);
1240
1241 if (err)
1242 return err;
1243
1244 cmd.cmdidx = SD_CMD_APP_SEND_SCR;
1245 cmd.resp_type = MMC_RSP_R1;
1246 cmd.cmdarg = 0;
272cc70b
AF
1247
1248 timeout = 3;
1249
1250retry_scr:
f781dd38 1251 data.dest = (char *)scr;
272cc70b
AF
1252 data.blocksize = 8;
1253 data.blocks = 1;
1254 data.flags = MMC_DATA_READ;
1255
1256 err = mmc_send_cmd(mmc, &cmd, &data);
1257
1258 if (err) {
1259 if (timeout--)
1260 goto retry_scr;
1261
1262 return err;
1263 }
1264
4e3d89ba
YK
1265 mmc->scr[0] = __be32_to_cpu(scr[0]);
1266 mmc->scr[1] = __be32_to_cpu(scr[1]);
272cc70b
AF
1267
1268 switch ((mmc->scr[0] >> 24) & 0xf) {
53e8e40b
BM
1269 case 0:
1270 mmc->version = SD_VERSION_1_0;
1271 break;
1272 case 1:
1273 mmc->version = SD_VERSION_1_10;
1274 break;
1275 case 2:
1276 mmc->version = SD_VERSION_2;
1277 if ((mmc->scr[0] >> 15) & 0x1)
1278 mmc->version = SD_VERSION_3;
1279 break;
1280 default:
1281 mmc->version = SD_VERSION_1_0;
1282 break;
272cc70b
AF
1283 }
1284
b44c7083
AS
1285 if (mmc->scr[0] & SD_DATA_4BIT)
1286 mmc->card_caps |= MMC_MODE_4BIT;
1287
272cc70b
AF
1288 /* Version 1.0 doesn't support switching */
1289 if (mmc->version == SD_VERSION_1_0)
1290 return 0;
1291
1292 timeout = 4;
1293 while (timeout--) {
1294 err = sd_switch(mmc, SD_SWITCH_CHECK, 0, 1,
f781dd38 1295 (u8 *)switch_status);
272cc70b
AF
1296
1297 if (err)
1298 return err;
1299
1300 /* The high-speed function is busy. Try again */
4e3d89ba 1301 if (!(__be32_to_cpu(switch_status[7]) & SD_HIGHSPEED_BUSY))
272cc70b
AF
1302 break;
1303 }
1304
272cc70b 1305 /* If high-speed isn't supported, we return */
d0c221fe
JJH
1306 if (__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED)
1307 mmc->card_caps |= MMC_CAP(SD_HS);
272cc70b 1308
f99c2efe 1309#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
c10b85d6
JJH
1310 /* Version before 3.0 don't support UHS modes */
1311 if (mmc->version < SD_VERSION_3)
1312 return 0;
1313
1314 sd3_bus_mode = __be32_to_cpu(switch_status[3]) >> 16 & 0x1f;
1315 if (sd3_bus_mode & SD_MODE_UHS_SDR104)
1316 mmc->card_caps |= MMC_CAP(UHS_SDR104);
1317 if (sd3_bus_mode & SD_MODE_UHS_SDR50)
1318 mmc->card_caps |= MMC_CAP(UHS_SDR50);
1319 if (sd3_bus_mode & SD_MODE_UHS_SDR25)
1320 mmc->card_caps |= MMC_CAP(UHS_SDR25);
1321 if (sd3_bus_mode & SD_MODE_UHS_SDR12)
1322 mmc->card_caps |= MMC_CAP(UHS_SDR12);
1323 if (sd3_bus_mode & SD_MODE_UHS_DDR50)
1324 mmc->card_caps |= MMC_CAP(UHS_DDR50);
f99c2efe 1325#endif
c10b85d6 1326
d0c221fe
JJH
1327 return 0;
1328}
1329
1330static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode)
1331{
1332 int err;
1333
1334 ALLOC_CACHE_ALIGN_BUFFER(uint, switch_status, 16);
c10b85d6 1335 int speed;
2c3fbf4c 1336
cf345760
MV
1337 /* SD version 1.00 and 1.01 does not support CMD 6 */
1338 if (mmc->version == SD_VERSION_1_0)
1339 return 0;
1340
c10b85d6
JJH
1341 switch (mode) {
1342 case SD_LEGACY:
c10b85d6
JJH
1343 speed = UHS_SDR12_BUS_SPEED;
1344 break;
1345 case SD_HS:
baef2070
JJH
1346 speed = HIGH_SPEED_BUS_SPEED;
1347 break;
1348#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
1349 case UHS_SDR12:
1350 speed = UHS_SDR12_BUS_SPEED;
1351 break;
c10b85d6
JJH
1352 case UHS_SDR25:
1353 speed = UHS_SDR25_BUS_SPEED;
1354 break;
1355 case UHS_SDR50:
1356 speed = UHS_SDR50_BUS_SPEED;
1357 break;
1358 case UHS_DDR50:
1359 speed = UHS_DDR50_BUS_SPEED;
1360 break;
1361 case UHS_SDR104:
1362 speed = UHS_SDR104_BUS_SPEED;
1363 break;
baef2070 1364#endif
c10b85d6
JJH
1365 default:
1366 return -EINVAL;
1367 }
1368
1369 err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, speed, (u8 *)switch_status);
d0c221fe
JJH
1370 if (err)
1371 return err;
1372
a0276f3e 1373 if (((__be32_to_cpu(switch_status[4]) >> 24) & 0xF) != speed)
d0c221fe 1374 return -ENOTSUPP;
272cc70b 1375
d0c221fe
JJH
1376 return 0;
1377}
1378
ec360e64 1379static int sd_select_bus_width(struct mmc *mmc, int w)
d0c221fe
JJH
1380{
1381 int err;
1382 struct mmc_cmd cmd;
1383
1384 if ((w != 4) && (w != 1))
1385 return -EINVAL;
1386
1387 cmd.cmdidx = MMC_CMD_APP_CMD;
1388 cmd.resp_type = MMC_RSP_R1;
1389 cmd.cmdarg = mmc->rca << 16;
1390
1391 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b
AF
1392 if (err)
1393 return err;
1394
d0c221fe
JJH
1395 cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
1396 cmd.resp_type = MMC_RSP_R1;
1397 if (w == 4)
1398 cmd.cmdarg = 2;
1399 else if (w == 1)
1400 cmd.cmdarg = 0;
1401 err = mmc_send_cmd(mmc, &cmd, NULL);
1402 if (err)
1403 return err;
272cc70b
AF
1404
1405 return 0;
1406}
62d77cea 1407#endif
272cc70b 1408
5b2e72f3 1409#if CONFIG_IS_ENABLED(MMC_WRITE)
3697e599
PF
1410static int sd_read_ssr(struct mmc *mmc)
1411{
5b2e72f3
JJH
1412 static const unsigned int sd_au_size[] = {
1413 0, SZ_16K / 512, SZ_32K / 512,
1414 SZ_64K / 512, SZ_128K / 512, SZ_256K / 512,
1415 SZ_512K / 512, SZ_1M / 512, SZ_2M / 512,
1416 SZ_4M / 512, SZ_8M / 512, (SZ_8M + SZ_4M) / 512,
1417 SZ_16M / 512, (SZ_16M + SZ_8M) / 512, SZ_32M / 512,
1418 SZ_64M / 512,
1419 };
3697e599
PF
1420 int err, i;
1421 struct mmc_cmd cmd;
1422 ALLOC_CACHE_ALIGN_BUFFER(uint, ssr, 16);
1423 struct mmc_data data;
1424 int timeout = 3;
1425 unsigned int au, eo, et, es;
1426
1427 cmd.cmdidx = MMC_CMD_APP_CMD;
1428 cmd.resp_type = MMC_RSP_R1;
1429 cmd.cmdarg = mmc->rca << 16;
1430
1431 err = mmc_send_cmd(mmc, &cmd, NULL);
1432 if (err)
1433 return err;
1434
1435 cmd.cmdidx = SD_CMD_APP_SD_STATUS;
1436 cmd.resp_type = MMC_RSP_R1;
1437 cmd.cmdarg = 0;
1438
1439retry_ssr:
1440 data.dest = (char *)ssr;
1441 data.blocksize = 64;
1442 data.blocks = 1;
1443 data.flags = MMC_DATA_READ;
1444
1445 err = mmc_send_cmd(mmc, &cmd, &data);
1446 if (err) {
1447 if (timeout--)
1448 goto retry_ssr;
1449
1450 return err;
1451 }
1452
1453 for (i = 0; i < 16; i++)
1454 ssr[i] = be32_to_cpu(ssr[i]);
1455
1456 au = (ssr[2] >> 12) & 0xF;
1457 if ((au <= 9) || (mmc->version == SD_VERSION_3)) {
1458 mmc->ssr.au = sd_au_size[au];
1459 es = (ssr[3] >> 24) & 0xFF;
1460 es |= (ssr[2] & 0xFF) << 8;
1461 et = (ssr[3] >> 18) & 0x3F;
1462 if (es && et) {
1463 eo = (ssr[3] >> 16) & 0x3;
1464 mmc->ssr.erase_timeout = (et * 1000) / es;
1465 mmc->ssr.erase_offset = eo * 1000;
1466 }
1467 } else {
d4d64889 1468 pr_debug("Invalid Allocation Unit Size.\n");
3697e599
PF
1469 }
1470
1471 return 0;
1472}
5b2e72f3 1473#endif
272cc70b
AF
1474/* frequency bases */
1475/* divided by 10 to be nice to platforms without floating point */
5f837c2c 1476static const int fbase[] = {
272cc70b
AF
1477 10000,
1478 100000,
1479 1000000,
1480 10000000,
1481};
1482
1483/* Multiplier values for TRAN_SPEED. Multiplied by 10 to be nice
1484 * to platforms without floating point.
1485 */
61fe076f 1486static const u8 multipliers[] = {
272cc70b
AF
1487 0, /* reserved */
1488 10,
1489 12,
1490 13,
1491 15,
1492 20,
1493 25,
1494 30,
1495 35,
1496 40,
1497 45,
1498 50,
1499 55,
1500 60,
1501 70,
1502 80,
1503};
1504
d0c221fe
JJH
1505static inline int bus_width(uint cap)
1506{
1507 if (cap == MMC_MODE_8BIT)
1508 return 8;
1509 if (cap == MMC_MODE_4BIT)
1510 return 4;
1511 if (cap == MMC_MODE_1BIT)
1512 return 1;
d8e3d420 1513 pr_warn("invalid bus witdh capability 0x%x\n", cap);
d0c221fe
JJH
1514 return 0;
1515}
1516
e7881d85 1517#if !CONFIG_IS_ENABLED(DM_MMC)
f99c2efe 1518#ifdef MMC_SUPPORTS_TUNING
ec841209
KVA
1519static int mmc_execute_tuning(struct mmc *mmc, uint opcode)
1520{
1521 return -ENOTSUPP;
1522}
f99c2efe 1523#endif
ec841209 1524
2a4d212f 1525static int mmc_set_ios(struct mmc *mmc)
272cc70b 1526{
2a4d212f
KVA
1527 int ret = 0;
1528
93bfd616 1529 if (mmc->cfg->ops->set_ios)
2a4d212f
KVA
1530 ret = mmc->cfg->ops->set_ios(mmc);
1531
1532 return ret;
272cc70b 1533}
8ca51e51 1534#endif
272cc70b 1535
35f67820 1536int mmc_set_clock(struct mmc *mmc, uint clock, bool disable)
272cc70b 1537{
c0fafe64 1538 if (!disable) {
9546eb92
JC
1539 if (clock > mmc->cfg->f_max)
1540 clock = mmc->cfg->f_max;
272cc70b 1541
9546eb92
JC
1542 if (clock < mmc->cfg->f_min)
1543 clock = mmc->cfg->f_min;
1544 }
272cc70b
AF
1545
1546 mmc->clock = clock;
35f67820 1547 mmc->clk_disable = disable;
272cc70b 1548
d2faadb5
JC
1549 debug("clock is %s (%dHz)\n", disable ? "disabled" : "enabled", clock);
1550
2a4d212f 1551 return mmc_set_ios(mmc);
272cc70b
AF
1552}
1553
2a4d212f 1554static int mmc_set_bus_width(struct mmc *mmc, uint width)
272cc70b
AF
1555{
1556 mmc->bus_width = width;
1557
2a4d212f 1558 return mmc_set_ios(mmc);
272cc70b
AF
1559}
1560
4c9d2aaa
JJH
1561#if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG)
1562/*
1563 * helper function to display the capabilities in a human
1564 * friendly manner. The capabilities include bus width and
1565 * supported modes.
1566 */
1567void mmc_dump_capabilities(const char *text, uint caps)
1568{
1569 enum bus_mode mode;
1570
d4d64889 1571 pr_debug("%s: widths [", text);
4c9d2aaa 1572 if (caps & MMC_MODE_8BIT)
d4d64889 1573 pr_debug("8, ");
4c9d2aaa 1574 if (caps & MMC_MODE_4BIT)
d4d64889 1575 pr_debug("4, ");
d0c221fe 1576 if (caps & MMC_MODE_1BIT)
d4d64889
MY
1577 pr_debug("1, ");
1578 pr_debug("\b\b] modes [");
4c9d2aaa
JJH
1579 for (mode = MMC_LEGACY; mode < MMC_MODES_END; mode++)
1580 if (MMC_CAP(mode) & caps)
d4d64889
MY
1581 pr_debug("%s, ", mmc_mode_name(mode));
1582 pr_debug("\b\b]\n");
4c9d2aaa
JJH
1583}
1584#endif
1585
d0c221fe
JJH
1586struct mode_width_tuning {
1587 enum bus_mode mode;
1588 uint widths;
f99c2efe 1589#ifdef MMC_SUPPORTS_TUNING
634d4849 1590 uint tuning;
f99c2efe 1591#endif
d0c221fe
JJH
1592};
1593
f99c2efe 1594#if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
bc1e3272
JJH
1595int mmc_voltage_to_mv(enum mmc_voltage voltage)
1596{
1597 switch (voltage) {
1598 case MMC_SIGNAL_VOLTAGE_000: return 0;
1599 case MMC_SIGNAL_VOLTAGE_330: return 3300;
1600 case MMC_SIGNAL_VOLTAGE_180: return 1800;
1601 case MMC_SIGNAL_VOLTAGE_120: return 1200;
1602 }
1603 return -EINVAL;
1604}
1605
aff5d3c8
KVA
1606static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
1607{
bc1e3272
JJH
1608 int err;
1609
1610 if (mmc->signal_voltage == signal_voltage)
1611 return 0;
1612
aff5d3c8 1613 mmc->signal_voltage = signal_voltage;
bc1e3272
JJH
1614 err = mmc_set_ios(mmc);
1615 if (err)
d4d64889 1616 pr_debug("unable to set voltage (err %d)\n", err);
bc1e3272
JJH
1617
1618 return err;
aff5d3c8 1619}
f99c2efe
JJH
1620#else
1621static inline int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
1622{
1623 return 0;
1624}
1625#endif
aff5d3c8 1626
62d77cea 1627#if !CONFIG_IS_ENABLED(MMC_TINY)
d0c221fe 1628static const struct mode_width_tuning sd_modes_by_pref[] = {
f99c2efe
JJH
1629#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
1630#ifdef MMC_SUPPORTS_TUNING
c10b85d6
JJH
1631 {
1632 .mode = UHS_SDR104,
1633 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1634 .tuning = MMC_CMD_SEND_TUNING_BLOCK
1635 },
f99c2efe 1636#endif
c10b85d6
JJH
1637 {
1638 .mode = UHS_SDR50,
1639 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1640 },
1641 {
1642 .mode = UHS_DDR50,
1643 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1644 },
1645 {
1646 .mode = UHS_SDR25,
1647 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1648 },
f99c2efe 1649#endif
d0c221fe
JJH
1650 {
1651 .mode = SD_HS,
1652 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1653 },
f99c2efe 1654#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
c10b85d6
JJH
1655 {
1656 .mode = UHS_SDR12,
1657 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1658 },
f99c2efe 1659#endif
d0c221fe
JJH
1660 {
1661 .mode = SD_LEGACY,
1662 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1663 }
1664};
1665
1666#define for_each_sd_mode_by_pref(caps, mwt) \
1667 for (mwt = sd_modes_by_pref;\
1668 mwt < sd_modes_by_pref + ARRAY_SIZE(sd_modes_by_pref);\
1669 mwt++) \
1670 if (caps & MMC_CAP(mwt->mode))
1671
01298da3 1672static int sd_select_mode_and_width(struct mmc *mmc, uint card_caps)
8ac8a263
JJH
1673{
1674 int err;
d0c221fe
JJH
1675 uint widths[] = {MMC_MODE_4BIT, MMC_MODE_1BIT};
1676 const struct mode_width_tuning *mwt;
f99c2efe 1677#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
c10b85d6 1678 bool uhs_en = (mmc->ocr & OCR_S18R) ? true : false;
f99c2efe
JJH
1679#else
1680 bool uhs_en = false;
1681#endif
c10b85d6
JJH
1682 uint caps;
1683
52d241df
JJH
1684#ifdef DEBUG
1685 mmc_dump_capabilities("sd card", card_caps);
1da8eb59 1686 mmc_dump_capabilities("host", mmc->host_caps);
52d241df 1687#endif
8ac8a263 1688
f49ff799
AP
1689 if (mmc_host_is_spi(mmc)) {
1690 mmc_set_bus_width(mmc, 1);
1691 mmc_select_mode(mmc, SD_LEGACY);
1692 mmc_set_clock(mmc, mmc->tran_speed, MMC_CLK_ENABLE);
1693 return 0;
1694 }
1695
8ac8a263 1696 /* Restrict card's capabilities by what the host can do */
1da8eb59 1697 caps = card_caps & mmc->host_caps;
d0c221fe 1698
c10b85d6
JJH
1699 if (!uhs_en)
1700 caps &= ~UHS_CAPS;
1701
1702 for_each_sd_mode_by_pref(caps, mwt) {
d0c221fe
JJH
1703 uint *w;
1704
1705 for (w = widths; w < widths + ARRAY_SIZE(widths); w++) {
c10b85d6 1706 if (*w & caps & mwt->widths) {
d4d64889
MY
1707 pr_debug("trying mode %s width %d (at %d MHz)\n",
1708 mmc_mode_name(mwt->mode),
1709 bus_width(*w),
1710 mmc_mode2freq(mmc, mwt->mode) / 1000000);
d0c221fe
JJH
1711
1712 /* configure the bus width (card + host) */
1713 err = sd_select_bus_width(mmc, bus_width(*w));
1714 if (err)
1715 goto error;
1716 mmc_set_bus_width(mmc, bus_width(*w));
1717
1718 /* configure the bus mode (card) */
1719 err = sd_set_card_speed(mmc, mwt->mode);
1720 if (err)
1721 goto error;
1722
1723 /* configure the bus mode (host) */
1724 mmc_select_mode(mmc, mwt->mode);
65117182
JC
1725 mmc_set_clock(mmc, mmc->tran_speed,
1726 MMC_CLK_ENABLE);
d0c221fe 1727
f99c2efe 1728#ifdef MMC_SUPPORTS_TUNING
c10b85d6
JJH
1729 /* execute tuning if needed */
1730 if (mwt->tuning && !mmc_host_is_spi(mmc)) {
1731 err = mmc_execute_tuning(mmc,
1732 mwt->tuning);
1733 if (err) {
d4d64889 1734 pr_debug("tuning failed\n");
c10b85d6
JJH
1735 goto error;
1736 }
1737 }
f99c2efe 1738#endif
c10b85d6 1739
5b2e72f3 1740#if CONFIG_IS_ENABLED(MMC_WRITE)
d0c221fe 1741 err = sd_read_ssr(mmc);
0a4c2b09 1742 if (err)
5b2e72f3
JJH
1743 pr_warn("unable to read ssr\n");
1744#endif
d0c221fe
JJH
1745 if (!err)
1746 return 0;
1747
d0c221fe
JJH
1748error:
1749 /* revert to a safer bus speed */
1750 mmc_select_mode(mmc, SD_LEGACY);
65117182
JC
1751 mmc_set_clock(mmc, mmc->tran_speed,
1752 MMC_CLK_ENABLE);
d0c221fe
JJH
1753 }
1754 }
8ac8a263
JJH
1755 }
1756
d4d64889 1757 pr_err("unable to select a mode\n");
d0c221fe 1758 return -ENOTSUPP;
8ac8a263
JJH
1759}
1760
7382e691
JJH
1761/*
1762 * read the compare the part of ext csd that is constant.
1763 * This can be used to check that the transfer is working
1764 * as expected.
1765 */
1766static int mmc_read_and_compare_ext_csd(struct mmc *mmc)
8ac8a263 1767{
7382e691 1768 int err;
dfda9d88 1769 const u8 *ext_csd = mmc->ext_csd;
7382e691
JJH
1770 ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
1771
1de06b9f
JJH
1772 if (mmc->version < MMC_VERSION_4)
1773 return 0;
1774
7382e691
JJH
1775 err = mmc_send_ext_csd(mmc, test_csd);
1776 if (err)
1777 return err;
1778
1779 /* Only compare read only fields */
1780 if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
1781 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
1782 ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
1783 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
1784 ext_csd[EXT_CSD_REV]
1785 == test_csd[EXT_CSD_REV] &&
1786 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1787 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
1788 memcmp(&ext_csd[EXT_CSD_SEC_CNT],
1789 &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
1790 return 0;
1791
1792 return -EBADMSG;
1793}
1794
f99c2efe 1795#if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
bc1e3272
JJH
1796static int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode,
1797 uint32_t allowed_mask)
1798{
1799 u32 card_mask = 0;
1800
1801 switch (mode) {
3dd2626f 1802 case MMC_HS_400:
bc1e3272 1803 case MMC_HS_200:
3dd2626f
PF
1804 if (mmc->cardtype & (EXT_CSD_CARD_TYPE_HS200_1_8V |
1805 EXT_CSD_CARD_TYPE_HS400_1_8V))
bc1e3272 1806 card_mask |= MMC_SIGNAL_VOLTAGE_180;
3dd2626f
PF
1807 if (mmc->cardtype & (EXT_CSD_CARD_TYPE_HS200_1_2V |
1808 EXT_CSD_CARD_TYPE_HS400_1_2V))
bc1e3272
JJH
1809 card_mask |= MMC_SIGNAL_VOLTAGE_120;
1810 break;
1811 case MMC_DDR_52:
1812 if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V)
1813 card_mask |= MMC_SIGNAL_VOLTAGE_330 |
1814 MMC_SIGNAL_VOLTAGE_180;
1815 if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_2V)
1816 card_mask |= MMC_SIGNAL_VOLTAGE_120;
1817 break;
1818 default:
1819 card_mask |= MMC_SIGNAL_VOLTAGE_330;
1820 break;
1821 }
1822
1823 while (card_mask & allowed_mask) {
1824 enum mmc_voltage best_match;
1825
1826 best_match = 1 << (ffs(card_mask & allowed_mask) - 1);
1827 if (!mmc_set_signal_voltage(mmc, best_match))
1828 return 0;
1829
1830 allowed_mask &= ~best_match;
1831 }
1832
1833 return -ENOTSUPP;
1834}
f99c2efe
JJH
1835#else
1836static inline int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode,
1837 uint32_t allowed_mask)
1838{
1839 return 0;
1840}
1841#endif
bc1e3272 1842
3862b854 1843static const struct mode_width_tuning mmc_modes_by_pref[] = {
3dd2626f
PF
1844#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
1845 {
1846 .mode = MMC_HS_400,
1847 .widths = MMC_MODE_8BIT,
1848 .tuning = MMC_CMD_SEND_TUNING_BLOCK_HS200
1849 },
1850#endif
f99c2efe 1851#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)
3862b854
JJH
1852 {
1853 .mode = MMC_HS_200,
1854 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
634d4849 1855 .tuning = MMC_CMD_SEND_TUNING_BLOCK_HS200
3862b854 1856 },
f99c2efe 1857#endif
3862b854
JJH
1858 {
1859 .mode = MMC_DDR_52,
1860 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
1861 },
1862 {
1863 .mode = MMC_HS_52,
1864 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1865 },
1866 {
1867 .mode = MMC_HS,
1868 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1869 },
1870 {
1871 .mode = MMC_LEGACY,
1872 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1873 }
1874};
1875
1876#define for_each_mmc_mode_by_pref(caps, mwt) \
1877 for (mwt = mmc_modes_by_pref;\
1878 mwt < mmc_modes_by_pref + ARRAY_SIZE(mmc_modes_by_pref);\
1879 mwt++) \
1880 if (caps & MMC_CAP(mwt->mode))
1881
1882static const struct ext_csd_bus_width {
1883 uint cap;
1884 bool is_ddr;
1885 uint ext_csd_bits;
1886} ext_csd_bus_width[] = {
1887 {MMC_MODE_8BIT, true, EXT_CSD_DDR_BUS_WIDTH_8},
1888 {MMC_MODE_4BIT, true, EXT_CSD_DDR_BUS_WIDTH_4},
1889 {MMC_MODE_8BIT, false, EXT_CSD_BUS_WIDTH_8},
1890 {MMC_MODE_4BIT, false, EXT_CSD_BUS_WIDTH_4},
1891 {MMC_MODE_1BIT, false, EXT_CSD_BUS_WIDTH_1},
1892};
1893
3dd2626f
PF
1894#if CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
1895static int mmc_select_hs400(struct mmc *mmc)
1896{
1897 int err;
1898
1899 /* Set timing to HS200 for tuning */
b9a2a0e2 1900 err = mmc_set_card_speed(mmc, MMC_HS_200, false);
3dd2626f
PF
1901 if (err)
1902 return err;
1903
1904 /* configure the bus mode (host) */
1905 mmc_select_mode(mmc, MMC_HS_200);
1906 mmc_set_clock(mmc, mmc->tran_speed, false);
1907
1908 /* execute tuning if needed */
1909 err = mmc_execute_tuning(mmc, MMC_CMD_SEND_TUNING_BLOCK_HS200);
1910 if (err) {
1911 debug("tuning failed\n");
1912 return err;
1913 }
1914
1915 /* Set back to HS */
5cf12031 1916 mmc_set_card_speed(mmc, MMC_HS, true);
3dd2626f
PF
1917
1918 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH,
1919 EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_FLAG);
1920 if (err)
1921 return err;
1922
b9a2a0e2 1923 err = mmc_set_card_speed(mmc, MMC_HS_400, false);
3dd2626f
PF
1924 if (err)
1925 return err;
1926
1927 mmc_select_mode(mmc, MMC_HS_400);
1928 err = mmc_set_clock(mmc, mmc->tran_speed, false);
1929 if (err)
1930 return err;
1931
1932 return 0;
1933}
1934#else
1935static int mmc_select_hs400(struct mmc *mmc)
1936{
1937 return -ENOTSUPP;
1938}
1939#endif
1940
3862b854
JJH
1941#define for_each_supported_width(caps, ddr, ecbv) \
1942 for (ecbv = ext_csd_bus_width;\
1943 ecbv < ext_csd_bus_width + ARRAY_SIZE(ext_csd_bus_width);\
1944 ecbv++) \
1945 if ((ddr == ecbv->is_ddr) && (caps & ecbv->cap))
1946
01298da3 1947static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps)
7382e691 1948{
8ac8a263 1949 int err;
3862b854
JJH
1950 const struct mode_width_tuning *mwt;
1951 const struct ext_csd_bus_width *ecbw;
8ac8a263 1952
52d241df
JJH
1953#ifdef DEBUG
1954 mmc_dump_capabilities("mmc", card_caps);
1da8eb59 1955 mmc_dump_capabilities("host", mmc->host_caps);
52d241df
JJH
1956#endif
1957
f49ff799
AP
1958 if (mmc_host_is_spi(mmc)) {
1959 mmc_set_bus_width(mmc, 1);
1960 mmc_select_mode(mmc, MMC_LEGACY);
1961 mmc_set_clock(mmc, mmc->tran_speed, MMC_CLK_ENABLE);
1962 return 0;
1963 }
1964
8ac8a263 1965 /* Restrict card's capabilities by what the host can do */
1da8eb59 1966 card_caps &= mmc->host_caps;
8ac8a263
JJH
1967
1968 /* Only version 4 of MMC supports wider bus widths */
1969 if (mmc->version < MMC_VERSION_4)
1970 return 0;
1971
dfda9d88 1972 if (!mmc->ext_csd) {
d4d64889 1973 pr_debug("No ext_csd found!\n"); /* this should enver happen */
dfda9d88
JJH
1974 return -ENOTSUPP;
1975 }
1976
b9a2a0e2
MV
1977#if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) || \
1978 CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
1979 /*
1980 * In case the eMMC is in HS200/HS400 mode, downgrade to HS mode
1981 * before doing anything else, since a transition from either of
1982 * the HS200/HS400 mode directly to legacy mode is not supported.
1983 */
1984 if (mmc->selected_mode == MMC_HS_200 ||
1985 mmc->selected_mode == MMC_HS_400)
1986 mmc_set_card_speed(mmc, MMC_HS, true);
1987 else
1988#endif
1989 mmc_set_clock(mmc, mmc->legacy_speed, MMC_CLK_ENABLE);
01298da3
JJH
1990
1991 for_each_mmc_mode_by_pref(card_caps, mwt) {
1992 for_each_supported_width(card_caps & mwt->widths,
3862b854 1993 mmc_is_mode_ddr(mwt->mode), ecbw) {
bc1e3272 1994 enum mmc_voltage old_voltage;
d4d64889
MY
1995 pr_debug("trying mode %s width %d (at %d MHz)\n",
1996 mmc_mode_name(mwt->mode),
1997 bus_width(ecbw->cap),
1998 mmc_mode2freq(mmc, mwt->mode) / 1000000);
bc1e3272
JJH
1999 old_voltage = mmc->signal_voltage;
2000 err = mmc_set_lowest_voltage(mmc, mwt->mode,
2001 MMC_ALL_SIGNAL_VOLTAGE);
2002 if (err)
2003 continue;
2004
3862b854
JJH
2005 /* configure the bus width (card + host) */
2006 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
2007 EXT_CSD_BUS_WIDTH,
2008 ecbw->ext_csd_bits & ~EXT_CSD_DDR_FLAG);
2009 if (err)
2010 goto error;
2011 mmc_set_bus_width(mmc, bus_width(ecbw->cap));
8ac8a263 2012
3dd2626f
PF
2013 if (mwt->mode == MMC_HS_400) {
2014 err = mmc_select_hs400(mmc);
2015 if (err) {
2016 printf("Select HS400 failed %d\n", err);
2017 goto error;
2018 }
2019 } else {
2020 /* configure the bus speed (card) */
b9a2a0e2 2021 err = mmc_set_card_speed(mmc, mwt->mode, false);
3862b854
JJH
2022 if (err)
2023 goto error;
8ac8a263 2024
3dd2626f
PF
2025 /*
2026 * configure the bus width AND the ddr mode
2027 * (card). The host side will be taken care
2028 * of in the next step
2029 */
2030 if (ecbw->ext_csd_bits & EXT_CSD_DDR_FLAG) {
2031 err = mmc_switch(mmc,
2032 EXT_CSD_CMD_SET_NORMAL,
2033 EXT_CSD_BUS_WIDTH,
2034 ecbw->ext_csd_bits);
2035 if (err)
2036 goto error;
2037 }
2038
2039 /* configure the bus mode (host) */
2040 mmc_select_mode(mmc, mwt->mode);
2041 mmc_set_clock(mmc, mmc->tran_speed,
2042 MMC_CLK_ENABLE);
f99c2efe 2043#ifdef MMC_SUPPORTS_TUNING
8ac8a263 2044
3dd2626f
PF
2045 /* execute tuning if needed */
2046 if (mwt->tuning) {
2047 err = mmc_execute_tuning(mmc,
2048 mwt->tuning);
2049 if (err) {
2050 pr_debug("tuning failed\n");
2051 goto error;
2052 }
634d4849 2053 }
f99c2efe 2054#endif
3dd2626f 2055 }
634d4849 2056
3862b854
JJH
2057 /* do a transfer to check the configuration */
2058 err = mmc_read_and_compare_ext_csd(mmc);
2059 if (!err)
2060 return 0;
2061error:
bc1e3272 2062 mmc_set_signal_voltage(mmc, old_voltage);
3862b854
JJH
2063 /* if an error occured, revert to a safer bus mode */
2064 mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
2065 EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_1);
2066 mmc_select_mode(mmc, MMC_LEGACY);
2067 mmc_set_bus_width(mmc, 1);
2068 }
8ac8a263
JJH
2069 }
2070
d8e3d420 2071 pr_err("unable to select a mode\n");
8ac8a263 2072
3862b854 2073 return -ENOTSUPP;
8ac8a263 2074}
62d77cea
MV
2075#endif
2076
2077#if CONFIG_IS_ENABLED(MMC_TINY)
2078DEFINE_CACHE_ALIGN_BUFFER(u8, ext_csd_bkup, MMC_MAX_BLOCK_LEN);
2079#endif
8ac8a263 2080
dfda9d88 2081static int mmc_startup_v4(struct mmc *mmc)
c744b6f6
JJH
2082{
2083 int err, i;
2084 u64 capacity;
2085 bool has_parts = false;
2086 bool part_completed;
58a6fb7b
JJH
2087 static const u32 mmc_versions[] = {
2088 MMC_VERSION_4,
2089 MMC_VERSION_4_1,
2090 MMC_VERSION_4_2,
2091 MMC_VERSION_4_3,
ace1bed3 2092 MMC_VERSION_4_4,
58a6fb7b
JJH
2093 MMC_VERSION_4_41,
2094 MMC_VERSION_4_5,
2095 MMC_VERSION_5_0,
2096 MMC_VERSION_5_1
2097 };
2098
62d77cea
MV
2099#if CONFIG_IS_ENABLED(MMC_TINY)
2100 u8 *ext_csd = ext_csd_bkup;
2101
2102 if (IS_SD(mmc) || mmc->version < MMC_VERSION_4)
2103 return 0;
2104
2105 if (!mmc->ext_csd)
2106 memset(ext_csd_bkup, 0, sizeof(ext_csd_bkup));
2107
2108 err = mmc_send_ext_csd(mmc, ext_csd);
2109 if (err)
2110 goto error;
2111
2112 /* store the ext csd for future reference */
2113 if (!mmc->ext_csd)
2114 mmc->ext_csd = ext_csd;
2115#else
f7d5dffc 2116 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
c744b6f6
JJH
2117
2118 if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4))
2119 return 0;
2120
2121 /* check ext_csd version and capacity */
2122 err = mmc_send_ext_csd(mmc, ext_csd);
2123 if (err)
f7d5dffc
JJH
2124 goto error;
2125
2126 /* store the ext csd for future reference */
2127 if (!mmc->ext_csd)
2128 mmc->ext_csd = malloc(MMC_MAX_BLOCK_LEN);
2129 if (!mmc->ext_csd)
2130 return -ENOMEM;
2131 memcpy(mmc->ext_csd, ext_csd, MMC_MAX_BLOCK_LEN);
62d77cea 2132#endif
76584e33 2133 if (ext_csd[EXT_CSD_REV] >= ARRAY_SIZE(mmc_versions))
58a6fb7b
JJH
2134 return -EINVAL;
2135
2136 mmc->version = mmc_versions[ext_csd[EXT_CSD_REV]];
2137
2138 if (mmc->version >= MMC_VERSION_4_2) {
c744b6f6
JJH
2139 /*
2140 * According to the JEDEC Standard, the value of
2141 * ext_csd's capacity is valid if the value is more
2142 * than 2GB
2143 */
2144 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
2145 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
2146 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
2147 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
2148 capacity *= MMC_MAX_BLOCK_LEN;
2149 if ((capacity >> 20) > 2 * 1024)
2150 mmc->capacity_user = capacity;
2151 }
2152
39320c53
JJH
2153 if (mmc->version >= MMC_VERSION_4_5)
2154 mmc->gen_cmd6_time = ext_csd[EXT_CSD_GENERIC_CMD6_TIME];
2155
c744b6f6
JJH
2156 /* The partition data may be non-zero but it is only
2157 * effective if PARTITION_SETTING_COMPLETED is set in
2158 * EXT_CSD, so ignore any data if this bit is not set,
2159 * except for enabling the high-capacity group size
2160 * definition (see below).
2161 */
2162 part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
2163 EXT_CSD_PARTITION_SETTING_COMPLETED);
2164
513e00b6
JJH
2165 mmc->part_switch_time = ext_csd[EXT_CSD_PART_SWITCH_TIME];
2166 /* Some eMMC set the value too low so set a minimum */
2167 if (mmc->part_switch_time < MMC_MIN_PART_SWITCH_TIME && mmc->part_switch_time)
2168 mmc->part_switch_time = MMC_MIN_PART_SWITCH_TIME;
2169
c744b6f6
JJH
2170 /* store the partition info of emmc */
2171 mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
2172 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
2173 ext_csd[EXT_CSD_BOOT_MULT])
2174 mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
2175 if (part_completed &&
2176 (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
2177 mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
2178
2179 mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
2180
2181 mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
2182
2183 for (i = 0; i < 4; i++) {
2184 int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
2185 uint mult = (ext_csd[idx + 2] << 16) +
2186 (ext_csd[idx + 1] << 8) + ext_csd[idx];
2187 if (mult)
2188 has_parts = true;
2189 if (!part_completed)
2190 continue;
2191 mmc->capacity_gp[i] = mult;
2192 mmc->capacity_gp[i] *=
2193 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
2194 mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
2195 mmc->capacity_gp[i] <<= 19;
2196 }
2197
173c06df 2198#ifndef CONFIG_SPL_BUILD
c744b6f6
JJH
2199 if (part_completed) {
2200 mmc->enh_user_size =
2201 (ext_csd[EXT_CSD_ENH_SIZE_MULT + 2] << 16) +
2202 (ext_csd[EXT_CSD_ENH_SIZE_MULT + 1] << 8) +
2203 ext_csd[EXT_CSD_ENH_SIZE_MULT];
2204 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
2205 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
2206 mmc->enh_user_size <<= 19;
2207 mmc->enh_user_start =
2208 (ext_csd[EXT_CSD_ENH_START_ADDR + 3] << 24) +
2209 (ext_csd[EXT_CSD_ENH_START_ADDR + 2] << 16) +
2210 (ext_csd[EXT_CSD_ENH_START_ADDR + 1] << 8) +
2211 ext_csd[EXT_CSD_ENH_START_ADDR];
2212 if (mmc->high_capacity)
2213 mmc->enh_user_start <<= 9;
2214 }
173c06df 2215#endif
c744b6f6
JJH
2216
2217 /*
2218 * Host needs to enable ERASE_GRP_DEF bit if device is
2219 * partitioned. This bit will be lost every time after a reset
2220 * or power off. This will affect erase size.
2221 */
2222 if (part_completed)
2223 has_parts = true;
2224 if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
2225 (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
2226 has_parts = true;
2227 if (has_parts) {
2228 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
2229 EXT_CSD_ERASE_GROUP_DEF, 1);
2230
2231 if (err)
f7d5dffc 2232 goto error;
c744b6f6
JJH
2233
2234 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
2235 }
2236
2237 if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
e6fa5a54 2238#if CONFIG_IS_ENABLED(MMC_WRITE)
c744b6f6
JJH
2239 /* Read out group size from ext_csd */
2240 mmc->erase_grp_size =
2241 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
e6fa5a54 2242#endif
c744b6f6
JJH
2243 /*
2244 * if high capacity and partition setting completed
2245 * SEC_COUNT is valid even if it is smaller than 2 GiB
2246 * JEDEC Standard JESD84-B45, 6.2.4
2247 */
2248 if (mmc->high_capacity && part_completed) {
2249 capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
2250 (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
2251 (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
2252 (ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
2253 capacity *= MMC_MAX_BLOCK_LEN;
2254 mmc->capacity_user = capacity;
2255 }
e6fa5a54
JJH
2256 }
2257#if CONFIG_IS_ENABLED(MMC_WRITE)
2258 else {
c744b6f6
JJH
2259 /* Calculate the group size from the csd value. */
2260 int erase_gsz, erase_gmul;
2261
2262 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
2263 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
2264 mmc->erase_grp_size = (erase_gsz + 1)
2265 * (erase_gmul + 1);
2266 }
e6fa5a54 2267#endif
b7a6e2c9 2268#if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING)
c744b6f6
JJH
2269 mmc->hc_wp_grp_size = 1024
2270 * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
2271 * ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
b7a6e2c9 2272#endif
c744b6f6
JJH
2273
2274 mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
2275
2276 return 0;
f7d5dffc
JJH
2277error:
2278 if (mmc->ext_csd) {
62d77cea 2279#if !CONFIG_IS_ENABLED(MMC_TINY)
f7d5dffc 2280 free(mmc->ext_csd);
62d77cea 2281#endif
f7d5dffc
JJH
2282 mmc->ext_csd = NULL;
2283 }
2284 return err;
c744b6f6
JJH
2285}
2286
fdbb873e 2287static int mmc_startup(struct mmc *mmc)
272cc70b 2288{
f866a46d 2289 int err, i;
272cc70b 2290 uint mult, freq;
c744b6f6 2291 u64 cmult, csize;
272cc70b 2292 struct mmc_cmd cmd;
c40fdca6 2293 struct blk_desc *bdesc;
272cc70b 2294
d52ebf10
TC
2295#ifdef CONFIG_MMC_SPI_CRC_ON
2296 if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
2297 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
2298 cmd.resp_type = MMC_RSP_R1;
2299 cmd.cmdarg = 1;
d52ebf10 2300 err = mmc_send_cmd(mmc, &cmd, NULL);
d52ebf10
TC
2301 if (err)
2302 return err;
2303 }
2304#endif
2305
272cc70b 2306 /* Put the Card in Identify Mode */
d52ebf10
TC
2307 cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
2308 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
272cc70b
AF
2309 cmd.resp_type = MMC_RSP_R2;
2310 cmd.cmdarg = 0;
272cc70b
AF
2311
2312 err = mmc_send_cmd(mmc, &cmd, NULL);
2313
83dc4227
KVA
2314#ifdef CONFIG_MMC_QUIRKS
2315 if (err && (mmc->quirks & MMC_QUIRK_RETRY_SEND_CID)) {
2316 int retries = 4;
2317 /*
2318 * It has been seen that SEND_CID may fail on the first
2319 * attempt, let's try a few more time
2320 */
2321 do {
2322 err = mmc_send_cmd(mmc, &cmd, NULL);
2323 if (!err)
2324 break;
2325 } while (retries--);
2326 }
2327#endif
2328
272cc70b
AF
2329 if (err)
2330 return err;
2331
2332 memcpy(mmc->cid, cmd.response, 16);
2333
2334 /*
2335 * For MMC cards, set the Relative Address.
2336 * For SD cards, get the Relatvie Address.
2337 * This also puts the cards into Standby State
2338 */
d52ebf10
TC
2339 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
2340 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
2341 cmd.cmdarg = mmc->rca << 16;
2342 cmd.resp_type = MMC_RSP_R6;
272cc70b 2343
d52ebf10 2344 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b 2345
d52ebf10
TC
2346 if (err)
2347 return err;
272cc70b 2348
d52ebf10
TC
2349 if (IS_SD(mmc))
2350 mmc->rca = (cmd.response[0] >> 16) & 0xffff;
2351 }
272cc70b
AF
2352
2353 /* Get the Card-Specific Data */
2354 cmd.cmdidx = MMC_CMD_SEND_CSD;
2355 cmd.resp_type = MMC_RSP_R2;
2356 cmd.cmdarg = mmc->rca << 16;
272cc70b
AF
2357
2358 err = mmc_send_cmd(mmc, &cmd, NULL);
2359
2360 if (err)
2361 return err;
2362
998be3dd
RV
2363 mmc->csd[0] = cmd.response[0];
2364 mmc->csd[1] = cmd.response[1];
2365 mmc->csd[2] = cmd.response[2];
2366 mmc->csd[3] = cmd.response[3];
272cc70b
AF
2367
2368 if (mmc->version == MMC_VERSION_UNKNOWN) {
0b453ffe 2369 int version = (cmd.response[0] >> 26) & 0xf;
272cc70b
AF
2370
2371 switch (version) {
53e8e40b
BM
2372 case 0:
2373 mmc->version = MMC_VERSION_1_2;
2374 break;
2375 case 1:
2376 mmc->version = MMC_VERSION_1_4;
2377 break;
2378 case 2:
2379 mmc->version = MMC_VERSION_2_2;
2380 break;
2381 case 3:
2382 mmc->version = MMC_VERSION_3;
2383 break;
2384 case 4:
2385 mmc->version = MMC_VERSION_4;
2386 break;
2387 default:
2388 mmc->version = MMC_VERSION_1_2;
2389 break;
272cc70b
AF
2390 }
2391 }
2392
2393 /* divide frequency by 10, since the mults are 10x bigger */
0b453ffe
RV
2394 freq = fbase[(cmd.response[0] & 0x7)];
2395 mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
272cc70b 2396
35f9e196 2397 mmc->legacy_speed = freq * mult;
35f9e196 2398 mmc_select_mode(mmc, MMC_LEGACY);
272cc70b 2399
ab71188c 2400 mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
998be3dd 2401 mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
e6fa5a54 2402#if CONFIG_IS_ENABLED(MMC_WRITE)
272cc70b
AF
2403
2404 if (IS_SD(mmc))
2405 mmc->write_bl_len = mmc->read_bl_len;
2406 else
998be3dd 2407 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
e6fa5a54 2408#endif
272cc70b
AF
2409
2410 if (mmc->high_capacity) {
2411 csize = (mmc->csd[1] & 0x3f) << 16
2412 | (mmc->csd[2] & 0xffff0000) >> 16;
2413 cmult = 8;
2414 } else {
2415 csize = (mmc->csd[1] & 0x3ff) << 2
2416 | (mmc->csd[2] & 0xc0000000) >> 30;
2417 cmult = (mmc->csd[2] & 0x00038000) >> 15;
2418 }
2419
f866a46d
SW
2420 mmc->capacity_user = (csize + 1) << (cmult + 2);
2421 mmc->capacity_user *= mmc->read_bl_len;
2422 mmc->capacity_boot = 0;
2423 mmc->capacity_rpmb = 0;
2424 for (i = 0; i < 4; i++)
2425 mmc->capacity_gp[i] = 0;
272cc70b 2426
8bfa195e
SG
2427 if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
2428 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
272cc70b 2429
e6fa5a54 2430#if CONFIG_IS_ENABLED(MMC_WRITE)
8bfa195e
SG
2431 if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
2432 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
e6fa5a54 2433#endif
272cc70b 2434
ab71188c
MN
2435 if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
2436 cmd.cmdidx = MMC_CMD_SET_DSR;
2437 cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
2438 cmd.resp_type = MMC_RSP_NONE;
2439 if (mmc_send_cmd(mmc, &cmd, NULL))
d8e3d420 2440 pr_warn("MMC: SET_DSR failed\n");
ab71188c
MN
2441 }
2442
272cc70b 2443 /* Select the card, and put it into Transfer Mode */
d52ebf10
TC
2444 if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
2445 cmd.cmdidx = MMC_CMD_SELECT_CARD;
fe8f7066 2446 cmd.resp_type = MMC_RSP_R1;
d52ebf10 2447 cmd.cmdarg = mmc->rca << 16;
d52ebf10 2448 err = mmc_send_cmd(mmc, &cmd, NULL);
272cc70b 2449
d52ebf10
TC
2450 if (err)
2451 return err;
2452 }
272cc70b 2453
e6f99a56
LW
2454 /*
2455 * For SD, its erase group is always one sector
2456 */
e6fa5a54 2457#if CONFIG_IS_ENABLED(MMC_WRITE)
e6f99a56 2458 mmc->erase_grp_size = 1;
e6fa5a54 2459#endif
bc897b1d 2460 mmc->part_config = MMCPART_NOAVAILABLE;
1937e5aa 2461
dfda9d88 2462 err = mmc_startup_v4(mmc);
c744b6f6
JJH
2463 if (err)
2464 return err;
d23e2c09 2465
c40fdca6 2466 err = mmc_set_capacity(mmc, mmc_get_blk_desc(mmc)->hwpart);
f866a46d
SW
2467 if (err)
2468 return err;
2469
62d77cea
MV
2470#if CONFIG_IS_ENABLED(MMC_TINY)
2471 mmc_set_clock(mmc, mmc->legacy_speed, false);
2472 mmc_select_mode(mmc, IS_SD(mmc) ? SD_LEGACY : MMC_LEGACY);
2473 mmc_set_bus_width(mmc, 1);
2474#else
01298da3
JJH
2475 if (IS_SD(mmc)) {
2476 err = sd_get_capabilities(mmc);
2477 if (err)
2478 return err;
2479 err = sd_select_mode_and_width(mmc, mmc->card_caps);
2480 } else {
2481 err = mmc_get_capabilities(mmc);
2482 if (err)
2483 return err;
2484 mmc_select_mode_and_width(mmc, mmc->card_caps);
2485 }
62d77cea 2486#endif
272cc70b
AF
2487 if (err)
2488 return err;
2489
01298da3 2490 mmc->best_mode = mmc->selected_mode;
ad5fd922 2491
5af8f45c
AG
2492 /* Fix the block length for DDR mode */
2493 if (mmc->ddr_mode) {
2494 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
e6fa5a54 2495#if CONFIG_IS_ENABLED(MMC_WRITE)
5af8f45c 2496 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
e6fa5a54 2497#endif
5af8f45c
AG
2498 }
2499
272cc70b 2500 /* fill in device description */
c40fdca6
SG
2501 bdesc = mmc_get_blk_desc(mmc);
2502 bdesc->lun = 0;
2503 bdesc->hwpart = 0;
2504 bdesc->type = 0;
2505 bdesc->blksz = mmc->read_bl_len;
2506 bdesc->log2blksz = LOG2(bdesc->blksz);
2507 bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len);
fc011f64
SS
2508#if !defined(CONFIG_SPL_BUILD) || \
2509 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
2510 !defined(CONFIG_USE_TINY_PRINTF))
c40fdca6 2511 sprintf(bdesc->vendor, "Man %06x Snr %04x%04x",
babce5f6
TH
2512 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
2513 (mmc->cid[3] >> 16) & 0xffff);
c40fdca6 2514 sprintf(bdesc->product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
babce5f6
TH
2515 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
2516 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
2517 (mmc->cid[2] >> 24) & 0xff);
c40fdca6 2518 sprintf(bdesc->revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
babce5f6 2519 (mmc->cid[2] >> 16) & 0xf);
56196826 2520#else
c40fdca6
SG
2521 bdesc->vendor[0] = 0;
2522 bdesc->product[0] = 0;
2523 bdesc->revision[0] = 0;
56196826 2524#endif
272cc70b 2525
eef05fd3
AP
2526#if !defined(CONFIG_DM_MMC) && (!defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT))
2527 part_init(bdesc);
2528#endif
2529
272cc70b
AF
2530 return 0;
2531}
2532
fdbb873e 2533static int mmc_send_if_cond(struct mmc *mmc)
272cc70b
AF
2534{
2535 struct mmc_cmd cmd;
2536 int err;
2537
2538 cmd.cmdidx = SD_CMD_SEND_IF_COND;
2539 /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
93bfd616 2540 cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
272cc70b 2541 cmd.resp_type = MMC_RSP_R7;
272cc70b
AF
2542
2543 err = mmc_send_cmd(mmc, &cmd, NULL);
2544
2545 if (err)
2546 return err;
2547
998be3dd 2548 if ((cmd.response[0] & 0xff) != 0xaa)
915ffa52 2549 return -EOPNOTSUPP;
272cc70b
AF
2550 else
2551 mmc->version = SD_VERSION_2;
2552
2553 return 0;
2554}
2555
c4d660d4 2556#if !CONFIG_IS_ENABLED(DM_MMC)
95de9ab2
PK
2557/* board-specific MMC power initializations. */
2558__weak void board_mmc_power_init(void)
2559{
2560}
05cbeb7c 2561#endif
95de9ab2 2562
2051aefe
PF
2563static int mmc_power_init(struct mmc *mmc)
2564{
c4d660d4 2565#if CONFIG_IS_ENABLED(DM_MMC)
06ec045f 2566#if CONFIG_IS_ENABLED(DM_REGULATOR)
2051aefe
PF
2567 int ret;
2568
2569 ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
06ec045f
JJH
2570 &mmc->vmmc_supply);
2571 if (ret)
d4d64889 2572 pr_debug("%s: No vmmc supply\n", mmc->dev->name);
2051aefe 2573
06ec045f
JJH
2574 ret = device_get_supply_regulator(mmc->dev, "vqmmc-supply",
2575 &mmc->vqmmc_supply);
2576 if (ret)
d4d64889 2577 pr_debug("%s: No vqmmc supply\n", mmc->dev->name);
fb7c3beb
KVA
2578#endif
2579#else /* !CONFIG_DM_MMC */
2580 /*
2581 * Driver model should use a regulator, as above, rather than calling
2582 * out to board code.
2583 */
2584 board_mmc_power_init();
2585#endif
2586 return 0;
2587}
2588
2589/*
2590 * put the host in the initial state:
2591 * - turn on Vdd (card power supply)
2592 * - configure the bus width and clock to minimal values
2593 */
2594static void mmc_set_initial_state(struct mmc *mmc)
2595{
2596 int err;
2597
2598 /* First try to set 3.3V. If it fails set to 1.8V */
2599 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_330);
2600 if (err != 0)
2601 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
2602 if (err != 0)
d8e3d420 2603 pr_warn("mmc: failed to set signal voltage\n");
fb7c3beb
KVA
2604
2605 mmc_select_mode(mmc, MMC_LEGACY);
2606 mmc_set_bus_width(mmc, 1);
65117182 2607 mmc_set_clock(mmc, 0, MMC_CLK_ENABLE);
fb7c3beb 2608}
06ec045f 2609
fb7c3beb
KVA
2610static int mmc_power_on(struct mmc *mmc)
2611{
2612#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
06ec045f 2613 if (mmc->vmmc_supply) {
fb7c3beb
KVA
2614 int ret = regulator_set_enable(mmc->vmmc_supply, true);
2615
06ec045f
JJH
2616 if (ret) {
2617 puts("Error enabling VMMC supply\n");
2618 return ret;
2619 }
2051aefe 2620 }
05cbeb7c 2621#endif
fb7c3beb
KVA
2622 return 0;
2623}
2624
2625static int mmc_power_off(struct mmc *mmc)
2626{
65117182 2627 mmc_set_clock(mmc, 0, MMC_CLK_DISABLE);
fb7c3beb
KVA
2628#if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
2629 if (mmc->vmmc_supply) {
2630 int ret = regulator_set_enable(mmc->vmmc_supply, false);
2631
2632 if (ret) {
d4d64889 2633 pr_debug("Error disabling VMMC supply\n");
fb7c3beb
KVA
2634 return ret;
2635 }
2636 }
2051aefe
PF
2637#endif
2638 return 0;
2639}
2640
fb7c3beb
KVA
2641static int mmc_power_cycle(struct mmc *mmc)
2642{
2643 int ret;
2644
2645 ret = mmc_power_off(mmc);
2646 if (ret)
2647 return ret;
2648 /*
2649 * SD spec recommends at least 1ms of delay. Let's wait for 2ms
2650 * to be on the safer side.
2651 */
2652 udelay(2000);
2653 return mmc_power_on(mmc);
2654}
2655
6c09eba5 2656int mmc_get_op_cond(struct mmc *mmc)
272cc70b 2657{
c10b85d6 2658 bool uhs_en = supports_uhs(mmc->cfg->host_caps);
afd5932b 2659 int err;
272cc70b 2660
bc897b1d
LW
2661 if (mmc->has_init)
2662 return 0;
2663
5a8dbdc6
YL
2664#ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
2665 mmc_adapter_card_type_ident();
2666#endif
2051aefe
PF
2667 err = mmc_power_init(mmc);
2668 if (err)
2669 return err;
95de9ab2 2670
83dc4227
KVA
2671#ifdef CONFIG_MMC_QUIRKS
2672 mmc->quirks = MMC_QUIRK_RETRY_SET_BLOCKLEN |
2673 MMC_QUIRK_RETRY_SEND_CID;
2674#endif
2675
04a2ea24
JJH
2676 err = mmc_power_cycle(mmc);
2677 if (err) {
2678 /*
2679 * if power cycling is not supported, we should not try
2680 * to use the UHS modes, because we wouldn't be able to
2681 * recover from an error during the UHS initialization.
2682 */
d4d64889 2683 pr_debug("Unable to do a full power cycle. Disabling the UHS modes for safety\n");
04a2ea24
JJH
2684 uhs_en = false;
2685 mmc->host_caps &= ~UHS_CAPS;
2686 err = mmc_power_on(mmc);
2687 }
fb7c3beb
KVA
2688 if (err)
2689 return err;
2690
e7881d85 2691#if CONFIG_IS_ENABLED(DM_MMC)
8ca51e51
SG
2692 /* The device has already been probed ready for use */
2693#else
ab769f22 2694 /* made sure it's not NULL earlier */
93bfd616 2695 err = mmc->cfg->ops->init(mmc);
272cc70b
AF
2696 if (err)
2697 return err;
8ca51e51 2698#endif
786e8f81 2699 mmc->ddr_mode = 0;
aff5d3c8 2700
c10b85d6 2701retry:
fb7c3beb 2702 mmc_set_initial_state(mmc);
318a7a57 2703
272cc70b
AF
2704 /* Reset the Card */
2705 err = mmc_go_idle(mmc);
2706
2707 if (err)
2708 return err;
2709
bc897b1d 2710 /* The internal partition reset to user partition(0) at every CMD0*/
c40fdca6 2711 mmc_get_blk_desc(mmc)->hwpart = 0;
bc897b1d 2712
272cc70b 2713 /* Test for SD version 2 */
afd5932b 2714 err = mmc_send_if_cond(mmc);
272cc70b 2715
272cc70b 2716 /* Now try to get the SD card's operating condition */
c10b85d6
JJH
2717 err = sd_send_op_cond(mmc, uhs_en);
2718 if (err && uhs_en) {
2719 uhs_en = false;
2720 mmc_power_cycle(mmc);
2721 goto retry;
2722 }
272cc70b
AF
2723
2724 /* If the command timed out, we check for an MMC card */
915ffa52 2725 if (err == -ETIMEDOUT) {
272cc70b
AF
2726 err = mmc_send_op_cond(mmc);
2727
bd47c135 2728 if (err) {
56196826 2729#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
d8e3d420 2730 pr_err("Card did not respond to voltage select!\n");
56196826 2731#endif
915ffa52 2732 return -EOPNOTSUPP;
272cc70b
AF
2733 }
2734 }
2735
6c09eba5
JN
2736 return err;
2737}
2738
2739int mmc_start_init(struct mmc *mmc)
2740{
2741 bool no_card;
2742 int err = 0;
2743
2744 /*
2745 * all hosts are capable of 1 bit bus-width and able to use the legacy
2746 * timings.
2747 */
2748 mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
2749 MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
2750
2751#if !defined(CONFIG_MMC_BROKEN_CD)
2752 /* we pretend there's no card when init is NULL */
2753 no_card = mmc_getcd(mmc) == 0;
2754#else
2755 no_card = 0;
2756#endif
2757#if !CONFIG_IS_ENABLED(DM_MMC)
2758 no_card = no_card || (mmc->cfg->ops->init == NULL);
2759#endif
2760 if (no_card) {
2761 mmc->has_init = 0;
2762#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
2763 pr_err("MMC: no card present\n");
2764#endif
2765 return -ENOMEDIUM;
2766 }
2767
2768 err = mmc_get_op_cond(mmc);
2769
bd47c135 2770 if (!err)
e9550449
CLC
2771 mmc->init_in_progress = 1;
2772
2773 return err;
2774}
2775
2776static int mmc_complete_init(struct mmc *mmc)
2777{
2778 int err = 0;
2779
bd47c135 2780 mmc->init_in_progress = 0;
e9550449
CLC
2781 if (mmc->op_cond_pending)
2782 err = mmc_complete_op_cond(mmc);
2783
2784 if (!err)
2785 err = mmc_startup(mmc);
bc897b1d
LW
2786 if (err)
2787 mmc->has_init = 0;
2788 else
2789 mmc->has_init = 1;
e9550449
CLC
2790 return err;
2791}
2792
2793int mmc_init(struct mmc *mmc)
2794{
bd47c135 2795 int err = 0;
36332b6e 2796 __maybe_unused ulong start;
c4d660d4 2797#if CONFIG_IS_ENABLED(DM_MMC)
33fb211d 2798 struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc->dev);
e9550449 2799
33fb211d
SG
2800 upriv->mmc = mmc;
2801#endif
e9550449
CLC
2802 if (mmc->has_init)
2803 return 0;
d803fea5
MZ
2804
2805 start = get_timer(0);
2806
e9550449
CLC
2807 if (!mmc->init_in_progress)
2808 err = mmc_start_init(mmc);
2809
bd47c135 2810 if (!err)
e9550449 2811 err = mmc_complete_init(mmc);
919b4858 2812 if (err)
d4d64889 2813 pr_info("%s: %d, time %lu\n", __func__, err, get_timer(start));
919b4858 2814
bc897b1d 2815 return err;
272cc70b
AF
2816}
2817
fceea992
MV
2818#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) || \
2819 CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) || \
2820 CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
2821int mmc_deinit(struct mmc *mmc)
2822{
2823 u32 caps_filtered;
2824
2825 if (!mmc->has_init)
2826 return 0;
2827
2828 if (IS_SD(mmc)) {
2829 caps_filtered = mmc->card_caps &
2830 ~(MMC_CAP(UHS_SDR12) | MMC_CAP(UHS_SDR25) |
2831 MMC_CAP(UHS_SDR50) | MMC_CAP(UHS_DDR50) |
2832 MMC_CAP(UHS_SDR104));
2833
2834 return sd_select_mode_and_width(mmc, caps_filtered);
2835 } else {
2836 caps_filtered = mmc->card_caps &
2837 ~(MMC_CAP(MMC_HS_200) | MMC_CAP(MMC_HS_400));
2838
2839 return mmc_select_mode_and_width(mmc, caps_filtered);
2840 }
2841}
2842#endif
2843
ab71188c
MN
2844int mmc_set_dsr(struct mmc *mmc, u16 val)
2845{
2846 mmc->dsr = val;
2847 return 0;
2848}
2849
cee9ab7c
JH
2850/* CPU-specific MMC initializations */
2851__weak int cpu_mmc_init(bd_t *bis)
272cc70b
AF
2852{
2853 return -1;
2854}
2855
cee9ab7c
JH
2856/* board-specific MMC initializations. */
2857__weak int board_mmc_init(bd_t *bis)
2858{
2859 return -1;
2860}
272cc70b 2861
e9550449
CLC
2862void mmc_set_preinit(struct mmc *mmc, int preinit)
2863{
2864 mmc->preinit = preinit;
2865}
2866
8a856db2 2867#if CONFIG_IS_ENABLED(DM_MMC)
8e3332e2
SS
2868static int mmc_probe(bd_t *bis)
2869{
4a1db6d8 2870 int ret, i;
8e3332e2 2871 struct uclass *uc;
4a1db6d8 2872 struct udevice *dev;
8e3332e2
SS
2873
2874 ret = uclass_get(UCLASS_MMC, &uc);
2875 if (ret)
2876 return ret;
2877
4a1db6d8
SG
2878 /*
2879 * Try to add them in sequence order. Really with driver model we
2880 * should allow holes, but the current MMC list does not allow that.
2881 * So if we request 0, 1, 3 we will get 0, 1, 2.
2882 */
2883 for (i = 0; ; i++) {
2884 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
2885 if (ret == -ENODEV)
2886 break;
2887 }
2888 uclass_foreach_dev(dev, uc) {
2889 ret = device_probe(dev);
8e3332e2 2890 if (ret)
d8e3d420 2891 pr_err("%s - probe failed: %d\n", dev->name, ret);
8e3332e2
SS
2892 }
2893
2894 return 0;
2895}
2896#else
2897static int mmc_probe(bd_t *bis)
2898{
2899 if (board_mmc_init(bis) < 0)
2900 cpu_mmc_init(bis);
2901
2902 return 0;
2903}
2904#endif
e9550449 2905
272cc70b
AF
2906int mmc_initialize(bd_t *bis)
2907{
1b26bab1 2908 static int initialized = 0;
8e3332e2 2909 int ret;
1b26bab1
DK
2910 if (initialized) /* Avoid initializing mmc multiple times */
2911 return 0;
2912 initialized = 1;
2913
c4d660d4 2914#if !CONFIG_IS_ENABLED(BLK)
b5b838f1 2915#if !CONFIG_IS_ENABLED(MMC_TINY)
c40fdca6 2916 mmc_list_init();
b5b838f1 2917#endif
c40fdca6 2918#endif
8e3332e2
SS
2919 ret = mmc_probe(bis);
2920 if (ret)
2921 return ret;
272cc70b 2922
bb0dc108 2923#ifndef CONFIG_SPL_BUILD
272cc70b 2924 print_mmc_devices(',');
bb0dc108 2925#endif
272cc70b 2926
c40fdca6 2927 mmc_do_preinit();
272cc70b
AF
2928 return 0;
2929}
cd3d4880
TM
2930
2931#ifdef CONFIG_CMD_BKOPS_ENABLE
2932int mmc_set_bkops_enable(struct mmc *mmc)
2933{
2934 int err;
2935 ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
2936
2937 err = mmc_send_ext_csd(mmc, ext_csd);
2938 if (err) {
2939 puts("Could not get ext_csd register values\n");
2940 return err;
2941 }
2942
2943 if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
2944 puts("Background operations not supported on device\n");
2945 return -EMEDIUMTYPE;
2946 }
2947
2948 if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) {
2949 puts("Background operations already enabled\n");
2950 return 0;
2951 }
2952
2953 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1);
2954 if (err) {
2955 puts("Failed to enable manual background operations\n");
2956 return err;
2957 }
2958
2959 puts("Enabled manual background operations\n");
2960
2961 return 0;
2962}
2963#endif
This page took 0.910531 seconds and 4 git commands to generate.