summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/cmd_mmc.c14
-rw-r--r--drivers/mmc/mmc.c3
-rw-r--r--include/mmc.h6
3 files changed, 19 insertions, 4 deletions
diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
index cdcbf5f80f..d95cfaa4f8 100644
--- a/common/cmd_mmc.c
+++ b/common/cmd_mmc.c
@@ -96,16 +96,22 @@ static void print_mmcinfo(struct mmc *mmc)
mmc->ddr_mode ? " DDR" : "");
if (!IS_SD(mmc) && mmc->version >= MMC_VERSION_4) {
+ bool has_enh = (mmc->part_support & ENHNCD_SUPPORT) != 0;
puts("User Capacity: ");
- print_size(mmc->capacity_user, "\n");
+ print_size(mmc->capacity_user,
+ has_enh && (mmc->part_attr & EXT_CSD_ENH_USR) ?
+ " ENH\n" : "\n");
puts("Boot Capacity: ");
- print_size(mmc->capacity_boot, "\n");
+ print_size(mmc->capacity_boot, has_enh ? " ENH\n" : "\n");
puts("RPMB Capacity: ");
- print_size(mmc->capacity_rpmb, "\n");
+ print_size(mmc->capacity_rpmb, has_enh ? " ENH\n" : "\n");
for (i = 0; i < ARRAY_SIZE(mmc->capacity_gp); i++) {
+ bool is_enh = has_enh &&
+ (mmc->part_attr & EXT_CSD_ENH_GP(i));
if (mmc->capacity_gp[i]) {
printf("GP%i Capacity: ", i);
- print_size(mmc->capacity_gp[i], "\n");
+ print_size(mmc->capacity_gp[i],
+ is_enh ? " ENH\n" : "\n");
}
}
}
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 1eb9c27339..9ce15d03e2 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -1050,9 +1050,12 @@ static int mmc_startup(struct mmc *mmc)
}
/* store the partition info of emmc */
+ mmc->part_support = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
ext_csd[EXT_CSD_BOOT_MULT])
mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
+ if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & ENHNCD_SUPPORT)
+ mmc->part_attr = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
diff --git a/include/mmc.h b/include/mmc.h
index 7ec255d882..69c60706df 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -201,6 +201,9 @@
#define EXT_CSD_PARTITION_SETTING_COMPLETED (1 << 0)
+#define EXT_CSD_ENH_USR (1 << 0) /* user data area is enhanced */
+#define EXT_CSD_ENH_GP(x) (1 << ((x)+1)) /* GP part (x+1) is enhanced */
+
#define R1_ILLEGAL_COMMAND (1 << 22)
#define R1_APP_CMD (1 << 5)
@@ -224,6 +227,7 @@
#define MMCPART_NOAVAILABLE (0xff)
#define PART_ACCESS_MASK (0x7)
#define PART_SUPPORT (0x1)
+#define ENHNCD_SUPPORT (0x2)
#define PART_ENH_ATTRIB (0x1f)
/* Maximum block size for MMC */
@@ -302,6 +306,8 @@ struct mmc {
uint csd[4];
uint cid[4];
ushort rca;
+ u8 part_support;
+ u8 part_attr;
char part_config;
char part_num;
uint tran_speed;