mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
MMC: fix user capacity for partitioned eMMC card
if the card claims to be high capacity and the card is partitioned the capacity shall still be read from ext_csd SEC_COUNT even if the resulting capacity is smaller than 2 GiB Signed-off-by: Markus Niebel <Markus.Niebel@tq-group.com> Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
This commit is contained in:
parent
e75eaf100b
commit
d7b2912991
2 changed files with 18 additions and 0 deletions
|
@ -1022,6 +1022,21 @@ static int mmc_startup(struct mmc *mmc)
|
|||
mmc->erase_grp_size =
|
||||
ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
|
||||
MMC_MAX_BLOCK_LEN * 1024;
|
||||
/*
|
||||
* if high capacity and partition setting completed
|
||||
* SEC_COUNT is valid even if it is smaller than 2 GiB
|
||||
* JEDEC Standard JESD84-B45, 6.2.4
|
||||
*/
|
||||
if (mmc->high_capacity &&
|
||||
(ext_csd[EXT_CSD_PARTITION_SETTING] &
|
||||
EXT_CSD_PARTITION_SETTING_COMPLETED)) {
|
||||
capacity = (ext_csd[EXT_CSD_SEC_CNT]) |
|
||||
(ext_csd[EXT_CSD_SEC_CNT + 1] << 8) |
|
||||
(ext_csd[EXT_CSD_SEC_CNT + 2] << 16) |
|
||||
(ext_csd[EXT_CSD_SEC_CNT + 3] << 24);
|
||||
capacity *= MMC_MAX_BLOCK_LEN;
|
||||
mmc->capacity_user = capacity;
|
||||
}
|
||||
} else {
|
||||
/* Calculate the group size from the csd value. */
|
||||
int erase_gsz, erase_gmul;
|
||||
|
|
|
@ -147,6 +147,7 @@
|
|||
* EXT_CSD fields
|
||||
*/
|
||||
#define EXT_CSD_GP_SIZE_MULT 143 /* R/W */
|
||||
#define EXT_CSD_PARTITION_SETTING 155 /* R/W */
|
||||
#define EXT_CSD_PARTITIONS_ATTRIBUTE 156 /* R/W */
|
||||
#define EXT_CSD_PARTITIONING_SUPPORT 160 /* RO */
|
||||
#define EXT_CSD_RST_N_FUNCTION 162 /* R/W */
|
||||
|
@ -197,6 +198,8 @@
|
|||
#define EXT_CSD_BOOT_BUS_WIDTH_RESET(x) (x << 2)
|
||||
#define EXT_CSD_BOOT_BUS_WIDTH_WIDTH(x) (x)
|
||||
|
||||
#define EXT_CSD_PARTITION_SETTING_COMPLETED (1 << 0)
|
||||
|
||||
#define R1_ILLEGAL_COMMAND (1 << 22)
|
||||
#define R1_APP_CMD (1 << 5)
|
||||
|
||||
|
|
Loading…
Reference in a new issue