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