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