sd.c 33.0 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0-only
P
Pierre Ossman 已提交
2
/*
P
Pierre Ossman 已提交
3
 *  linux/drivers/mmc/core/sd.c
P
Pierre Ossman 已提交
4 5 6 7 8 9 10
 *
 *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.
 *  SD support Copyright (C) 2004 Ian Molton, All Rights Reserved.
 *  Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
 */

#include <linux/err.h>
11
#include <linux/sizes.h>
12
#include <linux/slab.h>
13
#include <linux/stat.h>
14
#include <linux/pm_runtime.h>
P
Pierre Ossman 已提交
15 16 17 18

#include <linux/mmc/host.h>
#include <linux/mmc/card.h>
#include <linux/mmc/mmc.h>
19
#include <linux/mmc/sd.h>
P
Pierre Ossman 已提交
20 21

#include "core.h"
22
#include "card.h"
23
#include "host.h"
P
Pierre Ossman 已提交
24
#include "bus.h"
P
Pierre Ossman 已提交
25
#include "mmc_ops.h"
26
#include "sd.h"
P
Pierre Ossman 已提交
27 28 29 30 31 32 33 34 35 36 37 38
#include "sd_ops.h"

static const unsigned int tran_exp[] = {
	10000,		100000,		1000000,	10000000,
	0,		0,		0,		0
};

static const unsigned char tran_mant[] = {
	0,	10,	12,	13,	15,	20,	25,	30,
	35,	40,	45,	50,	55,	60,	70,	80,
};

39
static const unsigned int taac_exp[] = {
P
Pierre Ossman 已提交
40 41 42
	1,	10,	100,	1000,	10000,	100000,	1000000, 10000000,
};

43
static const unsigned int taac_mant[] = {
P
Pierre Ossman 已提交
44 45 46 47
	0,	10,	12,	13,	15,	20,	25,	30,
	35,	40,	45,	50,	55,	60,	70,	80,
};

48 49 50 51 52 53 54
static const unsigned int sd_au_size[] = {
	0,		SZ_16K / 512,		SZ_32K / 512,	SZ_64K / 512,
	SZ_128K / 512,	SZ_256K / 512,		SZ_512K / 512,	SZ_1M / 512,
	SZ_2M / 512,	SZ_4M / 512,		SZ_8M / 512,	(SZ_8M + SZ_4M) / 512,
	SZ_16M / 512,	(SZ_16M + SZ_8M) / 512,	SZ_32M / 512,	SZ_64M / 512,
};

P
Pierre Ossman 已提交
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
#define UNSTUFF_BITS(resp,start,size)					\
	({								\
		const int __size = size;				\
		const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1;	\
		const int __off = 3 - ((start) / 32);			\
		const int __shft = (start) & 31;			\
		u32 __res;						\
									\
		__res = resp[__off] >> __shft;				\
		if (__size + __shft > 32)				\
			__res |= resp[__off-1] << ((32 - __shft) % 32);	\
		__res & __mask;						\
	})

/*
 * Given the decoded CSD structure, decode the raw CID to our CID structure.
 */
M
Michal Miroslaw 已提交
72
void mmc_decode_cid(struct mmc_card *card)
P
Pierre Ossman 已提交
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
{
	u32 *resp = card->raw_cid;

	/*
	 * SD doesn't currently have a version field so we will
	 * have to assume we can parse this.
	 */
	card->cid.manfid		= UNSTUFF_BITS(resp, 120, 8);
	card->cid.oemid			= UNSTUFF_BITS(resp, 104, 16);
	card->cid.prod_name[0]		= UNSTUFF_BITS(resp, 96, 8);
	card->cid.prod_name[1]		= UNSTUFF_BITS(resp, 88, 8);
	card->cid.prod_name[2]		= UNSTUFF_BITS(resp, 80, 8);
	card->cid.prod_name[3]		= UNSTUFF_BITS(resp, 72, 8);
	card->cid.prod_name[4]		= UNSTUFF_BITS(resp, 64, 8);
	card->cid.hwrev			= UNSTUFF_BITS(resp, 60, 4);
	card->cid.fwrev			= UNSTUFF_BITS(resp, 56, 4);
	card->cid.serial		= UNSTUFF_BITS(resp, 24, 32);
	card->cid.year			= UNSTUFF_BITS(resp, 12, 8);
	card->cid.month			= UNSTUFF_BITS(resp, 8, 4);

	card->cid.year += 2000; /* SD cards year offset */
}

/*
 * Given a 128-bit response, decode to our card CSD structure.
 */
P
Pierre Ossman 已提交
99
static int mmc_decode_csd(struct mmc_card *card)
P
Pierre Ossman 已提交
100 101 102 103 104 105 106 107 108 109 110
{
	struct mmc_csd *csd = &card->csd;
	unsigned int e, m, csd_struct;
	u32 *resp = card->raw_csd;

	csd_struct = UNSTUFF_BITS(resp, 126, 2);

	switch (csd_struct) {
	case 0:
		m = UNSTUFF_BITS(resp, 115, 4);
		e = UNSTUFF_BITS(resp, 112, 3);
111 112
		csd->taac_ns	 = (taac_exp[e] * taac_mant[m] + 9) / 10;
		csd->taac_clks	 = UNSTUFF_BITS(resp, 104, 8) * 100;
P
Pierre Ossman 已提交
113 114 115 116 117 118 119 120 121 122 123 124 125 126

		m = UNSTUFF_BITS(resp, 99, 4);
		e = UNSTUFF_BITS(resp, 96, 3);
		csd->max_dtr	  = tran_exp[e] * tran_mant[m];
		csd->cmdclass	  = UNSTUFF_BITS(resp, 84, 12);

		e = UNSTUFF_BITS(resp, 47, 3);
		m = UNSTUFF_BITS(resp, 62, 12);
		csd->capacity	  = (1 + m) << (e + 2);

		csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
		csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
		csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
		csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
127
		csd->dsr_imp = UNSTUFF_BITS(resp, 76, 1);
P
Pierre Ossman 已提交
128 129 130
		csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
		csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
		csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
131 132 133 134 135 136 137

		if (UNSTUFF_BITS(resp, 46, 1)) {
			csd->erase_size = 1;
		} else if (csd->write_blkbits >= 9) {
			csd->erase_size = UNSTUFF_BITS(resp, 39, 7) + 1;
			csd->erase_size <<= csd->write_blkbits - 9;
		}
138 139 140

		if (UNSTUFF_BITS(resp, 13, 1))
			mmc_card_set_readonly(card);
P
Pierre Ossman 已提交
141 142 143
		break;
	case 1:
		/*
144
		 * This is a block-addressed SDHC or SDXC card. Most
P
Pierre Ossman 已提交
145 146 147 148 149 150
		 * interesting fields are unused and have fixed
		 * values. To avoid getting tripped by buggy cards,
		 * we assume those fixed values ourselves.
		 */
		mmc_card_set_blockaddr(card);

151 152
		csd->taac_ns	 = 0; /* Unused */
		csd->taac_clks	 = 0; /* Unused */
P
Pierre Ossman 已提交
153 154 155 156 157

		m = UNSTUFF_BITS(resp, 99, 4);
		e = UNSTUFF_BITS(resp, 96, 3);
		csd->max_dtr	  = tran_exp[e] * tran_mant[m];
		csd->cmdclass	  = UNSTUFF_BITS(resp, 84, 12);
158 159 160 161 162
		csd->c_size	  = UNSTUFF_BITS(resp, 48, 22);

		/* SDXC cards have a minimum C_SIZE of 0x00FFFF */
		if (csd->c_size >= 0xFFFF)
			mmc_card_set_ext_capacity(card);
P
Pierre Ossman 已提交
163 164 165 166 167 168 169 170 171 172 173

		m = UNSTUFF_BITS(resp, 48, 22);
		csd->capacity     = (1 + m) << 10;

		csd->read_blkbits = 9;
		csd->read_partial = 0;
		csd->write_misalign = 0;
		csd->read_misalign = 0;
		csd->r2w_factor = 4; /* Unused */
		csd->write_blkbits = 9;
		csd->write_partial = 0;
174
		csd->erase_size = 1;
175 176 177

		if (UNSTUFF_BITS(resp, 13, 1))
			mmc_card_set_readonly(card);
P
Pierre Ossman 已提交
178 179
		break;
	default:
180
		pr_err("%s: unrecognised CSD structure version %d\n",
P
Pierre Ossman 已提交
181
			mmc_hostname(card->host), csd_struct);
P
Pierre Ossman 已提交
182
		return -EINVAL;
P
Pierre Ossman 已提交
183
	}
P
Pierre Ossman 已提交
184

185 186
	card->erase_size = csd->erase_size;

P
Pierre Ossman 已提交
187
	return 0;
P
Pierre Ossman 已提交
188 189 190 191 192
}

