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