Merge git://git.denx.de/u-boot-mmc
[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, MMC_CLK_DISABLE);
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, MMC_CLK_ENABLE);
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         debug("clock is %s (%dHz)\n", disable ? "disabled" : "enabled", clock);
1510
1511         return mmc_set_ios(mmc);
1512 }
1513
1514 static int mmc_set_bus_width(struct mmc *mmc, uint width)
1515 {
1516         mmc->bus_width = width;
1517
1518         return mmc_set_ios(mmc);
1519 }
1520
1521 #if CONFIG_IS_ENABLED(MMC_VERBOSE) || defined(DEBUG)
1522 /*
1523  * helper function to display the capabilities in a human
1524  * friendly manner. The capabilities include bus width and
1525  * supported modes.
1526  */
1527 void mmc_dump_capabilities(const char *text, uint caps)
1528 {
1529         enum bus_mode mode;
1530
1531         pr_debug("%s: widths [", text);
1532         if (caps & MMC_MODE_8BIT)
1533                 pr_debug("8, ");
1534         if (caps & MMC_MODE_4BIT)
1535                 pr_debug("4, ");
1536         if (caps & MMC_MODE_1BIT)
1537                 pr_debug("1, ");
1538         pr_debug("\b\b] modes [");
1539         for (mode = MMC_LEGACY; mode < MMC_MODES_END; mode++)
1540                 if (MMC_CAP(mode) & caps)
1541                         pr_debug("%s, ", mmc_mode_name(mode));
1542         pr_debug("\b\b]\n");
1543 }
1544 #endif
1545
1546 struct mode_width_tuning {
1547         enum bus_mode mode;
1548         uint widths;
1549 #ifdef MMC_SUPPORTS_TUNING
1550         uint tuning;
1551 #endif
1552 };
1553
1554 #if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
1555 int mmc_voltage_to_mv(enum mmc_voltage voltage)
1556 {
1557         switch (voltage) {
1558         case MMC_SIGNAL_VOLTAGE_000: return 0;
1559         case MMC_SIGNAL_VOLTAGE_330: return 3300;
1560         case MMC_SIGNAL_VOLTAGE_180: return 1800;
1561         case MMC_SIGNAL_VOLTAGE_120: return 1200;
1562         }
1563         return -EINVAL;
1564 }
1565
1566 static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
1567 {
1568         int err;
1569
1570         if (mmc->signal_voltage == signal_voltage)
1571                 return 0;
1572
1573         mmc->signal_voltage = signal_voltage;
1574         err = mmc_set_ios(mmc);
1575         if (err)
1576                 pr_debug("unable to set voltage (err %d)\n", err);
1577
1578         return err;
1579 }
1580 #else
1581 static inline int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage)
1582 {
1583         return 0;
1584 }
1585 #endif
1586
1587 static const struct mode_width_tuning sd_modes_by_pref[] = {
1588 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
1589 #ifdef MMC_SUPPORTS_TUNING
1590         {
1591                 .mode = UHS_SDR104,
1592                 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1593                 .tuning = MMC_CMD_SEND_TUNING_BLOCK
1594         },
1595 #endif
1596         {
1597                 .mode = UHS_SDR50,
1598                 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1599         },
1600         {
1601                 .mode = UHS_DDR50,
1602                 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1603         },
1604         {
1605                 .mode = UHS_SDR25,
1606                 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1607         },
1608 #endif
1609         {
1610                 .mode = SD_HS,
1611                 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1612         },
1613 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
1614         {
1615                 .mode = UHS_SDR12,
1616                 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1617         },
1618 #endif
1619         {
1620                 .mode = SD_LEGACY,
1621                 .widths = MMC_MODE_4BIT | MMC_MODE_1BIT,
1622         }
1623 };
1624
1625 #define for_each_sd_mode_by_pref(caps, mwt) \
1626         for (mwt = sd_modes_by_pref;\
1627              mwt < sd_modes_by_pref + ARRAY_SIZE(sd_modes_by_pref);\
1628              mwt++) \
1629                 if (caps & MMC_CAP(mwt->mode))
1630
1631 static int sd_select_mode_and_width(struct mmc *mmc, uint card_caps)
1632 {
1633         int err;
1634         uint widths[] = {MMC_MODE_4BIT, MMC_MODE_1BIT};
1635         const struct mode_width_tuning *mwt;
1636 #if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT)
1637         bool uhs_en = (mmc->ocr & OCR_S18R) ? true : false;
1638 #else
1639         bool uhs_en = false;
1640 #endif
1641         uint caps;
1642
1643 #ifdef DEBUG
1644         mmc_dump_capabilities("sd card", card_caps);
1645         mmc_dump_capabilities("host", mmc->host_caps);
1646 #endif
1647
1648         /* Restrict card's capabilities by what the host can do */
1649         caps = card_caps & mmc->host_caps;
1650
1651         if (!uhs_en)
1652                 caps &= ~UHS_CAPS;
1653
1654         for_each_sd_mode_by_pref(caps, mwt) {
1655                 uint *w;
1656
1657                 for (w = widths; w < widths + ARRAY_SIZE(widths); w++) {
1658                         if (*w & caps & mwt->widths) {
1659                                 pr_debug("trying mode %s width %d (at %d MHz)\n",
1660                                          mmc_mode_name(mwt->mode),
1661                                          bus_width(*w),
1662                                          mmc_mode2freq(mmc, mwt->mode) / 1000000);
1663
1664                                 /* configure the bus width (card + host) */
1665                                 err = sd_select_bus_width(mmc, bus_width(*w));
1666                                 if (err)
1667                                         goto error;
1668                                 mmc_set_bus_width(mmc, bus_width(*w));
1669
1670                                 /* configure the bus mode (card) */
1671                                 err = sd_set_card_speed(mmc, mwt->mode);
1672                                 if (err)
1673                                         goto error;
1674
1675                                 /* configure the bus mode (host) */
1676                                 mmc_select_mode(mmc, mwt->mode);
1677                                 mmc_set_clock(mmc, mmc->tran_speed,
1678                                                 MMC_CLK_ENABLE);
1679
1680 #ifdef MMC_SUPPORTS_TUNING
1681                                 /* execute tuning if needed */
1682                                 if (mwt->tuning && !mmc_host_is_spi(mmc)) {
1683                                         err = mmc_execute_tuning(mmc,
1684                                                                  mwt->tuning);
1685                                         if (err) {
1686                                                 pr_debug("tuning failed\n");
1687                                                 goto error;
1688                                         }
1689                                 }
1690 #endif
1691
1692 #if CONFIG_IS_ENABLED(MMC_WRITE)
1693                                 err = sd_read_ssr(mmc);
1694                                 if (err)
1695                                         pr_warn("unable to read ssr\n");
1696 #endif
1697                                 if (!err)
1698                                         return 0;
1699
1700 error:
1701                                 /* revert to a safer bus speed */
1702                                 mmc_select_mode(mmc, SD_LEGACY);
1703                                 mmc_set_clock(mmc, mmc->tran_speed,
1704                                                 MMC_CLK_ENABLE);
1705                         }
1706                 }
1707         }
1708
1709         pr_err("unable to select a mode\n");
1710         return -ENOTSUPP;
1711 }
1712
1713 /*
1714  * read the compare the part of ext csd that is constant.
1715  * This can be used to check that the transfer is working
1716  * as expected.
1717  */
1718 static int mmc_read_and_compare_ext_csd(struct mmc *mmc)
1719 {
1720         int err;
1721         const u8 *ext_csd = mmc->ext_csd;
1722         ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
1723
1724         if (mmc->version < MMC_VERSION_4)
1725                 return 0;
1726
1727         err = mmc_send_ext_csd(mmc, test_csd);
1728         if (err)
1729                 return err;
1730
1731         /* Only compare read only fields */
1732         if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT]
1733                 == test_csd[EXT_CSD_PARTITIONING_SUPPORT] &&
1734             ext_csd[EXT_CSD_HC_WP_GRP_SIZE]
1735                 == test_csd[EXT_CSD_HC_WP_GRP_SIZE] &&
1736             ext_csd[EXT_CSD_REV]
1737                 == test_csd[EXT_CSD_REV] &&
1738             ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
1739                 == test_csd[EXT_CSD_HC_ERASE_GRP_SIZE] &&
1740             memcmp(&ext_csd[EXT_CSD_SEC_CNT],
1741                    &test_csd[EXT_CSD_SEC_CNT], 4) == 0)
1742                 return 0;
1743
1744         return -EBADMSG;
1745 }
1746
1747 #if CONFIG_IS_ENABLED(MMC_IO_VOLTAGE)
1748 static int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode,
1749                                   uint32_t allowed_mask)
1750 {
1751         u32 card_mask = 0;
1752
1753         switch (mode) {
1754         case MMC_HS_200:
1755                 if (mmc->cardtype & EXT_CSD_CARD_TYPE_HS200_1_8V)
1756                         card_mask |= MMC_SIGNAL_VOLTAGE_180;
1757                 if (mmc->cardtype & EXT_CSD_CARD_TYPE_HS200_1_2V)
1758                         card_mask |= MMC_SIGNAL_VOLTAGE_120;
1759                 break;
1760         case MMC_DDR_52:
1761                 if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_8V)
1762                         card_mask |= MMC_SIGNAL_VOLTAGE_330 |
1763                                      MMC_SIGNAL_VOLTAGE_180;
1764                 if (mmc->cardtype & EXT_CSD_CARD_TYPE_DDR_1_2V)
1765                         card_mask |= MMC_SIGNAL_VOLTAGE_120;
1766                 break;
1767         default:
1768                 card_mask |= MMC_SIGNAL_VOLTAGE_330;
1769                 break;
1770         }
1771
1772         while (card_mask & allowed_mask) {
1773                 enum mmc_voltage best_match;
1774
1775                 best_match = 1 << (ffs(card_mask & allowed_mask) - 1);
1776                 if (!mmc_set_signal_voltage(mmc,  best_match))
1777                         return 0;
1778
1779                 allowed_mask &= ~best_match;
1780         }
1781
1782         return -ENOTSUPP;
1783 }
1784 #else
1785 static inline int mmc_set_lowest_voltage(struct mmc *mmc, enum bus_mode mode,
1786                                          uint32_t allowed_mask)
1787 {
1788         return 0;
1789 }
1790 #endif
1791
1792 static const struct mode_width_tuning mmc_modes_by_pref[] = {
1793 #if CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)
1794         {
1795                 .mode = MMC_HS_200,
1796                 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
1797                 .tuning = MMC_CMD_SEND_TUNING_BLOCK_HS200
1798         },
1799 #endif
1800         {
1801                 .mode = MMC_DDR_52,
1802                 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT,
1803         },
1804         {
1805                 .mode = MMC_HS_52,
1806                 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1807         },
1808         {
1809                 .mode = MMC_HS,
1810                 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1811         },
1812         {
1813                 .mode = MMC_LEGACY,
1814                 .widths = MMC_MODE_8BIT | MMC_MODE_4BIT | MMC_MODE_1BIT,
1815         }
1816 };
1817
1818 #define for_each_mmc_mode_by_pref(caps, mwt) \
1819         for (mwt = mmc_modes_by_pref;\
1820             mwt < mmc_modes_by_pref + ARRAY_SIZE(mmc_modes_by_pref);\
1821             mwt++) \
1822                 if (caps & MMC_CAP(mwt->mode))
1823
1824 static const struct ext_csd_bus_width {
1825         uint cap;
1826         bool is_ddr;
1827         uint ext_csd_bits;
1828 } ext_csd_bus_width[] = {
1829         {MMC_MODE_8BIT, true, EXT_CSD_DDR_BUS_WIDTH_8},
1830         {MMC_MODE_4BIT, true, EXT_CSD_DDR_BUS_WIDTH_4},
1831         {MMC_MODE_8BIT, false, EXT_CSD_BUS_WIDTH_8},
1832         {MMC_MODE_4BIT, false, EXT_CSD_BUS_WIDTH_4},
1833         {MMC_MODE_1BIT, false, EXT_CSD_BUS_WIDTH_1},
1834 };
1835
1836 #define for_each_supported_width(caps, ddr, ecbv) \
1837         for (ecbv = ext_csd_bus_width;\
1838             ecbv < ext_csd_bus_width + ARRAY_SIZE(ext_csd_bus_width);\
1839             ecbv++) \
1840                 if ((ddr == ecbv->is_ddr) && (caps & ecbv->cap))
1841
1842 static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps)
1843 {
1844         int err;
1845         const struct mode_width_tuning *mwt;
1846         const struct ext_csd_bus_width *ecbw;
1847
1848 #ifdef DEBUG
1849         mmc_dump_capabilities("mmc", card_caps);
1850         mmc_dump_capabilities("host", mmc->host_caps);
1851 #endif
1852
1853         /* Restrict card's capabilities by what the host can do */
1854         card_caps &= mmc->host_caps;
1855
1856         /* Only version 4 of MMC supports wider bus widths */
1857         if (mmc->version < MMC_VERSION_4)
1858                 return 0;
1859
1860         if (!mmc->ext_csd) {
1861                 pr_debug("No ext_csd found!\n"); /* this should enver happen */
1862                 return -ENOTSUPP;
1863         }
1864
1865         mmc_set_clock(mmc, mmc->legacy_speed, MMC_CLK_ENABLE);
1866
1867         for_each_mmc_mode_by_pref(card_caps, mwt) {
1868                 for_each_supported_width(card_caps & mwt->widths,
1869                                          mmc_is_mode_ddr(mwt->mode), ecbw) {
1870                         enum mmc_voltage old_voltage;
1871                         pr_debug("trying mode %s width %d (at %d MHz)\n",
1872                                  mmc_mode_name(mwt->mode),
1873                                  bus_width(ecbw->cap),
1874                                  mmc_mode2freq(mmc, mwt->mode) / 1000000);
1875                         old_voltage = mmc->signal_voltage;
1876                         err = mmc_set_lowest_voltage(mmc, mwt->mode,
1877                                                      MMC_ALL_SIGNAL_VOLTAGE);
1878                         if (err)
1879                                 continue;
1880
1881                         /* configure the bus width (card + host) */
1882                         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1883                                     EXT_CSD_BUS_WIDTH,
1884                                     ecbw->ext_csd_bits & ~EXT_CSD_DDR_FLAG);
1885                         if (err)
1886                                 goto error;
1887                         mmc_set_bus_width(mmc, bus_width(ecbw->cap));
1888
1889                         /* configure the bus speed (card) */
1890                         err = mmc_set_card_speed(mmc, mwt->mode);
1891                         if (err)
1892                                 goto error;
1893
1894                         /*
1895                          * configure the bus width AND the ddr mode (card)
1896                          * The host side will be taken care of in the next step
1897                          */
1898                         if (ecbw->ext_csd_bits & EXT_CSD_DDR_FLAG) {
1899                                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1900                                                  EXT_CSD_BUS_WIDTH,
1901                                                  ecbw->ext_csd_bits);
1902                                 if (err)
1903                                         goto error;
1904                         }
1905
1906                         /* configure the bus mode (host) */
1907                         mmc_select_mode(mmc, mwt->mode);
1908                         mmc_set_clock(mmc, mmc->tran_speed, MMC_CLK_ENABLE);
1909 #ifdef MMC_SUPPORTS_TUNING
1910
1911                         /* execute tuning if needed */
1912                         if (mwt->tuning) {
1913                                 err = mmc_execute_tuning(mmc, mwt->tuning);
1914                                 if (err) {
1915                                         pr_debug("tuning failed\n");
1916                                         goto error;
1917                                 }
1918                         }
1919 #endif
1920
1921                         /* do a transfer to check the configuration */
1922                         err = mmc_read_and_compare_ext_csd(mmc);
1923                         if (!err)
1924                                 return 0;
1925 error:
1926                         mmc_set_signal_voltage(mmc, old_voltage);
1927                         /* if an error occured, revert to a safer bus mode */
1928                         mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
1929                                    EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_1);
1930                         mmc_select_mode(mmc, MMC_LEGACY);
1931                         mmc_set_bus_width(mmc, 1);
1932                 }
1933         }
1934
1935         pr_err("unable to select a mode\n");
1936
1937         return -ENOTSUPP;
1938 }
1939
1940 static int mmc_startup_v4(struct mmc *mmc)
1941 {
1942         int err, i;
1943         u64 capacity;
1944         bool has_parts = false;
1945         bool part_completed;
1946         static const u32 mmc_versions[] = {
1947                 MMC_VERSION_4,
1948                 MMC_VERSION_4_1,
1949                 MMC_VERSION_4_2,
1950                 MMC_VERSION_4_3,
1951                 MMC_VERSION_4_4,
1952                 MMC_VERSION_4_41,
1953                 MMC_VERSION_4_5,
1954                 MMC_VERSION_5_0,
1955                 MMC_VERSION_5_1
1956         };
1957
1958         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
1959
1960         if (IS_SD(mmc) || (mmc->version < MMC_VERSION_4))
1961                 return 0;
1962
1963         /* check  ext_csd version and capacity */
1964         err = mmc_send_ext_csd(mmc, ext_csd);
1965         if (err)
1966                 goto error;
1967
1968         /* store the ext csd for future reference */
1969         if (!mmc->ext_csd)
1970                 mmc->ext_csd = malloc(MMC_MAX_BLOCK_LEN);
1971         if (!mmc->ext_csd)
1972                 return -ENOMEM;
1973         memcpy(mmc->ext_csd, ext_csd, MMC_MAX_BLOCK_LEN);
1974
1975         if (ext_csd[EXT_CSD_REV] >= ARRAY_SIZE(mmc_versions))
1976                 return -EINVAL;
1977
1978         mmc->version = mmc_versions[ext_csd[EXT_CSD_REV]];
1979
1980         if (mmc->version >= MMC_VERSION_4_2) {
1981                 /*
1982                  * According to the JEDEC Standard, the value of
1983                  * ext_csd's capacity is valid if the value is more
1984                  * than 2GB
1985                  */
1986                 capacity = ext_csd[EXT_CSD_SEC_CNT] << 0
1987                                 | ext_csd[EXT_CSD_SEC_CNT + 1] << 8
1988                                 | ext_csd[EXT_CSD_SEC_CNT + 2] << 16
1989                                 | ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
1990                 capacity *= MMC_MAX_BLOCK_LEN;
1991                 if ((capacity >> 20) > 2 * 1024)
1992                         mmc->capacity_user = capacity;
1993         }
1994
1995         /* The partition data may be non-zero but it is only
1996          * effective if PARTITION_SETTING_COMPLETED is set in
1997          * EXT_CSD, so ignore any data if this bit is not set,
1998          * except for enabling the high-capacity group size
1999          * definition (see below).
2000          */
2001         part_completed = !!(ext_csd[EXT_CSD_PARTITION_SETTING] &
2002                             EXT_CSD_PARTITION_SETTING_COMPLETED);
2003
2004         /* store the partition info of emmc */
2005         mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
2006         if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
2007             ext_csd[EXT_CSD_BOOT_MULT])
2008                 mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
2009         if (part_completed &&
2010             (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT))
2011                 mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
2012
2013         mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
2014
2015         mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
2016
2017         for (i = 0; i < 4; i++) {
2018                 int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
2019                 uint mult = (ext_csd[idx + 2] << 16) +
2020                         (ext_csd[idx + 1] << 8) + ext_csd[idx];
2021                 if (mult)
2022                         has_parts = true;
2023                 if (!part_completed)
2024                         continue;
2025                 mmc->capacity_gp[i] = mult;
2026                 mmc->capacity_gp[i] *=
2027                         ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
2028                 mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
2029                 mmc->capacity_gp[i] <<= 19;
2030         }
2031
2032 #ifndef CONFIG_SPL_BUILD
2033         if (part_completed) {
2034                 mmc->enh_user_size =
2035                         (ext_csd[EXT_CSD_ENH_SIZE_MULT + 2] << 16) +
2036                         (ext_csd[EXT_CSD_ENH_SIZE_MULT + 1] << 8) +
2037                         ext_csd[EXT_CSD_ENH_SIZE_MULT];
2038                 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
2039                 mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
2040                 mmc->enh_user_size <<= 19;
2041                 mmc->enh_user_start =
2042                         (ext_csd[EXT_CSD_ENH_START_ADDR + 3] << 24) +
2043                         (ext_csd[EXT_CSD_ENH_START_ADDR + 2] << 16) +
2044                         (ext_csd[EXT_CSD_ENH_START_ADDR + 1] << 8) +
2045                         ext_csd[EXT_CSD_ENH_START_ADDR];
2046                 if (mmc->high_capacity)
2047                         mmc->enh_user_start <<= 9;
2048         }
2049 #endif
2050
2051         /*
2052          * Host needs to enable ERASE_GRP_DEF bit if device is
2053          * partitioned. This bit will be lost every time after a reset
2054          * or power off. This will affect erase size.
2055          */
2056         if (part_completed)
2057                 has_parts = true;
2058         if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
2059             (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB))
2060                 has_parts = true;
2061         if (has_parts) {
2062                 err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
2063                                  EXT_CSD_ERASE_GROUP_DEF, 1);
2064
2065                 if (err)
2066                         goto error;
2067
2068                 ext_csd[EXT_CSD_ERASE_GROUP_DEF] = 1;
2069         }
2070
2071         if (ext_csd[EXT_CSD_ERASE_GROUP_DEF] & 0x01) {
2072 #if CONFIG_IS_ENABLED(MMC_WRITE)
2073                 /* Read out group size from ext_csd */
2074                 mmc->erase_grp_size =
2075                         ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 1024;
2076 #endif
2077                 /*
2078                  * if high capacity and partition setting completed
2079                  * SEC_COUNT is valid even if it is smaller than 2 GiB
2080                  * JEDEC Standard JESD84-B45, 6.2.4
2081                  */
2082                 if (mmc->high_capacity && part_completed) {
2083                         capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
2084                                 (ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
2085                                 (ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
2086                                 (ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
2087                         capacity *= MMC_MAX_BLOCK_LEN;
2088                         mmc->capacity_user = capacity;
2089                 }
2090         }
2091 #if CONFIG_IS_ENABLED(MMC_WRITE)
2092         else {
2093                 /* Calculate the group size from the csd value. */
2094                 int erase_gsz, erase_gmul;
2095
2096                 erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
2097                 erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
2098                 mmc->erase_grp_size = (erase_gsz + 1)
2099                         * (erase_gmul + 1);
2100         }
2101 #endif
2102 #if CONFIG_IS_ENABLED(MMC_HW_PARTITIONING)
2103         mmc->hc_wp_grp_size = 1024
2104                 * ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]
2105                 * ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
2106 #endif
2107
2108         mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
2109
2110         return 0;
2111 error:
2112         if (mmc->ext_csd) {
2113                 free(mmc->ext_csd);
2114                 mmc->ext_csd = NULL;
2115         }
2116         return err;
2117 }
2118
2119 static int mmc_startup(struct mmc *mmc)
2120 {
2121         int err, i;
2122         uint mult, freq;
2123         u64 cmult, csize;
2124         struct mmc_cmd cmd;
2125         struct blk_desc *bdesc;
2126
2127 #ifdef CONFIG_MMC_SPI_CRC_ON
2128         if (mmc_host_is_spi(mmc)) { /* enable CRC check for spi */
2129                 cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
2130                 cmd.resp_type = MMC_RSP_R1;
2131                 cmd.cmdarg = 1;
2132                 err = mmc_send_cmd(mmc, &cmd, NULL);
2133                 if (err)
2134                         return err;
2135         }
2136 #endif
2137
2138         /* Put the Card in Identify Mode */
2139         cmd.cmdidx = mmc_host_is_spi(mmc) ? MMC_CMD_SEND_CID :
2140                 MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
2141         cmd.resp_type = MMC_RSP_R2;
2142         cmd.cmdarg = 0;
2143
2144         err = mmc_send_cmd(mmc, &cmd, NULL);
2145
2146 #ifdef CONFIG_MMC_QUIRKS
2147         if (err && (mmc->quirks & MMC_QUIRK_RETRY_SEND_CID)) {
2148                 int retries = 4;
2149                 /*
2150                  * It has been seen that SEND_CID may fail on the first
2151                  * attempt, let's try a few more time
2152                  */
2153                 do {
2154                         err = mmc_send_cmd(mmc, &cmd, NULL);
2155                         if (!err)
2156                                 break;
2157                 } while (retries--);
2158         }
2159 #endif
2160
2161         if (err)
2162                 return err;
2163
2164         memcpy(mmc->cid, cmd.response, 16);
2165
2166         /*
2167          * For MMC cards, set the Relative Address.
2168          * For SD cards, get the Relatvie Address.
2169          * This also puts the cards into Standby State
2170          */
2171         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
2172                 cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
2173                 cmd.cmdarg = mmc->rca << 16;
2174                 cmd.resp_type = MMC_RSP_R6;
2175
2176                 err = mmc_send_cmd(mmc, &cmd, NULL);
2177
2178                 if (err)
2179                         return err;
2180
2181                 if (IS_SD(mmc))
2182                         mmc->rca = (cmd.response[0] >> 16) & 0xffff;
2183         }
2184
2185         /* Get the Card-Specific Data */
2186         cmd.cmdidx = MMC_CMD_SEND_CSD;
2187         cmd.resp_type = MMC_RSP_R2;
2188         cmd.cmdarg = mmc->rca << 16;
2189
2190         err = mmc_send_cmd(mmc, &cmd, NULL);
2191
2192         if (err)
2193                 return err;
2194
2195         mmc->csd[0] = cmd.response[0];
2196         mmc->csd[1] = cmd.response[1];
2197         mmc->csd[2] = cmd.response[2];
2198         mmc->csd[3] = cmd.response[3];
2199
2200         if (mmc->version == MMC_VERSION_UNKNOWN) {
2201                 int version = (cmd.response[0] >> 26) & 0xf;
2202
2203                 switch (version) {
2204                 case 0:
2205                         mmc->version = MMC_VERSION_1_2;
2206                         break;
2207                 case 1:
2208                         mmc->version = MMC_VERSION_1_4;
2209                         break;
2210                 case 2:
2211                         mmc->version = MMC_VERSION_2_2;
2212                         break;
2213                 case 3:
2214                         mmc->version = MMC_VERSION_3;
2215                         break;
2216                 case 4:
2217                         mmc->version = MMC_VERSION_4;
2218                         break;
2219                 default:
2220                         mmc->version = MMC_VERSION_1_2;
2221                         break;
2222                 }
2223         }
2224
2225         /* divide frequency by 10, since the mults are 10x bigger */
2226         freq = fbase[(cmd.response[0] & 0x7)];
2227         mult = multipliers[((cmd.response[0] >> 3) & 0xf)];
2228
2229         mmc->legacy_speed = freq * mult;
2230         mmc_select_mode(mmc, MMC_LEGACY);
2231
2232         mmc->dsr_imp = ((cmd.response[1] >> 12) & 0x1);
2233         mmc->read_bl_len = 1 << ((cmd.response[1] >> 16) & 0xf);
2234 #if CONFIG_IS_ENABLED(MMC_WRITE)
2235
2236         if (IS_SD(mmc))
2237                 mmc->write_bl_len = mmc->read_bl_len;
2238         else
2239                 mmc->write_bl_len = 1 << ((cmd.response[3] >> 22) & 0xf);
2240 #endif
2241
2242         if (mmc->high_capacity) {
2243                 csize = (mmc->csd[1] & 0x3f) << 16
2244                         | (mmc->csd[2] & 0xffff0000) >> 16;
2245                 cmult = 8;
2246         } else {
2247                 csize = (mmc->csd[1] & 0x3ff) << 2
2248                         | (mmc->csd[2] & 0xc0000000) >> 30;
2249                 cmult = (mmc->csd[2] & 0x00038000) >> 15;
2250         }
2251
2252         mmc->capacity_user = (csize + 1) << (cmult + 2);
2253         mmc->capacity_user *= mmc->read_bl_len;
2254         mmc->capacity_boot = 0;
2255         mmc->capacity_rpmb = 0;
2256         for (i = 0; i < 4; i++)
2257                 mmc->capacity_gp[i] = 0;
2258
2259         if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
2260                 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
2261
2262 #if CONFIG_IS_ENABLED(MMC_WRITE)
2263         if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
2264                 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
2265 #endif
2266
2267         if ((mmc->dsr_imp) && (0xffffffff != mmc->dsr)) {
2268                 cmd.cmdidx = MMC_CMD_SET_DSR;
2269                 cmd.cmdarg = (mmc->dsr & 0xffff) << 16;
2270                 cmd.resp_type = MMC_RSP_NONE;
2271                 if (mmc_send_cmd(mmc, &cmd, NULL))
2272                         pr_warn("MMC: SET_DSR failed\n");
2273         }
2274
2275         /* Select the card, and put it into Transfer Mode */
2276         if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
2277                 cmd.cmdidx = MMC_CMD_SELECT_CARD;
2278                 cmd.resp_type = MMC_RSP_R1;
2279                 cmd.cmdarg = mmc->rca << 16;
2280                 err = mmc_send_cmd(mmc, &cmd, NULL);
2281
2282                 if (err)
2283                         return err;
2284         }
2285
2286         /*
2287          * For SD, its erase group is always one sector
2288          */
2289 #if CONFIG_IS_ENABLED(MMC_WRITE)
2290         mmc->erase_grp_size = 1;
2291 #endif
2292         mmc->part_config = MMCPART_NOAVAILABLE;
2293
2294         err = mmc_startup_v4(mmc);
2295         if (err)
2296                 return err;
2297
2298         err = mmc_set_capacity(mmc, mmc_get_blk_desc(mmc)->hwpart);
2299         if (err)
2300                 return err;
2301
2302         if (IS_SD(mmc)) {
2303                 err = sd_get_capabilities(mmc);
2304                 if (err)
2305                         return err;
2306                 err = sd_select_mode_and_width(mmc, mmc->card_caps);
2307         } else {
2308                 err = mmc_get_capabilities(mmc);
2309                 if (err)
2310                         return err;
2311                 mmc_select_mode_and_width(mmc, mmc->card_caps);
2312         }
2313
2314         if (err)
2315                 return err;
2316
2317         mmc->best_mode = mmc->selected_mode;
2318
2319         /* Fix the block length for DDR mode */
2320         if (mmc->ddr_mode) {
2321                 mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
2322 #if CONFIG_IS_ENABLED(MMC_WRITE)
2323                 mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
2324 #endif
2325         }
2326
2327         /* fill in device description */
2328         bdesc = mmc_get_blk_desc(mmc);
2329         bdesc->lun = 0;
2330         bdesc->hwpart = 0;
2331         bdesc->type = 0;
2332         bdesc->blksz = mmc->read_bl_len;
2333         bdesc->log2blksz = LOG2(bdesc->blksz);
2334         bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len);
2335 #if !defined(CONFIG_SPL_BUILD) || \
2336                 (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
2337                 !defined(CONFIG_USE_TINY_PRINTF))
2338         sprintf(bdesc->vendor, "Man %06x Snr %04x%04x",
2339                 mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
2340                 (mmc->cid[3] >> 16) & 0xffff);
2341         sprintf(bdesc->product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
2342                 (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
2343                 (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
2344                 (mmc->cid[2] >> 24) & 0xff);
2345         sprintf(bdesc->revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
2346                 (mmc->cid[2] >> 16) & 0xf);
2347 #else
2348         bdesc->vendor[0] = 0;
2349         bdesc->product[0] = 0;
2350         bdesc->revision[0] = 0;
2351 #endif
2352 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
2353         part_init(bdesc);
2354 #endif
2355
2356         return 0;
2357 }
2358
2359 static int mmc_send_if_cond(struct mmc *mmc)
2360 {
2361         struct mmc_cmd cmd;
2362         int err;
2363
2364         cmd.cmdidx = SD_CMD_SEND_IF_COND;
2365         /* We set the bit if the host supports voltages between 2.7 and 3.6 V */
2366         cmd.cmdarg = ((mmc->cfg->voltages & 0xff8000) != 0) << 8 | 0xaa;
2367         cmd.resp_type = MMC_RSP_R7;
2368
2369         err = mmc_send_cmd(mmc, &cmd, NULL);
2370
2371         if (err)
2372                 return err;
2373
2374         if ((cmd.response[0] & 0xff) != 0xaa)
2375                 return -EOPNOTSUPP;
2376         else
2377                 mmc->version = SD_VERSION_2;
2378
2379         return 0;
2380 }
2381
2382 #if !CONFIG_IS_ENABLED(DM_MMC)
2383 /* board-specific MMC power initializations. */
2384 __weak void board_mmc_power_init(void)
2385 {
2386 }
2387 #endif
2388
2389 static int mmc_power_init(struct mmc *mmc)
2390 {
2391 #if CONFIG_IS_ENABLED(DM_MMC)
2392 #if CONFIG_IS_ENABLED(DM_REGULATOR)
2393         int ret;
2394
2395         ret = device_get_supply_regulator(mmc->dev, "vmmc-supply",
2396                                           &mmc->vmmc_supply);
2397         if (ret)
2398                 pr_debug("%s: No vmmc supply\n", mmc->dev->name);
2399
2400         ret = device_get_supply_regulator(mmc->dev, "vqmmc-supply",
2401                                           &mmc->vqmmc_supply);
2402         if (ret)
2403                 pr_debug("%s: No vqmmc supply\n", mmc->dev->name);
2404 #endif
2405 #else /* !CONFIG_DM_MMC */
2406         /*
2407          * Driver model should use a regulator, as above, rather than calling
2408          * out to board code.
2409          */
2410         board_mmc_power_init();
2411 #endif
2412         return 0;
2413 }
2414
2415 /*
2416  * put the host in the initial state:
2417  * - turn on Vdd (card power supply)
2418  * - configure the bus width and clock to minimal values
2419  */
2420 static void mmc_set_initial_state(struct mmc *mmc)
2421 {
2422         int err;
2423
2424         /* First try to set 3.3V. If it fails set to 1.8V */
2425         err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_330);
2426         if (err != 0)
2427                 err = mmc_set_signal_voltage(mmc, MMC_SIGNAL_VOLTAGE_180);
2428         if (err != 0)
2429                 pr_warn("mmc: failed to set signal voltage\n");
2430
2431         mmc_select_mode(mmc, MMC_LEGACY);
2432         mmc_set_bus_width(mmc, 1);
2433         mmc_set_clock(mmc, 0, MMC_CLK_ENABLE);
2434 }
2435
2436 static int mmc_power_on(struct mmc *mmc)
2437 {
2438 #if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
2439         if (mmc->vmmc_supply) {
2440                 int ret = regulator_set_enable(mmc->vmmc_supply, true);
2441
2442                 if (ret) {
2443                         puts("Error enabling VMMC supply\n");
2444                         return ret;
2445                 }
2446         }
2447 #endif
2448         return 0;
2449 }
2450
2451 static int mmc_power_off(struct mmc *mmc)
2452 {
2453         mmc_set_clock(mmc, 0, MMC_CLK_DISABLE);
2454 #if CONFIG_IS_ENABLED(DM_MMC) && CONFIG_IS_ENABLED(DM_REGULATOR)
2455         if (mmc->vmmc_supply) {
2456                 int ret = regulator_set_enable(mmc->vmmc_supply, false);
2457
2458                 if (ret) {
2459                         pr_debug("Error disabling VMMC supply\n");
2460                         return ret;
2461                 }
2462         }
2463 #endif
2464         return 0;
2465 }
2466
2467 static int mmc_power_cycle(struct mmc *mmc)
2468 {
2469         int ret;
2470
2471         ret = mmc_power_off(mmc);
2472         if (ret)
2473                 return ret;
2474         /*
2475          * SD spec recommends at least 1ms of delay. Let's wait for 2ms
2476          * to be on the safer side.
2477          */
2478         udelay(2000);
2479         return mmc_power_on(mmc);
2480 }
2481
2482 int mmc_start_init(struct mmc *mmc)
2483 {
2484         bool no_card;
2485         bool uhs_en = supports_uhs(mmc->cfg->host_caps);
2486         int err;
2487
2488         /*
2489          * all hosts are capable of 1 bit bus-width and able to use the legacy
2490          * timings.
2491          */
2492         mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
2493                          MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
2494
2495 #if !defined(CONFIG_MMC_BROKEN_CD)
2496         /* we pretend there's no card when init is NULL */
2497         no_card = mmc_getcd(mmc) == 0;
2498 #else
2499         no_card = 0;
2500 #endif
2501 #if !CONFIG_IS_ENABLED(DM_MMC)
2502         no_card = no_card || (mmc->cfg->ops->init == NULL);
2503 #endif
2504         if (no_card) {
2505                 mmc->has_init = 0;
2506 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
2507                 pr_err("MMC: no card present\n");
2508 #endif
2509                 return -ENOMEDIUM;
2510         }
2511
2512         if (mmc->has_init)
2513                 return 0;
2514
2515 #ifdef CONFIG_FSL_ESDHC_ADAPTER_IDENT
2516         mmc_adapter_card_type_ident();
2517 #endif
2518         err = mmc_power_init(mmc);
2519         if (err)
2520                 return err;
2521
2522 #ifdef CONFIG_MMC_QUIRKS
2523         mmc->quirks = MMC_QUIRK_RETRY_SET_BLOCKLEN |
2524                       MMC_QUIRK_RETRY_SEND_CID;
2525 #endif
2526
2527         err = mmc_power_cycle(mmc);
2528         if (err) {
2529                 /*
2530                  * if power cycling is not supported, we should not try
2531                  * to use the UHS modes, because we wouldn't be able to
2532                  * recover from an error during the UHS initialization.
2533                  */
2534                 pr_debug("Unable to do a full power cycle. Disabling the UHS modes for safety\n");
2535                 uhs_en = false;
2536                 mmc->host_caps &= ~UHS_CAPS;
2537                 err = mmc_power_on(mmc);
2538         }
2539         if (err)
2540                 return err;
2541
2542 #if CONFIG_IS_ENABLED(DM_MMC)
2543         /* The device has already been probed ready for use */
2544 #else
2545         /* made sure it's not NULL earlier */
2546         err = mmc->cfg->ops->init(mmc);
2547         if (err)
2548                 return err;
2549 #endif
2550         mmc->ddr_mode = 0;
2551
2552 retry:
2553         mmc_set_initial_state(mmc);
2554         mmc_send_init_stream(mmc);
2555
2556         /* Reset the Card */
2557         err = mmc_go_idle(mmc);
2558
2559         if (err)
2560                 return err;
2561
2562         /* The internal partition reset to user partition(0) at every CMD0*/
2563         mmc_get_blk_desc(mmc)->hwpart = 0;
2564
2565         /* Test for SD version 2 */
2566         err = mmc_send_if_cond(mmc);
2567
2568         /* Now try to get the SD card's operating condition */
2569         err = sd_send_op_cond(mmc, uhs_en);
2570         if (err && uhs_en) {
2571                 uhs_en = false;
2572                 mmc_power_cycle(mmc);
2573                 goto retry;
2574         }
2575
2576         /* If the command timed out, we check for an MMC card */
2577         if (err == -ETIMEDOUT) {
2578                 err = mmc_send_op_cond(mmc);
2579
2580                 if (err) {
2581 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
2582                         pr_err("Card did not respond to voltage select!\n");
2583 #endif
2584                         return -EOPNOTSUPP;
2585                 }
2586         }
2587
2588         if (!err)
2589                 mmc->init_in_progress = 1;
2590
2591         return err;
2592 }
2593
2594 static int mmc_complete_init(struct mmc *mmc)
2595 {
2596         int err = 0;
2597
2598         mmc->init_in_progress = 0;
2599         if (mmc->op_cond_pending)
2600                 err = mmc_complete_op_cond(mmc);
2601
2602         if (!err)
2603                 err = mmc_startup(mmc);
2604         if (err)
2605                 mmc->has_init = 0;
2606         else
2607                 mmc->has_init = 1;
2608         return err;
2609 }
2610
2611 int mmc_init(struct mmc *mmc)
2612 {
2613         int err = 0;
2614         __maybe_unused unsigned start;
2615 #if CONFIG_IS_ENABLED(DM_MMC)
2616         struct mmc_uclass_priv *upriv = dev_get_uclass_priv(mmc->dev);
2617
2618         upriv->mmc = mmc;
2619 #endif
2620         if (mmc->has_init)
2621                 return 0;
2622
2623         start = get_timer(0);
2624
2625         if (!mmc->init_in_progress)
2626                 err = mmc_start_init(mmc);
2627
2628         if (!err)
2629                 err = mmc_complete_init(mmc);
2630         if (err)
2631                 pr_info("%s: %d, time %lu\n", __func__, err, get_timer(start));
2632
2633         return err;
2634 }
2635
2636 int mmc_set_dsr(struct mmc *mmc, u16 val)
2637 {
2638         mmc->dsr = val;
2639         return 0;
2640 }
2641
2642 /* CPU-specific MMC initializations */
2643 __weak int cpu_mmc_init(bd_t *bis)
2644 {
2645         return -1;
2646 }
2647
2648 /* board-specific MMC initializations. */
2649 __weak int board_mmc_init(bd_t *bis)
2650 {
2651         return -1;
2652 }
2653
2654 void mmc_set_preinit(struct mmc *mmc, int preinit)
2655 {
2656         mmc->preinit = preinit;
2657 }
2658
2659 #if CONFIG_IS_ENABLED(DM_MMC)
2660 static int mmc_probe(bd_t *bis)
2661 {
2662         int ret, i;
2663         struct uclass *uc;
2664         struct udevice *dev;
2665
2666         ret = uclass_get(UCLASS_MMC, &uc);
2667         if (ret)
2668                 return ret;
2669
2670         /*
2671          * Try to add them in sequence order. Really with driver model we
2672          * should allow holes, but the current MMC list does not allow that.
2673          * So if we request 0, 1, 3 we will get 0, 1, 2.
2674          */
2675         for (i = 0; ; i++) {
2676                 ret = uclass_get_device_by_seq(UCLASS_MMC, i, &dev);
2677                 if (ret == -ENODEV)
2678                         break;
2679         }
2680         uclass_foreach_dev(dev, uc) {
2681                 ret = device_probe(dev);
2682                 if (ret)
2683                         pr_err("%s - probe failed: %d\n", dev->name, ret);
2684         }
2685
2686         return 0;
2687 }
2688 #else
2689 static int mmc_probe(bd_t *bis)
2690 {
2691         if (board_mmc_init(bis) < 0)
2692                 cpu_mmc_init(bis);
2693
2694         return 0;
2695 }
2696 #endif
2697
2698 int mmc_initialize(bd_t *bis)
2699 {
2700         static int initialized = 0;
2701         int ret;
2702         if (initialized)        /* Avoid initializing mmc multiple times */
2703                 return 0;
2704         initialized = 1;
2705
2706 #if !CONFIG_IS_ENABLED(BLK)
2707 #if !CONFIG_IS_ENABLED(MMC_TINY)
2708         mmc_list_init();
2709 #endif
2710 #endif
2711         ret = mmc_probe(bis);
2712         if (ret)
2713                 return ret;
2714
2715 #ifndef CONFIG_SPL_BUILD
2716         print_mmc_devices(',');
2717 #endif
2718
2719         mmc_do_preinit();
2720         return 0;
2721 }
2722
2723 #ifdef CONFIG_CMD_BKOPS_ENABLE
2724 int mmc_set_bkops_enable(struct mmc *mmc)
2725 {
2726         int err;
2727         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
2728
2729         err = mmc_send_ext_csd(mmc, ext_csd);
2730         if (err) {
2731                 puts("Could not get ext_csd register values\n");
2732                 return err;
2733         }
2734
2735         if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
2736                 puts("Background operations not supported on device\n");
2737                 return -EMEDIUMTYPE;
2738         }
2739
2740         if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) {
2741                 puts("Background operations already enabled\n");
2742                 return 0;
2743         }
2744
2745         err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1);
2746         if (err) {
2747                 puts("Failed to enable manual background operations\n");
2748                 return err;
2749         }
2750
2751         puts("Enabled manual background operations\n");
2752
2753         return 0;
2754 }
2755 #endif