]> git.ipfire.org Git - thirdparty/kernel/stable.git/blame - drivers/mmc/core/mmc.c
mmc: Consolidate emmc tuning blocks
[thirdparty/kernel/stable.git] / drivers / mmc / core / mmc.c
CommitLineData
7ea239d9 1/*
70f10482 2 * linux/drivers/mmc/core/mmc.c
7ea239d9
PO
3 *
4 * Copyright (C) 2003-2004 Russell King, All Rights Reserved.
5 * Copyright (C) 2005-2007 Pierre Ossman, All Rights Reserved.
6 * MMCv4 support Copyright (C) 2006 Philip Langdale, All Rights Reserved.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12
13#include <linux/err.h>
5a0e3ad6 14#include <linux/slab.h>
0205a904 15#include <linux/stat.h>
0cb403a2 16#include <linux/pm_runtime.h>
7ea239d9
PO
17
18#include <linux/mmc/host.h>
19#include <linux/mmc/card.h>
20#include <linux/mmc/mmc.h>
21
22#include "core.h"
4101c16a 23#include "bus.h"
7ea239d9 24#include "mmc_ops.h"
4c4cb171 25#include "sd_ops.h"
7ea239d9
PO
26
27static const unsigned int tran_exp[] = {
28 10000, 100000, 1000000, 10000000,
29 0, 0, 0, 0
30};
31
32static const unsigned char tran_mant[] = {
33 0, 10, 12, 13, 15, 20, 25, 30,
34 35, 40, 45, 50, 55, 60, 70, 80,
35};
36
37static const unsigned int tacc_exp[] = {
38 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
39};
40
41static const unsigned int tacc_mant[] = {
42 0, 10, 12, 13, 15, 20, 25, 30,
43 35, 40, 45, 50, 55, 60, 70, 80,
44};
45
46#define UNSTUFF_BITS(resp,start,size) \
47 ({ \
48 const int __size = size; \
49 const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
50 const int __off = 3 - ((start) / 32); \
51 const int __shft = (start) & 31; \
52 u32 __res; \
53 \
54 __res = resp[__off] >> __shft; \
55 if (__size + __shft > 32) \
56 __res |= resp[__off-1] << ((32 - __shft) % 32); \
57 __res & __mask; \
58 })
59
60/*
61 * Given the decoded CSD structure, decode the raw CID to our CID structure.
62 */
bd766312 63static int mmc_decode_cid(struct mmc_card *card)
7ea239d9
PO
64{
65 u32 *resp = card->raw_cid;
66
67 /*
68 * The selection of the format here is based upon published
69 * specs from sandisk and from what people have reported.
70 */
71 switch (card->csd.mmca_vsn) {
72 case 0: /* MMC v1.0 - v1.2 */
73 case 1: /* MMC v1.4 */
74 card->cid.manfid = UNSTUFF_BITS(resp, 104, 24);
75 card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
76 card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
77 card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
78 card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
79 card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
80 card->cid.prod_name[5] = UNSTUFF_BITS(resp, 56, 8);
81 card->cid.prod_name[6] = UNSTUFF_BITS(resp, 48, 8);
82 card->cid.hwrev = UNSTUFF_BITS(resp, 44, 4);
83 card->cid.fwrev = UNSTUFF_BITS(resp, 40, 4);
84 card->cid.serial = UNSTUFF_BITS(resp, 16, 24);
85 card->cid.month = UNSTUFF_BITS(resp, 12, 4);
86 card->cid.year = UNSTUFF_BITS(resp, 8, 4) + 1997;
87 break;
88
89 case 2: /* MMC v2.0 - v2.2 */
90 case 3: /* MMC v3.1 - v3.3 */
91 case 4: /* MMC v4 */
92 card->cid.manfid = UNSTUFF_BITS(resp, 120, 8);
93 card->cid.oemid = UNSTUFF_BITS(resp, 104, 16);
94 card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
95 card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
96 card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
97 card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
98 card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
99 card->cid.prod_name[5] = UNSTUFF_BITS(resp, 56, 8);
51e7e8b6 100 card->cid.prv = UNSTUFF_BITS(resp, 48, 8);
7ea239d9
PO
101 card->cid.serial = UNSTUFF_BITS(resp, 16, 32);
102 card->cid.month = UNSTUFF_BITS(resp, 12, 4);
103 card->cid.year = UNSTUFF_BITS(resp, 8, 4) + 1997;
104 break;
105
106 default:
a3c76eb9 107 pr_err("%s: card has unknown MMCA version %d\n",
7ea239d9 108 mmc_hostname(card->host), card->csd.mmca_vsn);
bd766312 109 return -EINVAL;
7ea239d9 110 }
bd766312
PO
111
112 return 0;
7ea239d9
PO
113}
114
dfe86cba
AH
115static void mmc_set_erase_size(struct mmc_card *card)
116{
117 if (card->ext_csd.erase_group_def & 1)
118 card->erase_size = card->ext_csd.hc_erase_size;
119 else
120 card->erase_size = card->csd.erase_size;
121
122 mmc_init_erase(card);
123}
124
7ea239d9
PO
125/*
126 * Given a 128-bit response, decode to our card CSD structure.
127 */
bd766312 128static int mmc_decode_csd(struct mmc_card *card)
7ea239d9
PO
129{
130 struct mmc_csd *csd = &card->csd;
dfe86cba 131 unsigned int e, m, a, b;
7ea239d9
PO
132 u32 *resp = card->raw_csd;
133
134 /*
135 * We only understand CSD structure v1.1 and v1.2.
136 * v1.2 has extra information in bits 15, 11 and 10.
6da24b78 137 * We also support eMMC v4.4 & v4.41.
7ea239d9 138 */
6da24b78
KP
139 csd->structure = UNSTUFF_BITS(resp, 126, 2);
140 if (csd->structure == 0) {
a3c76eb9 141 pr_err("%s: unrecognised CSD structure version %d\n",
6da24b78 142 mmc_hostname(card->host), csd->structure);
bd766312 143 return -EINVAL;
7ea239d9
PO
144 }
145
146 csd->mmca_vsn = UNSTUFF_BITS(resp, 122, 4);
147 m = UNSTUFF_BITS(resp, 115, 4);
148 e = UNSTUFF_BITS(resp, 112, 3);
149 csd->tacc_ns = (tacc_exp[e] * tacc_mant[m] + 9) / 10;
150 csd->tacc_clks = UNSTUFF_BITS(resp, 104, 8) * 100;
151
152 m = UNSTUFF_BITS(resp, 99, 4);
153 e = UNSTUFF_BITS(resp, 96, 3);
154 csd->max_dtr = tran_exp[e] * tran_mant[m];
155 csd->cmdclass = UNSTUFF_BITS(resp, 84, 12);
156
157 e = UNSTUFF_BITS(resp, 47, 3);
158 m = UNSTUFF_BITS(resp, 62, 12);
159 csd->capacity = (1 + m) << (e + 2);
160
161 csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
162 csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
163 csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
164 csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
3d705d14 165 csd->dsr_imp = UNSTUFF_BITS(resp, 76, 1);
7ea239d9
PO
166 csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
167 csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
168 csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
bd766312 169
dfe86cba
AH
170 if (csd->write_blkbits >= 9) {
171 a = UNSTUFF_BITS(resp, 42, 5);
172 b = UNSTUFF_BITS(resp, 37, 5);
173 csd->erase_size = (a + 1) * (b + 1);
174 csd->erase_size <<= csd->write_blkbits - 9;
175 }
176
bd766312 177 return 0;
7ea239d9
PO
178}
179
180/*
08ee80cc 181 * Read extended CSD.
7ea239d9 182 */
08ee80cc 183static int mmc_get_ext_csd(struct mmc_card *card, u8 **new_ext_csd)
7ea239d9
PO
184{
185 int err;
186 u8 *ext_csd;
187
188 BUG_ON(!card);
08ee80cc
PR
189 BUG_ON(!new_ext_csd);
190
191 *new_ext_csd = NULL;
7ea239d9 192
7ea239d9 193 if (card->csd.mmca_vsn < CSD_SPEC_VER_4)
17b0429d 194 return 0;
7ea239d9
PO
195
196 /*
197 * As the ext_csd is so large and mostly unused, we don't store the
198 * raw block in mmc_card.
199 */
200 ext_csd = kmalloc(512, GFP_KERNEL);
201 if (!ext_csd) {
a3c76eb9 202 pr_err("%s: could not allocate a buffer to "
adf66a0d 203 "receive the ext_csd.\n", mmc_hostname(card->host));
17b0429d 204 return -ENOMEM;
7ea239d9
PO
205 }
206
207 err = mmc_send_ext_csd(card, ext_csd);
17b0429d 208 if (err) {
08ee80cc
PR
209 kfree(ext_csd);
210 *new_ext_csd = NULL;
211
d08ebedd
WM
212 /* If the host or the card can't do the switch,
213 * fail more gracefully. */
214 if ((err != -EINVAL)
215 && (err != -ENOSYS)
216 && (err != -EFAULT))
08ee80cc 217 return err;
adf66a0d 218
7ea239d9
PO
219 /*
220 * High capacity cards should have this "magic" size
221 * stored in their CSD.
222 */
223 if (card->csd.capacity == (4096 * 512)) {
a3c76eb9 224 pr_err("%s: unable to read EXT_CSD "
7ea239d9
PO
225 "on a possible high capacity card. "
226 "Card will be ignored.\n",
227 mmc_hostname(card->host));
228 } else {
a3c76eb9 229 pr_warning("%s: unable to read "
7ea239d9
PO
230 "EXT_CSD, performance might "
231 "suffer.\n",
232 mmc_hostname(card->host));
17b0429d 233 err = 0;
7ea239d9 234 }
08ee80cc
PR
235 } else
236 *new_ext_csd = ext_csd;
adf66a0d 237
08ee80cc
PR
238 return err;
239}
240
96cf5f02
SJ
241static void mmc_select_card_type(struct mmc_card *card)
242{
243 struct mmc_host *host = card->host;
0a5b6438 244 u8 card_type = card->ext_csd.raw_card_type;
5f1a4dd0 245 u32 caps = host->caps, caps2 = host->caps2;
577fb131 246 unsigned int hs_max_dtr = 0, hs200_max_dtr = 0;
2415c0ef 247 unsigned int avail_type = 0;
96cf5f02 248
2415c0ef
SJ
249 if (caps & MMC_CAP_MMC_HIGHSPEED &&
250 card_type & EXT_CSD_CARD_TYPE_HS_26) {
96cf5f02 251 hs_max_dtr = MMC_HIGH_26_MAX_DTR;
2415c0ef
SJ
252 avail_type |= EXT_CSD_CARD_TYPE_HS_26;
253 }
96cf5f02
SJ
254
255 if (caps & MMC_CAP_MMC_HIGHSPEED &&
2415c0ef 256 card_type & EXT_CSD_CARD_TYPE_HS_52) {
96cf5f02 257 hs_max_dtr = MMC_HIGH_52_MAX_DTR;
2415c0ef
SJ
258 avail_type |= EXT_CSD_CARD_TYPE_HS_52;
259 }
96cf5f02 260
2415c0ef
SJ
261 if (caps & MMC_CAP_1_8V_DDR &&
262 card_type & EXT_CSD_CARD_TYPE_DDR_1_8V) {
96cf5f02 263 hs_max_dtr = MMC_HIGH_DDR_MAX_DTR;
2415c0ef
SJ
264 avail_type |= EXT_CSD_CARD_TYPE_DDR_1_8V;
265 }
266
267 if (caps & MMC_CAP_1_2V_DDR &&
268 card_type & EXT_CSD_CARD_TYPE_DDR_1_2V) {
269 hs_max_dtr = MMC_HIGH_DDR_MAX_DTR;
270 avail_type |= EXT_CSD_CARD_TYPE_DDR_1_2V;
271 }
96cf5f02 272
2415c0ef
SJ
273 if (caps2 & MMC_CAP2_HS200_1_8V_SDR &&
274 card_type & EXT_CSD_CARD_TYPE_HS200_1_8V) {
577fb131 275 hs200_max_dtr = MMC_HS200_MAX_DTR;
2415c0ef
SJ
276 avail_type |= EXT_CSD_CARD_TYPE_HS200_1_8V;
277 }
278
279 if (caps2 & MMC_CAP2_HS200_1_2V_SDR &&
280 card_type & EXT_CSD_CARD_TYPE_HS200_1_2V) {
577fb131 281 hs200_max_dtr = MMC_HS200_MAX_DTR;
2415c0ef
SJ
282 avail_type |= EXT_CSD_CARD_TYPE_HS200_1_2V;
283 }
96cf5f02 284
0a5b6438
SJ
285 if (caps2 & MMC_CAP2_HS400_1_8V &&
286 card_type & EXT_CSD_CARD_TYPE_HS400_1_8V) {
287 hs200_max_dtr = MMC_HS200_MAX_DTR;
288 avail_type |= EXT_CSD_CARD_TYPE_HS400_1_8V;
289 }
290
291 if (caps2 & MMC_CAP2_HS400_1_2V &&
292 card_type & EXT_CSD_CARD_TYPE_HS400_1_2V) {
293 hs200_max_dtr = MMC_HS200_MAX_DTR;
294 avail_type |= EXT_CSD_CARD_TYPE_HS400_1_2V;
295 }
296
96cf5f02 297 card->ext_csd.hs_max_dtr = hs_max_dtr;
577fb131 298 card->ext_csd.hs200_max_dtr = hs200_max_dtr;
2415c0ef 299 card->mmc_avail_type = avail_type;
96cf5f02
SJ
300}
301
b4493eea
GS
302static void mmc_manage_enhanced_area(struct mmc_card *card, u8 *ext_csd)
303{
994324bb
GS
304 u8 hc_erase_grp_sz, hc_wp_grp_sz;
305
306 /*
307 * Disable these attributes by default
308 */
309 card->ext_csd.enhanced_area_offset = -EINVAL;
310 card->ext_csd.enhanced_area_size = -EINVAL;
b4493eea
GS
311
312 /*
313 * Enhanced area feature support -- check whether the eMMC
314 * card has the Enhanced area enabled. If so, export enhanced
315 * area offset and size to user by adding sysfs interface.
316 */
317 if ((ext_csd[EXT_CSD_PARTITION_SUPPORT] & 0x2) &&
318 (ext_csd[EXT_CSD_PARTITION_ATTRIBUTE] & 0x1)) {
994324bb
GS
319 if (card->ext_csd.partition_setting_completed) {
320 hc_erase_grp_sz =
321 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
322 hc_wp_grp_sz =
323 ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
b4493eea 324
994324bb
GS
325 /*
326 * calculate the enhanced data area offset, in bytes
327 */
328 card->ext_csd.enhanced_area_offset =
329 (ext_csd[139] << 24) + (ext_csd[138] << 16) +
330 (ext_csd[137] << 8) + ext_csd[136];
331 if (mmc_card_blockaddr(card))
332 card->ext_csd.enhanced_area_offset <<= 9;
333 /*
334 * calculate the enhanced data area size, in kilobytes
335 */
336 card->ext_csd.enhanced_area_size =
337 (ext_csd[142] << 16) + (ext_csd[141] << 8) +
338 ext_csd[140];
339 card->ext_csd.enhanced_area_size *=
340 (size_t)(hc_erase_grp_sz * hc_wp_grp_sz);
341 card->ext_csd.enhanced_area_size <<= 9;
342 } else {
343 pr_warn("%s: defines enhanced area without partition setting complete\n",
344 mmc_hostname(card->host));
345 }
b4493eea
GS
346 }
347}
348
349static void mmc_manage_gp_partitions(struct mmc_card *card, u8 *ext_csd)
350{
b4493eea 351 int idx;
994324bb
GS
352 u8 hc_erase_grp_sz, hc_wp_grp_sz;
353 unsigned int part_size;
b4493eea
GS
354
355 /*
356 * General purpose partition feature support --
357 * If ext_csd has the size of general purpose partitions,
358 * set size, part_cfg, partition name in mmc_part.
359 */
360 if (ext_csd[EXT_CSD_PARTITION_SUPPORT] &
361 EXT_CSD_PART_SUPPORT_PART_EN) {
994324bb
GS
362 hc_erase_grp_sz =
363 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
364 hc_wp_grp_sz =
365 ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
b4493eea
GS
366
367 for (idx = 0; idx < MMC_NUM_GP_PARTITION; idx++) {
368 if (!ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3] &&
369 !ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 1] &&
370 !ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 2])
371 continue;
994324bb
GS
372 if (card->ext_csd.partition_setting_completed == 0) {
373 pr_warn("%s: has partition size defined without partition complete\n",
374 mmc_hostname(card->host));
375 break;
376 }
b4493eea
GS
377 part_size =
378 (ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 2]
379 << 16) +
380 (ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 1]
381 << 8) +
382 ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3];
383 part_size *= (size_t)(hc_erase_grp_sz *
384 hc_wp_grp_sz);
385 mmc_part_add(card, part_size << 19,
386 EXT_CSD_PART_CONFIG_ACC_GP0 + idx,
387 "gp%d", idx, false,
388 MMC_BLK_DATA_AREA_GP);
389 }
390 }
391}
392
08ee80cc
PR
393/*
394 * Decode extended CSD.
395 */
396static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
397{
e0c368d5
NJ
398 int err = 0, idx;
399 unsigned int part_size;
08ee80cc
PR
400
401 BUG_ON(!card);
402
403 if (!ext_csd)
404 return 0;
7ea239d9 405
6da24b78 406 /* Version is coded in the CSD_STRUCTURE byte in the EXT_CSD register */
f39b2dd9 407 card->ext_csd.raw_ext_csd_structure = ext_csd[EXT_CSD_STRUCTURE];
6da24b78 408 if (card->csd.structure == 3) {
f39b2dd9 409 if (card->ext_csd.raw_ext_csd_structure > 2) {
a3c76eb9 410 pr_err("%s: unrecognised EXT_CSD structure "
6da24b78 411 "version %d\n", mmc_hostname(card->host),
f39b2dd9 412 card->ext_csd.raw_ext_csd_structure);
6da24b78
KP
413 err = -EINVAL;
414 goto out;
415 }
416 }
417
03a59437
RI
418 /*
419 * The EXT_CSD format is meant to be forward compatible. As long
420 * as CSD_STRUCTURE does not change, all values for EXT_CSD_REV
421 * are authorized, see JEDEC JESD84-B50 section B.8.
422 */
b1ebe384 423 card->ext_csd.rev = ext_csd[EXT_CSD_REV];
d7604d76 424
f39b2dd9
PR
425 card->ext_csd.raw_sectors[0] = ext_csd[EXT_CSD_SEC_CNT + 0];
426 card->ext_csd.raw_sectors[1] = ext_csd[EXT_CSD_SEC_CNT + 1];
427 card->ext_csd.raw_sectors[2] = ext_csd[EXT_CSD_SEC_CNT + 2];
428 card->ext_csd.raw_sectors[3] = ext_csd[EXT_CSD_SEC_CNT + 3];
b1ebe384 429 if (card->ext_csd.rev >= 2) {
d7604d76
PO
430 card->ext_csd.sectors =
431 ext_csd[EXT_CSD_SEC_CNT + 0] << 0 |
432 ext_csd[EXT_CSD_SEC_CNT + 1] << 8 |
433 ext_csd[EXT_CSD_SEC_CNT + 2] << 16 |
434 ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
fc8a0985
HP
435
436 /* Cards with density > 2GiB are sector addressed */
437 if (card->ext_csd.sectors > (2u * 1024 * 1024 * 1024) / 512)
d7604d76
PO
438 mmc_card_set_blockaddr(card);
439 }
96cf5f02 440
f39b2dd9 441 card->ext_csd.raw_card_type = ext_csd[EXT_CSD_CARD_TYPE];
96cf5f02 442 mmc_select_card_type(card);
7ea239d9 443
f39b2dd9
PR
444 card->ext_csd.raw_s_a_timeout = ext_csd[EXT_CSD_S_A_TIMEOUT];
445 card->ext_csd.raw_erase_timeout_mult =
446 ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
447 card->ext_csd.raw_hc_erase_grp_size =
448 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
b1ebe384
JL
449 if (card->ext_csd.rev >= 3) {
450 u8 sa_shift = ext_csd[EXT_CSD_S_A_TIMEOUT];
371a689f
AW
451 card->ext_csd.part_config = ext_csd[EXT_CSD_PART_CONFIG];
452
453 /* EXT_CSD value is in units of 10ms, but we store in ms */
454 card->ext_csd.part_time = 10 * ext_csd[EXT_CSD_PART_SWITCH_TIME];
b1ebe384
JL
455
456 /* Sleep / awake timeout in 100ns units */
457 if (sa_shift > 0 && sa_shift <= 0x17)
458 card->ext_csd.sa_timeout =
459 1 << ext_csd[EXT_CSD_S_A_TIMEOUT];
dfe86cba
AH
460 card->ext_csd.erase_group_def =
461 ext_csd[EXT_CSD_ERASE_GROUP_DEF];
462 card->ext_csd.hc_erase_timeout = 300 *
463 ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
464 card->ext_csd.hc_erase_size =
465 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] << 10;
f4c5522b
AW
466
467 card->ext_csd.rel_sectors = ext_csd[EXT_CSD_REL_WR_SEC_C];
371a689f
AW
468
469 /*
470 * There are two boot regions of equal size, defined in
471 * multiples of 128K.
472 */
e0c368d5
NJ
473 if (ext_csd[EXT_CSD_BOOT_MULT] && mmc_boot_partition_access(card->host)) {
474 for (idx = 0; idx < MMC_NUM_BOOT_PARTITION; idx++) {
475 part_size = ext_csd[EXT_CSD_BOOT_MULT] << 17;
476 mmc_part_add(card, part_size,
477 EXT_CSD_PART_CONFIG_ACC_BOOT0 + idx,
add710ea
JR
478 "boot%d", idx, true,
479 MMC_BLK_DATA_AREA_BOOT);
e0c368d5
NJ
480 }
481 }
dfe86cba
AH
482 }
483
f39b2dd9 484 card->ext_csd.raw_hc_erase_gap_size =
dd13b4ed 485 ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
f39b2dd9
PR
486 card->ext_csd.raw_sec_trim_mult =
487 ext_csd[EXT_CSD_SEC_TRIM_MULT];
488 card->ext_csd.raw_sec_erase_mult =
489 ext_csd[EXT_CSD_SEC_ERASE_MULT];
490 card->ext_csd.raw_sec_feature_support =
491 ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
492 card->ext_csd.raw_trim_mult =
493 ext_csd[EXT_CSD_TRIM_MULT];
836dc2fe 494 card->ext_csd.raw_partition_support = ext_csd[EXT_CSD_PARTITION_SUPPORT];
dfe86cba 495 if (card->ext_csd.rev >= 4) {
69803d4f
GS
496 if (ext_csd[EXT_CSD_PARTITION_SETTING_COMPLETED] &
497 EXT_CSD_PART_SETTING_COMPLETED)
498 card->ext_csd.partition_setting_completed = 1;
499 else
500 card->ext_csd.partition_setting_completed = 0;
501
b4493eea 502 mmc_manage_enhanced_area(card, ext_csd);
709de99d 503
b4493eea 504 mmc_manage_gp_partitions(card, ext_csd);
e0c368d5 505
dfe86cba
AH
506 card->ext_csd.sec_trim_mult =
507 ext_csd[EXT_CSD_SEC_TRIM_MULT];
508 card->ext_csd.sec_erase_mult =
509 ext_csd[EXT_CSD_SEC_ERASE_MULT];
510 card->ext_csd.sec_feature_support =
511 ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
512 card->ext_csd.trim_timeout = 300 *
513 ext_csd[EXT_CSD_TRIM_MULT];
add710ea
JR
514
515 /*
516 * Note that the call to mmc_part_add above defaults to read
517 * only. If this default assumption is changed, the call must
518 * take into account the value of boot_locked below.
519 */
520 card->ext_csd.boot_ro_lock = ext_csd[EXT_CSD_BOOT_WP];
521 card->ext_csd.boot_ro_lockable = true;
60443712
FS
522
523 /* Save power class values */
524 card->ext_csd.raw_pwr_cl_52_195 =
525 ext_csd[EXT_CSD_PWR_CL_52_195];
526 card->ext_csd.raw_pwr_cl_26_195 =
527 ext_csd[EXT_CSD_PWR_CL_26_195];
528 card->ext_csd.raw_pwr_cl_52_360 =
529 ext_csd[EXT_CSD_PWR_CL_52_360];
530 card->ext_csd.raw_pwr_cl_26_360 =
531 ext_csd[EXT_CSD_PWR_CL_26_360];
532 card->ext_csd.raw_pwr_cl_200_195 =
533 ext_csd[EXT_CSD_PWR_CL_200_195];
534 card->ext_csd.raw_pwr_cl_200_360 =
535 ext_csd[EXT_CSD_PWR_CL_200_360];
536 card->ext_csd.raw_pwr_cl_ddr_52_195 =
537 ext_csd[EXT_CSD_PWR_CL_DDR_52_195];
538 card->ext_csd.raw_pwr_cl_ddr_52_360 =
539 ext_csd[EXT_CSD_PWR_CL_DDR_52_360];
0a5b6438
SJ
540 card->ext_csd.raw_pwr_cl_ddr_200_360 =
541 ext_csd[EXT_CSD_PWR_CL_DDR_200_360];
b1ebe384
JL
542 }
543
b2499518 544 if (card->ext_csd.rev >= 5) {
7c4f10ac
RI
545 /* Adjust production date as per JEDEC JESD84-B451 */
546 if (card->cid.year < 2010)
547 card->cid.year += 16;
548
950d56ac
JC
549 /* check whether the eMMC card supports BKOPS */
550 if (ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1) {
551 card->ext_csd.bkops = 1;
552 card->ext_csd.bkops_en = ext_csd[EXT_CSD_BKOPS_EN];
553 card->ext_csd.raw_bkops_status =
554 ext_csd[EXT_CSD_BKOPS_STATUS];
555 if (!card->ext_csd.bkops_en)
556 pr_info("%s: BKOPS_EN bit is not set\n",
557 mmc_hostname(card->host));
558 }
559
eb0d8f13
JC
560 /* check whether the eMMC card supports HPI */
561 if (ext_csd[EXT_CSD_HPI_FEATURES] & 0x1) {
562 card->ext_csd.hpi = 1;
563 if (ext_csd[EXT_CSD_HPI_FEATURES] & 0x2)
564 card->ext_csd.hpi_cmd = MMC_STOP_TRANSMISSION;
565 else
566 card->ext_csd.hpi_cmd = MMC_SEND_STATUS;
567 /*
568 * Indicate the maximum timeout to close
569 * a command interrupted by HPI
570 */
571 card->ext_csd.out_of_int_time =
572 ext_csd[EXT_CSD_OUT_OF_INTERRUPT_TIME] * 10;
573 }
574
f4c5522b 575 card->ext_csd.rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
b2499518 576 card->ext_csd.rst_n_function = ext_csd[EXT_CSD_RST_N_FUNCTION];
090d25fe
LP
577
578 /*
579 * RPMB regions are defined in multiples of 128K.
580 */
581 card->ext_csd.raw_rpmb_size_mult = ext_csd[EXT_CSD_RPMB_MULT];
d0123cca 582 if (ext_csd[EXT_CSD_RPMB_MULT] && mmc_host_cmd23(card->host)) {
090d25fe
LP
583 mmc_part_add(card, ext_csd[EXT_CSD_RPMB_MULT] << 17,
584 EXT_CSD_PART_CONFIG_ACC_RPMB,
585 "rpmb", 0, false,
586 MMC_BLK_DATA_AREA_RPMB);
587 }
b2499518 588 }
f4c5522b 589
5238acbe 590 card->ext_csd.raw_erased_mem_count = ext_csd[EXT_CSD_ERASED_MEM_CONT];
dfe86cba
AH
591 if (ext_csd[EXT_CSD_ERASED_MEM_CONT])
592 card->erased_byte = 0xFF;
593 else
594 card->erased_byte = 0x0;
595
336c716a 596 /* eMMC v4.5 or later */
bec8726a 597 if (card->ext_csd.rev >= 6) {
336c716a
SJ
598 card->ext_csd.feature_support |= MMC_DISCARD_FEATURE;
599
b23cf0bd
SJ
600 card->ext_csd.generic_cmd6_time = 10 *
601 ext_csd[EXT_CSD_GENERIC_CMD6_TIME];
bec8726a
G
602 card->ext_csd.power_off_longtime = 10 *
603 ext_csd[EXT_CSD_POWER_OFF_LONG_TIME];
b23cf0bd 604
336c716a
SJ
605 card->ext_csd.cache_size =
606 ext_csd[EXT_CSD_CACHE_SIZE + 0] << 0 |
607 ext_csd[EXT_CSD_CACHE_SIZE + 1] << 8 |
608 ext_csd[EXT_CSD_CACHE_SIZE + 2] << 16 |
609 ext_csd[EXT_CSD_CACHE_SIZE + 3] << 24;
4265900e
SD
610
611 if (ext_csd[EXT_CSD_DATA_SECTOR_SIZE] == 1)
612 card->ext_csd.data_sector_size = 4096;
613 else
614 card->ext_csd.data_sector_size = 512;
615
616 if ((ext_csd[EXT_CSD_DATA_TAG_SUPPORT] & 1) &&
617 (ext_csd[EXT_CSD_TAG_UNIT_SIZE] <= 8)) {
618 card->ext_csd.data_tag_unit_size =
619 ((unsigned int) 1 << ext_csd[EXT_CSD_TAG_UNIT_SIZE]) *
620 (card->ext_csd.data_sector_size);
621 } else {
622 card->ext_csd.data_tag_unit_size = 0;
623 }
abd9ac14
SJ
624
625 card->ext_csd.max_packed_writes =
626 ext_csd[EXT_CSD_MAX_PACKED_WRITES];
627 card->ext_csd.max_packed_reads =
628 ext_csd[EXT_CSD_MAX_PACKED_READS];
a5075eb9
SD
629 } else {
630 card->ext_csd.data_sector_size = 512;
336c716a 631 }
881d1c25 632
7ea239d9 633out:
08ee80cc
PR
634 return err;
635}
636
637static inline void mmc_free_ext_csd(u8 *ext_csd)
638{
7ea239d9 639 kfree(ext_csd);
08ee80cc
PR
640}
641
7ea239d9 642
f39b2dd9 643static int mmc_compare_ext_csds(struct mmc_card *card, unsigned bus_width)
08ee80cc
PR
644{
645 u8 *bw_ext_csd;
646 int err;
647
f39b2dd9
PR
648 if (bus_width == MMC_BUS_WIDTH_1)
649 return 0;
650
08ee80cc 651 err = mmc_get_ext_csd(card, &bw_ext_csd);
08ee80cc 652
f39b2dd9 653 if (err || bw_ext_csd == NULL) {
f6f44590 654 err = -EINVAL;
08ee80cc
PR
655 goto out;
656 }
657
08ee80cc 658 /* only compare read only fields */
dd13b4ed 659 err = !((card->ext_csd.raw_partition_support ==
08ee80cc 660 bw_ext_csd[EXT_CSD_PARTITION_SUPPORT]) &&
f39b2dd9 661 (card->ext_csd.raw_erased_mem_count ==
08ee80cc 662 bw_ext_csd[EXT_CSD_ERASED_MEM_CONT]) &&
f39b2dd9 663 (card->ext_csd.rev ==
08ee80cc 664 bw_ext_csd[EXT_CSD_REV]) &&
f39b2dd9 665 (card->ext_csd.raw_ext_csd_structure ==
08ee80cc 666 bw_ext_csd[EXT_CSD_STRUCTURE]) &&
f39b2dd9 667 (card->ext_csd.raw_card_type ==
08ee80cc 668 bw_ext_csd[EXT_CSD_CARD_TYPE]) &&
f39b2dd9 669 (card->ext_csd.raw_s_a_timeout ==
08ee80cc 670 bw_ext_csd[EXT_CSD_S_A_TIMEOUT]) &&
f39b2dd9 671 (card->ext_csd.raw_hc_erase_gap_size ==
08ee80cc 672 bw_ext_csd[EXT_CSD_HC_WP_GRP_SIZE]) &&
f39b2dd9 673 (card->ext_csd.raw_erase_timeout_mult ==
08ee80cc 674 bw_ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT]) &&
f39b2dd9 675 (card->ext_csd.raw_hc_erase_grp_size ==
08ee80cc 676 bw_ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]) &&
f39b2dd9 677 (card->ext_csd.raw_sec_trim_mult ==
08ee80cc 678 bw_ext_csd[EXT_CSD_SEC_TRIM_MULT]) &&
f39b2dd9 679 (card->ext_csd.raw_sec_erase_mult ==
08ee80cc 680 bw_ext_csd[EXT_CSD_SEC_ERASE_MULT]) &&
f39b2dd9 681 (card->ext_csd.raw_sec_feature_support ==
08ee80cc 682 bw_ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT]) &&
f39b2dd9 683 (card->ext_csd.raw_trim_mult ==
08ee80cc 684 bw_ext_csd[EXT_CSD_TRIM_MULT]) &&
f39b2dd9
PR
685 (card->ext_csd.raw_sectors[0] ==
686 bw_ext_csd[EXT_CSD_SEC_CNT + 0]) &&
687 (card->ext_csd.raw_sectors[1] ==
688 bw_ext_csd[EXT_CSD_SEC_CNT + 1]) &&
689 (card->ext_csd.raw_sectors[2] ==
690 bw_ext_csd[EXT_CSD_SEC_CNT + 2]) &&
691 (card->ext_csd.raw_sectors[3] ==
60443712
FS
692 bw_ext_csd[EXT_CSD_SEC_CNT + 3]) &&
693 (card->ext_csd.raw_pwr_cl_52_195 ==
694 bw_ext_csd[EXT_CSD_PWR_CL_52_195]) &&
695 (card->ext_csd.raw_pwr_cl_26_195 ==
696 bw_ext_csd[EXT_CSD_PWR_CL_26_195]) &&
697 (card->ext_csd.raw_pwr_cl_52_360 ==
698 bw_ext_csd[EXT_CSD_PWR_CL_52_360]) &&
699 (card->ext_csd.raw_pwr_cl_26_360 ==
700 bw_ext_csd[EXT_CSD_PWR_CL_26_360]) &&
701 (card->ext_csd.raw_pwr_cl_200_195 ==
702 bw_ext_csd[EXT_CSD_PWR_CL_200_195]) &&
703 (card->ext_csd.raw_pwr_cl_200_360 ==
704 bw_ext_csd[EXT_CSD_PWR_CL_200_360]) &&
705 (card->ext_csd.raw_pwr_cl_ddr_52_195 ==
706 bw_ext_csd[EXT_CSD_PWR_CL_DDR_52_195]) &&
707 (card->ext_csd.raw_pwr_cl_ddr_52_360 ==
0a5b6438
SJ
708 bw_ext_csd[EXT_CSD_PWR_CL_DDR_52_360]) &&
709 (card->ext_csd.raw_pwr_cl_ddr_200_360 ==
710 bw_ext_csd[EXT_CSD_PWR_CL_DDR_200_360]));
711
08ee80cc
PR
712 if (err)
713 err = -EINVAL;
714
715out:
716 mmc_free_ext_csd(bw_ext_csd);
7ea239d9
PO
717 return err;
718}
719
51ec92e2
PO
720MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
721 card->raw_cid[2], card->raw_cid[3]);
722MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
723 card->raw_csd[2], card->raw_csd[3]);
724MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
dfe86cba
AH
725MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
726MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
51ec92e2
PO
727MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
728MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
729MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
730MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
731MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
51e7e8b6 732MMC_DEV_ATTR(prv, "0x%x\n", card->cid.prv);
51ec92e2 733MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
709de99d
CD
734MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
735 card->ext_csd.enhanced_area_offset);
736MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size);
188cc042
LP
737MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult);
738MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors);
51ec92e2
PO
739
740static struct attribute *mmc_std_attrs[] = {
741 &dev_attr_cid.attr,
742 &dev_attr_csd.attr,
743 &dev_attr_date.attr,
dfe86cba
AH
744 &dev_attr_erase_size.attr,
745 &dev_attr_preferred_erase_size.attr,
51ec92e2
PO
746 &dev_attr_fwrev.attr,
747 &dev_attr_hwrev.attr,
748 &dev_attr_manfid.attr,
749 &dev_attr_name.attr,
750 &dev_attr_oemid.attr,
51e7e8b6 751 &dev_attr_prv.attr,
51ec92e2 752 &dev_attr_serial.attr,
709de99d
CD
753 &dev_attr_enhanced_area_offset.attr,
754 &dev_attr_enhanced_area_size.attr,
188cc042
LP
755 &dev_attr_raw_rpmb_size_mult.attr,
756 &dev_attr_rel_sectors.attr,
51ec92e2
PO
757 NULL,
758};
d1e58212 759ATTRIBUTE_GROUPS(mmc_std);
51ec92e2
PO
760
761static struct device_type mmc_type = {
d1e58212 762 .groups = mmc_std_groups,
51ec92e2
PO
763};
764
b87d8dbf
G
765/*
766 * Select the PowerClass for the current bus width
767 * If power class is defined for 4/8 bit bus in the
768 * extended CSD register, select it by executing the
769 * mmc_switch command.
770 */
2385049d
SJ
771static int __mmc_select_powerclass(struct mmc_card *card,
772 unsigned int bus_width)
b87d8dbf 773{
2385049d
SJ
774 struct mmc_host *host = card->host;
775 struct mmc_ext_csd *ext_csd = &card->ext_csd;
60443712 776 unsigned int pwrclass_val = 0;
2385049d 777 int err = 0;
b87d8dbf 778
b87d8dbf
G
779 /* Power class selection is supported for versions >= 4.0 */
780 if (card->csd.mmca_vsn < CSD_SPEC_VER_4)
781 return 0;
782
783 /* Power class values are defined only for 4/8 bit bus */
784 if (bus_width == EXT_CSD_BUS_WIDTH_1)
785 return 0;
786
787 switch (1 << host->ios.vdd) {
788 case MMC_VDD_165_195:
2385049d
SJ
789 if (host->ios.clock <= MMC_HIGH_26_MAX_DTR)
790 pwrclass_val = ext_csd->raw_pwr_cl_26_195;
791 else if (host->ios.clock <= MMC_HIGH_52_MAX_DTR)
60443712 792 pwrclass_val = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
2385049d
SJ
793 ext_csd->raw_pwr_cl_52_195 :
794 ext_csd->raw_pwr_cl_ddr_52_195;
795 else if (host->ios.clock <= MMC_HS200_MAX_DTR)
796 pwrclass_val = ext_csd->raw_pwr_cl_200_195;
b87d8dbf 797 break;
93fc5a47
SJ
798 case MMC_VDD_27_28:
799 case MMC_VDD_28_29:
800 case MMC_VDD_29_30:
801 case MMC_VDD_30_31:
802 case MMC_VDD_31_32:
b87d8dbf
G
803 case MMC_VDD_32_33:
804 case MMC_VDD_33_34:
805 case MMC_VDD_34_35:
806 case MMC_VDD_35_36:
2385049d
SJ
807 if (host->ios.clock <= MMC_HIGH_26_MAX_DTR)
808 pwrclass_val = ext_csd->raw_pwr_cl_26_360;
809 else if (host->ios.clock <= MMC_HIGH_52_MAX_DTR)
60443712 810 pwrclass_val = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
2385049d
SJ
811 ext_csd->raw_pwr_cl_52_360 :
812 ext_csd->raw_pwr_cl_ddr_52_360;
813 else if (host->ios.clock <= MMC_HS200_MAX_DTR)
0a5b6438
SJ
814 pwrclass_val = (bus_width == EXT_CSD_DDR_BUS_WIDTH_8) ?
815 ext_csd->raw_pwr_cl_ddr_200_360 :
816 ext_csd->raw_pwr_cl_200_360;
b87d8dbf
G
817 break;
818 default:
819 pr_warning("%s: Voltage range not supported "
820 "for power class.\n", mmc_hostname(host));
821 return -EINVAL;
822 }
823
b87d8dbf
G
824 if (bus_width & (EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_BUS_WIDTH_8))
825 pwrclass_val = (pwrclass_val & EXT_CSD_PWR_CL_8BIT_MASK) >>
826 EXT_CSD_PWR_CL_8BIT_SHIFT;
827 else
828 pwrclass_val = (pwrclass_val & EXT_CSD_PWR_CL_4BIT_MASK) >>
829 EXT_CSD_PWR_CL_4BIT_SHIFT;
830
831 /* If the power class is different from the default value */
832 if (pwrclass_val > 0) {
833 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
834 EXT_CSD_POWER_CLASS,
835 pwrclass_val,
71fe3eb0 836 card->ext_csd.generic_cmd6_time);
b87d8dbf
G
837 }
838
839 return err;
840}
841
2385049d
SJ
842static int mmc_select_powerclass(struct mmc_card *card)
843{
844 struct mmc_host *host = card->host;
845 u32 bus_width, ext_csd_bits;
846 int err, ddr;
847
848 /* Power class selection is supported for versions >= 4.0 */
849 if (card->csd.mmca_vsn < CSD_SPEC_VER_4)
850 return 0;
851
852 bus_width = host->ios.bus_width;
853 /* Power class values are defined only for 4/8 bit bus */
854 if (bus_width == MMC_BUS_WIDTH_1)
855 return 0;
856
857 ddr = card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_52;
858 if (ddr)
859 ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
860 EXT_CSD_DDR_BUS_WIDTH_8 : EXT_CSD_DDR_BUS_WIDTH_4;
861 else
862 ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
863 EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4;
864
865 err = __mmc_select_powerclass(card, ext_csd_bits);
866 if (err)
867 pr_warn("%s: power class selection to bus width %d ddr %d failed\n",
868 mmc_hostname(host), 1 << bus_width, ddr);
869
870 return err;
871}
872
a4924c71 873/*
577fb131 874 * Set the bus speed for the selected speed mode.
a4924c71 875 */
577fb131
SJ
876static void mmc_set_bus_speed(struct mmc_card *card)
877{
878 unsigned int max_dtr = (unsigned int)-1;
879
0a5b6438
SJ
880 if ((mmc_card_hs200(card) || mmc_card_hs400(card)) &&
881 max_dtr > card->ext_csd.hs200_max_dtr)
577fb131
SJ
882 max_dtr = card->ext_csd.hs200_max_dtr;
883 else if (mmc_card_hs(card) && max_dtr > card->ext_csd.hs_max_dtr)
884 max_dtr = card->ext_csd.hs_max_dtr;
885 else if (max_dtr > card->csd.max_dtr)
886 max_dtr = card->csd.max_dtr;
887
888 mmc_set_clock(card->host, max_dtr);
889}
890
891/*
892 * Select the bus width amoung 4-bit and 8-bit(SDR).
893 * If the bus width is changed successfully, return the selected width value.
894 * Zero is returned instead of error value if the wide width is not supported.
895 */
896static int mmc_select_bus_width(struct mmc_card *card)
a4924c71 897{
a4924c71 898 static unsigned ext_csd_bits[] = {
a4924c71 899 EXT_CSD_BUS_WIDTH_8,
577fb131 900 EXT_CSD_BUS_WIDTH_4,
a4924c71
G
901 };
902 static unsigned bus_widths[] = {
a4924c71 903 MMC_BUS_WIDTH_8,
577fb131 904 MMC_BUS_WIDTH_4,
a4924c71 905 };
577fb131
SJ
906 struct mmc_host *host = card->host;
907 unsigned idx, bus_width = 0;
908 int err = 0;
a4924c71 909
577fb131
SJ
910 if ((card->csd.mmca_vsn < CSD_SPEC_VER_4) &&
911 !(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)))
912 return 0;
a4924c71 913
577fb131 914 idx = (host->caps & MMC_CAP_8_BIT_DATA) ? 0 : 1;
a4924c71
G
915
916 /*
917 * Unlike SD, MMC cards dont have a configuration register to notify
918 * supported bus width. So bus test command should be run to identify
919 * the supported bus width or compare the ext csd values of current
920 * bus width and ext csd values of 1 bit mode read earlier.
921 */
577fb131 922 for (; idx < ARRAY_SIZE(bus_widths); idx++) {
a4924c71
G
923 /*
924 * Host is capable of 8bit transfer, then switch
925 * the device to work in 8bit transfer mode. If the
926 * mmc switch command returns error then switch to
927 * 4bit transfer mode. On success set the corresponding
928 * bus width on the host.
929 */
930 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
931 EXT_CSD_BUS_WIDTH,
932 ext_csd_bits[idx],
933 card->ext_csd.generic_cmd6_time);
934 if (err)
935 continue;
936
577fb131
SJ
937 bus_width = bus_widths[idx];
938 mmc_set_bus_width(host, bus_width);
a4924c71 939
577fb131
SJ
940 /*
941 * If controller can't handle bus width test,
942 * compare ext_csd previously read in 1 bit mode
943 * against ext_csd at new bus width
944 */
a4924c71 945 if (!(host->caps & MMC_CAP_BUS_WIDTH_TEST))
577fb131 946 err = mmc_compare_ext_csds(card, bus_width);
a4924c71 947 else
577fb131
SJ
948 err = mmc_bus_test(card, bus_width);
949
950 if (!err) {
951 err = bus_width;
a4924c71 952 break;
577fb131
SJ
953 } else {
954 pr_warn("%s: switch to bus width %d failed\n",
955 mmc_hostname(host), ext_csd_bits[idx]);
956 }
a4924c71
G
957 }
958
577fb131
SJ
959 return err;
960}
961
962/*
963 * Switch to the high-speed mode
964 */
965static int mmc_select_hs(struct mmc_card *card)
966{
967 int err;
968
969 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
970 EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
971 card->ext_csd.generic_cmd6_time,
972 true, true, true);
a4924c71 973 if (!err)
577fb131
SJ
974 mmc_set_timing(card->host, MMC_TIMING_MMC_HS);
975
976 return err;
977}
978
979/*
980 * Activate wide bus and DDR if supported.
981 */
982static int mmc_select_hs_ddr(struct mmc_card *card)
983{
984 struct mmc_host *host = card->host;
985 u32 bus_width, ext_csd_bits;
986 int err = 0;
987
988 if (!(card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_52))
989 return 0;
990
991 bus_width = host->ios.bus_width;
992 if (bus_width == MMC_BUS_WIDTH_1)
993 return 0;
994
995 ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
996 EXT_CSD_DDR_BUS_WIDTH_8 : EXT_CSD_DDR_BUS_WIDTH_4;
997
998 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
999 EXT_CSD_BUS_WIDTH,
1000 ext_csd_bits,
1001 card->ext_csd.generic_cmd6_time);
1002 if (err) {
1003 pr_warn("%s: switch to bus width %d ddr failed\n",
1004 mmc_hostname(host), 1 << bus_width);
1005 return err;
1006 }
1007
1008 /*
1009 * eMMC cards can support 3.3V to 1.2V i/o (vccq)
1010 * signaling.
1011 *
1012 * EXT_CSD_CARD_TYPE_DDR_1_8V means 3.3V or 1.8V vccq.
1013 *
1014 * 1.8V vccq at 3.3V core voltage (vcc) is not required
1015 * in the JEDEC spec for DDR.
1016 *
312449ef
CD
1017 * Even (e)MMC card can support 3.3v to 1.2v vccq, but not all
1018 * host controller can support this, like some of the SDHCI
1019 * controller which connect to an eMMC device. Some of these
1020 * host controller still needs to use 1.8v vccq for supporting
1021 * DDR mode.
1022 *
1023 * So the sequence will be:
1024 * if (host and device can both support 1.2v IO)
1025 * use 1.2v IO;
1026 * else if (host and device can both support 1.8v IO)
1027 * use 1.8v IO;
1028 * so if host and device can only support 3.3v IO, this is the
1029 * last choice.
577fb131
SJ
1030 *
1031 * WARNING: eMMC rules are NOT the same as SD DDR
1032 */
312449ef
CD
1033 err = -EINVAL;
1034 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_2V)
1035 err = __mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
577fb131 1036
312449ef
CD
1037 if (err && (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_8V))
1038 err = __mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1039
1040 /* make sure vccq is 3.3v after switching disaster */
1041 if (err)
1042 err = __mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330);
1043
1044 if (!err)
1045 mmc_set_timing(host, MMC_TIMING_MMC_DDR52);
577fb131
SJ
1046
1047 return err;
1048}
1049
0a5b6438
SJ
1050static int mmc_select_hs400(struct mmc_card *card)
1051{
1052 struct mmc_host *host = card->host;
1053 int err = 0;
1054
1055 /*
1056 * HS400 mode requires 8-bit bus width
1057 */
1058 if (!(card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400 &&
1059 host->ios.bus_width == MMC_BUS_WIDTH_8))
1060 return 0;
1061
1062 /*
1063 * Before switching to dual data rate operation for HS400,
1064 * it is required to convert from HS200 mode to HS mode.
1065 */
1066 mmc_set_timing(card->host, MMC_TIMING_MMC_HS);
1067 mmc_set_bus_speed(card);
1068
1069 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1070 EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
1071 card->ext_csd.generic_cmd6_time,
1072 true, true, true);
1073 if (err) {
1074 pr_warn("%s: switch to high-speed from hs200 failed, err:%d\n",
1075 mmc_hostname(host), err);
1076 return err;
1077 }
1078
1079 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1080 EXT_CSD_BUS_WIDTH,
1081 EXT_CSD_DDR_BUS_WIDTH_8,
1082 card->ext_csd.generic_cmd6_time);
1083 if (err) {
1084 pr_warn("%s: switch to bus width for hs400 failed, err:%d\n",
1085 mmc_hostname(host), err);
1086 return err;
1087 }
1088
1089 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1090 EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS400,
1091 card->ext_csd.generic_cmd6_time,
1092 true, true, true);
1093 if (err) {
1094 pr_warn("%s: switch to hs400 failed, err:%d\n",
1095 mmc_hostname(host), err);
1096 return err;
1097 }
1098
1099 mmc_set_timing(host, MMC_TIMING_MMC_HS400);
1100 mmc_set_bus_speed(card);
1101
1102 return 0;
1103}
1104
577fb131
SJ
1105/*
1106 * For device supporting HS200 mode, the following sequence
1107 * should be done before executing the tuning process.
1108 * 1. set the desired bus width(4-bit or 8-bit, 1-bit is not supported)
1109 * 2. switch to HS200 mode
1110 * 3. set the clock to > 52Mhz and <=200MHz
1111 */
1112static int mmc_select_hs200(struct mmc_card *card)
1113{
1114 struct mmc_host *host = card->host;
1115 int err = -EINVAL;
1116
1117 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_2V)
1118 err = __mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
1119
1120 if (err && card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_8V)
1121 err = __mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1122
1123 /* If fails try again during next card power cycle */
1124 if (err)
1125 goto err;
1126
1127 /*
1128 * Set the bus width(4 or 8) with host's support and
1129 * switch to HS200 mode if bus width is set successfully.
1130 */
1131 err = mmc_select_bus_width(card);
1132 if (!IS_ERR_VALUE(err)) {
4509f847 1133 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
577fb131
SJ
1134 EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS200,
1135 card->ext_csd.generic_cmd6_time,
1136 true, true, true);
1137 if (!err)
1138 mmc_set_timing(host, MMC_TIMING_MMC_HS200);
1139 }
a4924c71
G
1140err:
1141 return err;
1142}
1143
577fb131
SJ
1144/*
1145 * Activate High Speed or HS200 mode if supported.
1146 */
1147static int mmc_select_timing(struct mmc_card *card)
1148{
1149 int err = 0;
1150
1151 if ((card->csd.mmca_vsn < CSD_SPEC_VER_4 &&
1152 card->ext_csd.hs_max_dtr == 0))
1153 goto bus_speed;
1154
1155 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200)
1156 err = mmc_select_hs200(card);
1157 else if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS)
1158 err = mmc_select_hs(card);
1159
1160 if (err && err != -EBADMSG)
1161 return err;
1162
1163 if (err) {
1164 pr_warn("%s: switch to %s failed\n",
1165 mmc_card_hs(card) ? "high-speed" :
1166 (mmc_card_hs200(card) ? "hs200" : ""),
1167 mmc_hostname(card->host));
1168 err = 0;
1169 }
1170
1171bus_speed:
1172 /*
1173 * Set the bus speed to the selected bus timing.
1174 * If timing is not selected, backward compatible is the default.
1175 */
1176 mmc_set_bus_speed(card);
1177 return err;
1178}
1179
48d11e06
SB
1180const u8 tuning_blk_pattern_4bit[MMC_TUNING_BLK_PATTERN_4BIT_SIZE] = {
1181 0xff, 0x0f, 0xff, 0x00, 0xff, 0xcc, 0xc3, 0xcc,
1182 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
1183 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
1184 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
1185 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
1186 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
1187 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
1188 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
1189};
1190EXPORT_SYMBOL(tuning_blk_pattern_4bit);
1191
1192const u8 tuning_blk_pattern_8bit[MMC_TUNING_BLK_PATTERN_8BIT_SIZE] = {
1193 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
1194 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc, 0xcc,
1195 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff, 0xff,
1196 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee, 0xff,
1197 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xdd,
1198 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb,
1199 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff, 0xff,
1200 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee, 0xff,
1201 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00,
1202 0x00, 0xff, 0xff, 0xcc, 0xcc, 0xcc, 0x33, 0xcc,
1203 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0xcc, 0xff,
1204 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xee,
1205 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xdd,
1206 0xdd, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xff,
1207 0xbb, 0xbb, 0xff, 0xff, 0xff, 0x77, 0xff, 0xff,
1208 0xff, 0x77, 0x77, 0xff, 0x77, 0xbb, 0xdd, 0xee,
1209};
1210EXPORT_SYMBOL(tuning_blk_pattern_8bit);
1211
577fb131
SJ
1212/*
1213 * Execute tuning sequence to seek the proper bus operating
0a5b6438 1214 * conditions for HS200 and HS400, which sends CMD21 to the device.
577fb131
SJ
1215 */
1216static int mmc_hs200_tuning(struct mmc_card *card)
1217{
1218 struct mmc_host *host = card->host;
1219 int err = 0;
1220
0a5b6438
SJ
1221 /*
1222 * Timing should be adjusted to the HS400 target
1223 * operation frequency for tuning process
1224 */
1225 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400 &&
1226 host->ios.bus_width == MMC_BUS_WIDTH_8)
1227 if (host->ops->prepare_hs400_tuning)
1228 host->ops->prepare_hs400_tuning(host, &host->ios);
1229
577fb131
SJ
1230 if (host->ops->execute_tuning) {
1231 mmc_host_clk_hold(host);
1232 err = host->ops->execute_tuning(host,
1233 MMC_SEND_TUNING_BLOCK_HS200);
1234 mmc_host_clk_release(host);
1235
1236 if (err)
1237 pr_warn("%s: tuning execution failed\n",
1238 mmc_hostname(host));
1239 }
1240
1241 return err;
1242}
1243
7ea239d9 1244/*
6abaa0c9
PO
1245 * Handle the detection and initialisation of a card.
1246 *
8769392b 1247 * In the case of a resume, "oldcard" will contain the card
6abaa0c9 1248 * we're trying to reinitialise.
7ea239d9 1249 */
8c75deae 1250static int mmc_init_card(struct mmc_host *host, u32 ocr,
6abaa0c9 1251 struct mmc_card *oldcard)
7ea239d9
PO
1252{
1253 struct mmc_card *card;
577fb131 1254 int err;
7ea239d9 1255 u32 cid[4];
b676f039 1256 u32 rocr;
08ee80cc 1257 u8 *ext_csd = NULL;
7ea239d9
PO
1258
1259 BUG_ON(!host);
d84075c8 1260 WARN_ON(!host->claimed);
7ea239d9 1261
44669034
SNX
1262 /* Set correct bus mode for MMC before attempting init */
1263 if (!mmc_host_is_spi(host))
1264 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
1265
7ea239d9
PO
1266 /*
1267 * Since we're changing the OCR value, we seem to
1268 * need to tell some cards to go back to the idle
1269 * state. We wait 1ms to give cards time to
1270 * respond.
c3805467 1271 * mmc_go_idle is needed for eMMC that are asleep
7ea239d9
PO
1272 */
1273 mmc_go_idle(host);
1274
1275 /* The extra bit indicates that we support high capacity */
b676f039 1276 err = mmc_send_op_cond(host, ocr | (1 << 30), &rocr);
17b0429d 1277 if (err)
6abaa0c9 1278 goto err;
7ea239d9 1279
af517150
DB
1280 /*
1281 * For SPI, enable CRC as appropriate.
1282 */
1283 if (mmc_host_is_spi(host)) {
1284 err = mmc_spi_set_crc(host, use_spi_crc);
1285 if (err)
1286 goto err;
1287 }
1288
7ea239d9
PO
1289 /*
1290 * Fetch CID from card.
1291 */
af517150
DB
1292 if (mmc_host_is_spi(host))
1293 err = mmc_send_cid(host, cid);
1294 else
1295 err = mmc_all_send_cid(host, cid);
17b0429d 1296 if (err)
7ea239d9
PO
1297 goto err;
1298
6abaa0c9 1299 if (oldcard) {
adf66a0d
PO
1300 if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
1301 err = -ENOENT;
6abaa0c9 1302 goto err;
adf66a0d 1303 }
6abaa0c9
PO
1304
1305 card = oldcard;
1306 } else {
1307 /*
1308 * Allocate card structure.
1309 */
51ec92e2 1310 card = mmc_alloc_card(host, &mmc_type);
adf66a0d
PO
1311 if (IS_ERR(card)) {
1312 err = PTR_ERR(card);
6abaa0c9 1313 goto err;
adf66a0d 1314 }
7ea239d9 1315
69041150 1316 card->ocr = ocr;
6abaa0c9
PO
1317 card->type = MMC_TYPE_MMC;
1318 card->rca = 1;
1319 memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
1320 }
7ea239d9
PO
1321
1322 /*
af517150 1323 * For native busses: set card RCA and quit open drain mode.
7ea239d9 1324 */
af517150
DB
1325 if (!mmc_host_is_spi(host)) {
1326 err = mmc_set_relative_addr(card);
1327 if (err)
1328 goto free_card;
7ea239d9 1329
af517150
DB
1330 mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
1331 }
7ea239d9 1332
6abaa0c9
PO
1333 if (!oldcard) {
1334 /*
1335 * Fetch CSD from card.
1336 */
1337 err = mmc_send_csd(card, card->raw_csd);
17b0429d 1338 if (err)
6abaa0c9 1339 goto free_card;
7ea239d9 1340
bd766312 1341 err = mmc_decode_csd(card);
adf66a0d 1342 if (err)
bd766312
PO
1343 goto free_card;
1344 err = mmc_decode_cid(card);
adf66a0d 1345 if (err)
bd766312 1346 goto free_card;
6abaa0c9 1347 }
7ea239d9 1348
3d705d14
SH
1349 /*
1350 * handling only for cards supporting DSR and hosts requesting
1351 * DSR configuration
1352 */
1353 if (card->csd.dsr_imp && host->dsr_req)
1354 mmc_set_dsr(host);
1355
7ea239d9 1356 /*
89a73cf5 1357 * Select card, as all following commands rely on that.
7ea239d9 1358 */
af517150
DB
1359 if (!mmc_host_is_spi(host)) {
1360 err = mmc_select_card(card);
1361 if (err)
1362 goto free_card;
1363 }
7ea239d9 1364
6abaa0c9
PO
1365 if (!oldcard) {
1366 /*
af517150 1367 * Fetch and process extended CSD.
6abaa0c9 1368 */
08ee80cc
PR
1369
1370 err = mmc_get_ext_csd(card, &ext_csd);
1371 if (err)
1372 goto free_card;
1373 err = mmc_read_ext_csd(card, ext_csd);
17b0429d 1374 if (err)
6abaa0c9 1375 goto free_card;
b676f039
PR
1376
1377 /* If doing byte addressing, check if required to do sector
1378 * addressing. Handle the case of <2GB cards needing sector
1379 * addressing. See section 8.1 JEDEC Standard JED84-A441;
1380 * ocr register has bit 30 set for sector addressing.
1381 */
1382 if (!(mmc_card_blockaddr(card)) && (rocr & (1<<30)))
1383 mmc_card_set_blockaddr(card);
1384
dfe86cba
AH
1385 /* Erase size depends on CSD and Extended CSD */
1386 mmc_set_erase_size(card);
6abaa0c9 1387 }
7ea239d9 1388
709de99d
CD
1389 /*
1390 * If enhanced_area_en is TRUE, host needs to enable ERASE_GRP_DEF
25985edc 1391 * bit. This bit will be lost every time after a reset or power off.
709de99d 1392 */
69803d4f 1393 if (card->ext_csd.partition_setting_completed ||
83bb24aa 1394 (card->ext_csd.rev >= 3 && (host->caps2 & MMC_CAP2_HC_ERASE_SZ))) {
709de99d 1395 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
b23cf0bd
SJ
1396 EXT_CSD_ERASE_GROUP_DEF, 1,
1397 card->ext_csd.generic_cmd6_time);
709de99d
CD
1398
1399 if (err && err != -EBADMSG)
1400 goto free_card;
1401
1402 if (err) {
1403 err = 0;
1404 /*
1405 * Just disable enhanced area off & sz
1406 * will try to enable ERASE_GROUP_DEF
1407 * during next time reinit
1408 */
1409 card->ext_csd.enhanced_area_offset = -EINVAL;
1410 card->ext_csd.enhanced_area_size = -EINVAL;
1411 } else {
1412 card->ext_csd.erase_group_def = 1;
1413 /*
1414 * enable ERASE_GRP_DEF successfully.
1415 * This will affect the erase size, so
1416 * here need to reset erase size
1417 */
1418 mmc_set_erase_size(card);
1419 }
1420 }
1421
41e2a489
PR
1422 /*
1423 * Ensure eMMC user default partition is enabled
1424 */
371a689f
AW
1425 if (card->ext_csd.part_config & EXT_CSD_PART_CONFIG_ACC_MASK) {
1426 card->ext_csd.part_config &= ~EXT_CSD_PART_CONFIG_ACC_MASK;
1427 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONFIG,
1428 card->ext_csd.part_config,
1429 card->ext_csd.part_time);
1430 if (err && err != -EBADMSG)
1431 goto free_card;
41e2a489
PR
1432 }
1433
bec8726a 1434 /*
43235679 1435 * Enable power_off_notification byte in the ext_csd register
bec8726a 1436 */
43235679 1437 if (card->ext_csd.rev >= 6) {
bec8726a
G
1438 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1439 EXT_CSD_POWER_OFF_NOTIFICATION,
1440 EXT_CSD_POWER_ON,
1441 card->ext_csd.generic_cmd6_time);
1442 if (err && err != -EBADMSG)
1443 goto free_card;
bec8726a 1444
96a85d54
G
1445 /*
1446 * The err can be -EBADMSG or 0,
1447 * so check for success and update the flag
1448 */
1449 if (!err)
e6c08586 1450 card->ext_csd.power_off_notification = EXT_CSD_POWER_ON;
96a85d54 1451 }
bec8726a 1452
89a73cf5 1453 /*
577fb131 1454 * Select timing interface
dfc13e84 1455 */
577fb131
SJ
1456 err = mmc_select_timing(card);
1457 if (err)
1458 goto free_card;
dfc13e84 1459
a4924c71 1460 if (mmc_card_hs200(card)) {
577fb131
SJ
1461 err = mmc_hs200_tuning(card);
1462 if (err)
a4924c71 1463 goto err;
0a5b6438
SJ
1464
1465 err = mmc_select_hs400(card);
1466 if (err)
1467 goto err;
577fb131
SJ
1468 } else if (mmc_card_hs(card)) {
1469 /* Select the desired bus width optionally */
1470 err = mmc_select_bus_width(card);
1471 if (!IS_ERR_VALUE(err)) {
1472 err = mmc_select_hs_ddr(card);
1473 if (err)
1474 goto err;
ef0b27d4 1475 }
89a73cf5
PO
1476 }
1477
2385049d
SJ
1478 /*
1479 * Choose the power class with selected bus interface
1480 */
1481 mmc_select_powerclass(card);
1482
52d0974e
SJ
1483 /*
1484 * Enable HPI feature (if supported)
1485 */
1486 if (card->ext_csd.hpi) {
1487 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1488 EXT_CSD_HPI_MGMT, 1,
1489 card->ext_csd.generic_cmd6_time);
1490 if (err && err != -EBADMSG)
1491 goto free_card;
1492 if (err) {
1493 pr_warning("%s: Enabling HPI failed\n",
1494 mmc_hostname(card->host));
1495 err = 0;
1496 } else
1497 card->ext_csd.hpi_en = 1;
1498 }
1499
881d1c25
SJ
1500 /*
1501 * If cache size is higher than 0, this indicates
1502 * the existence of cache and it can be turned on.
1503 */
7536d3f8 1504 if (card->ext_csd.cache_size > 0) {
881d1c25 1505 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
8bc0678b
SJ
1506 EXT_CSD_CACHE_CTRL, 1,
1507 card->ext_csd.generic_cmd6_time);
881d1c25
SJ
1508 if (err && err != -EBADMSG)
1509 goto free_card;
1510
1511 /*
1512 * Only if no error, cache is turned on successfully.
1513 */
8bc0678b
SJ
1514 if (err) {
1515 pr_warning("%s: Cache is supported, "
1516 "but failed to turn on (%d)\n",
1517 mmc_hostname(card->host), err);
1518 card->ext_csd.cache_ctrl = 0;
1519 err = 0;
1520 } else {
1521 card->ext_csd.cache_ctrl = 1;
1522 }
881d1c25
SJ
1523 }
1524
abd9ac14
SJ
1525 /*
1526 * The mandatory minimum values are defined for packed command.
1527 * read: 5, write: 3
1528 */
1529 if (card->ext_csd.max_packed_writes >= 3 &&
1530 card->ext_csd.max_packed_reads >= 5 &&
1531 host->caps2 & MMC_CAP2_PACKED_CMD) {
1532 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1533 EXT_CSD_EXP_EVENTS_CTRL,
1534 EXT_CSD_PACKED_EVENT_EN,
1535 card->ext_csd.generic_cmd6_time);
1536 if (err && err != -EBADMSG)
1537 goto free_card;
1538 if (err) {
1539 pr_warn("%s: Enabling packed event failed\n",
1540 mmc_hostname(card->host));
1541 card->ext_csd.packed_event_en = 0;
1542 err = 0;
1543 } else {
1544 card->ext_csd.packed_event_en = 1;
1545 }
1546 }
1547
6abaa0c9
PO
1548 if (!oldcard)
1549 host->card = card;
1550
08ee80cc 1551 mmc_free_ext_csd(ext_csd);
17b0429d 1552 return 0;
6abaa0c9
PO
1553
1554free_card:
1555 if (!oldcard)
1556 mmc_remove_card(card);
1557err:
08ee80cc 1558 mmc_free_ext_csd(ext_csd);
6abaa0c9 1559
adf66a0d 1560 return err;
6abaa0c9
PO
1561}
1562
07a68216
UH
1563static int mmc_can_sleep(struct mmc_card *card)
1564{
1565 return (card && card->ext_csd.rev >= 3);
1566}
1567
1568static int mmc_sleep(struct mmc_host *host)
1569{
1570 struct mmc_command cmd = {0};
1571 struct mmc_card *card = host->card;
cb962e04 1572 unsigned int timeout_ms = DIV_ROUND_UP(card->ext_csd.sa_timeout, 10000);
07a68216
UH
1573 int err;
1574
07a68216
UH
1575 err = mmc_deselect_cards(host);
1576 if (err)
1577 return err;
1578
1579 cmd.opcode = MMC_SLEEP_AWAKE;
1580 cmd.arg = card->rca << 16;
1581 cmd.arg |= 1 << 15;
1582
cb962e04
UH
1583 /*
1584 * If the max_busy_timeout of the host is specified, validate it against
1585 * the sleep cmd timeout. A failure means we need to prevent the host
1586 * from doing hw busy detection, which is done by converting to a R1
1587 * response instead of a R1B.
1588 */
1589 if (host->max_busy_timeout && (timeout_ms > host->max_busy_timeout)) {
1590 cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
1591 } else {
1592 cmd.flags = MMC_RSP_R1B | MMC_CMD_AC;
1593 cmd.busy_timeout = timeout_ms;
1594 }
1595
07a68216
UH
1596 err = mmc_wait_for_cmd(host, &cmd, 0);
1597 if (err)
1598 return err;
1599
1600 /*
1601 * If the host does not wait while the card signals busy, then we will
1602 * will have to wait the sleep/awake timeout. Note, we cannot use the
1603 * SEND_STATUS command to poll the status because that command (and most
1604 * others) is invalid while the card sleeps.
1605 */
cb962e04
UH
1606 if (!cmd.busy_timeout || !(host->caps & MMC_CAP_WAIT_WHILE_BUSY))
1607 mmc_delay(timeout_ms);
07a68216
UH
1608
1609 return err;
1610}
1611
e6c08586
UH
1612static int mmc_can_poweroff_notify(const struct mmc_card *card)
1613{
1614 return card &&
1615 mmc_card_mmc(card) &&
1616 (card->ext_csd.power_off_notification == EXT_CSD_POWER_ON);
1617}
1618
1619static int mmc_poweroff_notify(struct mmc_card *card, unsigned int notify_type)
1620{
1621 unsigned int timeout = card->ext_csd.generic_cmd6_time;
1622 int err;
1623
1624 /* Use EXT_CSD_POWER_OFF_SHORT as default notification type. */
1625 if (notify_type == EXT_CSD_POWER_OFF_LONG)
1626 timeout = card->ext_csd.power_off_longtime;
1627
878e200b
UH
1628 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1629 EXT_CSD_POWER_OFF_NOTIFICATION,
4509f847 1630 notify_type, timeout, true, false, false);
e6c08586
UH
1631 if (err)
1632 pr_err("%s: Power Off Notification timed out, %u\n",
1633 mmc_hostname(card->host), timeout);
1634
1635 /* Disable the power off notification after the switch operation. */
1636 card->ext_csd.power_off_notification = EXT_CSD_NO_POWER_NOTIFICATION;
1637
1638 return err;
1639}
1640
6abaa0c9
PO
1641/*
1642 * Host is being removed. Free up the current card.
1643 */
1644static void mmc_remove(struct mmc_host *host)
1645{
1646 BUG_ON(!host);
1647 BUG_ON(!host->card);
1648
1649 mmc_remove_card(host->card);
1650 host->card = NULL;
1651}
1652
d3049504
AH
1653/*
1654 * Card detection - card is alive.
1655 */
1656static int mmc_alive(struct mmc_host *host)
1657{
1658 return mmc_send_status(host->card, NULL);
1659}
1660
6abaa0c9
PO
1661/*
1662 * Card detection callback from host.
1663 */
1664static void mmc_detect(struct mmc_host *host)
1665{
1666 int err;
1667
1668 BUG_ON(!host);
1669 BUG_ON(!host->card);
1670
e94cfef6 1671 mmc_get_card(host->card);
6abaa0c9
PO
1672
1673 /*
1674 * Just check if our card has been removed.
1675 */
d3049504 1676 err = _mmc_detect_card_removed(host);
6abaa0c9 1677
e94cfef6 1678 mmc_put_card(host->card);
6abaa0c9 1679
17b0429d 1680 if (err) {
4101c16a 1681 mmc_remove(host);
6abaa0c9
PO
1682
1683 mmc_claim_host(host);
1684 mmc_detach_bus(host);
7f7e4129 1685 mmc_power_off(host);
6abaa0c9
PO
1686 mmc_release_host(host);
1687 }
1688}
1689
03d071fc 1690static int _mmc_suspend(struct mmc_host *host, bool is_suspend)
6abaa0c9 1691{
c3805467 1692 int err = 0;
03d071fc
UH
1693 unsigned int notify_type = is_suspend ? EXT_CSD_POWER_OFF_SHORT :
1694 EXT_CSD_POWER_OFF_LONG;
c3805467 1695
6abaa0c9
PO
1696 BUG_ON(!host);
1697 BUG_ON(!host->card);
7ea239d9 1698
6abaa0c9 1699 mmc_claim_host(host);
881d926d 1700
9ec775f7
UH
1701 if (mmc_card_suspended(host->card))
1702 goto out;
1703
39b9431b
UH
1704 if (mmc_card_doing_bkops(host->card)) {
1705 err = mmc_stop_bkops(host->card);
1706 if (err)
1707 goto out;
1708 }
1709
10e5d965 1710 err = mmc_flush_cache(host->card);
881d926d
ME
1711 if (err)
1712 goto out;
1713
43235679 1714 if (mmc_can_poweroff_notify(host->card) &&
53275c21 1715 ((host->caps2 & MMC_CAP2_FULL_PWR_CYCLE) || !is_suspend))
03d071fc 1716 err = mmc_poweroff_notify(host->card, notify_type);
07a68216
UH
1717 else if (mmc_can_sleep(host->card))
1718 err = mmc_sleep(host);
e6c08586 1719 else if (!mmc_host_is_spi(host))
85e727ed 1720 err = mmc_deselect_cards(host);
95cdfb72 1721
9ec775f7 1722 if (!err) {
74590263 1723 mmc_power_off(host);
9ec775f7
UH
1724 mmc_card_set_suspended(host->card);
1725 }
881d926d
ME
1726out:
1727 mmc_release_host(host);
c3805467 1728 return err;
6abaa0c9 1729}
7ea239d9 1730
03d071fc 1731/*
0cb403a2 1732 * Suspend callback
03d071fc
UH
1733 */
1734static int mmc_suspend(struct mmc_host *host)
1735{
0cb403a2
UH
1736 int err;
1737
1738 err = _mmc_suspend(host, true);
1739 if (!err) {
1740 pm_runtime_disable(&host->card->dev);
1741 pm_runtime_set_suspended(&host->card->dev);
1742 }
1743
1744 return err;
03d071fc
UH
1745}
1746
6abaa0c9 1747/*
6abaa0c9
PO
1748 * This function tries to determine if the same card is still present
1749 * and, if so, restore all state to it.
1750 */
0cb403a2 1751static int _mmc_resume(struct mmc_host *host)
6abaa0c9 1752{
9ec775f7 1753 int err = 0;
6abaa0c9
PO
1754
1755 BUG_ON(!host);
1756 BUG_ON(!host->card);
1757
1758 mmc_claim_host(host);
9ec775f7
UH
1759
1760 if (!mmc_card_suspended(host->card))
1761 goto out;
1762
69041150 1763 mmc_power_up(host, host->card->ocr);
69041150 1764 err = mmc_init_card(host, host->card->ocr, host->card);
9ec775f7 1765 mmc_card_clr_suspended(host->card);
2986d0bf 1766
9ec775f7
UH
1767out:
1768 mmc_release_host(host);
95cdfb72 1769 return err;
6abaa0c9
PO
1770}
1771
9ec775f7
UH
1772/*
1773 * Shutdown callback
1774 */
1775static int mmc_shutdown(struct mmc_host *host)
1776{
1777 int err = 0;
1778
1779 /*
1780 * In a specific case for poweroff notify, we need to resume the card
1781 * before we can shutdown it properly.
1782 */
1783 if (mmc_can_poweroff_notify(host->card) &&
1784 !(host->caps2 & MMC_CAP2_FULL_PWR_CYCLE))
0cb403a2 1785 err = _mmc_resume(host);
9ec775f7
UH
1786
1787 if (!err)
1788 err = _mmc_suspend(host, false);
1789
1790 return err;
1791}
c4d770d7 1792
0cb403a2
UH
1793/*
1794 * Callback for resume.
1795 */
1796static int mmc_resume(struct mmc_host *host)
1797{
4d223782 1798 int err = 0;
0cb403a2 1799
4d223782
UH
1800 if (!(host->caps & MMC_CAP_RUNTIME_RESUME)) {
1801 err = _mmc_resume(host);
1802 pm_runtime_set_active(&host->card->dev);
1803 pm_runtime_mark_last_busy(&host->card->dev);
1804 }
0cb403a2
UH
1805 pm_runtime_enable(&host->card->dev);
1806
1807 return err;
1808}
1809
c4d770d7
UH
1810/*
1811 * Callback for runtime_suspend.
1812 */
1813static int mmc_runtime_suspend(struct mmc_host *host)
1814{
1815 int err;
1816
1817 if (!(host->caps & MMC_CAP_AGGRESSIVE_PM))
1818 return 0;
1819
0cb403a2 1820 err = _mmc_suspend(host, true);
0cc81a8c 1821 if (err)
c4d770d7
UH
1822 pr_err("%s: error %d doing aggessive suspend\n",
1823 mmc_hostname(host), err);
c4d770d7 1824
c4d770d7
UH
1825 return err;
1826}
1827
1828/*
1829 * Callback for runtime_resume.
1830 */
1831static int mmc_runtime_resume(struct mmc_host *host)
1832{
1833 int err;
1834
4d223782 1835 if (!(host->caps & (MMC_CAP_AGGRESSIVE_PM | MMC_CAP_RUNTIME_RESUME)))
c4d770d7
UH
1836 return 0;
1837
0cb403a2 1838 err = _mmc_resume(host);
c4d770d7
UH
1839 if (err)
1840 pr_err("%s: error %d doing aggessive resume\n",
1841 mmc_hostname(host), err);
1842
c4d770d7
UH
1843 return 0;
1844}
1845
12ae637f 1846static int mmc_power_restore(struct mmc_host *host)
eae1aeee 1847{
12ae637f
OBC
1848 int ret;
1849
eae1aeee 1850 mmc_claim_host(host);
69041150 1851 ret = mmc_init_card(host, host->card->ocr, host->card);
eae1aeee 1852 mmc_release_host(host);
12ae637f
OBC
1853
1854 return ret;
eae1aeee
AH
1855}
1856
6abaa0c9
PO
1857static const struct mmc_bus_ops mmc_ops = {
1858 .remove = mmc_remove,
1859 .detect = mmc_detect,
1860 .suspend = mmc_suspend,
1861 .resume = mmc_resume,
c4d770d7
UH
1862 .runtime_suspend = mmc_runtime_suspend,
1863 .runtime_resume = mmc_runtime_resume,
eae1aeee 1864 .power_restore = mmc_power_restore,
d3049504 1865 .alive = mmc_alive,
486fdbbc 1866 .shutdown = mmc_shutdown,
6abaa0c9
PO
1867};
1868
1869/*
1870 * Starting point for MMC card init.
1871 */
807e8e40 1872int mmc_attach_mmc(struct mmc_host *host)
6abaa0c9
PO
1873{
1874 int err;
69041150 1875 u32 ocr, rocr;
6abaa0c9
PO
1876
1877 BUG_ON(!host);
d84075c8 1878 WARN_ON(!host->claimed);
6abaa0c9 1879
44669034
SNX
1880 /* Set correct bus mode for MMC before attempting attach */
1881 if (!mmc_host_is_spi(host))
1882 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
1883
807e8e40
AR
1884 err = mmc_send_op_cond(host, 0, &ocr);
1885 if (err)
1886 return err;
1887
2501c917 1888 mmc_attach_bus(host, &mmc_ops);
8f230f45
TI
1889 if (host->ocr_avail_mmc)
1890 host->ocr_avail = host->ocr_avail_mmc;
6abaa0c9 1891
af517150
DB
1892 /*
1893 * We need to get OCR a different way for SPI.
1894 */
1895 if (mmc_host_is_spi(host)) {
1896 err = mmc_spi_read_ocr(host, 1, &ocr);
1897 if (err)
1898 goto err;
1899 }
1900
69041150 1901 rocr = mmc_select_voltage(host, ocr);
6abaa0c9
PO
1902
1903 /*
1904 * Can we support the voltage of the card?
1905 */
69041150 1906 if (!rocr) {
109b5bed 1907 err = -EINVAL;
6abaa0c9 1908 goto err;
109b5bed 1909 }
6abaa0c9
PO
1910
1911 /*
1912 * Detect and init the card.
1913 */
69041150 1914 err = mmc_init_card(host, rocr, NULL);
17b0429d 1915 if (err)
6abaa0c9
PO
1916 goto err;
1917
1918 mmc_release_host(host);
4101c16a 1919 err = mmc_add_card(host->card);
807e8e40 1920 mmc_claim_host(host);
7ea239d9 1921 if (err)
2986d0bf 1922 goto remove_card;
7ea239d9
PO
1923
1924 return 0;
1925
2986d0bf 1926remove_card:
807e8e40 1927 mmc_release_host(host);
6abaa0c9 1928 mmc_remove_card(host->card);
2986d0bf 1929 mmc_claim_host(host);
807e8e40 1930 host->card = NULL;
7ea239d9
PO
1931err:
1932 mmc_detach_bus(host);
7ea239d9 1933
a3c76eb9 1934 pr_err("%s: error %d whilst initialising MMC card\n",
109b5bed
PO
1935 mmc_hostname(host), err);
1936
adf66a0d 1937 return err;
7ea239d9 1938}