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