0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/err.h>
0011 #include <linux/of.h>
0012 #include <linux/slab.h>
0013 #include <linux/stat.h>
0014 #include <linux/pm_runtime.h>
0015 #include <linux/random.h>
0016 #include <linux/sysfs.h>
0017
0018 #include <linux/mmc/host.h>
0019 #include <linux/mmc/card.h>
0020 #include <linux/mmc/mmc.h>
0021
0022 #include "core.h"
0023 #include "card.h"
0024 #include "host.h"
0025 #include "bus.h"
0026 #include "mmc_ops.h"
0027 #include "quirks.h"
0028 #include "sd_ops.h"
0029 #include "pwrseq.h"
0030
0031 #define DEFAULT_CMD6_TIMEOUT_MS 500
0032 #define MIN_CACHE_EN_TIMEOUT_MS 1600
0033 #define CACHE_FLUSH_TIMEOUT_MS 30000
0034
0035 static const unsigned int tran_exp[] = {
0036 10000, 100000, 1000000, 10000000,
0037 0, 0, 0, 0
0038 };
0039
0040 static const unsigned char tran_mant[] = {
0041 0, 10, 12, 13, 15, 20, 25, 30,
0042 35, 40, 45, 50, 55, 60, 70, 80,
0043 };
0044
0045 static const unsigned int taac_exp[] = {
0046 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000,
0047 };
0048
0049 static const unsigned int taac_mant[] = {
0050 0, 10, 12, 13, 15, 20, 25, 30,
0051 35, 40, 45, 50, 55, 60, 70, 80,
0052 };
0053
0054 #define UNSTUFF_BITS(resp,start,size) \
0055 ({ \
0056 const int __size = size; \
0057 const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
0058 const int __off = 3 - ((start) / 32); \
0059 const int __shft = (start) & 31; \
0060 u32 __res; \
0061 \
0062 __res = resp[__off] >> __shft; \
0063 if (__size + __shft > 32) \
0064 __res |= resp[__off-1] << ((32 - __shft) % 32); \
0065 __res & __mask; \
0066 })
0067
0068
0069
0070
0071 static int mmc_decode_cid(struct mmc_card *card)
0072 {
0073 u32 *resp = card->raw_cid;
0074
0075
0076
0077
0078
0079 add_device_randomness(&card->raw_cid, sizeof(card->raw_cid));
0080
0081
0082
0083
0084
0085 switch (card->csd.mmca_vsn) {
0086 case 0:
0087 case 1:
0088 card->cid.manfid = UNSTUFF_BITS(resp, 104, 24);
0089 card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
0090 card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
0091 card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
0092 card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
0093 card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
0094 card->cid.prod_name[5] = UNSTUFF_BITS(resp, 56, 8);
0095 card->cid.prod_name[6] = UNSTUFF_BITS(resp, 48, 8);
0096 card->cid.hwrev = UNSTUFF_BITS(resp, 44, 4);
0097 card->cid.fwrev = UNSTUFF_BITS(resp, 40, 4);
0098 card->cid.serial = UNSTUFF_BITS(resp, 16, 24);
0099 card->cid.month = UNSTUFF_BITS(resp, 12, 4);
0100 card->cid.year = UNSTUFF_BITS(resp, 8, 4) + 1997;
0101 break;
0102
0103 case 2:
0104 case 3:
0105 case 4:
0106 card->cid.manfid = UNSTUFF_BITS(resp, 120, 8);
0107 card->cid.oemid = UNSTUFF_BITS(resp, 104, 16);
0108 card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8);
0109 card->cid.prod_name[1] = UNSTUFF_BITS(resp, 88, 8);
0110 card->cid.prod_name[2] = UNSTUFF_BITS(resp, 80, 8);
0111 card->cid.prod_name[3] = UNSTUFF_BITS(resp, 72, 8);
0112 card->cid.prod_name[4] = UNSTUFF_BITS(resp, 64, 8);
0113 card->cid.prod_name[5] = UNSTUFF_BITS(resp, 56, 8);
0114 card->cid.prv = UNSTUFF_BITS(resp, 48, 8);
0115 card->cid.serial = UNSTUFF_BITS(resp, 16, 32);
0116 card->cid.month = UNSTUFF_BITS(resp, 12, 4);
0117 card->cid.year = UNSTUFF_BITS(resp, 8, 4) + 1997;
0118 break;
0119
0120 default:
0121 pr_err("%s: card has unknown MMCA version %d\n",
0122 mmc_hostname(card->host), card->csd.mmca_vsn);
0123 return -EINVAL;
0124 }
0125
0126 return 0;
0127 }
0128
0129 static void mmc_set_erase_size(struct mmc_card *card)
0130 {
0131 if (card->ext_csd.erase_group_def & 1)
0132 card->erase_size = card->ext_csd.hc_erase_size;
0133 else
0134 card->erase_size = card->csd.erase_size;
0135
0136 mmc_init_erase(card);
0137 }
0138
0139
0140
0141
0142 static int mmc_decode_csd(struct mmc_card *card)
0143 {
0144 struct mmc_csd *csd = &card->csd;
0145 unsigned int e, m, a, b;
0146 u32 *resp = card->raw_csd;
0147
0148
0149
0150
0151
0152
0153 csd->structure = UNSTUFF_BITS(resp, 126, 2);
0154 if (csd->structure == 0) {
0155 pr_err("%s: unrecognised CSD structure version %d\n",
0156 mmc_hostname(card->host), csd->structure);
0157 return -EINVAL;
0158 }
0159
0160 csd->mmca_vsn = UNSTUFF_BITS(resp, 122, 4);
0161 m = UNSTUFF_BITS(resp, 115, 4);
0162 e = UNSTUFF_BITS(resp, 112, 3);
0163 csd->taac_ns = (taac_exp[e] * taac_mant[m] + 9) / 10;
0164 csd->taac_clks = UNSTUFF_BITS(resp, 104, 8) * 100;
0165
0166 m = UNSTUFF_BITS(resp, 99, 4);
0167 e = UNSTUFF_BITS(resp, 96, 3);
0168 csd->max_dtr = tran_exp[e] * tran_mant[m];
0169 csd->cmdclass = UNSTUFF_BITS(resp, 84, 12);
0170
0171 e = UNSTUFF_BITS(resp, 47, 3);
0172 m = UNSTUFF_BITS(resp, 62, 12);
0173 csd->capacity = (1 + m) << (e + 2);
0174
0175 csd->read_blkbits = UNSTUFF_BITS(resp, 80, 4);
0176 csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
0177 csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
0178 csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
0179 csd->dsr_imp = UNSTUFF_BITS(resp, 76, 1);
0180 csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
0181 csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
0182 csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
0183
0184 if (csd->write_blkbits >= 9) {
0185 a = UNSTUFF_BITS(resp, 42, 5);
0186 b = UNSTUFF_BITS(resp, 37, 5);
0187 csd->erase_size = (a + 1) * (b + 1);
0188 csd->erase_size <<= csd->write_blkbits - 9;
0189 }
0190
0191 return 0;
0192 }
0193
0194 static void mmc_select_card_type(struct mmc_card *card)
0195 {
0196 struct mmc_host *host = card->host;
0197 u8 card_type = card->ext_csd.raw_card_type;
0198 u32 caps = host->caps, caps2 = host->caps2;
0199 unsigned int hs_max_dtr = 0, hs200_max_dtr = 0;
0200 unsigned int avail_type = 0;
0201
0202 if (caps & MMC_CAP_MMC_HIGHSPEED &&
0203 card_type & EXT_CSD_CARD_TYPE_HS_26) {
0204 hs_max_dtr = MMC_HIGH_26_MAX_DTR;
0205 avail_type |= EXT_CSD_CARD_TYPE_HS_26;
0206 }
0207
0208 if (caps & MMC_CAP_MMC_HIGHSPEED &&
0209 card_type & EXT_CSD_CARD_TYPE_HS_52) {
0210 hs_max_dtr = MMC_HIGH_52_MAX_DTR;
0211 avail_type |= EXT_CSD_CARD_TYPE_HS_52;
0212 }
0213
0214 if (caps & (MMC_CAP_1_8V_DDR | MMC_CAP_3_3V_DDR) &&
0215 card_type & EXT_CSD_CARD_TYPE_DDR_1_8V) {
0216 hs_max_dtr = MMC_HIGH_DDR_MAX_DTR;
0217 avail_type |= EXT_CSD_CARD_TYPE_DDR_1_8V;
0218 }
0219
0220 if (caps & MMC_CAP_1_2V_DDR &&
0221 card_type & EXT_CSD_CARD_TYPE_DDR_1_2V) {
0222 hs_max_dtr = MMC_HIGH_DDR_MAX_DTR;
0223 avail_type |= EXT_CSD_CARD_TYPE_DDR_1_2V;
0224 }
0225
0226 if (caps2 & MMC_CAP2_HS200_1_8V_SDR &&
0227 card_type & EXT_CSD_CARD_TYPE_HS200_1_8V) {
0228 hs200_max_dtr = MMC_HS200_MAX_DTR;
0229 avail_type |= EXT_CSD_CARD_TYPE_HS200_1_8V;
0230 }
0231
0232 if (caps2 & MMC_CAP2_HS200_1_2V_SDR &&
0233 card_type & EXT_CSD_CARD_TYPE_HS200_1_2V) {
0234 hs200_max_dtr = MMC_HS200_MAX_DTR;
0235 avail_type |= EXT_CSD_CARD_TYPE_HS200_1_2V;
0236 }
0237
0238 if (caps2 & MMC_CAP2_HS400_1_8V &&
0239 card_type & EXT_CSD_CARD_TYPE_HS400_1_8V) {
0240 hs200_max_dtr = MMC_HS200_MAX_DTR;
0241 avail_type |= EXT_CSD_CARD_TYPE_HS400_1_8V;
0242 }
0243
0244 if (caps2 & MMC_CAP2_HS400_1_2V &&
0245 card_type & EXT_CSD_CARD_TYPE_HS400_1_2V) {
0246 hs200_max_dtr = MMC_HS200_MAX_DTR;
0247 avail_type |= EXT_CSD_CARD_TYPE_HS400_1_2V;
0248 }
0249
0250 if ((caps2 & MMC_CAP2_HS400_ES) &&
0251 card->ext_csd.strobe_support &&
0252 (avail_type & EXT_CSD_CARD_TYPE_HS400))
0253 avail_type |= EXT_CSD_CARD_TYPE_HS400ES;
0254
0255 card->ext_csd.hs_max_dtr = hs_max_dtr;
0256 card->ext_csd.hs200_max_dtr = hs200_max_dtr;
0257 card->mmc_avail_type = avail_type;
0258 }
0259
0260 static void mmc_manage_enhanced_area(struct mmc_card *card, u8 *ext_csd)
0261 {
0262 u8 hc_erase_grp_sz, hc_wp_grp_sz;
0263
0264
0265
0266
0267 card->ext_csd.enhanced_area_offset = -EINVAL;
0268 card->ext_csd.enhanced_area_size = -EINVAL;
0269
0270
0271
0272
0273
0274
0275 if ((ext_csd[EXT_CSD_PARTITION_SUPPORT] & 0x2) &&
0276 (ext_csd[EXT_CSD_PARTITION_ATTRIBUTE] & 0x1)) {
0277 if (card->ext_csd.partition_setting_completed) {
0278 hc_erase_grp_sz =
0279 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
0280 hc_wp_grp_sz =
0281 ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
0282
0283
0284
0285
0286 card->ext_csd.enhanced_area_offset =
0287 (((unsigned long long)ext_csd[139]) << 24) +
0288 (((unsigned long long)ext_csd[138]) << 16) +
0289 (((unsigned long long)ext_csd[137]) << 8) +
0290 (((unsigned long long)ext_csd[136]));
0291 if (mmc_card_blockaddr(card))
0292 card->ext_csd.enhanced_area_offset <<= 9;
0293
0294
0295
0296 card->ext_csd.enhanced_area_size =
0297 (ext_csd[142] << 16) + (ext_csd[141] << 8) +
0298 ext_csd[140];
0299 card->ext_csd.enhanced_area_size *=
0300 (size_t)(hc_erase_grp_sz * hc_wp_grp_sz);
0301 card->ext_csd.enhanced_area_size <<= 9;
0302 } else {
0303 pr_warn("%s: defines enhanced area without partition setting complete\n",
0304 mmc_hostname(card->host));
0305 }
0306 }
0307 }
0308
0309 static void mmc_part_add(struct mmc_card *card, u64 size,
0310 unsigned int part_cfg, char *name, int idx, bool ro,
0311 int area_type)
0312 {
0313 card->part[card->nr_parts].size = size;
0314 card->part[card->nr_parts].part_cfg = part_cfg;
0315 sprintf(card->part[card->nr_parts].name, name, idx);
0316 card->part[card->nr_parts].force_ro = ro;
0317 card->part[card->nr_parts].area_type = area_type;
0318 card->nr_parts++;
0319 }
0320
0321 static void mmc_manage_gp_partitions(struct mmc_card *card, u8 *ext_csd)
0322 {
0323 int idx;
0324 u8 hc_erase_grp_sz, hc_wp_grp_sz;
0325 u64 part_size;
0326
0327
0328
0329
0330
0331
0332 if (ext_csd[EXT_CSD_PARTITION_SUPPORT] &
0333 EXT_CSD_PART_SUPPORT_PART_EN) {
0334 hc_erase_grp_sz =
0335 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
0336 hc_wp_grp_sz =
0337 ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
0338
0339 for (idx = 0; idx < MMC_NUM_GP_PARTITION; idx++) {
0340 if (!ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3] &&
0341 !ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 1] &&
0342 !ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 2])
0343 continue;
0344 if (card->ext_csd.partition_setting_completed == 0) {
0345 pr_warn("%s: has partition size defined without partition complete\n",
0346 mmc_hostname(card->host));
0347 break;
0348 }
0349 part_size =
0350 (ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 2]
0351 << 16) +
0352 (ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3 + 1]
0353 << 8) +
0354 ext_csd[EXT_CSD_GP_SIZE_MULT + idx * 3];
0355 part_size *= (hc_erase_grp_sz * hc_wp_grp_sz);
0356 mmc_part_add(card, part_size << 19,
0357 EXT_CSD_PART_CONFIG_ACC_GP0 + idx,
0358 "gp%d", idx, false,
0359 MMC_BLK_DATA_AREA_GP);
0360 }
0361 }
0362 }
0363
0364
0365 #define MMC_MIN_PART_SWITCH_TIME 300
0366
0367
0368
0369
0370 static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)
0371 {
0372 int err = 0, idx;
0373 u64 part_size;
0374 struct device_node *np;
0375 bool broken_hpi = false;
0376
0377
0378 card->ext_csd.raw_ext_csd_structure = ext_csd[EXT_CSD_STRUCTURE];
0379 if (card->csd.structure == 3) {
0380 if (card->ext_csd.raw_ext_csd_structure > 2) {
0381 pr_err("%s: unrecognised EXT_CSD structure "
0382 "version %d\n", mmc_hostname(card->host),
0383 card->ext_csd.raw_ext_csd_structure);
0384 err = -EINVAL;
0385 goto out;
0386 }
0387 }
0388
0389 np = mmc_of_find_child_device(card->host, 0);
0390 if (np && of_device_is_compatible(np, "mmc-card"))
0391 broken_hpi = of_property_read_bool(np, "broken-hpi");
0392 of_node_put(np);
0393
0394
0395
0396
0397
0398
0399 card->ext_csd.rev = ext_csd[EXT_CSD_REV];
0400
0401
0402 mmc_fixup_device(card, mmc_ext_csd_fixups);
0403
0404 card->ext_csd.raw_sectors[0] = ext_csd[EXT_CSD_SEC_CNT + 0];
0405 card->ext_csd.raw_sectors[1] = ext_csd[EXT_CSD_SEC_CNT + 1];
0406 card->ext_csd.raw_sectors[2] = ext_csd[EXT_CSD_SEC_CNT + 2];
0407 card->ext_csd.raw_sectors[3] = ext_csd[EXT_CSD_SEC_CNT + 3];
0408 if (card->ext_csd.rev >= 2) {
0409 card->ext_csd.sectors =
0410 ext_csd[EXT_CSD_SEC_CNT + 0] << 0 |
0411 ext_csd[EXT_CSD_SEC_CNT + 1] << 8 |
0412 ext_csd[EXT_CSD_SEC_CNT + 2] << 16 |
0413 ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
0414
0415
0416 if (card->ext_csd.sectors > (2u * 1024 * 1024 * 1024) / 512)
0417 mmc_card_set_blockaddr(card);
0418 }
0419
0420 card->ext_csd.strobe_support = ext_csd[EXT_CSD_STROBE_SUPPORT];
0421 card->ext_csd.raw_card_type = ext_csd[EXT_CSD_CARD_TYPE];
0422 mmc_select_card_type(card);
0423
0424 card->ext_csd.raw_s_a_timeout = ext_csd[EXT_CSD_S_A_TIMEOUT];
0425 card->ext_csd.raw_erase_timeout_mult =
0426 ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
0427 card->ext_csd.raw_hc_erase_grp_size =
0428 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
0429 card->ext_csd.raw_boot_mult =
0430 ext_csd[EXT_CSD_BOOT_MULT];
0431 if (card->ext_csd.rev >= 3) {
0432 u8 sa_shift = ext_csd[EXT_CSD_S_A_TIMEOUT];
0433 card->ext_csd.part_config = ext_csd[EXT_CSD_PART_CONFIG];
0434
0435
0436 card->ext_csd.part_time = 10 * ext_csd[EXT_CSD_PART_SWITCH_TIME];
0437
0438
0439 if (sa_shift > 0 && sa_shift <= 0x17)
0440 card->ext_csd.sa_timeout =
0441 1 << ext_csd[EXT_CSD_S_A_TIMEOUT];
0442 card->ext_csd.erase_group_def =
0443 ext_csd[EXT_CSD_ERASE_GROUP_DEF];
0444 card->ext_csd.hc_erase_timeout = 300 *
0445 ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT];
0446 card->ext_csd.hc_erase_size =
0447 ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] << 10;
0448
0449 card->ext_csd.rel_sectors = ext_csd[EXT_CSD_REL_WR_SEC_C];
0450
0451
0452
0453
0454
0455 if (ext_csd[EXT_CSD_BOOT_MULT] && mmc_boot_partition_access(card->host)) {
0456 for (idx = 0; idx < MMC_NUM_BOOT_PARTITION; idx++) {
0457 part_size = ext_csd[EXT_CSD_BOOT_MULT] << 17;
0458 mmc_part_add(card, part_size,
0459 EXT_CSD_PART_CONFIG_ACC_BOOT0 + idx,
0460 "boot%d", idx, true,
0461 MMC_BLK_DATA_AREA_BOOT);
0462 }
0463 }
0464 }
0465
0466 card->ext_csd.raw_hc_erase_gap_size =
0467 ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
0468 card->ext_csd.raw_sec_trim_mult =
0469 ext_csd[EXT_CSD_SEC_TRIM_MULT];
0470 card->ext_csd.raw_sec_erase_mult =
0471 ext_csd[EXT_CSD_SEC_ERASE_MULT];
0472 card->ext_csd.raw_sec_feature_support =
0473 ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
0474 card->ext_csd.raw_trim_mult =
0475 ext_csd[EXT_CSD_TRIM_MULT];
0476 card->ext_csd.raw_partition_support = ext_csd[EXT_CSD_PARTITION_SUPPORT];
0477 card->ext_csd.raw_driver_strength = ext_csd[EXT_CSD_DRIVER_STRENGTH];
0478 if (card->ext_csd.rev >= 4) {
0479 if (ext_csd[EXT_CSD_PARTITION_SETTING_COMPLETED] &
0480 EXT_CSD_PART_SETTING_COMPLETED)
0481 card->ext_csd.partition_setting_completed = 1;
0482 else
0483 card->ext_csd.partition_setting_completed = 0;
0484
0485 mmc_manage_enhanced_area(card, ext_csd);
0486
0487 mmc_manage_gp_partitions(card, ext_csd);
0488
0489 card->ext_csd.sec_trim_mult =
0490 ext_csd[EXT_CSD_SEC_TRIM_MULT];
0491 card->ext_csd.sec_erase_mult =
0492 ext_csd[EXT_CSD_SEC_ERASE_MULT];
0493 card->ext_csd.sec_feature_support =
0494 ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
0495 card->ext_csd.trim_timeout = 300 *
0496 ext_csd[EXT_CSD_TRIM_MULT];
0497
0498
0499
0500
0501
0502
0503 card->ext_csd.boot_ro_lock = ext_csd[EXT_CSD_BOOT_WP];
0504 card->ext_csd.boot_ro_lockable = true;
0505
0506
0507 card->ext_csd.raw_pwr_cl_52_195 =
0508 ext_csd[EXT_CSD_PWR_CL_52_195];
0509 card->ext_csd.raw_pwr_cl_26_195 =
0510 ext_csd[EXT_CSD_PWR_CL_26_195];
0511 card->ext_csd.raw_pwr_cl_52_360 =
0512 ext_csd[EXT_CSD_PWR_CL_52_360];
0513 card->ext_csd.raw_pwr_cl_26_360 =
0514 ext_csd[EXT_CSD_PWR_CL_26_360];
0515 card->ext_csd.raw_pwr_cl_200_195 =
0516 ext_csd[EXT_CSD_PWR_CL_200_195];
0517 card->ext_csd.raw_pwr_cl_200_360 =
0518 ext_csd[EXT_CSD_PWR_CL_200_360];
0519 card->ext_csd.raw_pwr_cl_ddr_52_195 =
0520 ext_csd[EXT_CSD_PWR_CL_DDR_52_195];
0521 card->ext_csd.raw_pwr_cl_ddr_52_360 =
0522 ext_csd[EXT_CSD_PWR_CL_DDR_52_360];
0523 card->ext_csd.raw_pwr_cl_ddr_200_360 =
0524 ext_csd[EXT_CSD_PWR_CL_DDR_200_360];
0525 }
0526
0527 if (card->ext_csd.rev >= 5) {
0528
0529 if (card->cid.year < 2010)
0530 card->cid.year += 16;
0531
0532
0533 if (ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1) {
0534 card->ext_csd.bkops = 1;
0535 card->ext_csd.man_bkops_en =
0536 (ext_csd[EXT_CSD_BKOPS_EN] &
0537 EXT_CSD_MANUAL_BKOPS_MASK);
0538 card->ext_csd.raw_bkops_status =
0539 ext_csd[EXT_CSD_BKOPS_STATUS];
0540 if (card->ext_csd.man_bkops_en)
0541 pr_debug("%s: MAN_BKOPS_EN bit is set\n",
0542 mmc_hostname(card->host));
0543 card->ext_csd.auto_bkops_en =
0544 (ext_csd[EXT_CSD_BKOPS_EN] &
0545 EXT_CSD_AUTO_BKOPS_MASK);
0546 if (card->ext_csd.auto_bkops_en)
0547 pr_debug("%s: AUTO_BKOPS_EN bit is set\n",
0548 mmc_hostname(card->host));
0549 }
0550
0551
0552 if (!mmc_card_broken_hpi(card) &&
0553 !broken_hpi && (ext_csd[EXT_CSD_HPI_FEATURES] & 0x1)) {
0554 card->ext_csd.hpi = 1;
0555 if (ext_csd[EXT_CSD_HPI_FEATURES] & 0x2)
0556 card->ext_csd.hpi_cmd = MMC_STOP_TRANSMISSION;
0557 else
0558 card->ext_csd.hpi_cmd = MMC_SEND_STATUS;
0559
0560
0561
0562
0563 card->ext_csd.out_of_int_time =
0564 ext_csd[EXT_CSD_OUT_OF_INTERRUPT_TIME] * 10;
0565 }
0566
0567 card->ext_csd.rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
0568 card->ext_csd.rst_n_function = ext_csd[EXT_CSD_RST_N_FUNCTION];
0569
0570
0571
0572
0573 card->ext_csd.raw_rpmb_size_mult = ext_csd[EXT_CSD_RPMB_MULT];
0574 if (ext_csd[EXT_CSD_RPMB_MULT] && mmc_host_cmd23(card->host)) {
0575 mmc_part_add(card, ext_csd[EXT_CSD_RPMB_MULT] << 17,
0576 EXT_CSD_PART_CONFIG_ACC_RPMB,
0577 "rpmb", 0, false,
0578 MMC_BLK_DATA_AREA_RPMB);
0579 }
0580 }
0581
0582 card->ext_csd.raw_erased_mem_count = ext_csd[EXT_CSD_ERASED_MEM_CONT];
0583 if (ext_csd[EXT_CSD_ERASED_MEM_CONT])
0584 card->erased_byte = 0xFF;
0585 else
0586 card->erased_byte = 0x0;
0587
0588
0589 card->ext_csd.generic_cmd6_time = DEFAULT_CMD6_TIMEOUT_MS;
0590 if (card->ext_csd.rev >= 6) {
0591 card->ext_csd.feature_support |= MMC_DISCARD_FEATURE;
0592
0593 card->ext_csd.generic_cmd6_time = 10 *
0594 ext_csd[EXT_CSD_GENERIC_CMD6_TIME];
0595 card->ext_csd.power_off_longtime = 10 *
0596 ext_csd[EXT_CSD_POWER_OFF_LONG_TIME];
0597
0598 card->ext_csd.cache_size =
0599 ext_csd[EXT_CSD_CACHE_SIZE + 0] << 0 |
0600 ext_csd[EXT_CSD_CACHE_SIZE + 1] << 8 |
0601 ext_csd[EXT_CSD_CACHE_SIZE + 2] << 16 |
0602 ext_csd[EXT_CSD_CACHE_SIZE + 3] << 24;
0603
0604 if (ext_csd[EXT_CSD_DATA_SECTOR_SIZE] == 1)
0605 card->ext_csd.data_sector_size = 4096;
0606 else
0607 card->ext_csd.data_sector_size = 512;
0608
0609 if ((ext_csd[EXT_CSD_DATA_TAG_SUPPORT] & 1) &&
0610 (ext_csd[EXT_CSD_TAG_UNIT_SIZE] <= 8)) {
0611 card->ext_csd.data_tag_unit_size =
0612 ((unsigned int) 1 << ext_csd[EXT_CSD_TAG_UNIT_SIZE]) *
0613 (card->ext_csd.data_sector_size);
0614 } else {
0615 card->ext_csd.data_tag_unit_size = 0;
0616 }
0617
0618 card->ext_csd.max_packed_writes =
0619 ext_csd[EXT_CSD_MAX_PACKED_WRITES];
0620 card->ext_csd.max_packed_reads =
0621 ext_csd[EXT_CSD_MAX_PACKED_READS];
0622 } else {
0623 card->ext_csd.data_sector_size = 512;
0624 }
0625
0626
0627
0628
0629
0630
0631 if (!card->ext_csd.part_time)
0632 card->ext_csd.part_time = card->ext_csd.generic_cmd6_time;
0633
0634 if (card->ext_csd.part_time < MMC_MIN_PART_SWITCH_TIME)
0635 card->ext_csd.part_time = MMC_MIN_PART_SWITCH_TIME;
0636
0637
0638 if (card->ext_csd.rev >= 7) {
0639 memcpy(card->ext_csd.fwrev, &ext_csd[EXT_CSD_FIRMWARE_VERSION],
0640 MMC_FIRMWARE_LEN);
0641 card->ext_csd.ffu_capable =
0642 (ext_csd[EXT_CSD_SUPPORTED_MODE] & 0x1) &&
0643 !(ext_csd[EXT_CSD_FW_CONFIG] & 0x1);
0644
0645 card->ext_csd.pre_eol_info = ext_csd[EXT_CSD_PRE_EOL_INFO];
0646 card->ext_csd.device_life_time_est_typ_a =
0647 ext_csd[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A];
0648 card->ext_csd.device_life_time_est_typ_b =
0649 ext_csd[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B];
0650 }
0651
0652
0653 if (card->ext_csd.rev >= 8) {
0654 card->ext_csd.cmdq_support = ext_csd[EXT_CSD_CMDQ_SUPPORT] &
0655 EXT_CSD_CMDQ_SUPPORTED;
0656 card->ext_csd.cmdq_depth = (ext_csd[EXT_CSD_CMDQ_DEPTH] &
0657 EXT_CSD_CMDQ_DEPTH_MASK) + 1;
0658
0659 if (card->ext_csd.cmdq_depth <= 2) {
0660 card->ext_csd.cmdq_support = false;
0661 card->ext_csd.cmdq_depth = 0;
0662 }
0663 if (card->ext_csd.cmdq_support) {
0664 pr_debug("%s: Command Queue supported depth %u\n",
0665 mmc_hostname(card->host),
0666 card->ext_csd.cmdq_depth);
0667 }
0668 card->ext_csd.enhanced_rpmb_supported =
0669 (card->ext_csd.rel_param &
0670 EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR);
0671 }
0672 out:
0673 return err;
0674 }
0675
0676 static int mmc_read_ext_csd(struct mmc_card *card)
0677 {
0678 u8 *ext_csd;
0679 int err;
0680
0681 if (!mmc_can_ext_csd(card))
0682 return 0;
0683
0684 err = mmc_get_ext_csd(card, &ext_csd);
0685 if (err) {
0686
0687
0688 if ((err != -EINVAL)
0689 && (err != -ENOSYS)
0690 && (err != -EFAULT))
0691 return err;
0692
0693
0694
0695
0696
0697 if (card->csd.capacity == (4096 * 512)) {
0698 pr_err("%s: unable to read EXT_CSD on a possible high capacity card. Card will be ignored.\n",
0699 mmc_hostname(card->host));
0700 } else {
0701 pr_warn("%s: unable to read EXT_CSD, performance might suffer\n",
0702 mmc_hostname(card->host));
0703 err = 0;
0704 }
0705
0706 return err;
0707 }
0708
0709 err = mmc_decode_ext_csd(card, ext_csd);
0710 kfree(ext_csd);
0711 return err;
0712 }
0713
0714 static int mmc_compare_ext_csds(struct mmc_card *card, unsigned bus_width)
0715 {
0716 u8 *bw_ext_csd;
0717 int err;
0718
0719 if (bus_width == MMC_BUS_WIDTH_1)
0720 return 0;
0721
0722 err = mmc_get_ext_csd(card, &bw_ext_csd);
0723 if (err)
0724 return err;
0725
0726
0727 err = !((card->ext_csd.raw_partition_support ==
0728 bw_ext_csd[EXT_CSD_PARTITION_SUPPORT]) &&
0729 (card->ext_csd.raw_erased_mem_count ==
0730 bw_ext_csd[EXT_CSD_ERASED_MEM_CONT]) &&
0731 (card->ext_csd.rev ==
0732 bw_ext_csd[EXT_CSD_REV]) &&
0733 (card->ext_csd.raw_ext_csd_structure ==
0734 bw_ext_csd[EXT_CSD_STRUCTURE]) &&
0735 (card->ext_csd.raw_card_type ==
0736 bw_ext_csd[EXT_CSD_CARD_TYPE]) &&
0737 (card->ext_csd.raw_s_a_timeout ==
0738 bw_ext_csd[EXT_CSD_S_A_TIMEOUT]) &&
0739 (card->ext_csd.raw_hc_erase_gap_size ==
0740 bw_ext_csd[EXT_CSD_HC_WP_GRP_SIZE]) &&
0741 (card->ext_csd.raw_erase_timeout_mult ==
0742 bw_ext_csd[EXT_CSD_ERASE_TIMEOUT_MULT]) &&
0743 (card->ext_csd.raw_hc_erase_grp_size ==
0744 bw_ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]) &&
0745 (card->ext_csd.raw_sec_trim_mult ==
0746 bw_ext_csd[EXT_CSD_SEC_TRIM_MULT]) &&
0747 (card->ext_csd.raw_sec_erase_mult ==
0748 bw_ext_csd[EXT_CSD_SEC_ERASE_MULT]) &&
0749 (card->ext_csd.raw_sec_feature_support ==
0750 bw_ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT]) &&
0751 (card->ext_csd.raw_trim_mult ==
0752 bw_ext_csd[EXT_CSD_TRIM_MULT]) &&
0753 (card->ext_csd.raw_sectors[0] ==
0754 bw_ext_csd[EXT_CSD_SEC_CNT + 0]) &&
0755 (card->ext_csd.raw_sectors[1] ==
0756 bw_ext_csd[EXT_CSD_SEC_CNT + 1]) &&
0757 (card->ext_csd.raw_sectors[2] ==
0758 bw_ext_csd[EXT_CSD_SEC_CNT + 2]) &&
0759 (card->ext_csd.raw_sectors[3] ==
0760 bw_ext_csd[EXT_CSD_SEC_CNT + 3]) &&
0761 (card->ext_csd.raw_pwr_cl_52_195 ==
0762 bw_ext_csd[EXT_CSD_PWR_CL_52_195]) &&
0763 (card->ext_csd.raw_pwr_cl_26_195 ==
0764 bw_ext_csd[EXT_CSD_PWR_CL_26_195]) &&
0765 (card->ext_csd.raw_pwr_cl_52_360 ==
0766 bw_ext_csd[EXT_CSD_PWR_CL_52_360]) &&
0767 (card->ext_csd.raw_pwr_cl_26_360 ==
0768 bw_ext_csd[EXT_CSD_PWR_CL_26_360]) &&
0769 (card->ext_csd.raw_pwr_cl_200_195 ==
0770 bw_ext_csd[EXT_CSD_PWR_CL_200_195]) &&
0771 (card->ext_csd.raw_pwr_cl_200_360 ==
0772 bw_ext_csd[EXT_CSD_PWR_CL_200_360]) &&
0773 (card->ext_csd.raw_pwr_cl_ddr_52_195 ==
0774 bw_ext_csd[EXT_CSD_PWR_CL_DDR_52_195]) &&
0775 (card->ext_csd.raw_pwr_cl_ddr_52_360 ==
0776 bw_ext_csd[EXT_CSD_PWR_CL_DDR_52_360]) &&
0777 (card->ext_csd.raw_pwr_cl_ddr_200_360 ==
0778 bw_ext_csd[EXT_CSD_PWR_CL_DDR_200_360]));
0779
0780 if (err)
0781 err = -EINVAL;
0782
0783 kfree(bw_ext_csd);
0784 return err;
0785 }
0786
0787 MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1],
0788 card->raw_cid[2], card->raw_cid[3]);
0789 MMC_DEV_ATTR(csd, "%08x%08x%08x%08x\n", card->raw_csd[0], card->raw_csd[1],
0790 card->raw_csd[2], card->raw_csd[3]);
0791 MMC_DEV_ATTR(date, "%02d/%04d\n", card->cid.month, card->cid.year);
0792 MMC_DEV_ATTR(erase_size, "%u\n", card->erase_size << 9);
0793 MMC_DEV_ATTR(preferred_erase_size, "%u\n", card->pref_erase << 9);
0794 MMC_DEV_ATTR(ffu_capable, "%d\n", card->ext_csd.ffu_capable);
0795 MMC_DEV_ATTR(hwrev, "0x%x\n", card->cid.hwrev);
0796 MMC_DEV_ATTR(manfid, "0x%06x\n", card->cid.manfid);
0797 MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
0798 MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
0799 MMC_DEV_ATTR(prv, "0x%x\n", card->cid.prv);
0800 MMC_DEV_ATTR(rev, "0x%x\n", card->ext_csd.rev);
0801 MMC_DEV_ATTR(pre_eol_info, "0x%02x\n", card->ext_csd.pre_eol_info);
0802 MMC_DEV_ATTR(life_time, "0x%02x 0x%02x\n",
0803 card->ext_csd.device_life_time_est_typ_a,
0804 card->ext_csd.device_life_time_est_typ_b);
0805 MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
0806 MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
0807 card->ext_csd.enhanced_area_offset);
0808 MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size);
0809 MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult);
0810 MMC_DEV_ATTR(enhanced_rpmb_supported, "%#x\n",
0811 card->ext_csd.enhanced_rpmb_supported);
0812 MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors);
0813 MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
0814 MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
0815 MMC_DEV_ATTR(cmdq_en, "%d\n", card->ext_csd.cmdq_en);
0816
0817 static ssize_t mmc_fwrev_show(struct device *dev,
0818 struct device_attribute *attr,
0819 char *buf)
0820 {
0821 struct mmc_card *card = mmc_dev_to_card(dev);
0822
0823 if (card->ext_csd.rev < 7)
0824 return sysfs_emit(buf, "0x%x\n", card->cid.fwrev);
0825 else
0826 return sysfs_emit(buf, "0x%*phN\n", MMC_FIRMWARE_LEN,
0827 card->ext_csd.fwrev);
0828 }
0829
0830 static DEVICE_ATTR(fwrev, S_IRUGO, mmc_fwrev_show, NULL);
0831
0832 static ssize_t mmc_dsr_show(struct device *dev,
0833 struct device_attribute *attr,
0834 char *buf)
0835 {
0836 struct mmc_card *card = mmc_dev_to_card(dev);
0837 struct mmc_host *host = card->host;
0838
0839 if (card->csd.dsr_imp && host->dsr_req)
0840 return sysfs_emit(buf, "0x%x\n", host->dsr);
0841 else
0842
0843 return sysfs_emit(buf, "0x%x\n", 0x404);
0844 }
0845
0846 static DEVICE_ATTR(dsr, S_IRUGO, mmc_dsr_show, NULL);
0847
0848 static struct attribute *mmc_std_attrs[] = {
0849 &dev_attr_cid.attr,
0850 &dev_attr_csd.attr,
0851 &dev_attr_date.attr,
0852 &dev_attr_erase_size.attr,
0853 &dev_attr_preferred_erase_size.attr,
0854 &dev_attr_fwrev.attr,
0855 &dev_attr_ffu_capable.attr,
0856 &dev_attr_hwrev.attr,
0857 &dev_attr_manfid.attr,
0858 &dev_attr_name.attr,
0859 &dev_attr_oemid.attr,
0860 &dev_attr_prv.attr,
0861 &dev_attr_rev.attr,
0862 &dev_attr_pre_eol_info.attr,
0863 &dev_attr_life_time.attr,
0864 &dev_attr_serial.attr,
0865 &dev_attr_enhanced_area_offset.attr,
0866 &dev_attr_enhanced_area_size.attr,
0867 &dev_attr_raw_rpmb_size_mult.attr,
0868 &dev_attr_enhanced_rpmb_supported.attr,
0869 &dev_attr_rel_sectors.attr,
0870 &dev_attr_ocr.attr,
0871 &dev_attr_rca.attr,
0872 &dev_attr_dsr.attr,
0873 &dev_attr_cmdq_en.attr,
0874 NULL,
0875 };
0876 ATTRIBUTE_GROUPS(mmc_std);
0877
0878 static struct device_type mmc_type = {
0879 .groups = mmc_std_groups,
0880 };
0881
0882
0883
0884
0885
0886
0887
0888 static int __mmc_select_powerclass(struct mmc_card *card,
0889 unsigned int bus_width)
0890 {
0891 struct mmc_host *host = card->host;
0892 struct mmc_ext_csd *ext_csd = &card->ext_csd;
0893 unsigned int pwrclass_val = 0;
0894 int err = 0;
0895
0896 switch (1 << host->ios.vdd) {
0897 case MMC_VDD_165_195:
0898 if (host->ios.clock <= MMC_HIGH_26_MAX_DTR)
0899 pwrclass_val = ext_csd->raw_pwr_cl_26_195;
0900 else if (host->ios.clock <= MMC_HIGH_52_MAX_DTR)
0901 pwrclass_val = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
0902 ext_csd->raw_pwr_cl_52_195 :
0903 ext_csd->raw_pwr_cl_ddr_52_195;
0904 else if (host->ios.clock <= MMC_HS200_MAX_DTR)
0905 pwrclass_val = ext_csd->raw_pwr_cl_200_195;
0906 break;
0907 case MMC_VDD_27_28:
0908 case MMC_VDD_28_29:
0909 case MMC_VDD_29_30:
0910 case MMC_VDD_30_31:
0911 case MMC_VDD_31_32:
0912 case MMC_VDD_32_33:
0913 case MMC_VDD_33_34:
0914 case MMC_VDD_34_35:
0915 case MMC_VDD_35_36:
0916 if (host->ios.clock <= MMC_HIGH_26_MAX_DTR)
0917 pwrclass_val = ext_csd->raw_pwr_cl_26_360;
0918 else if (host->ios.clock <= MMC_HIGH_52_MAX_DTR)
0919 pwrclass_val = (bus_width <= EXT_CSD_BUS_WIDTH_8) ?
0920 ext_csd->raw_pwr_cl_52_360 :
0921 ext_csd->raw_pwr_cl_ddr_52_360;
0922 else if (host->ios.clock <= MMC_HS200_MAX_DTR)
0923 pwrclass_val = (bus_width == EXT_CSD_DDR_BUS_WIDTH_8) ?
0924 ext_csd->raw_pwr_cl_ddr_200_360 :
0925 ext_csd->raw_pwr_cl_200_360;
0926 break;
0927 default:
0928 pr_warn("%s: Voltage range not supported for power class\n",
0929 mmc_hostname(host));
0930 return -EINVAL;
0931 }
0932
0933 if (bus_width & (EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_BUS_WIDTH_8))
0934 pwrclass_val = (pwrclass_val & EXT_CSD_PWR_CL_8BIT_MASK) >>
0935 EXT_CSD_PWR_CL_8BIT_SHIFT;
0936 else
0937 pwrclass_val = (pwrclass_val & EXT_CSD_PWR_CL_4BIT_MASK) >>
0938 EXT_CSD_PWR_CL_4BIT_SHIFT;
0939
0940
0941 if (pwrclass_val > 0) {
0942 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
0943 EXT_CSD_POWER_CLASS,
0944 pwrclass_val,
0945 card->ext_csd.generic_cmd6_time);
0946 }
0947
0948 return err;
0949 }
0950
0951 static int mmc_select_powerclass(struct mmc_card *card)
0952 {
0953 struct mmc_host *host = card->host;
0954 u32 bus_width, ext_csd_bits;
0955 int err, ddr;
0956
0957
0958 if (!mmc_can_ext_csd(card))
0959 return 0;
0960
0961 bus_width = host->ios.bus_width;
0962
0963 if (bus_width == MMC_BUS_WIDTH_1)
0964 return 0;
0965
0966 ddr = card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_52;
0967 if (ddr)
0968 ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
0969 EXT_CSD_DDR_BUS_WIDTH_8 : EXT_CSD_DDR_BUS_WIDTH_4;
0970 else
0971 ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
0972 EXT_CSD_BUS_WIDTH_8 : EXT_CSD_BUS_WIDTH_4;
0973
0974 err = __mmc_select_powerclass(card, ext_csd_bits);
0975 if (err)
0976 pr_warn("%s: power class selection to bus width %d ddr %d failed\n",
0977 mmc_hostname(host), 1 << bus_width, ddr);
0978
0979 return err;
0980 }
0981
0982
0983
0984
0985 static void mmc_set_bus_speed(struct mmc_card *card)
0986 {
0987 unsigned int max_dtr = (unsigned int)-1;
0988
0989 if ((mmc_card_hs200(card) || mmc_card_hs400(card)) &&
0990 max_dtr > card->ext_csd.hs200_max_dtr)
0991 max_dtr = card->ext_csd.hs200_max_dtr;
0992 else if (mmc_card_hs(card) && max_dtr > card->ext_csd.hs_max_dtr)
0993 max_dtr = card->ext_csd.hs_max_dtr;
0994 else if (max_dtr > card->csd.max_dtr)
0995 max_dtr = card->csd.max_dtr;
0996
0997 mmc_set_clock(card->host, max_dtr);
0998 }
0999
1000
1001
1002
1003
1004
1005 static int mmc_select_bus_width(struct mmc_card *card)
1006 {
1007 static unsigned ext_csd_bits[] = {
1008 EXT_CSD_BUS_WIDTH_8,
1009 EXT_CSD_BUS_WIDTH_4,
1010 };
1011 static unsigned bus_widths[] = {
1012 MMC_BUS_WIDTH_8,
1013 MMC_BUS_WIDTH_4,
1014 };
1015 struct mmc_host *host = card->host;
1016 unsigned idx, bus_width = 0;
1017 int err = 0;
1018
1019 if (!mmc_can_ext_csd(card) ||
1020 !(host->caps & (MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA)))
1021 return 0;
1022
1023 idx = (host->caps & MMC_CAP_8_BIT_DATA) ? 0 : 1;
1024
1025
1026
1027
1028
1029
1030
1031 for (; idx < ARRAY_SIZE(bus_widths); idx++) {
1032
1033
1034
1035
1036
1037
1038
1039 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1040 EXT_CSD_BUS_WIDTH,
1041 ext_csd_bits[idx],
1042 card->ext_csd.generic_cmd6_time);
1043 if (err)
1044 continue;
1045
1046 bus_width = bus_widths[idx];
1047 mmc_set_bus_width(host, bus_width);
1048
1049
1050
1051
1052
1053
1054 if (!(host->caps & MMC_CAP_BUS_WIDTH_TEST))
1055 err = mmc_compare_ext_csds(card, bus_width);
1056 else
1057 err = mmc_bus_test(card, bus_width);
1058
1059 if (!err) {
1060 err = bus_width;
1061 break;
1062 } else {
1063 pr_warn("%s: switch to bus width %d failed\n",
1064 mmc_hostname(host), 1 << bus_width);
1065 }
1066 }
1067
1068 return err;
1069 }
1070
1071
1072
1073
1074 static int mmc_select_hs(struct mmc_card *card)
1075 {
1076 int err;
1077
1078 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1079 EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
1080 card->ext_csd.generic_cmd6_time, MMC_TIMING_MMC_HS,
1081 true, true, MMC_CMD_RETRIES);
1082 if (err)
1083 pr_warn("%s: switch to high-speed failed, err:%d\n",
1084 mmc_hostname(card->host), err);
1085
1086 return err;
1087 }
1088
1089
1090
1091
1092 static int mmc_select_hs_ddr(struct mmc_card *card)
1093 {
1094 struct mmc_host *host = card->host;
1095 u32 bus_width, ext_csd_bits;
1096 int err = 0;
1097
1098 if (!(card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_52))
1099 return 0;
1100
1101 bus_width = host->ios.bus_width;
1102 if (bus_width == MMC_BUS_WIDTH_1)
1103 return 0;
1104
1105 ext_csd_bits = (bus_width == MMC_BUS_WIDTH_8) ?
1106 EXT_CSD_DDR_BUS_WIDTH_8 : EXT_CSD_DDR_BUS_WIDTH_4;
1107
1108 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1109 EXT_CSD_BUS_WIDTH,
1110 ext_csd_bits,
1111 card->ext_csd.generic_cmd6_time,
1112 MMC_TIMING_MMC_DDR52,
1113 true, true, MMC_CMD_RETRIES);
1114 if (err) {
1115 pr_err("%s: switch to bus width %d ddr failed\n",
1116 mmc_hostname(host), 1 << bus_width);
1117 return err;
1118 }
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_2V) {
1146 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
1147 if (!err)
1148 return 0;
1149 }
1150
1151 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_DDR_1_8V &&
1152 host->caps & MMC_CAP_1_8V_DDR)
1153 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1154
1155
1156 if (err)
1157 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330);
1158
1159 return err;
1160 }
1161
1162 static int mmc_select_hs400(struct mmc_card *card)
1163 {
1164 struct mmc_host *host = card->host;
1165 unsigned int max_dtr;
1166 int err = 0;
1167 u8 val;
1168
1169
1170
1171
1172 if (!(card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400 &&
1173 host->ios.bus_width == MMC_BUS_WIDTH_8))
1174 return 0;
1175
1176
1177 val = EXT_CSD_TIMING_HS;
1178 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1179 EXT_CSD_HS_TIMING, val,
1180 card->ext_csd.generic_cmd6_time, 0,
1181 false, true, MMC_CMD_RETRIES);
1182 if (err) {
1183 pr_err("%s: switch to high-speed from hs200 failed, err:%d\n",
1184 mmc_hostname(host), err);
1185 return err;
1186 }
1187
1188
1189 if (host->ops->hs400_downgrade)
1190 host->ops->hs400_downgrade(host);
1191
1192
1193 mmc_set_timing(host, MMC_TIMING_MMC_HS);
1194
1195
1196 max_dtr = card->ext_csd.hs_max_dtr;
1197 mmc_set_clock(host, max_dtr);
1198
1199 err = mmc_switch_status(card, true);
1200 if (err)
1201 goto out_err;
1202
1203 if (host->ops->hs400_prepare_ddr)
1204 host->ops->hs400_prepare_ddr(host);
1205
1206
1207 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1208 EXT_CSD_BUS_WIDTH,
1209 EXT_CSD_DDR_BUS_WIDTH_8,
1210 card->ext_csd.generic_cmd6_time);
1211 if (err) {
1212 pr_err("%s: switch to bus width for hs400 failed, err:%d\n",
1213 mmc_hostname(host), err);
1214 return err;
1215 }
1216
1217
1218 val = EXT_CSD_TIMING_HS400 |
1219 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1220 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1221 EXT_CSD_HS_TIMING, val,
1222 card->ext_csd.generic_cmd6_time, 0,
1223 false, true, MMC_CMD_RETRIES);
1224 if (err) {
1225 pr_err("%s: switch to hs400 failed, err:%d\n",
1226 mmc_hostname(host), err);
1227 return err;
1228 }
1229
1230
1231 mmc_set_timing(host, MMC_TIMING_MMC_HS400);
1232 mmc_set_bus_speed(card);
1233
1234 if (host->ops->execute_hs400_tuning) {
1235 mmc_retune_disable(host);
1236 err = host->ops->execute_hs400_tuning(host, card);
1237 mmc_retune_enable(host);
1238 if (err)
1239 goto out_err;
1240 }
1241
1242 if (host->ops->hs400_complete)
1243 host->ops->hs400_complete(host);
1244
1245 err = mmc_switch_status(card, true);
1246 if (err)
1247 goto out_err;
1248
1249 return 0;
1250
1251 out_err:
1252 pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1253 __func__, err);
1254 return err;
1255 }
1256
1257 int mmc_hs200_to_hs400(struct mmc_card *card)
1258 {
1259 return mmc_select_hs400(card);
1260 }
1261
1262 int mmc_hs400_to_hs200(struct mmc_card *card)
1263 {
1264 struct mmc_host *host = card->host;
1265 unsigned int max_dtr;
1266 int err;
1267 u8 val;
1268
1269
1270 max_dtr = card->ext_csd.hs_max_dtr;
1271 mmc_set_clock(host, max_dtr);
1272
1273
1274 val = EXT_CSD_TIMING_HS;
1275 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
1276 val, card->ext_csd.generic_cmd6_time, 0,
1277 false, true, MMC_CMD_RETRIES);
1278 if (err)
1279 goto out_err;
1280
1281 if (host->ops->hs400_downgrade)
1282 host->ops->hs400_downgrade(host);
1283
1284 mmc_set_timing(host, MMC_TIMING_MMC_DDR52);
1285
1286 err = mmc_switch_status(card, true);
1287 if (err)
1288 goto out_err;
1289
1290
1291 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH,
1292 EXT_CSD_BUS_WIDTH_8, card->ext_csd.generic_cmd6_time,
1293 0, false, true, MMC_CMD_RETRIES);
1294 if (err)
1295 goto out_err;
1296
1297 mmc_set_timing(host, MMC_TIMING_MMC_HS);
1298
1299 err = mmc_switch_status(card, true);
1300 if (err)
1301 goto out_err;
1302
1303
1304 val = EXT_CSD_TIMING_HS200 |
1305 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1306 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING,
1307 val, card->ext_csd.generic_cmd6_time, 0,
1308 false, true, MMC_CMD_RETRIES);
1309 if (err)
1310 goto out_err;
1311
1312 mmc_set_timing(host, MMC_TIMING_MMC_HS200);
1313
1314
1315
1316
1317
1318
1319 err = mmc_switch_status(card, false);
1320 if (err)
1321 goto out_err;
1322
1323 mmc_set_bus_speed(card);
1324
1325
1326 if (host->ops->prepare_hs400_tuning)
1327 host->ops->prepare_hs400_tuning(host, &host->ios);
1328
1329 return 0;
1330
1331 out_err:
1332 pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1333 __func__, err);
1334 return err;
1335 }
1336
1337 static void mmc_select_driver_type(struct mmc_card *card)
1338 {
1339 int card_drv_type, drive_strength, drv_type = 0;
1340 int fixed_drv_type = card->host->fixed_drv_type;
1341
1342 card_drv_type = card->ext_csd.raw_driver_strength |
1343 mmc_driver_type_mask(0);
1344
1345 if (fixed_drv_type >= 0)
1346 drive_strength = card_drv_type & mmc_driver_type_mask(fixed_drv_type)
1347 ? fixed_drv_type : 0;
1348 else
1349 drive_strength = mmc_select_drive_strength(card,
1350 card->ext_csd.hs200_max_dtr,
1351 card_drv_type, &drv_type);
1352
1353 card->drive_strength = drive_strength;
1354
1355 if (drv_type)
1356 mmc_set_driver_type(card->host, drv_type);
1357 }
1358
1359 static int mmc_select_hs400es(struct mmc_card *card)
1360 {
1361 struct mmc_host *host = card->host;
1362 int err = -EINVAL;
1363 u8 val;
1364
1365 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400_1_2V)
1366 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
1367
1368 if (err && card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400_1_8V)
1369 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1370
1371
1372 if (err)
1373 goto out_err;
1374
1375 err = mmc_select_bus_width(card);
1376 if (err != MMC_BUS_WIDTH_8) {
1377 pr_err("%s: switch to 8bit bus width failed, err:%d\n",
1378 mmc_hostname(host), err);
1379 err = err < 0 ? err : -ENOTSUPP;
1380 goto out_err;
1381 }
1382
1383
1384 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1385 EXT_CSD_HS_TIMING, EXT_CSD_TIMING_HS,
1386 card->ext_csd.generic_cmd6_time, 0,
1387 false, true, MMC_CMD_RETRIES);
1388 if (err) {
1389 pr_err("%s: switch to hs for hs400es failed, err:%d\n",
1390 mmc_hostname(host), err);
1391 goto out_err;
1392 }
1393
1394
1395
1396
1397
1398 mmc_set_timing(host, MMC_TIMING_MMC_HS);
1399 mmc_set_bus_speed(card);
1400
1401 err = mmc_switch_status(card, true);
1402 if (err)
1403 goto out_err;
1404
1405
1406 val = EXT_CSD_DDR_BUS_WIDTH_8 | EXT_CSD_BUS_WIDTH_STROBE;
1407 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1408 EXT_CSD_BUS_WIDTH,
1409 val,
1410 card->ext_csd.generic_cmd6_time);
1411 if (err) {
1412 pr_err("%s: switch to bus width for hs400es failed, err:%d\n",
1413 mmc_hostname(host), err);
1414 goto out_err;
1415 }
1416
1417 mmc_select_driver_type(card);
1418
1419
1420 val = EXT_CSD_TIMING_HS400 |
1421 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1422 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1423 EXT_CSD_HS_TIMING, val,
1424 card->ext_csd.generic_cmd6_time, 0,
1425 false, true, MMC_CMD_RETRIES);
1426 if (err) {
1427 pr_err("%s: switch to hs400es failed, err:%d\n",
1428 mmc_hostname(host), err);
1429 goto out_err;
1430 }
1431
1432
1433 mmc_set_timing(host, MMC_TIMING_MMC_HS400);
1434
1435
1436 host->ios.enhanced_strobe = true;
1437 if (host->ops->hs400_enhanced_strobe)
1438 host->ops->hs400_enhanced_strobe(host, &host->ios);
1439
1440 err = mmc_switch_status(card, true);
1441 if (err)
1442 goto out_err;
1443
1444 return 0;
1445
1446 out_err:
1447 pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1448 __func__, err);
1449 return err;
1450 }
1451
1452
1453
1454
1455
1456
1457
1458
1459 static int mmc_select_hs200(struct mmc_card *card)
1460 {
1461 struct mmc_host *host = card->host;
1462 unsigned int old_timing, old_signal_voltage, old_clock;
1463 int err = -EINVAL;
1464 u8 val;
1465
1466 old_signal_voltage = host->ios.signal_voltage;
1467 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_2V)
1468 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_120);
1469
1470 if (err && card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_8V)
1471 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_180);
1472
1473
1474 if (err)
1475 return err;
1476
1477 mmc_select_driver_type(card);
1478
1479
1480
1481
1482
1483 err = mmc_select_bus_width(card);
1484 if (err > 0) {
1485 val = EXT_CSD_TIMING_HS200 |
1486 card->drive_strength << EXT_CSD_DRV_STR_SHIFT;
1487 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1488 EXT_CSD_HS_TIMING, val,
1489 card->ext_csd.generic_cmd6_time, 0,
1490 false, true, MMC_CMD_RETRIES);
1491 if (err)
1492 goto err;
1493
1494
1495
1496
1497
1498
1499
1500 old_timing = host->ios.timing;
1501 old_clock = host->ios.clock;
1502 mmc_set_timing(host, MMC_TIMING_MMC_HS200);
1503 mmc_set_clock(card->host, card->ext_csd.hs_max_dtr);
1504
1505
1506
1507
1508
1509
1510 err = mmc_switch_status(card, false);
1511
1512
1513
1514
1515
1516 if (err == -EBADMSG) {
1517 mmc_set_clock(host, old_clock);
1518 mmc_set_timing(host, old_timing);
1519 }
1520 }
1521 err:
1522 if (err) {
1523
1524 if (mmc_set_signal_voltage(host, old_signal_voltage))
1525 err = -EIO;
1526
1527 pr_err("%s: %s failed, error %d\n", mmc_hostname(card->host),
1528 __func__, err);
1529 }
1530 return err;
1531 }
1532
1533
1534
1535
1536 static int mmc_select_timing(struct mmc_card *card)
1537 {
1538 int err = 0;
1539
1540 if (!mmc_can_ext_csd(card))
1541 goto bus_speed;
1542
1543 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400ES) {
1544 err = mmc_select_hs400es(card);
1545 goto out;
1546 }
1547
1548 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200) {
1549 err = mmc_select_hs200(card);
1550 if (err == -EBADMSG)
1551 card->mmc_avail_type &= ~EXT_CSD_CARD_TYPE_HS200;
1552 else
1553 goto out;
1554 }
1555
1556 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS)
1557 err = mmc_select_hs(card);
1558
1559 out:
1560 if (err && err != -EBADMSG)
1561 return err;
1562
1563 bus_speed:
1564
1565
1566
1567
1568 mmc_set_bus_speed(card);
1569 return 0;
1570 }
1571
1572
1573
1574
1575
1576 static int mmc_hs200_tuning(struct mmc_card *card)
1577 {
1578 struct mmc_host *host = card->host;
1579
1580
1581
1582
1583
1584 if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400 &&
1585 host->ios.bus_width == MMC_BUS_WIDTH_8)
1586 if (host->ops->prepare_hs400_tuning)
1587 host->ops->prepare_hs400_tuning(host, &host->ios);
1588
1589 return mmc_execute_tuning(card);
1590 }
1591
1592
1593
1594
1595
1596
1597
1598 static int mmc_init_card(struct mmc_host *host, u32 ocr,
1599 struct mmc_card *oldcard)
1600 {
1601 struct mmc_card *card;
1602 int err;
1603 u32 cid[4];
1604 u32 rocr;
1605
1606 WARN_ON(!host->claimed);
1607
1608
1609 if (!mmc_host_is_spi(host))
1610 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
1611
1612
1613
1614
1615
1616
1617
1618
1619 mmc_go_idle(host);
1620
1621
1622 err = mmc_send_op_cond(host, ocr | (1 << 30), &rocr);
1623 if (err)
1624 goto err;
1625
1626
1627
1628
1629 if (mmc_host_is_spi(host)) {
1630 err = mmc_spi_set_crc(host, use_spi_crc);
1631 if (err)
1632 goto err;
1633 }
1634
1635
1636
1637
1638 err = mmc_send_cid(host, cid);
1639 if (err)
1640 goto err;
1641
1642 if (oldcard) {
1643 if (memcmp(cid, oldcard->raw_cid, sizeof(cid)) != 0) {
1644 pr_debug("%s: Perhaps the card was replaced\n",
1645 mmc_hostname(host));
1646 err = -ENOENT;
1647 goto err;
1648 }
1649
1650 card = oldcard;
1651 } else {
1652
1653
1654
1655 card = mmc_alloc_card(host, &mmc_type);
1656 if (IS_ERR(card)) {
1657 err = PTR_ERR(card);
1658 goto err;
1659 }
1660
1661 card->ocr = ocr;
1662 card->type = MMC_TYPE_MMC;
1663 card->rca = 1;
1664 memcpy(card->raw_cid, cid, sizeof(card->raw_cid));
1665 }
1666
1667
1668
1669
1670 if (host->ops->init_card)
1671 host->ops->init_card(host, card);
1672
1673
1674
1675
1676 if (!mmc_host_is_spi(host)) {
1677 err = mmc_set_relative_addr(card);
1678 if (err)
1679 goto free_card;
1680
1681 mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
1682 }
1683
1684 if (!oldcard) {
1685
1686
1687
1688 err = mmc_send_csd(card, card->raw_csd);
1689 if (err)
1690 goto free_card;
1691
1692 err = mmc_decode_csd(card);
1693 if (err)
1694 goto free_card;
1695 err = mmc_decode_cid(card);
1696 if (err)
1697 goto free_card;
1698 }
1699
1700
1701
1702
1703
1704 if (card->csd.dsr_imp && host->dsr_req)
1705 mmc_set_dsr(host);
1706
1707
1708
1709
1710 if (!mmc_host_is_spi(host)) {
1711 err = mmc_select_card(card);
1712 if (err)
1713 goto free_card;
1714 }
1715
1716 if (!oldcard) {
1717
1718 err = mmc_read_ext_csd(card);
1719 if (err)
1720 goto free_card;
1721
1722
1723
1724
1725
1726
1727
1728 if (rocr & BIT(30))
1729 mmc_card_set_blockaddr(card);
1730
1731
1732 mmc_set_erase_size(card);
1733 }
1734
1735
1736 if (card->ext_csd.rev >= 3) {
1737 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1738 EXT_CSD_ERASE_GROUP_DEF, 1,
1739 card->ext_csd.generic_cmd6_time);
1740
1741 if (err && err != -EBADMSG)
1742 goto free_card;
1743
1744 if (err) {
1745
1746
1747
1748
1749
1750 card->ext_csd.enhanced_area_offset = -EINVAL;
1751 card->ext_csd.enhanced_area_size = -EINVAL;
1752 } else {
1753 card->ext_csd.erase_group_def = 1;
1754
1755
1756
1757
1758
1759 mmc_set_erase_size(card);
1760 }
1761 }
1762
1763
1764
1765
1766 if (card->ext_csd.part_config & EXT_CSD_PART_CONFIG_ACC_MASK) {
1767 card->ext_csd.part_config &= ~EXT_CSD_PART_CONFIG_ACC_MASK;
1768 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONFIG,
1769 card->ext_csd.part_config,
1770 card->ext_csd.part_time);
1771 if (err && err != -EBADMSG)
1772 goto free_card;
1773 }
1774
1775
1776
1777
1778 if (card->ext_csd.rev >= 6) {
1779 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1780 EXT_CSD_POWER_OFF_NOTIFICATION,
1781 EXT_CSD_POWER_ON,
1782 card->ext_csd.generic_cmd6_time);
1783 if (err && err != -EBADMSG)
1784 goto free_card;
1785
1786
1787
1788
1789
1790 if (!err)
1791 card->ext_csd.power_off_notification = EXT_CSD_POWER_ON;
1792 }
1793
1794
1795 if (mmc_can_discard(card))
1796 card->erase_arg = MMC_DISCARD_ARG;
1797 else if (mmc_can_trim(card))
1798 card->erase_arg = MMC_TRIM_ARG;
1799 else
1800 card->erase_arg = MMC_ERASE_ARG;
1801
1802
1803
1804
1805 err = mmc_select_timing(card);
1806 if (err)
1807 goto free_card;
1808
1809 if (mmc_card_hs200(card)) {
1810 host->doing_init_tune = 1;
1811
1812 err = mmc_hs200_tuning(card);
1813 if (!err)
1814 err = mmc_select_hs400(card);
1815
1816 host->doing_init_tune = 0;
1817
1818 if (err)
1819 goto free_card;
1820
1821 } else if (!mmc_card_hs400es(card)) {
1822
1823 err = mmc_select_bus_width(card);
1824 if (err > 0 && mmc_card_hs(card)) {
1825 err = mmc_select_hs_ddr(card);
1826 if (err)
1827 goto free_card;
1828 }
1829 }
1830
1831
1832
1833
1834 mmc_select_powerclass(card);
1835
1836
1837
1838
1839 if (card->ext_csd.hpi) {
1840 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1841 EXT_CSD_HPI_MGMT, 1,
1842 card->ext_csd.generic_cmd6_time);
1843 if (err && err != -EBADMSG)
1844 goto free_card;
1845 if (err) {
1846 pr_warn("%s: Enabling HPI failed\n",
1847 mmc_hostname(card->host));
1848 card->ext_csd.hpi_en = 0;
1849 } else {
1850 card->ext_csd.hpi_en = 1;
1851 }
1852 }
1853
1854
1855
1856
1857
1858
1859
1860
1861 if (card->ext_csd.cache_size > 0) {
1862 unsigned int timeout_ms = MIN_CACHE_EN_TIMEOUT_MS;
1863
1864 timeout_ms = max(card->ext_csd.generic_cmd6_time, timeout_ms);
1865 err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
1866 EXT_CSD_CACHE_CTRL, 1, timeout_ms);
1867 if (err && err != -EBADMSG)
1868 goto free_card;
1869
1870
1871
1872
1873 if (err) {
1874 pr_warn("%s: Cache is supported, but failed to turn on (%d)\n",
1875 mmc_hostname(card->host), err);
1876 card->ext_csd.cache_ctrl = 0;
1877 } else {
1878 card->ext_csd.cache_ctrl = 1;
1879 }
1880 }
1881
1882
1883
1884
1885
1886 card->ext_csd.cmdq_en = false;
1887 if (card->ext_csd.cmdq_support && host->caps2 & MMC_CAP2_CQE) {
1888 err = mmc_cmdq_enable(card);
1889 if (err && err != -EBADMSG)
1890 goto free_card;
1891 if (err) {
1892 pr_warn("%s: Enabling CMDQ failed\n",
1893 mmc_hostname(card->host));
1894 card->ext_csd.cmdq_support = false;
1895 card->ext_csd.cmdq_depth = 0;
1896 }
1897 }
1898
1899
1900
1901
1902
1903 card->reenable_cmdq = card->ext_csd.cmdq_en;
1904
1905 if (host->cqe_ops && !host->cqe_enabled) {
1906 err = host->cqe_ops->cqe_enable(host, card);
1907 if (!err) {
1908 host->cqe_enabled = true;
1909
1910 if (card->ext_csd.cmdq_en) {
1911 pr_info("%s: Command Queue Engine enabled\n",
1912 mmc_hostname(host));
1913 } else {
1914 host->hsq_enabled = true;
1915 pr_info("%s: Host Software Queue enabled\n",
1916 mmc_hostname(host));
1917 }
1918 }
1919 }
1920
1921 if (host->caps2 & MMC_CAP2_AVOID_3_3V &&
1922 host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
1923 pr_err("%s: Host failed to negotiate down from 3.3V\n",
1924 mmc_hostname(host));
1925 err = -EINVAL;
1926 goto free_card;
1927 }
1928
1929 if (!oldcard)
1930 host->card = card;
1931
1932 return 0;
1933
1934 free_card:
1935 if (!oldcard)
1936 mmc_remove_card(card);
1937 err:
1938 return err;
1939 }
1940
1941 static int mmc_can_sleep(struct mmc_card *card)
1942 {
1943 return card->ext_csd.rev >= 3;
1944 }
1945
1946 static int mmc_sleep_busy_cb(void *cb_data, bool *busy)
1947 {
1948 struct mmc_host *host = cb_data;
1949
1950 *busy = host->ops->card_busy(host);
1951 return 0;
1952 }
1953
1954 static int mmc_sleep(struct mmc_host *host)
1955 {
1956 struct mmc_command cmd = {};
1957 struct mmc_card *card = host->card;
1958 unsigned int timeout_ms = DIV_ROUND_UP(card->ext_csd.sa_timeout, 10000);
1959 bool use_r1b_resp;
1960 int err;
1961
1962
1963 mmc_retune_hold(host);
1964
1965 err = mmc_deselect_cards(host);
1966 if (err)
1967 goto out_release;
1968
1969 cmd.opcode = MMC_SLEEP_AWAKE;
1970 cmd.arg = card->rca << 16;
1971 cmd.arg |= 1 << 15;
1972 use_r1b_resp = mmc_prepare_busy_cmd(host, &cmd, timeout_ms);
1973
1974 err = mmc_wait_for_cmd(host, &cmd, 0);
1975 if (err)
1976 goto out_release;
1977
1978
1979
1980
1981
1982
1983
1984 if (host->caps & MMC_CAP_WAIT_WHILE_BUSY && use_r1b_resp)
1985 goto out_release;
1986
1987 if (!host->ops->card_busy) {
1988 mmc_delay(timeout_ms);
1989 goto out_release;
1990 }
1991
1992 err = __mmc_poll_for_busy(host, 0, timeout_ms, &mmc_sleep_busy_cb, host);
1993
1994 out_release:
1995 mmc_retune_release(host);
1996 return err;
1997 }
1998
1999 static int mmc_can_poweroff_notify(const struct mmc_card *card)
2000 {
2001 return card &&
2002 mmc_card_mmc(card) &&
2003 (card->ext_csd.power_off_notification == EXT_CSD_POWER_ON);
2004 }
2005
2006 static int mmc_poweroff_notify(struct mmc_card *card, unsigned int notify_type)
2007 {
2008 unsigned int timeout = card->ext_csd.generic_cmd6_time;
2009 int err;
2010
2011
2012 if (notify_type == EXT_CSD_POWER_OFF_LONG)
2013 timeout = card->ext_csd.power_off_longtime;
2014
2015 err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
2016 EXT_CSD_POWER_OFF_NOTIFICATION,
2017 notify_type, timeout, 0, false, false, MMC_CMD_RETRIES);
2018 if (err)
2019 pr_err("%s: Power Off Notification timed out, %u\n",
2020 mmc_hostname(card->host), timeout);
2021
2022
2023 card->ext_csd.power_off_notification = EXT_CSD_NO_POWER_NOTIFICATION;
2024
2025 return err;
2026 }
2027
2028
2029
2030
2031 static void mmc_remove(struct mmc_host *host)
2032 {
2033 mmc_remove_card(host->card);
2034 host->card = NULL;
2035 }
2036
2037
2038
2039
2040 static int mmc_alive(struct mmc_host *host)
2041 {
2042 return mmc_send_status(host->card, NULL);
2043 }
2044
2045
2046
2047
2048 static void mmc_detect(struct mmc_host *host)
2049 {
2050 int err;
2051
2052 mmc_get_card(host->card, NULL);
2053
2054
2055
2056
2057 err = _mmc_detect_card_removed(host);
2058
2059 mmc_put_card(host->card, NULL);
2060
2061 if (err) {
2062 mmc_remove(host);
2063
2064 mmc_claim_host(host);
2065 mmc_detach_bus(host);
2066 mmc_power_off(host);
2067 mmc_release_host(host);
2068 }
2069 }
2070
2071 static bool _mmc_cache_enabled(struct mmc_host *host)
2072 {
2073 return host->card->ext_csd.cache_size > 0 &&
2074 host->card->ext_csd.cache_ctrl & 1;
2075 }
2076
2077
2078
2079
2080 static int _mmc_flush_cache(struct mmc_host *host)
2081 {
2082 int err = 0;
2083
2084 if (_mmc_cache_enabled(host)) {
2085 err = mmc_switch(host->card, EXT_CSD_CMD_SET_NORMAL,
2086 EXT_CSD_FLUSH_CACHE, 1,
2087 CACHE_FLUSH_TIMEOUT_MS);
2088 if (err)
2089 pr_err("%s: cache flush error %d\n",
2090 mmc_hostname(host), err);
2091 }
2092
2093 return err;
2094 }
2095
2096 static int _mmc_suspend(struct mmc_host *host, bool is_suspend)
2097 {
2098 int err = 0;
2099 unsigned int notify_type = is_suspend ? EXT_CSD_POWER_OFF_SHORT :
2100 EXT_CSD_POWER_OFF_LONG;
2101
2102 mmc_claim_host(host);
2103
2104 if (mmc_card_suspended(host->card))
2105 goto out;
2106
2107 err = _mmc_flush_cache(host);
2108 if (err)
2109 goto out;
2110
2111 if (mmc_can_poweroff_notify(host->card) &&
2112 ((host->caps2 & MMC_CAP2_FULL_PWR_CYCLE) || !is_suspend ||
2113 (host->caps2 & MMC_CAP2_FULL_PWR_CYCLE_IN_SUSPEND)))
2114 err = mmc_poweroff_notify(host->card, notify_type);
2115 else if (mmc_can_sleep(host->card))
2116 err = mmc_sleep(host);
2117 else if (!mmc_host_is_spi(host))
2118 err = mmc_deselect_cards(host);
2119
2120 if (!err) {
2121 mmc_power_off(host);
2122 mmc_card_set_suspended(host->card);
2123 }
2124 out:
2125 mmc_release_host(host);
2126 return err;
2127 }
2128
2129
2130
2131
2132 static int mmc_suspend(struct mmc_host *host)
2133 {
2134 int err;
2135
2136 err = _mmc_suspend(host, true);
2137 if (!err) {
2138 pm_runtime_disable(&host->card->dev);
2139 pm_runtime_set_suspended(&host->card->dev);
2140 }
2141
2142 return err;
2143 }
2144
2145
2146
2147
2148
2149 static int _mmc_resume(struct mmc_host *host)
2150 {
2151 int err = 0;
2152
2153 mmc_claim_host(host);
2154
2155 if (!mmc_card_suspended(host->card))
2156 goto out;
2157
2158 mmc_power_up(host, host->card->ocr);
2159 err = mmc_init_card(host, host->card->ocr, host->card);
2160 mmc_card_clr_suspended(host->card);
2161
2162 out:
2163 mmc_release_host(host);
2164 return err;
2165 }
2166
2167
2168
2169
2170 static int mmc_shutdown(struct mmc_host *host)
2171 {
2172 int err = 0;
2173
2174
2175
2176
2177
2178 if (mmc_can_poweroff_notify(host->card) &&
2179 !(host->caps2 & MMC_CAP2_FULL_PWR_CYCLE))
2180 err = _mmc_resume(host);
2181
2182 if (!err)
2183 err = _mmc_suspend(host, false);
2184
2185 return err;
2186 }
2187
2188
2189
2190
2191 static int mmc_resume(struct mmc_host *host)
2192 {
2193 pm_runtime_enable(&host->card->dev);
2194 return 0;
2195 }
2196
2197
2198
2199
2200 static int mmc_runtime_suspend(struct mmc_host *host)
2201 {
2202 int err;
2203
2204 if (!(host->caps & MMC_CAP_AGGRESSIVE_PM))
2205 return 0;
2206
2207 err = _mmc_suspend(host, true);
2208 if (err)
2209 pr_err("%s: error %d doing aggressive suspend\n",
2210 mmc_hostname(host), err);
2211
2212 return err;
2213 }
2214
2215
2216
2217
2218 static int mmc_runtime_resume(struct mmc_host *host)
2219 {
2220 int err;
2221
2222 err = _mmc_resume(host);
2223 if (err && err != -ENOMEDIUM)
2224 pr_err("%s: error %d doing runtime resume\n",
2225 mmc_hostname(host), err);
2226
2227 return 0;
2228 }
2229
2230 static int mmc_can_reset(struct mmc_card *card)
2231 {
2232 u8 rst_n_function;
2233
2234 rst_n_function = card->ext_csd.rst_n_function;
2235 if ((rst_n_function & EXT_CSD_RST_N_EN_MASK) != EXT_CSD_RST_N_ENABLED)
2236 return 0;
2237 return 1;
2238 }
2239
2240 static int _mmc_hw_reset(struct mmc_host *host)
2241 {
2242 struct mmc_card *card = host->card;
2243
2244
2245
2246
2247
2248 _mmc_flush_cache(host);
2249
2250 if ((host->caps & MMC_CAP_HW_RESET) && host->ops->card_hw_reset &&
2251 mmc_can_reset(card)) {
2252
2253 mmc_set_clock(host, host->f_init);
2254 host->ops->card_hw_reset(host);
2255
2256 mmc_set_initial_state(host);
2257 } else {
2258
2259 mmc_power_cycle(host, card->ocr);
2260 mmc_pwrseq_reset(host);
2261 }
2262 return mmc_init_card(host, card->ocr, card);
2263 }
2264
2265 static const struct mmc_bus_ops mmc_ops = {
2266 .remove = mmc_remove,
2267 .detect = mmc_detect,
2268 .suspend = mmc_suspend,
2269 .resume = mmc_resume,
2270 .runtime_suspend = mmc_runtime_suspend,
2271 .runtime_resume = mmc_runtime_resume,
2272 .alive = mmc_alive,
2273 .shutdown = mmc_shutdown,
2274 .hw_reset = _mmc_hw_reset,
2275 .cache_enabled = _mmc_cache_enabled,
2276 .flush_cache = _mmc_flush_cache,
2277 };
2278
2279
2280
2281
2282 int mmc_attach_mmc(struct mmc_host *host)
2283 {
2284 int err;
2285 u32 ocr, rocr;
2286
2287 WARN_ON(!host->claimed);
2288
2289
2290 if (!mmc_host_is_spi(host))
2291 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
2292
2293 err = mmc_send_op_cond(host, 0, &ocr);
2294 if (err)
2295 return err;
2296
2297 mmc_attach_bus(host, &mmc_ops);
2298 if (host->ocr_avail_mmc)
2299 host->ocr_avail = host->ocr_avail_mmc;
2300
2301
2302
2303
2304 if (mmc_host_is_spi(host)) {
2305 err = mmc_spi_read_ocr(host, 1, &ocr);
2306 if (err)
2307 goto err;
2308 }
2309
2310 rocr = mmc_select_voltage(host, ocr);
2311
2312
2313
2314
2315 if (!rocr) {
2316 err = -EINVAL;
2317 goto err;
2318 }
2319
2320
2321
2322
2323 err = mmc_init_card(host, rocr, NULL);
2324 if (err)
2325 goto err;
2326
2327 mmc_release_host(host);
2328 err = mmc_add_card(host->card);
2329 if (err)
2330 goto remove_card;
2331
2332 mmc_claim_host(host);
2333 return 0;
2334
2335 remove_card:
2336 mmc_remove_card(host->card);
2337 mmc_claim_host(host);
2338 host->card = NULL;
2339 err:
2340 mmc_detach_bus(host);
2341
2342 pr_err("%s: error %d whilst initialising MMC card\n",
2343 mmc_hostname(host), err);
2344
2345 return err;
2346 }