/*
 * Given a 64-bit response, decode to our card SCR structure.
 */
P
Pierre Ossman 已提交
193
static int mmc_decode_scr(struct mmc_card *card)
P
Pierre Ossman 已提交
194 195 196 197 198 199 200 201 202 203
{
	struct sd_scr *scr = &card->scr;
	unsigned int scr_struct;
	u32 resp[4];

	resp[3] = card->raw_scr[1];
	resp[2] = card->raw_scr[0];

	scr_struct = UNSTUFF_BITS(resp, 60, 4);
	if (scr_struct != 0) {
204
		pr_err("%s: unrecognised SCR structure version %d\n",
P
Pierre Ossman 已提交
205
			mmc_hostname(card->host), scr_struct);
P
Pierre Ossman 已提交
206
		return -EINVAL;
P
Pierre Ossman 已提交
207 208 209 210
	}

	scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
	scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
211 212 213
	if (scr->sda_vsn == SCR_SPEC_VER_2)
		/* Check if Physical Layer Spec v3.0 is supported */
		scr->sda_spec3 = UNSTUFF_BITS(resp, 47, 1);
P
Pierre Ossman 已提交
214

215 216 217 218 219
	if (scr->sda_spec3) {
		scr->sda_spec4 = UNSTUFF_BITS(resp, 42, 1);
		scr->sda_specx = UNSTUFF_BITS(resp, 38, 4);
	}

220 221 222 223 224
	if (UNSTUFF_BITS(resp, 55, 1))
		card->erased_byte = 0xFF;
	else
		card->erased_byte = 0x0;

225 226
	if (scr->sda_spec3)
		scr->cmds = UNSTUFF_BITS(resp, 32, 2);
R
Raul E Rangel 已提交
227 228 229 230 231 232 233 234

	/* SD Spec says: any SD Card shall set at least bits 0 and 2 */
	if (!(scr->bus_widths & SD_SCR_BUS_WIDTH_1) ||
	    !(scr->bus_widths & SD_SCR_BUS_WIDTH_4)) {
		pr_err("%s: invalid bus width\n", mmc_hostname(card->host));
		return -EINVAL;
	}

P
Pierre Ossman 已提交
235
	return 0;
P
Pierre Ossman 已提交
236 237
}

238 239 240 241 242 243
/*
 * Fetch and process SD Status register.
 */
static int mmc_read_ssr(struct mmc_card *card)
{
	unsigned int au, es, et, eo;
244
	__be32 *raw_ssr;
245 246
	u32 resp[4] = {};
	u8 discard_support;
247
	int i;
248 249

	if (!(card->csd.cmdclass & CCC_APP_SPEC)) {
J
Joe Perches 已提交
250 251
		pr_warn("%s: card lacks mandatory SD Status function\n",
			mmc_hostname(card->host));
252 253 254
		return 0;
	}

255 256 257 258 259
	raw_ssr = kmalloc(sizeof(card->raw_ssr), GFP_KERNEL);
	if (!raw_ssr)
		return -ENOMEM;

	if (mmc_app_sd_status(card, raw_ssr)) {
J
Joe Perches 已提交
260 261
		pr_warn("%s: problem reading SD Status register\n",
			mmc_hostname(card->host));
262
		kfree(raw_ssr);
263
		return 0;
264 265 266
	}

	for (i = 0; i < 16; i++)
267 268 269
		card->raw_ssr[i] = be32_to_cpu(raw_ssr[i]);

	kfree(raw_ssr);
270 271 272 273 274

	/*
	 * UNSTUFF_BITS only works with four u32s so we have to offset the
	 * bitfield positions accordingly.
	 */
275
	au = UNSTUFF_BITS(card->raw_ssr, 428 - 384, 4);
276 277 278
	if (au) {
		if (au <= 9 || card->scr.sda_spec3) {
			card->ssr.au = sd_au_size[au];
279 280
			es = UNSTUFF_BITS(card->raw_ssr, 408 - 384, 16);
			et = UNSTUFF_BITS(card->raw_ssr, 402 - 384, 6);
281
			if (es && et) {
282
				eo = UNSTUFF_BITS(card->raw_ssr, 400 - 384, 2);
283 284 285 286
				card->ssr.erase_timeout = (et * 1000) / es;
				card->ssr.erase_offset = eo * 1000;
			}
		} else {
J
Joe Perches 已提交
287 288
			pr_warn("%s: SD Status: Invalid Allocation Unit size\n",
				mmc_hostname(card->host));
289 290
		}
	}
291

292 293 294 295 296 297 298
	/*
	 * starting SD5.1 discard is supported if DISCARD_SUPPORT (b313) is set
	 */
	resp[3] = card->raw_ssr[6];
	discard_support = UNSTUFF_BITS(resp, 313 - 288, 1);
	card->erase_arg = (card->scr.sda_specx && discard_support) ?
			    SD_DISCARD_ARG : SD_ERASE_ARG;
299

300
	return 0;
301 302
}

