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