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