aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Santa Cruz <Diego.SantaCruz@spinetix.com>2014-12-23 10:50:17 +0100
committerPantelis Antoniou <pantelis.antoniou@konsulko.com>2015-01-19 17:01:34 +0200
commitc3dbb4f9b7539e39d418fd1f518129fd60c8eca9 (patch)
treee6effaac26027d67e5bdb54191484d4e4fc1ac50
parentc5f0d3f1c5078870926ebbc84af92f0f66133cb3 (diff)
downloadu-boot-c3dbb4f9b7539e39d418fd1f518129fd60c8eca9.zip
u-boot-c3dbb4f9b7539e39d418fd1f518129fd60c8eca9.tar.gz
u-boot-c3dbb4f9b7539e39d418fd1f518129fd60c8eca9.tar.bz2
mmc: extend mmcinfo to show enhanced partition attribute
This extends the mmcinfo command's output to show which eMMC partitions have the enhanced attribute set. Note that the eMMC spec says that if the enhanced attribute is supported then the boot and RPMB partitions are of the enhanced type. The output of mmcinfo becomes: Device: OMAP SD/MMC Manufacturer ID: fe OEM: 14e Name: MMC16 Tran Speed: 52000000 Rd Block Len: 512 MMC version 4.41 High Capacity: Yes Capacity: 13.8 GiB Bus Width: 4-bit User Capacity: 13.8 GiB ENH Boot Capacity: 16 MiB ENH RPMB Capacity: 128 KiB ENH GP1 Capacity: 64 MiB ENH GP2 Capacity: 64 MiB ENH Signed-off-by: Diego Santa Cruz <Diego.SantaCruz@spinetix.com>
-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 cdcbf5f..d95cfaa 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 1eb9c27..9ce15d0 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 7ec255d..69c6070 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;