P
Pierre Ossman 已提交
303
/*
P
Pierre Ossman 已提交
304
 * Fetches and decodes switch information
P
Pierre Ossman 已提交
305
 */
P
Pierre Ossman 已提交
306
static int mmc_read_switch(struct mmc_card *card)
P
Pierre Ossman 已提交
307 308 309 310
{
	int err;
	u8 *status;

311
	if (card->scr.sda_vsn < SCR_SPEC_VER_1)
P
Pierre Ossman 已提交
312
		return 0;
313 314

	if (!(card->csd.cmdclass & CCC_SWITCH)) {
J
Joe Perches 已提交
315
		pr_warn("%s: card lacks mandatory switch function, performance might suffer\n",
316
			mmc_hostname(card->host));
P
Pierre Ossman 已提交
317
		return 0;
318 319
	}

P
Pierre Ossman 已提交
320
	status = kmalloc(64, GFP_KERNEL);
321
	if (!status)
P
Pierre Ossman 已提交
322
		return -ENOMEM;
P
Pierre Ossman 已提交
323

324 325 326 327 328 329
	/*
	 * Find out the card's support bits with a mode 0 operation.
	 * The argument does not matter, as the support bits do not
	 * change with the arguments.
	 */
	err = mmc_sd_switch(card, 0, 0, 0, status);
P
Pierre Ossman 已提交
330
	if (err) {
331 332 333 334 335
		/*
		 * If the host or the card can't do the switch,
		 * fail more gracefully.
		 */
		if (err != -EINVAL && err != -ENOSYS && err != -EFAULT)
P
Pierre Ossman 已提交
336 337
			goto out;

J
Joe Perches 已提交
338
		pr_warn("%s: problem reading Bus Speed modes\n",
339
			mmc_hostname(card->host));
P
Pierre Ossman 已提交
340
		err = 0;
P
Pierre Ossman 已提交
341

P
Pierre Ossman 已提交
342 343 344
		goto out;
	}

345 346
	if (status[13] & SD_MODE_HIGH_SPEED)
		card->sw_caps.hs_max_dtr = HIGH_SPEED_MAX_DTR;
347

348 349
	if (card->scr.sda_spec3) {
		card->sw_caps.sd3_bus_mode = status[13];
350
		/* Driver Strengths supported by the card */
351
		card->sw_caps.sd3_drv_type = status[9];
352
		card->sw_caps.sd3_curr_limit = status[7] | status[6] << 8;
353
	}
P
Pierre Ossman 已提交
354

P
Pierre Ossman 已提交
355 356 357 358 359 360 361 362 363
out:
	kfree(status);

	return err;
}

/*
 * Test if the card supports high-speed mode and, if so, switch to it.
 */
M
Michal Miroslaw 已提交
364
int mmc_sd_switch_hs(struct mmc_card *card)
P
Pierre Ossman 已提交
365 366 367 368
{
	int err;
	u8 *status;

369
	if (card->scr.sda_vsn < SCR_SPEC_VER_1)
P
Pierre Ossman 已提交
370
		return 0;
371 372

	if (!(card->csd.cmdclass & CCC_SWITCH))
P
Pierre Ossman 已提交
373
		return 0;
374

P
Pierre Ossman 已提交
375
	if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
P
Pierre Ossman 已提交
376
		return 0;
P
Pierre Ossman 已提交
377 378

	if (card->sw_caps.hs_max_dtr == 0)
P
Pierre Ossman 已提交
379
		return 0;
P
Pierre Ossman 已提交
380 381

	status = kmalloc(64, GFP_KERNEL);
382
	if (!status)
P
Pierre Ossman 已提交
383
		return -ENOMEM;
P
Pierre Ossman 已提交
384

385
	err = mmc_sd_switch(card, 1, 0, HIGH_SPEED_BUS_SPEED, status);
P
Pierre Ossman 已提交
386
	if (err)
P
Pierre Ossman 已提交
387 388
		goto out;

389
	if ((status[16] & 0xF) != HIGH_SPEED_BUS_SPEED) {
J
Joe Perches 已提交
390
		pr_warn("%s: Problem switching card into high-speed mode!\n",
P
Pierre Ossman 已提交
391
			mmc_hostname(card->host));
M
Michal Miroslaw 已提交
392
		err = 0;
P
Pierre Ossman 已提交
393
	} else {
M
Michal Miroslaw 已提交
394
		err = 1;
P
Pierre Ossman 已提交
395 396 397 398 399 400 401 402
	}

out:
	kfree(status);

	return err;
}

403 404
static int sd_select_driver_type(struct mmc_card *card, u8 *status)
{
405
	int card_drv_type, drive_strength, drv_type;
406 407
	int err;

408 409
	card->drive_strength = 0;

410
	card_drv_type = card->sw_caps.sd3_drv_type | SD_DRIVER_TYPE_B;
411

412 413 414
	drive_strength = mmc_select_drive_strength(card,
						   card->sw_caps.uhs_max_dtr,
						   card_drv_type, &drv_type);
415

416 417 418 419 420 421 422 423 424
	if (drive_strength) {
		err = mmc_sd_switch(card, 1, 2, drive_strength, status);
		if (err)
			return err;
		if ((status[15] & 0xF) != drive_strength) {
			pr_warn("%s: Problem setting drive strength!\n",
				mmc_hostname(card->host));
			return 0;
		}
425
		card->drive_strength = drive_strength;
426 427
	}

428 429
	if (drv_type)
		mmc_set_driver_type(card->host, drv_type);
430 431 432 433

	return 0;
}

434
static void sd_update_bus_speed_mode(struct mmc_card *card)
435 436 437 438 439
{
	/*
	 * If the host doesn't support any of the UHS-I modes, fallback on
	 * default speed.
	 */
440
	if (!mmc_host_uhs(card->host)) {
441 442 443
		card->sd_bus_speed = 0;
		return;
	}
444 445 446

	if ((card->host->caps & MMC_CAP_UHS_SDR104) &&
	    (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR104)) {
447
			card->sd_bus_speed = UHS_SDR104_BUS_SPEED;
448 449
	} else if ((card->host->caps & MMC_CAP_UHS_DDR50) &&
		   (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_DDR50)) {
450
			card->sd_bus_speed = UHS_DDR50_BUS_SPEED;
451 452 453
	} else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
		    MMC_CAP_UHS_SDR50)) && (card->sw_caps.sd3_bus_mode &
		    SD_MODE_UHS_SDR50)) {
454
			card->sd_bus_speed = UHS_SDR50_BUS_SPEED;
455 456 457
	} else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
		    MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25)) &&
		   (card->sw_caps.sd3_bus_mode & SD_MODE_UHS_SDR25)) {
458
			card->sd_bus_speed = UHS_SDR25_BUS_SPEED;
459 460 461 462
	} else if ((card->host->caps & (MMC_CAP_UHS_SDR104 |
		    MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR25 |
		    MMC_CAP_UHS_SDR12)) && (card->sw_caps.sd3_bus_mode &
		    SD_MODE_UHS_SDR12)) {
463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494
			card->sd_bus_speed = UHS_SDR12_BUS_SPEED;
	}
}

