111
static void mmc_set_erase_size(struct mmc_card *card)
113
if (card->ext_csd.erase_group_def & 1)
114
card->erase_size = card->ext_csd.hc_erase_size;
116
card->erase_size = card->csd.erase_size;
118
mmc_init_erase(card);
111
122
* Given a 128-bit response, decode to our card CSD structure.
113
124
static int mmc_decode_csd(struct mmc_card *card)
115
126
struct mmc_csd *csd = &card->csd;
116
unsigned int e, m, csd_struct;
127
unsigned int e, m, a, b;
117
128
u32 *resp = card->raw_csd;
120
131
* We only understand CSD structure v1.1 and v1.2.
121
132
* v1.2 has extra information in bits 15, 11 and 10.
133
* We also support eMMC v4.4 & v4.41.
123
csd_struct = UNSTUFF_BITS(resp, 126, 2);
124
if (csd_struct != 1 && csd_struct != 2) {
135
csd->structure = UNSTUFF_BITS(resp, 126, 2);
136
if (csd->structure == 0) {
125
137
printk(KERN_ERR "%s: unrecognised CSD structure version %d\n",
126
mmc_hostname(card->host), csd_struct);
138
mmc_hostname(card->host), csd->structure);
150
162
csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
151
163
csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
165
if (csd->write_blkbits >= 9) {
166
a = UNSTUFF_BITS(resp, 42, 5);
167
b = UNSTUFF_BITS(resp, 37, 5);
168
csd->erase_size = (a + 1) * (b + 1);
169
csd->erase_size <<= csd->write_blkbits - 9;
228
/* Version is coded in the CSD_STRUCTURE byte in the EXT_CSD register */
229
if (card->csd.structure == 3) {
230
int ext_csd_struct = ext_csd[EXT_CSD_STRUCTURE];
231
if (ext_csd_struct > 2) {
232
printk(KERN_ERR "%s: unrecognised EXT_CSD structure "
233
"version %d\n", mmc_hostname(card->host),
209
240
card->ext_csd.rev = ext_csd[EXT_CSD_REV];
210
if (card->ext_csd.rev > 3) {
211
printk(KERN_ERR "%s: unrecognised EXT_CSD structure "
212
"version %d\n", mmc_hostname(card->host),
241
if (card->ext_csd.rev > 5) {
242
printk(KERN_ERR "%s: unrecognised EXT_CSD revision %d\n",
243
mmc_hostname(card->host), card->ext_csd.rev);
221
251
ext_csd[EXT_CSD_SEC_CNT + 1] << 8 |
222
252
ext_csd[EXT_CSD_SEC_CNT + 2] << 16 |
223
253
ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
224
if (card->ext_csd.sectors)
255
/* Cards with density > 2GiB are sector addressed */
256
if (card->ext_csd.sectors > (2u * 1024 * 1024 * 1024) / 512)
225
257
mmc_card_set_blockaddr(card);
228
switch (ext_csd[EXT_CSD_CARD_TYPE]) {
260
switch (ext_csd[EXT_CSD_CARD_TYPE] & EXT_CSD_CARD_TYPE_MASK) {
261
case EXT_CSD_CARD_TYPE_DDR_52 | EXT_CSD_CARD_TYPE_52 |
262
EXT_CSD_CARD_TYPE_26:
263
card->ext_csd.hs_max_dtr = 52000000;
264
card->ext_csd.card_type = EXT_CSD_CARD_TYPE_DDR_52;
266
case EXT_CSD_CARD_TYPE_DDR_1_2V | EXT_CSD_CARD_TYPE_52 |
267
EXT_CSD_CARD_TYPE_26:
268
card->ext_csd.hs_max_dtr = 52000000;
269
card->ext_csd.card_type = EXT_CSD_CARD_TYPE_DDR_1_2V;
271
case EXT_CSD_CARD_TYPE_DDR_1_8V | EXT_CSD_CARD_TYPE_52 |
272
EXT_CSD_CARD_TYPE_26:
273
card->ext_csd.hs_max_dtr = 52000000;
274
card->ext_csd.card_type = EXT_CSD_CARD_TYPE_DDR_1_8V;
229
276
case EXT_CSD_CARD_TYPE_52 | EXT_CSD_CARD_TYPE_26:
230
277
card->ext_csd.hs_max_dtr = 52000000;
247
293
if (sa_shift > 0 && sa_shift <= 0x17)
248
294
card->ext_csd.sa_timeout =
249
295
1 << ext_csd[EXT_CSD_S_A_TIMEOUT];
296
card->ext_csd.erase_group_def =
297
ext_csd[EXT_CSD_ERASE_GROUP_DEF];
298
card->ext_csd.hc_erase_timeout = 300 *
299
ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
300
card->ext_csd.hc_erase_size =
301
ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] << 10;
304
if (card->ext_csd.rev >= 4) {
305
card->ext_csd.sec_trim_mult =
306
ext_csd[EXT_CSD_SEC_TRIM_MULT];
307
card->ext_csd.sec_erase_mult =
308
ext_csd[EXT_CSD_SEC_ERASE_MULT];
309
card->ext_csd.sec_feature_support =
310
ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
311
card->ext_csd.trim_timeout = 300 *
312
ext_csd[EXT_CSD_TRIM_MULT];
315
if (ext_csd[EXT_CSD_ERASED_MEM_CONT])
316
card->erased_byte = 0xFF;
318
card->erased_byte = 0x0;
260
328
MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
261
329
card->raw_csd[2], card->raw_csd[3]);
262
330
MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
331
MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
332
MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
263
333
MMC_DEV_ATTR(fwrev, "0x%x\n", card->cid.fwrev);
264
334
MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
265
335
MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
444
518
mmc_set_clock(host, max_dtr);
447
* Activate wide bus (if supported).
521
* Indicate DDR mode (if supported).
523
if (mmc_card_highspeed(card)) {
524
if ((card->ext_csd.card_type & EXT_CSD_CARD_TYPE_DDR_1_8V)
525
&& (host->caps & (MMC_CAP_1_8V_DDR)))
526
ddr = MMC_1_8V_DDR_MODE;
527
else if ((card->ext_csd.card_type & EXT_CSD_CARD_TYPE_DDR_1_2V)
528
&& (host->caps & (MMC_CAP_1_2V_DDR)))
529
ddr = MMC_1_2V_DDR_MODE;
533
* Activate wide bus and DDR (if supported).
449
535
if ((card->csd.mmca_vsn >= CSD_SPEC_VER_4) &&
450
536
(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA))) {
451
unsigned ext_csd_bit, bus_width;
453
if (host->caps & MMC_CAP_8_BIT_DATA) {
454
ext_csd_bit = EXT_CSD_BUS_WIDTH_8;
455
bus_width = MMC_BUS_WIDTH_8;
457
ext_csd_bit = EXT_CSD_BUS_WIDTH_4;
458
bus_width = MMC_BUS_WIDTH_4;
461
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
462
EXT_CSD_BUS_WIDTH, ext_csd_bit);
464
if (err && err != -EBADMSG)
537
static unsigned ext_csd_bits[][2] = {
538
{ EXT_CSD_BUS_WIDTH_8, EXT_CSD_DDR_BUS_WIDTH_8 },
539
{ EXT_CSD_BUS_WIDTH_4, EXT_CSD_DDR_BUS_WIDTH_4 },
540
{ EXT_CSD_BUS_WIDTH_1, EXT_CSD_BUS_WIDTH_1 },
542
static unsigned bus_widths[] = {
547
unsigned idx, bus_width = 0;
549
if (host->caps & MMC_CAP_8_BIT_DATA)
553
for (; idx < ARRAY_SIZE(bus_widths); idx++) {
554
bus_width = bus_widths[idx];
555
if (bus_width == MMC_BUS_WIDTH_1)
556
ddr = 0; /* no DDR for 1-bit width */
557
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
559
ext_csd_bits[idx][0]);
561
mmc_set_bus_width_ddr(card->host,
562
bus_width, MMC_SDR_MODE);
564
* If controller can't handle bus width test,
565
* use the highest bus width to maintain
566
* compatibility with previous MMC behavior.
568
if (!(host->caps & MMC_CAP_BUS_WIDTH_TEST))
570
err = mmc_bus_test(card, bus_width);
577
err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
579
ext_csd_bits[idx][1]);
582
printk(KERN_WARNING "%s: switch to bus width %d ddr %d "
583
"failed\n", mmc_hostname(card->host),
584
1 << bus_width, ddr);
468
printk(KERN_WARNING "%s: switch to bus width %d "
469
"failed\n", mmc_hostname(card->host),
473
mmc_set_bus_width(card->host, bus_width);
587
mmc_card_set_ddr_mode(card);
588
mmc_set_bus_width_ddr(card->host, bus_width, ddr);
646
746
const struct mmc_bus_ops *bus_ops;
648
if (host->caps & MMC_CAP_NONREMOVABLE)
748
if (!mmc_card_is_removable(host))
649
749
bus_ops = &mmc_ops_unsafe;
651
751
bus_ops = &mmc_ops;
652
752
mmc_attach_bus(host, bus_ops);
658
756
* Starting point for MMC card init.
660
int mmc_attach_mmc(struct mmc_host *host, u32 ocr)
758
int mmc_attach_mmc(struct mmc_host *host)
665
764
WARN_ON(!host->claimed);
766
err = mmc_send_op_cond(host, 0, &ocr);
667
770
mmc_attach_bus_ops(host);
771
if (host->ocr_avail_mmc)
772
host->ocr_avail = host->ocr_avail_mmc;
670
775
* We need to get OCR a different way for SPI.