mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-11 07:24:46 +00:00
mmc: Fix size calculation for sector addressed MMC version 4
For eMMC v4 and newer that is smaller than 2 GiB, the JEDEC JESD84-B51
section 6.2.4 Configure partitions indicates that EXT_CSD SEC_COUNT
should not be used to determine device size, and instead device size
should be calculated from C_SIZE and C_SIZE_MULT.
This is not exactly accurate, the 2 GiB limit is not a hard line,
there are eMMC devices which are smaller than 2 GiB and still
require device size to be determined from EXT_CSD SEC_COUNT. The
hard line is instead OCR HCS bit, which indicates whether the device
is byte or sector addressed, the former applies to most devices
below 2 GiB, and the later applies mostly to devices above 2 GiB.
However, there are a couple of devices which are smaller than 2 GiB
and still set the OCR HCS bit to indicate they are sector addressed,
and therefore the size calculation for those devices should also
use EXT_CSD SEC_COUNT . Use mmc->high_capacity flag to discern the
devices instead of arbitrary 2 GiB limit. The mmc->high_capacity flag
reflects the OCR HCS bit state.
Fixes: 639b7827d1
("mmc: fix the condition for MMC version 4")
Signed-off-by: Marek Vasut <marex@denx.de>
This commit is contained in:
parent
59fd62d71c
commit
dbb9e136b8
1 changed files with 1 additions and 1 deletions
|
@ -2376,7 +2376,7 @@ static int mmc_startup_v4(struct mmc *mmc)
|
|||
| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
|
||||
| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
|
||||
capacity *= MMC_MAX_BLOCK_LEN;
|
||||
if ((capacity >> 20) > 2 * 1024)
|
||||
if (mmc->high_capacity)
|
||||
mmc->capacity_user = capacity;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue