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