xref: /openbmc/linux/drivers/mmc/core/mmc_ops.c (revision 5a244f48)
1 /*
2  *  linux/drivers/mmc/core/mmc_ops.h
3  *
4  *  Copyright 2006-2007 Pierre Ossman
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or (at
9  * your option) any later version.
10  */
11 
12 #include <linux/slab.h>
13 #include <linux/export.h>
14 #include <linux/types.h>
15 #include <linux/scatterlist.h>
16 
17 #include <linux/mmc/host.h>
18 #include <linux/mmc/card.h>
19 #include <linux/mmc/mmc.h>
20 
21 #include "core.h"
22 #include "card.h"
23 #include "host.h"
24 #include "mmc_ops.h"
25 
26 #define MMC_OPS_TIMEOUT_MS	(10 * 60 * 1000) /* 10 minute timeout */
27 
28 static const u8 tuning_blk_pattern_4bit[] = {
29 	0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
30 	0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
31 	0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
32 	0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
33 	0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
34 	0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
35 	0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
36 	0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
37 };
38 
39 static const u8 tuning_blk_pattern_8bit[] = {
40 	0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
41 	0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
42 	0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
43 	0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
44 	0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
45 	0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
46 	0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
47 	0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
48 	0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
49 	0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
50 	0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
51 	0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
52 	0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
53 	0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
54 	0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
55 	0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
56 };
57 
58 int __mmc_send_status(struct mmc_card *card, u32 *status, unsigned int retries)
59 {
60 	int err;
61 	struct mmc_command cmd = {};
62 
63 	cmd.opcode = MMC_SEND_STATUS;
64 	if (!mmc_host_is_spi(card->host))
65 		cmd.arg = card->rca << 16;
66 	cmd.flags = MMC_RSP_SPI_R2 | MMC_RSP_R1 | MMC_CMD_AC;
67 
68 	err = mmc_wait_for_cmd(card->host, &cmd, retries);
69 	if (err)
70 		return err;
71 
72 	/* NOTE: callers are required to understand the difference
73 	 * between "native" and SPI format status words!
74 	 */
75 	if (status)
76 		*status = cmd.resp[0];
77 
78 	return 0;
79 }
80 EXPORT_SYMBOL_GPL(__mmc_send_status);
81 
82 int mmc_send_status(struct mmc_card *card, u32 *status)
83 {
84 	return __mmc_send_status(card, status, MMC_CMD_RETRIES);
85 }
86 EXPORT_SYMBOL_GPL(mmc_send_status);
87 
88 static int _mmc_select_card(struct mmc_host *host, struct mmc_card *card)
89 {
90 	struct mmc_command cmd = {};
91 
92 	cmd.opcode = MMC_SELECT_CARD;
93 
94 	if (card) {
95 		cmd.arg = card->rca << 16;
96 		cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
97 	} else {
98 		cmd.arg = 0;
99 		cmd.flags = MMC_RSP_NONE | MMC_CMD_AC;
100 	}
101 
102 	return mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
103 }
104 
105 int mmc_select_card(struct mmc_card *card)
106 {
107 
108 	return _mmc_select_card(card->host, card);
109 }
110 
111 int mmc_deselect_cards(struct mmc_host *host)
112 {
113 	return _mmc_select_card(host, NULL);
114 }
115 
116 /*
117  * Write the value specified in the device tree or board code into the optional
118  * 16 bit Driver Stage Register. This can be used to tune raise/fall times and
119  * drive strength of the DAT and CMD outputs. The actual meaning of a given
120  * value is hardware dependant.
121  * The presence of the DSR register can be determined from the CSD register,
122  * bit 76.
123  */
124 int mmc_set_dsr(struct mmc_host *host)
125 {
126 	struct mmc_command cmd = {};
127 
128 	cmd.opcode = MMC_SET_DSR;
129 
130 	cmd.arg = (host->dsr << 16) | 0xffff;
131 	cmd.flags = MMC_RSP_NONE | MMC_CMD_AC;
132 
133 	return mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
134 }
135 
136 int mmc_go_idle(struct mmc_host *host)
137 {
138 	int err;
139 	struct mmc_command cmd = {};
140 
141 	/*
142 	 * Non-SPI hosts need to prevent chipselect going active during
143 	 * GO_IDLE; that would put chips into SPI mode.  Remind them of
144 	 * that in case of hardware that won't pull up DAT3/nCS otherwise.
145 	 *
146 	 * SPI hosts ignore ios.chip_select; it's managed according to
147 	 * rules that must accommodate non-MMC slaves which this layer
148 	 * won't even know about.
149 	 */
150 	if (!mmc_host_is_spi(host)) {
151 		mmc_set_chip_select(host, MMC_CS_HIGH);
152 		mmc_delay(1);
153 	}
154 
155 	cmd.opcode = MMC_GO_IDLE_STATE;
156 	cmd.arg = 0;
157 	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_NONE | MMC_CMD_BC;
158 
159 	err = mmc_wait_for_cmd(host, &cmd, 0);
160 
161 	mmc_delay(1);
162 
163 	if (!mmc_host_is_spi(host)) {
164 		mmc_set_chip_select(host, MMC_CS_DONTCARE);
165 		mmc_delay(1);
166 	}
167 
168 	host->use_spi_crc = 0;
169 
170 	return err;
171 }
172 
173 int mmc_send_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
174 {
175 	struct mmc_command cmd = {};
176 	int i, err = 0;
177 
178 	cmd.opcode = MMC_SEND_OP_COND;
179 	cmd.arg = mmc_host_is_spi(host) ? 0 : ocr;
180 	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR;
181 
182 	for (i = 100; i; i--) {
183 		err = mmc_wait_for_cmd(host, &cmd, 0);
184 		if (err)
185 			break;
186 
187 		/* if we're just probing, do a single pass */
188 		if (ocr == 0)
189 			break;
190 
191 		/* otherwise wait until reset completes */
192 		if (mmc_host_is_spi(host)) {
193 			if (!(cmd.resp[0] & R1_SPI_IDLE))
194 				break;
195 		} else {
196 			if (cmd.resp[0] & MMC_CARD_BUSY)
197 				break;
198 		}
199 
200 		err = -ETIMEDOUT;
201 
202 		mmc_delay(10);
203 	}
204 
205 	if (rocr && !mmc_host_is_spi(host))
206 		*rocr = cmd.resp[0];
207 
208 	return err;
209 }
210 
211 int mmc_set_relative_addr(struct mmc_card *card)
212 {
213 	struct mmc_command cmd = {};
214 
215 	cmd.opcode = MMC_SET_RELATIVE_ADDR;
216 	cmd.arg = card->rca << 16;
217 	cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
218 
219 	return mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
220 }
221 
222 static int
223 mmc_send_cxd_native(struct mmc_host *host, u32 arg, u32 *cxd, int opcode)
224 {
225 	int err;
226 	struct mmc_command cmd = {};
227 
228 	cmd.opcode = opcode;
229 	cmd.arg = arg;
230 	cmd.flags = MMC_RSP_R2 | MMC_CMD_AC;
231 
232 	err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
233 	if (err)
234 		return err;
235 
236 	memcpy(cxd, cmd.resp, sizeof(u32) * 4);
237 
238 	return 0;
239 }
240 
241 /*
242  * NOTE: void *buf, caller for the buf is required to use DMA-capable
243  * buffer or on-stack buffer (with some overhead in callee).
244  */
245 static int
246 mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host,
247 		u32 opcode, void *buf, unsigned len)
248 {
249 	struct mmc_request mrq = {};
250 	struct mmc_command cmd = {};
251 	struct mmc_data data = {};
252 	struct scatterlist sg;
253 
254 	mrq.cmd = &cmd;
255 	mrq.data = &data;
256 
257 	cmd.opcode = opcode;
258 	cmd.arg = 0;
259 
260 	/* NOTE HACK:  the MMC_RSP_SPI_R1 is always correct here, but we
261 	 * rely on callers to never use this with "native" calls for reading
262 	 * CSD or CID.  Native versions of those commands use the R2 type,
263 	 * not R1 plus a data block.
264 	 */
265 	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
266 
267 	data.blksz = len;
268 	data.blocks = 1;
269 	data.flags = MMC_DATA_READ;
270 	data.sg = &sg;
271 	data.sg_len = 1;
272 
273 	sg_init_one(&sg, buf, len);
274 
275 	if (opcode == MMC_SEND_CSD || opcode == MMC_SEND_CID) {
276 		/*
277 		 * The spec states that CSR and CID accesses have a timeout
278 		 * of 64 clock cycles.
279 		 */
280 		data.timeout_ns = 0;
281 		data.timeout_clks = 64;
282 	} else
283 		mmc_set_data_timeout(&data, card);
284 
285 	mmc_wait_for_req(host, &mrq);
286 
287 	if (cmd.error)
288 		return cmd.error;
289 	if (data.error)
290 		return data.error;
291 
292 	return 0;
293 }
294 
295 static int mmc_spi_send_csd(struct mmc_card *card, u32 *csd)
296 {
297 	int ret, i;
298 	__be32 *csd_tmp;
299 
300 	csd_tmp = kzalloc(16, GFP_KERNEL);
301 	if (!csd_tmp)
302 		return -ENOMEM;
303 
304 	ret = mmc_send_cxd_data(card, card->host, MMC_SEND_CSD, csd_tmp, 16);
305 	if (ret)
306 		goto err;
307 
308 	for (i = 0; i < 4; i++)
309 		csd[i] = be32_to_cpu(csd_tmp[i]);
310 
311 err:
312 	kfree(csd_tmp);
313 	return ret;
314 }
315 
316 int mmc_send_csd(struct mmc_card *card, u32 *csd)
317 {
318 	if (mmc_host_is_spi(card->host))
319 		return mmc_spi_send_csd(card, csd);
320 
321 	return mmc_send_cxd_native(card->host, card->rca << 16,	csd,
322 				MMC_SEND_CSD);
323 }
324 
325 static int mmc_spi_send_cid(struct mmc_host *host, u32 *cid)
326 {
327 	int ret, i;
328 	__be32 *cid_tmp;
329 
330 	cid_tmp = kzalloc(16, GFP_KERNEL);
331 	if (!cid_tmp)
332 		return -ENOMEM;
333 
334 	ret = mmc_send_cxd_data(NULL, host, MMC_SEND_CID, cid_tmp, 16);
335 	if (ret)
336 		goto err;
337 
338 	for (i = 0; i < 4; i++)
339 		cid[i] = be32_to_cpu(cid_tmp[i]);
340 
341 err:
342 	kfree(cid_tmp);
343 	return ret;
344 }
345 
346 int mmc_send_cid(struct mmc_host *host, u32 *cid)
347 {
348 	if (mmc_host_is_spi(host))
349 		return mmc_spi_send_cid(host, cid);
350 
351 	return mmc_send_cxd_native(host, 0, cid, MMC_ALL_SEND_CID);
352 }
353 
354 int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd)
355 {
356 	int err;
357 	u8 *ext_csd;
358 
359 	if (!card || !new_ext_csd)
360 		return -EINVAL;
361 
362 	if (!mmc_can_ext_csd(card))
363 		return -EOPNOTSUPP;
364 
365 	/*
366 	 * As the ext_csd is so large and mostly unused, we don't store the
367 	 * raw block in mmc_card.
368 	 */
369 	ext_csd = kzalloc(512, GFP_KERNEL);
370 	if (!ext_csd)
371 		return -ENOMEM;
372 
373 	err = mmc_send_cxd_data(card, card->host, MMC_SEND_EXT_CSD, ext_csd,
374 				512);
375 	if (err)
376 		kfree(ext_csd);
377 	else
378 		*new_ext_csd = ext_csd;
379 
380 	return err;
381 }
382 EXPORT_SYMBOL_GPL(mmc_get_ext_csd);
383 
384 int mmc_spi_read_ocr(struct mmc_host *host, int highcap, u32 *ocrp)
385 {
386 	struct mmc_command cmd = {};
387 	int err;
388 
389 	cmd.opcode = MMC_SPI_READ_OCR;
390 	cmd.arg = highcap ? (1 << 30) : 0;
391 	cmd.flags = MMC_RSP_SPI_R3;
392 
393 	err = mmc_wait_for_cmd(host, &cmd, 0);
394 
395 	*ocrp = cmd.resp[1];
396 	return err;
397 }
398 
399 int mmc_spi_set_crc(struct mmc_host *host, int use_crc)
400 {
401 	struct mmc_command cmd = {};
402 	int err;
403 
404 	cmd.opcode = MMC_SPI_CRC_ON_OFF;
405 	cmd.flags = MMC_RSP_SPI_R1;
406 	cmd.arg = use_crc;
407 
408 	err = mmc_wait_for_cmd(host, &cmd, 0);
409 	if (!err)
410 		host->use_spi_crc = use_crc;
411 	return err;
412 }
413 
414 static int mmc_switch_status_error(struct mmc_host *host, u32 status)
415 {
416 	if (mmc_host_is_spi(host)) {
417 		if (status & R1_SPI_ILLEGAL_COMMAND)
418 			return -EBADMSG;
419 	} else {
420 		if (status & 0xFDFFA000)
421 			pr_warn("%s: unexpected status %#x after switch\n",
422 				mmc_hostname(host), status);
423 		if (status & R1_SWITCH_ERROR)
424 			return -EBADMSG;
425 	}
426 	return 0;
427 }
428 
429 /* Caller must hold re-tuning */
430 int __mmc_switch_status(struct mmc_card *card, bool crc_err_fatal)
431 {
432 	u32 status;
433 	int err;
434 
435 	err = mmc_send_status(card, &status);
436 	if (!crc_err_fatal && err == -EILSEQ)
437 		return 0;
438 	if (err)
439 		return err;
440 
441 	return mmc_switch_status_error(card->host, status);
442 }
443 
444 int mmc_switch_status(struct mmc_card *card)
445 {
446 	return __mmc_switch_status(card, true);
447 }
448 
449 static int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms,
450 			bool send_status, bool retry_crc_err)
451 {
452 	struct mmc_host *host = card->host;
453 	int err;
454 	unsigned long timeout;
455 	u32 status = 0;
456 	bool expired = false;
457 	bool busy = false;
458 
459 	/* We have an unspecified cmd timeout, use the fallback value. */
460 	if (!timeout_ms)
461 		timeout_ms = MMC_OPS_TIMEOUT_MS;
462 
463 	/*
464 	 * In cases when not allowed to poll by using CMD13 or because we aren't
465 	 * capable of polling by using ->card_busy(), then rely on waiting the
466 	 * stated timeout to be sufficient.
467 	 */
468 	if (!send_status && !host->ops->card_busy) {
469 		mmc_delay(timeout_ms);
470 		return 0;
471 	}
472 
473 	timeout = jiffies + msecs_to_jiffies(timeout_ms) + 1;
474 	do {
475 		/*
476 		 * Due to the possibility of being preempted while polling,
477 		 * check the expiration time first.
478 		 */
479 		expired = time_after(jiffies, timeout);
480 
481 		if (host->ops->card_busy) {
482 			busy = host->ops->card_busy(host);
483 		} else {
484 			err = mmc_send_status(card, &status);
485 			if (retry_crc_err && err == -EILSEQ) {
486 				busy = true;
487 			} else if (err) {
488 				return err;
489 			} else {
490 				err = mmc_switch_status_error(host, status);
491 				if (err)
492 					return err;
493 				busy = R1_CURRENT_STATE(status) == R1_STATE_PRG;
494 			}
495 		}
496 
497 		/* Timeout if the device still remains busy. */
498 		if (expired && busy) {
499 			pr_err("%s: Card stuck being busy! %s\n",
500 				mmc_hostname(host), __func__);
501 			return -ETIMEDOUT;
502 		}
503 	} while (busy);
504 
505 	return 0;
506 }
507 
508 /**
509  *	__mmc_switch - modify EXT_CSD register
510  *	@card: the MMC card associated with the data transfer
511  *	@set: cmd set values
512  *	@index: EXT_CSD register index
513  *	@value: value to program into EXT_CSD register
514  *	@timeout_ms: timeout (ms) for operation performed by register write,
515  *                   timeout of zero implies maximum possible timeout
516  *	@timing: new timing to change to
517  *	@use_busy_signal: use the busy signal as response type
518  *	@send_status: send status cmd to poll for busy
519  *	@retry_crc_err: retry when CRC errors when polling with CMD13 for busy
520  *
521  *	Modifies the EXT_CSD register for selected card.
522  */
523 int __mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
524 		unsigned int timeout_ms, unsigned char timing,
525 		bool use_busy_signal, bool send_status,	bool retry_crc_err)
526 {
527 	struct mmc_host *host = card->host;
528 	int err;
529 	struct mmc_command cmd = {};
530 	bool use_r1b_resp = use_busy_signal;
531 	unsigned char old_timing = host->ios.timing;
532 
533 	mmc_retune_hold(host);
534 
535 	/*
536 	 * If the cmd timeout and the max_busy_timeout of the host are both
537 	 * specified, let's validate them. A failure means we need to prevent
538 	 * the host from doing hw busy detection, which is done by converting
539 	 * to a R1 response instead of a R1B.
540 	 */
541 	if (timeout_ms && host->max_busy_timeout &&
542 		(timeout_ms > host->max_busy_timeout))
543 		use_r1b_resp = false;
544 
545 	cmd.opcode = MMC_SWITCH;
546 	cmd.arg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
547 		  (index << 16) |
548 		  (value << 8) |
549 		  set;
550 	cmd.flags = MMC_CMD_AC;
551 	if (use_r1b_resp) {
552 		cmd.flags |= MMC_RSP_SPI_R1B | MMC_RSP_R1B;
553 		/*
554 		 * A busy_timeout of zero means the host can decide to use
555 		 * whatever value it finds suitable.
556 		 */
557 		cmd.busy_timeout = timeout_ms;
558 	} else {
559 		cmd.flags |= MMC_RSP_SPI_R1 | MMC_RSP_R1;
560 	}
561 
562 	if (index == EXT_CSD_SANITIZE_START)
563 		cmd.sanitize_busy = true;
564 
565 	err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
566 	if (err)
567 		goto out;
568 
569 	/* No need to check card status in case of unblocking command */
570 	if (!use_busy_signal)
571 		goto out;
572 
573 	/*If SPI or used HW busy detection above, then we don't need to poll. */
574 	if (((host->caps & MMC_CAP_WAIT_WHILE_BUSY) && use_r1b_resp) ||
575 		mmc_host_is_spi(host))
576 		goto out_tim;
577 
578 	/* Let's try to poll to find out when the command is completed. */
579 	err = mmc_poll_for_busy(card, timeout_ms, send_status, retry_crc_err);
580 	if (err)
581 		goto out;
582 
583 out_tim:
584 	/* Switch to new timing before check switch status. */
585 	if (timing)
586 		mmc_set_timing(host, timing);
587 
588 	if (send_status) {
589 		err = mmc_switch_status(card);
590 		if (err && timing)
591 			mmc_set_timing(host, old_timing);
592 	}
593 out:
594 	mmc_retune_release(host);
595 
596 	return err;
597 }
598 
599 int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value,
600 		unsigned int timeout_ms)
601 {
602 	return __mmc_switch(card, set, index, value, timeout_ms, 0,
603 			true, true, false);
604 }
605 EXPORT_SYMBOL_GPL(mmc_switch);
606 
607 int mmc_send_tuning(struct mmc_host *host, u32 opcode, int *cmd_error)
608 {
609 	struct mmc_request mrq = {};
610 	struct mmc_command cmd = {};
611 	struct mmc_data data = {};
612 	struct scatterlist sg;
613 	struct mmc_ios *ios = &host->ios;
614 	const u8 *tuning_block_pattern;
615 	int size, err = 0;
616 	u8 *data_buf;
617 
618 	if (ios->bus_width == MMC_BUS_WIDTH_8) {
619 		tuning_block_pattern = tuning_blk_pattern_8bit;
620 		size = sizeof(tuning_blk_pattern_8bit);
621 	} else if (ios->bus_width == MMC_BUS_WIDTH_4) {
622 		tuning_block_pattern = tuning_blk_pattern_4bit;
623 		size = sizeof(tuning_blk_pattern_4bit);
624 	} else
625 		return -EINVAL;
626 
627 	data_buf = kzalloc(size, GFP_KERNEL);
628 	if (!data_buf)
629 		return -ENOMEM;
630 
631 	mrq.cmd = &cmd;
632 	mrq.data = &data;
633 
634 	cmd.opcode = opcode;
635 	cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
636 
637 	data.blksz = size;
638 	data.blocks = 1;
639 	data.flags = MMC_DATA_READ;
640 
641 	/*
642 	 * According to the tuning specs, Tuning process
643 	 * is normally shorter 40 executions of CMD19,
644 	 * and timeout value should be shorter than 150 ms
645 	 */
646 	data.timeout_ns = 150 * NSEC_PER_MSEC;
647 
648 	data.sg = &sg;
649 	data.sg_len = 1;
650 	sg_init_one(&sg, data_buf, size);
651 
652 	mmc_wait_for_req(host, &mrq);
653 
654 	if (cmd_error)
655 		*cmd_error = cmd.error;
656 
657 	if (cmd.error) {
658 		err = cmd.error;
659 		goto out;
660 	}
661 
662 	if (data.error) {
663 		err = data.error;
664 		goto out;
665 	}
666 
667 	if (memcmp(data_buf, tuning_block_pattern, size))
668 		err = -EIO;
669 
670 out:
671 	kfree(data_buf);
672 	return err;
673 }
674 EXPORT_SYMBOL_GPL(mmc_send_tuning);
675 
676 int mmc_abort_tuning(struct mmc_host *host, u32 opcode)
677 {
678 	struct mmc_command cmd = {};
679 
680 	/*
681 	 * eMMC specification specifies that CMD12 can be used to stop a tuning
682 	 * command, but SD specification does not, so do nothing unless it is
683 	 * eMMC.
684 	 */
685 	if (opcode != MMC_SEND_TUNING_BLOCK_HS200)
686 		return 0;
687 
688 	cmd.opcode = MMC_STOP_TRANSMISSION;
689 	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC;
690 
691 	/*
692 	 * For drivers that override R1 to R1b, set an arbitrary timeout based
693 	 * on the tuning timeout i.e. 150ms.
694 	 */
695 	cmd.busy_timeout = 150;
696 
697 	return mmc_wait_for_cmd(host, &cmd, 0);
698 }
699 EXPORT_SYMBOL_GPL(mmc_abort_tuning);
700 
701 static int
702 mmc_send_bus_test(struct mmc_card *card, struct mmc_host *host, u8 opcode,
703 		  u8 len)
704 {
705 	struct mmc_request mrq = {};
706 	struct mmc_command cmd = {};
707 	struct mmc_data data = {};
708 	struct scatterlist sg;
709 	u8 *data_buf;
710 	u8 *test_buf;
711 	int i, err;
712 	static u8 testdata_8bit[8] = { 0x55, 0xaa, 0, 0, 0, 0, 0, 0 };
713 	static u8 testdata_4bit[4] = { 0x5a, 0, 0, 0 };
714 
715 	/* dma onto stack is unsafe/nonportable, but callers to this
716 	 * routine normally provide temporary on-stack buffers ...
717 	 */
718 	data_buf = kmalloc(len, GFP_KERNEL);
719 	if (!data_buf)
720 		return -ENOMEM;
721 
722 	if (len == 8)
723 		test_buf = testdata_8bit;
724 	else if (len == 4)
725 		test_buf = testdata_4bit;
726 	else {
727 		pr_err("%s: Invalid bus_width %d\n",
728 		       mmc_hostname(host), len);
729 		kfree(data_buf);
730 		return -EINVAL;
731 	}
732 
733 	if (opcode == MMC_BUS_TEST_W)
734 		memcpy(data_buf, test_buf, len);
735 
736 	mrq.cmd = &cmd;
737 	mrq.data = &data;
738 	cmd.opcode = opcode;
739 	cmd.arg = 0;
740 
741 	/* NOTE HACK:  the MMC_RSP_SPI_R1 is always correct here, but we
742 	 * rely on callers to never use this with "native" calls for reading
743 	 * CSD or CID.  Native versions of those commands use the R2 type,
744 	 * not R1 plus a data block.
745 	 */
746 	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
747 
748 	data.blksz = len;
749 	data.blocks = 1;
750 	if (opcode == MMC_BUS_TEST_R)
751 		data.flags = MMC_DATA_READ;
752 	else
753 		data.flags = MMC_DATA_WRITE;
754 
755 	data.sg = &sg;
756 	data.sg_len = 1;
757 	mmc_set_data_timeout(&data, card);
758 	sg_init_one(&sg, data_buf, len);
759 	mmc_wait_for_req(host, &mrq);
760 	err = 0;
761 	if (opcode == MMC_BUS_TEST_R) {
762 		for (i = 0; i < len / 4; i++)
763 			if ((test_buf[i] ^ data_buf[i]) != 0xff) {
764 				err = -EIO;
765 				break;
766 			}
767 	}
768 	kfree(data_buf);
769 
770 	if (cmd.error)
771 		return cmd.error;
772 	if (data.error)
773 		return data.error;
774 
775 	return err;
776 }
777 
778 int mmc_bus_test(struct mmc_card *card, u8 bus_width)
779 {
780 	int width;
781 
782 	if (bus_width == MMC_BUS_WIDTH_8)
783 		width = 8;
784 	else if (bus_width == MMC_BUS_WIDTH_4)
785 		width = 4;
786 	else if (bus_width == MMC_BUS_WIDTH_1)
787 		return 0; /* no need for test */
788 	else
789 		return -EINVAL;
790 
791 	/*
792 	 * Ignore errors from BUS_TEST_W.  BUS_TEST_R will fail if there
793 	 * is a problem.  This improves chances that the test will work.
794 	 */
795 	mmc_send_bus_test(card, card->host, MMC_BUS_TEST_W, width);
796 	return mmc_send_bus_test(card, card->host, MMC_BUS_TEST_R, width);
797 }
798 
799 static int mmc_send_hpi_cmd(struct mmc_card *card, u32 *status)
800 {
801 	struct mmc_command cmd = {};
802 	unsigned int opcode;
803 	int err;
804 
805 	if (!card->ext_csd.hpi) {
806 		pr_warn("%s: Card didn't support HPI command\n",
807 			mmc_hostname(card->host));
808 		return -EINVAL;
809 	}
810 
811 	opcode = card->ext_csd.hpi_cmd;
812 	if (opcode == MMC_STOP_TRANSMISSION)
813 		cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
814 	else if (opcode == MMC_SEND_STATUS)
815 		cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
816 
817 	cmd.opcode = opcode;
818 	cmd.arg = card->rca << 16 | 1;
819 
820 	err = mmc_wait_for_cmd(card->host, &cmd, 0);
821 	if (err) {
822 		pr_warn("%s: error %d interrupting operation. "
823 			"HPI command response %#x\n", mmc_hostname(card->host),
824 			err, cmd.resp[0]);
825 		return err;
826 	}
827 	if (status)
828 		*status = cmd.resp[0];
829 
830 	return 0;
831 }
832 
833 /**
834  *	mmc_interrupt_hpi - Issue for High priority Interrupt
835  *	@card: the MMC card associated with the HPI transfer
836  *
837  *	Issued High Priority Interrupt, and check for card status
838  *	until out-of prg-state.
839  */
840 int mmc_interrupt_hpi(struct mmc_card *card)
841 {
842 	int err;
843 	u32 status;
844 	unsigned long prg_wait;
845 
846 	if (!card->ext_csd.hpi_en) {
847 		pr_info("%s: HPI enable bit unset\n", mmc_hostname(card->host));
848 		return 1;
849 	}
850 
851 	mmc_claim_host(card->host);
852 	err = mmc_send_status(card, &status);
853 	if (err) {
854 		pr_err("%s: Get card status fail\n", mmc_hostname(card->host));
855 		goto out;
856 	}
857 
858 	switch (R1_CURRENT_STATE(status)) {
859 	case R1_STATE_IDLE:
860 	case R1_STATE_READY:
861 	case R1_STATE_STBY:
862 	case R1_STATE_TRAN:
863 		/*
864 		 * In idle and transfer states, HPI is not needed and the caller
865 		 * can issue the next intended command immediately
866 		 */
867 		goto out;
868 	case R1_STATE_PRG:
869 		break;
870 	default:
871 		/* In all other states, it's illegal to issue HPI */
872 		pr_debug("%s: HPI cannot be sent. Card state=%d\n",
873 			mmc_hostname(card->host), R1_CURRENT_STATE(status));
874 		err = -EINVAL;
875 		goto out;
876 	}
877 
878 	err = mmc_send_hpi_cmd(card, &status);
879 	if (err)
880 		goto out;
881 
882 	prg_wait = jiffies + msecs_to_jiffies(card->ext_csd.out_of_int_time);
883 	do {
884 		err = mmc_send_status(card, &status);
885 
886 		if (!err && R1_CURRENT_STATE(status) == R1_STATE_TRAN)
887 			break;
888 		if (time_after(jiffies, prg_wait))
889 			err = -ETIMEDOUT;
890 	} while (!err);
891 
892 out:
893 	mmc_release_host(card->host);
894 	return err;
895 }
896 
897 int mmc_can_ext_csd(struct mmc_card *card)
898 {
899 	return (card && card->csd.mmca_vsn > CSD_SPEC_VER_3);
900 }
901 
902 /**
903  *	mmc_stop_bkops - stop ongoing BKOPS
904  *	@card: MMC card to check BKOPS
905  *
906  *	Send HPI command to stop ongoing background operations to
907  *	allow rapid servicing of foreground operations, e.g. read/
908  *	writes. Wait until the card comes out of the programming state
909  *	to avoid errors in servicing read/write requests.
910  */
911 int mmc_stop_bkops(struct mmc_card *card)
912 {
913 	int err = 0;
914 
915 	err = mmc_interrupt_hpi(card);
916 
917 	/*
918 	 * If err is EINVAL, we can't issue an HPI.
919 	 * It should complete the BKOPS.
920 	 */
921 	if (!err || (err == -EINVAL)) {
922 		mmc_card_clr_doing_bkops(card);
923 		mmc_retune_release(card->host);
924 		err = 0;
925 	}
926 
927 	return err;
928 }
929 
930 static int mmc_read_bkops_status(struct mmc_card *card)
931 {
932 	int err;
933 	u8 *ext_csd;
934 
935 	mmc_claim_host(card->host);
936 	err = mmc_get_ext_csd(card, &ext_csd);
937 	mmc_release_host(card->host);
938 	if (err)
939 		return err;
940 
941 	card->ext_csd.raw_bkops_status = ext_csd[EXT_CSD_BKOPS_STATUS];
942 	card->ext_csd.raw_exception_status = ext_csd[EXT_CSD_EXP_EVENTS_STATUS];
943 	kfree(ext_csd);
944 	return 0;
945 }
946 
947 /**
948  *	mmc_start_bkops - start BKOPS for supported cards
949  *	@card: MMC card to start BKOPS
950  *	@from_exception: A flag to indicate if this function was
951  *			 called due to an exception raised by the card
952  *
953  *	Start background operations whenever requested.
954  *	When the urgent BKOPS bit is set in a R1 command response
955  *	then background operations should be started immediately.
956 */
957 void mmc_start_bkops(struct mmc_card *card, bool from_exception)
958 {
959 	int err;
960 	int timeout;
961 	bool use_busy_signal;
962 
963 	if (!card->ext_csd.man_bkops_en || mmc_card_doing_bkops(card))
964 		return;
965 
966 	err = mmc_read_bkops_status(card);
967 	if (err) {
968 		pr_err("%s: Failed to read bkops status: %d\n",
969 		       mmc_hostname(card->host), err);
970 		return;
971 	}
972 
973 	if (!card->ext_csd.raw_bkops_status)
974 		return;
975 
976 	if (card->ext_csd.raw_bkops_status < EXT_CSD_BKOPS_LEVEL_2 &&
977 	    from_exception)
978 		return;
979 
980 	mmc_claim_host(card->host);
981 	if (card->ext_csd.raw_bkops_status >= EXT_CSD_BKOPS_LEVEL_2) {
982 		timeout = MMC_OPS_TIMEOUT_MS;
983 		use_busy_signal = true;
984 	} else {
985 		timeout = 0;
986 		use_busy_signal = false;
987 	}
988 
989 	mmc_retune_hold(card->host);
990 
991 	err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
992 			EXT_CSD_BKOPS_START, 1, timeout, 0,
993 			use_busy_signal, true, false);
994 	if (err) {
995 		pr_warn("%s: Error %d starting bkops\n",
996 			mmc_hostname(card->host), err);
997 		mmc_retune_release(card->host);
998 		goto out;
999 	}
1000 
1001 	/*
1002 	 * For urgent bkops status (LEVEL_2 and more)
1003 	 * bkops executed synchronously, otherwise
1004 	 * the operation is in progress
1005 	 */
1006 	if (!use_busy_signal)
1007 		mmc_card_set_doing_bkops(card);
1008 	else
1009 		mmc_retune_release(card->host);
1010 out:
1011 	mmc_release_host(card->host);
1012 }
1013 
1014 /*
1015  * Flush the cache to the non-volatile storage.
1016  */
1017 int mmc_flush_cache(struct mmc_card *card)
1018 {
1019 	int err = 0;
1020 
1021 	if (mmc_card_mmc(card) &&
1022 			(card->ext_csd.cache_size > 0) &&
1023 			(card->ext_csd.cache_ctrl & 1)) {
1024 		err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1025 				EXT_CSD_FLUSH_CACHE, 1, 0);
1026 		if (err)
1027 			pr_err("%s: cache flush error %d\n",
1028 					mmc_hostname(card->host), err);
1029 	}
1030 
1031 	return err;
1032 }
1033 EXPORT_SYMBOL(mmc_flush_cache);
1034 
1035 static int mmc_cmdq_switch(struct mmc_card *card, bool enable)
1036 {
1037 	u8 val = enable ? EXT_CSD_CMDQ_MODE_ENABLED : 0;
1038 	int err;
1039 
1040 	if (!card->ext_csd.cmdq_support)
1041 		return -EOPNOTSUPP;
1042 
1043 	err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_CMDQ_MODE_EN,
1044 			 val, card->ext_csd.generic_cmd6_time);
1045 	if (!err)
1046 		card->ext_csd.cmdq_en = enable;
1047 
1048 	return err;
1049 }
1050 
1051 int mmc_cmdq_enable(struct mmc_card *card)
1052 {
1053 	return mmc_cmdq_switch(card, true);
1054 }
1055 EXPORT_SYMBOL_GPL(mmc_cmdq_enable);
1056 
1057 int mmc_cmdq_disable(struct mmc_card *card)
1058 {
1059 	return mmc_cmdq_switch(card, false);
1060 }
1061 EXPORT_SYMBOL_GPL(mmc_cmdq_disable);
1062