static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status)
{
	int err;
	unsigned int timing = 0;

	switch (card->sd_bus_speed) {
	case UHS_SDR104_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR104;
		card->sw_caps.uhs_max_dtr = UHS_SDR104_MAX_DTR;
		break;
	case UHS_DDR50_BUS_SPEED:
		timing = MMC_TIMING_UHS_DDR50;
		card->sw_caps.uhs_max_dtr = UHS_DDR50_MAX_DTR;
		break;
	case UHS_SDR50_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR50;
		card->sw_caps.uhs_max_dtr = UHS_SDR50_MAX_DTR;
		break;
	case UHS_SDR25_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR25;
		card->sw_caps.uhs_max_dtr = UHS_SDR25_MAX_DTR;
		break;
	case UHS_SDR12_BUS_SPEED:
		timing = MMC_TIMING_UHS_SDR12;
		card->sw_caps.uhs_max_dtr = UHS_SDR12_MAX_DTR;
		break;
	default:
		return 0;
495 496
	}

497
	err = mmc_sd_switch(card, 1, 0, card->sd_bus_speed, status);
498 499 500
	if (err)
		return err;

501
	if ((status[16] & 0xF) != card->sd_bus_speed)
J
Joe Perches 已提交
502
		pr_warn("%s: Problem setting bus speed mode!\n",
503 504 505 506 507 508 509 510 511
			mmc_hostname(card->host));
	else {
		mmc_set_timing(card->host, timing);
		mmc_set_clock(card->host, card->sw_caps.uhs_max_dtr);
	}

	return 0;
}

A
Aaron Lu 已提交
512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536
/* Get host's max current setting at its current voltage */
static u32 sd_get_host_max_current(struct mmc_host *host)
{
	u32 voltage, max_current;

	voltage = 1 << host->ios.vdd;
	switch (voltage) {
	case MMC_VDD_165_195:
		max_current = host->max_current_180;
		break;
	case MMC_VDD_29_30:
	case MMC_VDD_30_31:
		max_current = host->max_current_300;
		break;
	case MMC_VDD_32_33:
	case MMC_VDD_33_34:
		max_current = host->max_current_330;
		break;
	default:
		max_current = 0;
	}

	return max_current;
}

537 538
static int sd_set_current_limit(struct mmc_card *card, u8 *status)
{
539
	int current_limit = SD_SET_CURRENT_NO_CHANGE;
540
	int err;
A
Aaron Lu 已提交
541
	u32 max_current;
542 543 544

	/*
	 * Current limit switch is only defined for SDR50, SDR104, and DDR50
545 546
	 * bus speed modes. For other bus speed modes, we do not change the
	 * current limit.
A
Aaron Lu 已提交
547 548 549 550 551 552 553 554 555 556 557 558 559
	 */
	if ((card->sd_bus_speed != UHS_SDR50_BUS_SPEED) &&
	    (card->sd_bus_speed != UHS_SDR104_BUS_SPEED) &&
	    (card->sd_bus_speed != UHS_DDR50_BUS_SPEED))
		return 0;

	/*
	 * Host has different current capabilities when operating at
	 * different voltages, so find out its max current first.
	 */
	max_current = sd_get_host_max_current(card->host);

	/*
560 561 562 563 564 565
	 * We only check host's capability here, if we set a limit that is
	 * higher than the card's maximum current, the card will be using its
	 * maximum current, e.g. if the card's maximum current is 300ma, and
	 * when we set current limit to 200ma, the card will draw 200ma, and
	 * when we set current limit to 400/600/800ma, the card will draw its
	 * maximum 300ma from the host.
566 567 568 569 570 571 572
	 *
	 * The above is incorrect: if we try to set a current limit that is
	 * not supported by the card, the card can rightfully error out the
	 * attempt, and remain at the default current limit.  This results
	 * in a 300mA card being limited to 200mA even though the host
	 * supports 800mA. Failures seen with SanDisk 8GB UHS cards with
	 * an iMX6 host. --rmk
573
	 */
574 575
	if (max_current >= 800 &&
	    card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_800)
A
Aaron Lu 已提交
576
		current_limit = SD_SET_CURRENT_LIMIT_800;
577 578
	else if (max_current >= 600 &&
		 card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_600)
A
Aaron Lu 已提交
579
		current_limit = SD_SET_CURRENT_LIMIT_600;
580 581
	else if (max_current >= 400 &&
		 card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_400)
A
Aaron Lu 已提交
582
		current_limit = SD_SET_CURRENT_LIMIT_400;
583 584
	else if (max_current >= 200 &&
		 card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_200)
A
Aaron Lu 已提交
585
		current_limit = SD_SET_CURRENT_LIMIT_200;
586

587 588 589 590
	if (current_limit != SD_SET_CURRENT_NO_CHANGE) {
		err = mmc_sd_switch(card, 1, 3, current_limit, status);
		if (err)
			return err;
591

592
		if (((status[15] >> 4) & 0x0F) != current_limit)
J
Joe Perches 已提交
593
			pr_warn("%s: Problem setting current limit!\n",
594
				mmc_hostname(card->host));
595

596
	}
597

598 599 600
	return 0;
}

601 602 603 604 605 606 607 608 609 610 611 612
/*
 * UHS-I specific initialization procedure
 */
