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