mmc: core: expose info about enhanced rpmb support
authorKrishna Konda <kkonda@codeaurora.org>
Fri, 1 May 2020 13:53:01 +0000 (19:23 +0530)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 28 May 2020 09:21:03 +0000 (11:21 +0200)
Following eMMC JEDEC JESD84-B51 standard, an enhanced form of
rpmb is supported. What this enhanced mode supports is in addition
to be able to write one rpmb or two rpmb frames at a time,
32 frames can be written at a time.

Expose this information present in ext csd field so that the
user space application that wants to make use of this can do so.

Signed-off-by: Krishna Konda <kkonda@codeaurora.org>
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
Link: https://lore.kernel.org/r/1588341189-4371-1-git-send-email-vbadigan@codeaurora.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/mmc.c
include/linux/mmc/card.h
include/linux/mmc/mmc.h

index de94fbe..4203303 100644 (file)
@@ -647,6 +647,9 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)
                                 mmc_hostname(card->host),
                                 card->ext_csd.cmdq_depth);
                }
+               card->ext_csd.enhanced_rpmb_supported =
+                                       (card->ext_csd.rel_param &
+                                        EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR);
        }
 out:
        return err;
@@ -786,6 +789,8 @@ MMC_DEV_ATTR(enhanced_area_offset, "%llu\n",
                card->ext_csd.enhanced_area_offset);
 MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size);
 MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult);
+MMC_DEV_ATTR(enhanced_rpmb_supported, "%#x\n",
+       card->ext_csd.enhanced_rpmb_supported);
 MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors);
 MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
 MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
@@ -843,6 +848,7 @@ static struct attribute *mmc_std_attrs[] = {
        &dev_attr_enhanced_area_offset.attr,
        &dev_attr_enhanced_area_size.attr,
        &dev_attr_raw_rpmb_size_mult.attr,
+       &dev_attr_enhanced_rpmb_supported.attr,
        &dev_attr_rel_sectors.attr,
        &dev_attr_ocr.attr,
        &dev_attr_rca.attr,
index cf3780a..7d46411 100644 (file)
@@ -48,6 +48,7 @@ struct mmc_ext_csd {
        u8                      sec_feature_support;
        u8                      rel_sectors;
        u8                      rel_param;
+       bool                    enhanced_rpmb_supported;
        u8                      part_config;
        u8                      cache_ctrl;
        u8                      rst_n_function;
index 4b85ef0..d9a65c6 100644 (file)
@@ -325,6 +325,7 @@ static inline bool mmc_ready_for_data(u32 status)
  */
 
 #define EXT_CSD_WR_REL_PARAM_EN                (1<<2)
+#define EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR    (1<<4)
 
 #define EXT_CSD_BOOT_WP_B_PWR_WP_DIS   (0x40)
 #define EXT_CSD_BOOT_WP_B_PERM_WP_DIS  (0x10)