static int mmc_sd_init_uhs_card(struct mmc_card *card)
{
	int err;
	u8 *status;

	if (!(card->csd.cmdclass & CCC_SWITCH))
		return 0;

	status = kmalloc(64, GFP_KERNEL);
613
	if (!status)
614 615 616
		return -ENOMEM;

	/* Set 4-bit bus width */
617 618 619
	err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
	if (err)
		goto out;
620

621
	mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
622

623 624 625 626 627 628
	/*
	 * Select the bus speed mode depending on host
	 * and card capability.
	 */
	sd_update_bus_speed_mode(card);

629 630
	/* Set the driver strength for the card */
	err = sd_select_driver_type(card, status);
631 632 633
	if (err)
		goto out;

634 635
	/* Set current limit for the card */
	err = sd_set_current_limit(card, status);
636 637 638
	if (err)
		goto out;

639 640
	/* Set bus speed mode of the card */
	err = sd_set_bus_speed_mode(card, status);
641 642 643
	if (err)
		goto out;

644 645 646 647
	/*
	 * SPI mode doesn't define CMD19 and tuning is only valid for SDR50 and
	 * SDR104 mode SD-cards. Note that tuning is mandatory for SDR104.
	 */
648
	if (!mmc_host_is_spi(card->host) &&
649 650 651
		(card->host->ios.timing == MMC_TIMING_UHS_SDR50 ||
		 card->host->ios.timing == MMC_TIMING_UHS_DDR50 ||
		 card->host->ios.timing == MMC_TIMING_UHS_SDR104)) {
652
		err = mmc_execute_tuning(card);
653 654 655 656 657 658 659 660

		/*
		 * As SD Specifications Part1 Physical Layer Specification
		 * Version 3.01 says, CMD19 tuning is available for unlocked
		 * cards in transfer state of 1.8V signaling mode. The small
		 * difference between v3.00 and 3.01 spec means that CMD19
		 * tuning is also available for DDR50 mode.
		 */
661
		if (err && card->host->ios.timing == MMC_TIMING_UHS_DDR50) {
662 663 664 665 666 667
			pr_warn("%s: ddr50 tuning failed\n",
				mmc_hostname(card->host));
			err = 0;
		}
	}

668 669 670 671 672 673
out:
	kfree(status);

	return err;
}

674 675 676 677 678
MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
	card->raw_cid[2], card->raw_cid[3]);
MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
	card->raw_csd[2], card->raw_csd[3]);
MMC_DEV_ATTR(scr, "%08x%08x\n", card->raw_scr[0], card->raw_scr[1]);
679 680 681 682 683 684 685 686
MMC_DEV_ATTR(ssr,
	"%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x%08x\n",
		card->raw_ssr[0], card->raw_ssr[1], card->raw_ssr[2],
		card->raw_ssr[3], card->raw_ssr[4], card->raw_ssr[5],
		card->raw_ssr[6], card->raw_ssr[7], card->raw_ssr[8],
		card->raw_ssr[9], card->raw_ssr[10], card->raw_ssr[11],
		card->raw_ssr[12], card->raw_ssr[13], card->raw_ssr[14],
		card->raw_ssr[15]);
687
MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
688 689
MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
690 691 692 693 694 695
MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
696
MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
697
MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
698 699


700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715
static ssize_t mmc_dsr_show(struct device *dev,
                           struct device_attribute *attr,
                           char *buf)
{
       struct mmc_card *card = mmc_dev_to_card(dev);
       struct mmc_host *host = card->host;

       if (card->csd.dsr_imp && host->dsr_req)
               return sprintf(buf, "0x%x\n", host->dsr);
       else
               /* return default DSR value */
               return sprintf(buf, "0x%x\n", 0x404);
}

static DEVICE_ATTR(dsr, S_IRUGO, mmc_dsr_show, NULL);

716 717
MMC_DEV_ATTR(vendor, "0x%04x\n", card->cis.vendor);
MMC_DEV_ATTR(device, "0x%04x\n", card->cis.device);
718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736
MMC_DEV_ATTR(revision, "%u.%u\n", card->major_rev, card->minor_rev);

