Commit a7f852b6885dc7b89741b1e76921e160b9c9877b
Committed by
Pantelis Antoniou
1 parent
f8e89d6716
Exists in
v2017.01-smarct4x
and in
37 other branches
mmc: read the size of eMMC enhanced user data area
This modification reads the size of the eMMC enhanced user data area upon initialization of an mmc device, it will be used later by mmcinfo. Signed-off-by: Diego Santa Cruz <Diego.SantaCruz@spinetix.com>
Showing 2 changed files with 19 additions and 0 deletions Side-by-side Diff
drivers/mmc/mmc.c
... | ... | @@ -1031,6 +1031,21 @@ |
1031 | 1031 | has_parts = true; |
1032 | 1032 | } |
1033 | 1033 | |
1034 | + mmc->enh_user_size = | |
1035 | + (ext_csd[EXT_CSD_ENH_SIZE_MULT+2] << 16) + | |
1036 | + (ext_csd[EXT_CSD_ENH_SIZE_MULT+1] << 8) + | |
1037 | + ext_csd[EXT_CSD_ENH_SIZE_MULT]; | |
1038 | + mmc->enh_user_size *= ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE]; | |
1039 | + mmc->enh_user_size *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE]; | |
1040 | + mmc->enh_user_size <<= 19; | |
1041 | + mmc->enh_user_start = | |
1042 | + (ext_csd[EXT_CSD_ENH_START_ADDR+3] << 24) + | |
1043 | + (ext_csd[EXT_CSD_ENH_START_ADDR+2] << 16) + | |
1044 | + (ext_csd[EXT_CSD_ENH_START_ADDR+1] << 8) + | |
1045 | + ext_csd[EXT_CSD_ENH_START_ADDR]; | |
1046 | + if (mmc->high_capacity) | |
1047 | + mmc->enh_user_start <<= 9; | |
1048 | + | |
1034 | 1049 | /* |
1035 | 1050 | * Host needs to enable ERASE_GRP_DEF bit if device is |
1036 | 1051 | * partitioned. This bit will be lost every time after a reset |
include/mmc.h
... | ... | @@ -147,6 +147,8 @@ |
147 | 147 | /* |
148 | 148 | * EXT_CSD fields |
149 | 149 | */ |
150 | +#define EXT_CSD_ENH_START_ADDR 136 /* R/W */ | |
151 | +#define EXT_CSD_ENH_SIZE_MULT 140 /* R/W */ | |
150 | 152 | #define EXT_CSD_GP_SIZE_MULT 143 /* R/W */ |
151 | 153 | #define EXT_CSD_PARTITION_SETTING 155 /* R/W */ |
152 | 154 | #define EXT_CSD_PARTITIONS_ATTRIBUTE 156 /* R/W */ |
... | ... | @@ -319,6 +321,8 @@ |
319 | 321 | u64 capacity_boot; |
320 | 322 | u64 capacity_rpmb; |
321 | 323 | u64 capacity_gp[4]; |
324 | + u64 enh_user_start; | |
325 | + u64 enh_user_size; | |
322 | 326 | block_dev_desc_t block_dev; |
323 | 327 | char op_cond_pending; /* 1 if we are waiting on an op_cond command */ |
324 | 328 | char init_in_progress; /* 1 if we have done mmc_start_init() */ |