Add support in debugfs to identify speed class of
SD cards.
Bug
2420580
Change-Id: I9f869aa639f5acec80bea5ba56b82974e96a7a91
Signed-off-by: Aniruddha Rao <anrao@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/
1928864
(cherry picked from commit
b4c433d578faff4eb72451a444fd9dfc27489041)
Reviewed-on: https://git-master.nvidia.com/r/
1932065
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
DEFINE_SIMPLE_ATTRIBUTE(mmc_dbg_card_status_fops, mmc_dbg_card_status_get,
NULL, "%08llx\n");
+static int mmc_dbg_card_speed_class_get(void *data, u64 *val)
+{
+ struct mmc_card *card = data;
+
+ *val = card->speed_class;
+
+ return 0;
+}
+DEFINE_SIMPLE_ATTRIBUTE(mmc_dbg_card_speed_class_fops,
+ mmc_dbg_card_speed_class_get, NULL, "%llu\n");
+
static int mmc_get_ext_csd_byte_val(struct mmc_card *card, u64 *val,
unsigned int ext_csd_byte)
{
goto err;
}
+ if (mmc_card_sd(card))
+ if (!debugfs_create_file("speed_class", 0400, root, card,
+ &mmc_dbg_card_speed_class_fops))
+ goto err;
+
return;
err:
card->ssr.erase_timeout = (et * 1000) / es;
card->ssr.erase_offset = eo * 1000;
}
+ card->speed_class = UNSTUFF_BITS(card->raw_ssr,
+ 440 - 384, 8);
} else {
pr_warn("%s: SD Status: Invalid Allocation Unit size\n",
mmc_hostname(card->host));
MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
-
+MMC_DEV_ATTR(speed_class, "%u\n", card->speed_class);
static ssize_t mmc_dsr_show(struct device *dev,
struct device_attribute *attr,
&dev_attr_serial.attr,
&dev_attr_ocr.attr,
&dev_attr_dsr.attr,
+ &dev_attr_speed_class.attr,
NULL,
};
ATTRIBUTE_GROUPS(sd_std);
unsigned int pref_erase; /* in sectors */
unsigned int eg_boundary; /* don't cross erase-group boundaries */
u8 erased_byte; /* value of erased bytes */
+ u8 speed_class; /* speed class of the card */
u32 raw_cid[4]; /* raw card CID */
u32 raw_csd[4]; /* raw card CSD */