#define sdio_info_attr(num)									\
static ssize_t info##num##_show(struct device *dev, struct device_attribute *attr, char *buf)	\
{												\
	struct mmc_card *card = mmc_dev_to_card(dev);						\
												\
	if (num > card->num_info)								\
		return -ENODATA;								\
	if (!card->info[num-1][0])								\
		return 0;									\
	return sprintf(buf, "%s\n", card->info[num-1]);						\
}												\
static DEVICE_ATTR_RO(info##num)

sdio_info_attr(1);
sdio_info_attr(2);
sdio_info_attr(3);
sdio_info_attr(4);
737

738
static struct attribute *sd_std_attrs[] = {
739 740
	&dev_attr_vendor.attr,
	&dev_attr_device.attr,
741 742 743 744 745
	&dev_attr_revision.attr,
	&dev_attr_info1.attr,
	&dev_attr_info2.attr,
	&dev_attr_info3.attr,
	&dev_attr_info4.attr,
746 747 748
	&dev_attr_cid.attr,
	&dev_attr_csd.attr,
	&dev_attr_scr.attr,
749
	&dev_attr_ssr.attr,
750
	&dev_attr_date.attr,
751 752
	&dev_attr_erase_size.attr,
	&dev_attr_preferred_erase_size.attr,
753 754 755 756 757 758
	&dev_attr_fwrev.attr,
	&dev_attr_hwrev.attr,
	&dev_attr_manfid.attr,
	&dev_attr_name.attr,
	&dev_attr_oemid.attr,
	&dev_attr_serial.attr,
759
	&dev_attr_ocr.attr,
760
	&dev_attr_rca.attr,
761
	&dev_attr_dsr.attr,
762 763
	NULL,
};
764 765 766 767

static umode_t sd_std_is_visible(struct kobject *kobj, struct attribute *attr,
				 int index)
{
768
	struct device *dev = kobj_to_dev(kobj);
769 770
	struct mmc_card *card = mmc_dev_to_card(dev);

771 772 773 774 775 776 777 778 779
	/* CIS vendor and device ids, revision and info string are available only for Combo cards */
	if ((attr == &dev_attr_vendor.attr ||
	     attr == &dev_attr_device.attr ||
	     attr == &dev_attr_revision.attr ||
	     attr == &dev_attr_info1.attr ||
	     attr == &dev_attr_info2.attr ||
	     attr == &dev_attr_info3.attr ||
	     attr == &dev_attr_info4.attr
	    ) && card->type != MMC_TYPE_SD_COMBO)
780 781 782 783 784 785 786 787 788 789
		return 0;

	return attr->mode;
}

static const struct attribute_group sd_std_group = {
	.attrs = sd_std_attrs,
	.is_visible = sd_std_is_visible,
};
__ATTRIBUTE_GROUPS(sd_std);
790

M
Michal Miroslaw 已提交
791
struct device_type sd_type = {
A
Axel Lin 已提交
792
	.groups = sd_std_groups,
793 794
};

P
Pierre Ossman 已提交
795
/*
M
Michal Miroslaw 已提交
796
 * Fetch CID from card.
P
Pierre Ossman 已提交
797
 */
798
int mmc_sd_get_cid(struct mmc_host *host, u32 ocr, u32 *cid, u32 *rocr)
P
Pierre Ossman 已提交
799 800
{
	int err;
A
Aaron Lu 已提交
801
	u32 max_current;
802
	int retries = 10;
803
	u32 pocr = ocr;
804 805 806 807

try_again:
	if (!retries) {
		ocr &= ~SD_OCR_S18R;
J
Joe Perches 已提交
808
		pr_warn("%s: Skipping voltage switch\n", mmc_hostname(host));
809
	}
P
Pierre Ossman 已提交
810 811 812 813 814 815 816 817 818 819 820 821 822 823 824

	/*
	 * Since we're changing the OCR value, we seem to
	 * need to tell some cards to go back to the idle
	 * state.  We wait 1ms to give cards time to
	 * respond.
	 */
	mmc_go_idle(host);

	/*
	 * If SD_SEND_IF_COND indicates an SD 2.0
	 * compliant card and we should set bit 30
	 * of the ocr to indicate that we can handle
	 * block-addressed SDHC cards.
	 */
825
	err = mmc_send_if_cond(host, ocr);
P
Pierre Ossman 已提交
826
	if (!err)
827
		ocr |= SD_OCR_CCS;
P
Pierre Ossman 已提交
828

829 830
	/*
	 * If the host supports one of UHS-I modes, request the card
831 832
	 * to switch to 1.8V signaling level. If the card has failed
	 * repeatedly to switch however, skip this.
833
	 */
834
	if (retries && mmc_host_uhs(host))
835 836
		ocr |= SD_OCR_S18R;

A
Aaron Lu 已提交
837 838 839 840 841 842
	/*
	 * If the host can supply more than 150mA at current voltage,
	 * XPC should be set to 1.
	 */
	max_current = sd_get_host_max_current(host);
	if (max_current > 150)
843 844
		ocr |= SD_OCR_XPC;

845
	err = mmc_send_app_op_cond(host, ocr, rocr);
P
Pierre Ossman 已提交
846
	if (err)
M
Michal Miroslaw 已提交
847
		return err;
P
Pierre Ossman 已提交
848

849
	/*
850 851 852 853 854
	 * In case the S18A bit is set in the response, let's start the signal
	 * voltage switch procedure. SPI mode doesn't support CMD11.
	 * Note that, according to the spec, the S18A bit is not valid unless
	 * the CCS bit is set as well. We deliberately deviate from the spec in
	 * regards to this, which allows UHS-I to be supported for SDSC cards.
855
	 */
856
	if (!mmc_host_is_spi(host) && rocr && (*rocr & 0x01000000)) {
857
		err = mmc_set_uhs_voltage(host, pocr);
858 859 860 861 862
		if (err == -EAGAIN) {
			retries--;
			goto try_again;
		} else if (err) {
			retries = 0;
863 864 865 866
			goto try_again;
		}
	}

867
	err = mmc_send_cid(host, cid);
M
Michal Miroslaw 已提交
868 869 870 871 872 873 874 875 876 877 878
	return err;
}

int mmc_sd_get_csd(struct mmc_host *host, struct mmc_card *card)
{
	int err;

	/*
	 * Fetch CSD from card.
	 */
	err = mmc_send_csd(card, card->raw_csd);
P
Pierre Ossman 已提交
879
	if (err)
M
Michal Miroslaw 已提交
880
		return err;
P
Pierre Ossman 已提交
881

M
Michal Miroslaw 已提交
882 883 884 885 886 887 888
	err = mmc_decode_csd(card);
	if (err)
		return err;

	return 0;
}

889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908
static int mmc_sd_get_ro(struct mmc_host *host)
{
	int ro;

	/*
	 * Some systems don't feature a write-protect pin and don't need one.
	 * E.g. because they only have micro-SD card slot. For those systems
	 * assume that the SD card is always read-write.
	 */
	if (host->caps2 & MMC_CAP2_NO_WRITE_PROTECT)
		return 0;

	if (!host->ops->get_ro)
		return -1;

	ro = host->ops->get_ro(host);

	return ro;
}

M
Michal Miroslaw 已提交
909 910 911 912 913 914 915 916 917
int mmc_sd_setup_card(struct mmc_host *host, struct mmc_card *card,
	bool reinit)
{
	int err;

	if (!reinit) {
		/*
		 * Fetch SCR from card.
		 */
918
		err = mmc_app_send_scr(card);
M
Michal Miroslaw 已提交
919 920 921 922 923 924 925
		if (err)
			return err;

		err = mmc_decode_scr(card);
		if (err)
			return err;

926 927 928 929 930 931 932 933 934 935
		/*
		 * Fetch and process SD Status register.
		 */
		err = mmc_read_ssr(card);
		if (err)
			return err;

		/* Erase init depends on CSD and SSR */
		mmc_init_erase(card);

M
Michal Miroslaw 已提交
936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959
		/*
		 * Fetch switch information from card.
		 */
		err = mmc_read_switch(card);
		if (err)
			return err;
	}

	/*
	 * For SPI, enable CRC as appropriate.
	 * This CRC enable is located AFTER the reading of the
	 * card registers because some SDHC cards are not able
	 * to provide valid CRCs for non-512-byte blocks.
	 */
	if (mmc_host_is_spi(host)) {
		err = mmc_spi_set_crc(host, use_spi_crc);
		if (err)
			return err;
	}

	/*
	 * Check if read-only switch is active.
	 */
	if (!reinit) {
960
		int ro = mmc_sd_get_ro(host);
M
Michal Miroslaw 已提交
961 962

		if (ro < 0) {
J
Joe Perches 已提交
963
			pr_warn("%s: host does not support reading read-only switch, assuming write-enable\n",
M
Michal Miroslaw 已提交
964 965 966
				mmc_hostname(host));
		} else if (ro > 0) {
			mmc_card_set_readonly(card);
P
Pierre Ossman 已提交
967
		}
M
Michal Miroslaw 已提交
968 969 970 971 972 973 974 975 976
	}

	return 0;
}

unsigned mmc_sd_get_max_clock(struct mmc_card *card)
{
	unsigned max_dtr = (unsigned int)-1;

977
	if (mmc_card_hs(card)) {
M
Michal Miroslaw 已提交
978 979 980 981 982 983 984 985 986
		if (max_dtr > card->sw_caps.hs_max_dtr)
			max_dtr = card->sw_caps.hs_max_dtr;
	} else if (max_dtr > card->csd.max_dtr) {
		max_dtr = card->csd.max_dtr;
	}

	return max_dtr;
}

987 988 989 990 991 992 993 994 995 996 997 998
static bool mmc_sd_card_using_v18(struct mmc_card *card)
{
	/*
	 * According to the SD spec., the Bus Speed Mode (function group 1) bits
	 * 2 to 4 are zero if the card is initialized at 3.3V signal level. Thus
	 * they can be used to determine if the card has already switched to
	 * 1.8V signaling.
	 */
	return card->sw_caps.sd3_bus_mode &
	       (SD_MODE_UHS_SDR50 | SD_MODE_UHS_SDR104 | SD_MODE_UHS_DDR50);
}

M
Michal Miroslaw 已提交
999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
/*
 * Handle the detection and initialisation of a card.
 *
 * In the case of a resume, "oldcard" will contain the card
 * we're trying to reinitialise.
 */
static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
	struct mmc_card *oldcard)
{
	struct mmc_card *card;
	int err;
	u32 cid[4];
1011
	u32 rocr = 0;
1012
	bool v18_fixup_failed = false;
M
Michal Miroslaw 已提交
1013 1014

