mmc: core: Expose access to RPMB partition
Following JEDEC standard, if the mmc supports RPMB partition, a new interface is created and exposed via /dev/block. Users will be able to access RPMB partition using standard mmc IOCTL commands. Signed-off-by: Alex Macro <alex.macro@stericsson.com> Signed-off-by: Loic Pallardy <loic.pallardy@stericsson.com> Reviewed-by: Namjae Jeon <linkinjeon@gmail.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Johan Rudholm <johan.rudholm@stericsson.com> Acked-by: Krishna Konda <kkonda@codeaurora.org> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
ed9dbb6eff
commit
090d25fe22
@ -491,6 +491,17 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd)
|
|||||||
|
|
||||||
card->ext_csd.rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
|
card->ext_csd.rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
|
||||||
card->ext_csd.rst_n_function = ext_csd[EXT_CSD_RST_N_FUNCTION];
|
card->ext_csd.rst_n_function = ext_csd[EXT_CSD_RST_N_FUNCTION];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RPMB regions are defined in multiples of 128K.
|
||||||
|
*/
|
||||||
|
card->ext_csd.raw_rpmb_size_mult = ext_csd[EXT_CSD_RPMB_MULT];
|
||||||
|
if (ext_csd[EXT_CSD_RPMB_MULT]) {
|
||||||
|
mmc_part_add(card, ext_csd[EXT_CSD_RPMB_MULT] << 17,
|
||||||
|
EXT_CSD_PART_CONFIG_ACC_RPMB,
|
||||||
|
"rpmb", 0, false,
|
||||||
|
MMC_BLK_DATA_AREA_RPMB);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
card->ext_csd.raw_erased_mem_count = ext_csd[EXT_CSD_ERASED_MEM_CONT];
|
card->ext_csd.raw_erased_mem_count = ext_csd[EXT_CSD_ERASED_MEM_CONT];
|
||||||
|
@ -85,6 +85,7 @@ struct mmc_ext_csd {
|
|||||||
bool boot_ro_lockable;
|
bool boot_ro_lockable;
|
||||||
u8 raw_exception_status; /* 53 */
|
u8 raw_exception_status; /* 53 */
|
||||||
u8 raw_partition_support; /* 160 */
|
u8 raw_partition_support; /* 160 */
|
||||||
|
u8 raw_rpmb_size_mult; /* 168 */
|
||||||
u8 raw_erased_mem_count; /* 181 */
|
u8 raw_erased_mem_count; /* 181 */
|
||||||
u8 raw_ext_csd_structure; /* 194 */
|
u8 raw_ext_csd_structure; /* 194 */
|
||||||
u8 raw_card_type; /* 196 */
|
u8 raw_card_type; /* 196 */
|
||||||
@ -206,6 +207,7 @@ struct mmc_part {
|
|||||||
#define MMC_BLK_DATA_AREA_MAIN (1<<0)
|
#define MMC_BLK_DATA_AREA_MAIN (1<<0)
|
||||||
#define MMC_BLK_DATA_AREA_BOOT (1<<1)
|
#define MMC_BLK_DATA_AREA_BOOT (1<<1)
|
||||||
#define MMC_BLK_DATA_AREA_GP (1<<2)
|
#define MMC_BLK_DATA_AREA_GP (1<<2)
|
||||||
|
#define MMC_BLK_DATA_AREA_RPMB (1<<3)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -286,6 +286,7 @@ struct _mmc_csd {
|
|||||||
#define EXT_CSD_BKOPS_START 164 /* W */
|
#define EXT_CSD_BKOPS_START 164 /* W */
|
||||||
#define EXT_CSD_SANITIZE_START 165 /* W */
|
#define EXT_CSD_SANITIZE_START 165 /* W */
|
||||||
#define EXT_CSD_WR_REL_PARAM 166 /* RO */
|
#define EXT_CSD_WR_REL_PARAM 166 /* RO */
|
||||||
|
#define EXT_CSD_RPMB_MULT 168 /* RO */
|
||||||
#define EXT_CSD_BOOT_WP 173 /* R/W */
|
#define EXT_CSD_BOOT_WP 173 /* R/W */
|
||||||
#define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */
|
#define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */
|
||||||
#define EXT_CSD_PART_CONFIG 179 /* R/W */
|
#define EXT_CSD_PART_CONFIG 179 /* R/W */
|
||||||
@ -339,6 +340,7 @@ struct _mmc_csd {
|
|||||||
|
|
||||||
#define EXT_CSD_PART_CONFIG_ACC_MASK (0x7)
|
#define EXT_CSD_PART_CONFIG_ACC_MASK (0x7)
|
||||||
#define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1)
|
#define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1)
|
||||||
|
#define EXT_CSD_PART_CONFIG_ACC_RPMB (0x3)
|
||||||
#define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4)
|
#define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4)
|
||||||
|
|
||||||
#define EXT_CSD_PART_SUPPORT_PART_EN (0x1)
|
#define EXT_CSD_PART_SUPPORT_PART_EN (0x1)
|
||||||
|
Loading…
Reference in New Issue
Block a user