mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 06:31:31 +00:00
mtd:mxs:nand calculate ecc strength dynamically
Calculate ecc strength according oobsize, but not hardcoded which is not aligned with kernel driver Signed-off-by: Peng Fan <Peng.Fan@freescale.com> Signed-off-by: Ye.Li <b37916@freescale.com> Reviewed-by: Marek Vasut <marex@denx.de> Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks>
This commit is contained in:
parent
6b8583b0ad
commit
bd38da1a55
1 changed files with 12 additions and 18 deletions
|
@ -146,26 +146,20 @@ static uint32_t mxs_nand_aux_status_offset(void)
|
|||
static inline uint32_t mxs_nand_get_ecc_strength(uint32_t page_data_size,
|
||||
uint32_t page_oob_size)
|
||||
{
|
||||
if (page_data_size == 2048) {
|
||||
if (page_oob_size == 64)
|
||||
return 8;
|
||||
int ecc_strength;
|
||||
|
||||
if (page_oob_size == 112)
|
||||
return 14;
|
||||
}
|
||||
/*
|
||||
* Determine the ECC layout with the formula:
|
||||
* ECC bits per chunk = (total page spare data bits) /
|
||||
* (bits per ECC level) / (chunks per page)
|
||||
* where:
|
||||
* total page spare data bits =
|
||||
* (page oob size - meta data size) * (bits per byte)
|
||||
*/
|
||||
ecc_strength = ((page_oob_size - MXS_NAND_METADATA_SIZE) * 8)
|
||||
/ (13 * mxs_nand_ecc_chunk_cnt(page_data_size));
|
||||
|
||||
if (page_data_size == 4096) {
|
||||
if (page_oob_size == 128)
|
||||
return 8;
|
||||
|
||||
if (page_oob_size == 218)
|
||||
return 16;
|
||||
|
||||
if (page_oob_size == 224)
|
||||
return 16;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return round_down(ecc_strength, 2);
|
||||
}
|
||||
|
||||
static inline uint32_t mxs_nand_get_mark_offset(uint32_t page_data_size,
|
||||
|
|
Loading…
Add table
Reference in a new issue