	WARN_ON(!host->claimed);
1015
retry:
1016
	err = mmc_sd_get_cid(host, ocr, cid, &rocr);
M
Michal Miroslaw 已提交
1017 1018 1019 1020
	if (err)
		return err;

	if (oldcard) {
1021 1022 1023
		if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
			pr_debug("%s: Perhaps the card was replaced\n",
				mmc_hostname(host));
M
Michal Miroslaw 已提交
1024
			return -ENOENT;
1025
		}
P
Pierre Ossman 已提交
1026

1027 1028 1029 1030 1031
		card = oldcard;
	} else {
		/*
		 * Allocate card structure.
		 */
1032
		card = mmc_alloc_card(host, &sd_type);
M
Michal Miroslaw 已提交
1033 1034
		if (IS_ERR(card))
			return PTR_ERR(card);
1035

1036
		card->ocr = ocr;
1037 1038 1039
		card->type = MMC_TYPE_SD;
		memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
	}
P
Pierre Ossman 已提交
1040

1041 1042 1043 1044 1045 1046
	/*
	 * Call the optional HC's init_card function to handle quirks.
	 */
	if (host->ops->init_card)
		host->ops->init_card(host, card);

P
Pierre Ossman 已提交
1047
	/*
D
David Brownell 已提交
1048
	 * For native busses:  get card RCA and quit open drain mode.
P
Pierre Ossman 已提交
1049
	 */
D
David Brownell 已提交
1050 1051 1052
	if (!mmc_host_is_spi(host)) {
		err = mmc_send_relative_addr(host, &card->rca);
		if (err)
1053
			goto free_card;
D
David Brownell 已提交
1054
	}
P
Pierre Ossman 已提交
1055

1056
	if (!oldcard) {
M
Michal Miroslaw 已提交
1057
		err = mmc_sd_get_csd(host, card);
P
Pierre Ossman 已提交
1058
		if (err)
1059
			goto free_card;
P
Pierre Ossman 已提交
1060

1061 1062
		mmc_decode_cid(card);
	}
P
Pierre Ossman 已提交
1063

1064 1065 1066 1067 1068 1069 1070
	/*
	 * handling only for cards supporting DSR and hosts requesting
	 * DSR configuration
	 */
	if (card->csd.dsr_imp && host->dsr_req)
		mmc_set_dsr(host);

P
Pierre Ossman 已提交
1071
	/*
1072
	 * Select card, as all following commands rely on that.
P
Pierre Ossman 已提交
1073
	 */
D
David Brownell 已提交
1074 1075 1076
	if (!mmc_host_is_spi(host)) {
		err = mmc_select_card(card);
		if (err)
1077
			goto free_card;
1078
	}
P
Pierre Ossman 已提交
1079

M
Michal Miroslaw 已提交
1080 1081 1082
	err = mmc_sd_setup_card(host, card, oldcard != NULL);
	if (err)
		goto free_card;
1083

1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109
	/*
	 * If the card has not been power cycled, it may still be using 1.8V
	 * signaling. Detect that situation and try to initialize a UHS-I (1.8V)
	 * transfer mode.
	 */
	if (!v18_fixup_failed && !mmc_host_is_spi(host) && mmc_host_uhs(host) &&
	    mmc_sd_card_using_v18(card) &&
	    host->ios.signal_voltage != MMC_SIGNAL_VOLTAGE_180) {
		/*
		 * Re-read switch information in case it has changed since
		 * oldcard was initialized.
		 */
		if (oldcard) {
			err = mmc_read_switch(card);
			if (err)
				goto free_card;
		}
		if (mmc_sd_card_using_v18(card)) {
			if (mmc_host_set_uhs_voltage(host) ||
			    mmc_sd_init_uhs_card(card)) {
				v18_fixup_failed = true;
				mmc_power_cycle(host, ocr);
				if (!oldcard)
					mmc_remove_card(card);
				goto retry;
			}
1110
			goto cont;
1111 1112 1113
		}
	}

1114
	/* Initialization sequence for UHS-I cards */
1115
	if (rocr & SD_ROCR_S18A && mmc_host_uhs(host)) {
1116
		err = mmc_sd_init_uhs_card(card);
P
Pierre Ossman 已提交
1117
		if (err)
P
Pierre Ossman 已提交
1118
			goto free_card;
1119 1120 1121 1122 1123 1124
	} else {
		/*
		 * Attempt to change to high-speed (if supported)
		 */
		err = mmc_sd_switch_hs(card);
		if (err > 0)
1125
			mmc_set_timing(card->host, MMC_TIMING_SD_HS);
1126 1127 1128 1129 1130 1131 1132
		else if (err)
			goto free_card;

		/*
		 * Set bus speed.
		 */
		mmc_set_clock(host, mmc_sd_get_max_clock(card));
P
Pierre Ossman 已提交
1133

1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144
		/*
		 * Switch to wider bus (if supported).
		 */
		if ((host->caps & MMC_CAP_4_BIT_DATA) &&
			(card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
			err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
			if (err)
				goto free_card;

			mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
		}
P
Pierre Ossman 已提交
1145
	}
1146
cont:
1147 1148 1149 1150 1151 1152 1153 1154 1155 1156
	if (host->cqe_ops && !host->cqe_enabled) {
		err = host->cqe_ops->cqe_enable(host, card);
		if (!err) {
			host->cqe_enabled = true;
			host->hsq_enabled = true;
			pr_info("%s: Host Software Queue enabled\n",
				mmc_hostname(host));
		}
	}

1157 1158 1159 1160 1161 1162 1163
	if (host->caps2 & MMC_CAP2_AVOID_3_3V &&
	    host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
		pr_err("%s: Host failed to negotiate down from 3.3V\n",
			mmc_hostname(host));
		err = -EINVAL;
		goto free_card;
	}
1164

M
Michal Miroslaw 已提交
1165
	host->card = card;
P
Pierre Ossman 已提交
1166
	return 0;
1167 1168 1169 1170 1171

free_card:
	if (!oldcard)
		mmc_remove_card(card);

P
Pierre Ossman 已提交
1172
	return err;
1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183
}

/*
 * Host is being removed. Free up the current card.
 */
static void mmc_sd_remove(struct mmc_host *host)
{
	mmc_remove_card(host->card);
	host->card = NULL;
}

1184 1185 1186 1187 1188 1189 1190 1191
/*
 * Card detection - card is alive.
 */
static int mmc_sd_alive(struct mmc_host *host)
{
	return mmc_send_status(host->card, NULL);
}

1192 1193 1194 1195 1196 1197 1198
/*
 * Card detection callback from host.
 */
