提交 bd38da1a 编写于 作者: P Peng Fan 提交者: Scott Wood

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: NPeng Fan <Peng.Fan@freescale.com>
Signed-off-by: NYe.Li <b37916@freescale.com>
Reviewed-by: NMarek Vasut <marex@denx.de>
Signed-off-by: NJörg Krause <joerg.krause@embedded.rocks>
上级 6b8583b0
...@@ -146,26 +146,20 @@ static uint32_t mxs_nand_aux_status_offset(void) ...@@ -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, static inline uint32_t mxs_nand_get_ecc_strength(uint32_t page_data_size,
uint32_t page_oob_size) uint32_t page_oob_size)
{ {
if (page_data_size == 2048) { int ecc_strength;
if (page_oob_size == 64)
return 8;
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)
if (page_data_size == 4096) { * where:
if (page_oob_size == 128) * total page spare data bits =
return 8; * (page oob size - meta data size) * (bits per byte)
*/
if (page_oob_size == 218) ecc_strength = ((page_oob_size - MXS_NAND_METADATA_SIZE) * 8)
return 16; / (13 * mxs_nand_ecc_chunk_cnt(page_data_size));
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, static inline uint32_t mxs_nand_get_mark_offset(uint32_t page_data_size,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册