static void mmc_sd_detect(struct mmc_host *host)
{
	int err;

1199
	mmc_get_card(host->card, NULL);
1200 1201 1202 1203

	/*
	 * Just check if our card has been removed.
	 */
1204
	err = _mmc_detect_card_removed(host);
P
Pierre Ossman 已提交
1205

1206
	mmc_put_card(host->card, NULL);
P
Pierre Ossman 已提交
1207

P
Pierre Ossman 已提交
1208
	if (err) {
P
Pierre Ossman 已提交
1209
		mmc_sd_remove(host);
1210 1211 1212

		mmc_claim_host(host);
		mmc_detach_bus(host);
1213
		mmc_power_off(host);
1214 1215 1216 1217
		mmc_release_host(host);
	}
}

1218
static int _mmc_sd_suspend(struct mmc_host *host)
1219
{
1220 1221
	int err = 0;

1222
	mmc_claim_host(host);
1223 1224 1225 1226

	if (mmc_card_suspended(host->card))
		goto out;

D
David Brownell 已提交
1227
	if (!mmc_host_is_spi(host))
1228
		err = mmc_deselect_cards(host);
1229

1230
	if (!err) {
1231
		mmc_power_off(host);
1232 1233
		mmc_card_set_suspended(host->card);
	}
1234

1235 1236
out:
	mmc_release_host(host);
1237
	return err;
1238 1239 1240
}

/*
1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256
 * Callback for suspend
 */
static int mmc_sd_suspend(struct mmc_host *host)
{
	int err;

	err = _mmc_sd_suspend(host);
	if (!err) {
		pm_runtime_disable(&host->card->dev);
		pm_runtime_set_suspended(&host->card->dev);
	}

	return err;
}

/*
1257 1258 1259
 * This function tries to determine if the same card is still present
 * and, if so, restore all state to it.
 */
1260
static int _mmc_sd_resume(struct mmc_host *host)
1261
{
1262
	int err = 0;
1263 1264

	mmc_claim_host(host);
1265 1266 1267 1268

	if (!mmc_card_suspended(host->card))
		goto out;

1269 1270
	mmc_power_up(host, host->card->ocr);
	err = mmc_sd_init_card(host, host->card->ocr, host->card);
1271
	mmc_card_clr_suspended(host->card);
1272

1273 1274
out:
	mmc_release_host(host);
1275
	return err;
1276 1277
}

1278 1279 1280 1281 1282 1283
/*
 * Callback for resume
 */
static int mmc_sd_resume(struct mmc_host *host)
{
	pm_runtime_enable(&host->card->dev);
1284
	return 0;
1285 1286
}

1287 1288 1289 1290 1291 1292 1293 1294 1295 1296
/*
 * Callback for runtime_suspend.
 */
static int mmc_sd_runtime_suspend(struct mmc_host *host)
{
	int err;

	if (!(host->caps & MMC_CAP_AGGRESSIVE_PM))
		return 0;

1297
	err = _mmc_sd_suspend(host);
1298
	if (err)
1299
		pr_err("%s: error %d doing aggressive suspend\n",
1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311
			mmc_hostname(host), err);

	return err;
}

/*
 * Callback for runtime_resume.
 */
static int mmc_sd_runtime_resume(struct mmc_host *host)
{
	int err;

1312
	err = _mmc_sd_resume(host);
1313
	if (err && err != -ENOMEDIUM)
1314
		pr_err("%s: error %d doing runtime resume\n",
1315 1316 1317 1318 1319
			mmc_hostname(host), err);

	return 0;
}

1320
static int mmc_sd_hw_reset(struct mmc_host *host)
1321 1322
{
	mmc_power_cycle(host, host->card->ocr);
1323
	return mmc_sd_init_card(host, host->card->ocr, host->card);
1324 1325
}

1326 1327 1328
static const struct mmc_bus_ops mmc_sd_ops = {
	.remove = mmc_sd_remove,
	.detect = mmc_sd_detect,
1329 1330
	.runtime_suspend = mmc_sd_runtime_suspend,
	.runtime_resume = mmc_sd_runtime_resume,
1331 1332
	.suspend = mmc_sd_suspend,
	.resume = mmc_sd_resume,
1333
	.alive = mmc_sd_alive,
1334
	.shutdown = mmc_sd_suspend,
1335
	.hw_reset = mmc_sd_hw_reset,
1336 1337 1338 1339 1340
};

/*
 * Starting point for SD card init.
 */
1341
int mmc_attach_sd(struct mmc_host *host)
1342 1343
{
	int err;
1344
	u32 ocr, rocr;
1345

P
Pierre Ossman 已提交
1346
	WARN_ON(!host->claimed);
1347

1348 1349 1350 1351
	err = mmc_send_app_op_cond(host, 0, &ocr);
	if (err)
		return err;

1352
	mmc_attach_bus(host, &mmc_sd_ops);
1353 1354
	if (host->ocr_avail_sd)
		host->ocr_avail = host->ocr_avail_sd;
1355

D
David Brownell 已提交
1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366
	/*
	 * We need to get OCR a different way for SPI.
	 */
	if (mmc_host_is_spi(host)) {
		mmc_go_idle(host);

		err = mmc_spi_read_ocr(host, 0, &ocr);
		if (err)
			goto err;
	}

1367 1368 1369 1370 1371 1372
	/*
	 * Some SD cards claims an out of spec VDD voltage range. Let's treat
	 * these bits as being in-valid and especially also bit7.
	 */
	ocr &= ~0x7FFF;

1373
	rocr = mmc_select_voltage(host, ocr);
1374 1375 1376 1377

	/*
	 * Can we support the voltage(s) of the card(s)?
	 */
1378
	if (!rocr) {
1379
		err = -EINVAL;
1380
		goto err;
1381
	}
1382 1383 1384 1385

	/*
	 * Detect and init the card.
	 */
1386
	err = mmc_sd_init_card(host, rocr, NULL);
P
Pierre Ossman 已提交
1387
	if (err)
1388 1389 1390
		goto err;

	mmc_release_host(host);
P
Pierre Ossman 已提交
1391
	err = mmc_add_card(host->card);
P
Pierre Ossman 已提交
1392
	if (err)
1393
		goto remove_card;
P
Pierre Ossman 已提交
1394

1395
	mmc_claim_host(host);
P
Pierre Ossman 已提交
1396 1397
	return 0;

1398
remove_card:
1399
	mmc_remove_card(host->card);
P
Pierre Ossman 已提交
1400
	host->card = NULL;
1401
	mmc_claim_host(host);
P
Pierre Ossman 已提交
1402 1403 1404
err:
	mmc_detach_bus(host);

1405
	pr_err("%s: error %d whilst initialising SD card\n",
1406 1407
		mmc_hostname(host), err);

P
Pierre Ossman 已提交
1408
	return err;
P
Pierre Ossman 已提交
1409
}