mtd: nand: raw: rockchip_nfc: fix oobfree length calculation
The oobfree[0].length calculation depends on the
rknand->metadata_size value, but this is calculated
after the function rk_nfc_ecc_init is called. Move this
calculation to a location before it's value is required.
Fixes: 1b3fcb3c04 ("mtd: nand: raw: rockchip_nfc: add layout structure")
Signed-off-by: Johan Jonker <jbx6244@gmail.com>
Tested-by: Hüseyin BIYIK <boogiepop@gmx.com>
Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de>
Link: https://patch.msgid.link/12b6e0d5-637e-446e-9e4b-82c82e6fad40@gmail.com
Signed-off-by: Quentin Schulz <u-boot@0leil.net>
This commit is contained in:
committed by
Quentin Schulz
parent
9b23812382
commit
3f6d1416a8
@@ -861,6 +861,15 @@ static int rk_nfc_ecc_init(struct rk_nfc *nfc, struct nand_chip *chip)
|
||||
ecc->steps = mtd->writesize / ecc->size;
|
||||
ecc->bytes = DIV_ROUND_UP(ecc->strength * fls(8 * chip->ecc.size), 8);
|
||||
|
||||
rknand->metadata_size = NFC_SYS_DATA_SIZE * ecc->steps;
|
||||
|
||||
if (rknand->metadata_size < NFC_SYS_DATA_SIZE + 2) {
|
||||
dev_err(nfc->dev,
|
||||
"driver needs at least %d bytes of meta data\n",
|
||||
NFC_SYS_DATA_SIZE + 2);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (ecc->bytes * ecc->steps > mtd->oobsize - rknand->metadata_size)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -974,15 +983,6 @@ static int rk_nfc_nand_chip_init(ofnode node, struct rk_nfc *nfc, int devnum)
|
||||
ret = ofnode_read_u32(node, "rockchip,boot-ecc-strength", &tmp);
|
||||
rknand->boot_ecc = ret ? ecc->strength : tmp;
|
||||
|
||||
rknand->metadata_size = NFC_SYS_DATA_SIZE * ecc->steps;
|
||||
|
||||
if (rknand->metadata_size < NFC_SYS_DATA_SIZE + 2) {
|
||||
dev_err(dev,
|
||||
"driver needs at least %d bytes of meta data\n",
|
||||
NFC_SYS_DATA_SIZE + 2);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (!nfc->page_buf) {
|
||||
nfc->page_buf = kzalloc(NFC_MAX_PAGE_SIZE, GFP_KERNEL);
|
||||
if (!nfc->page_buf) {
|
||||
|
||||
Reference in New Issue
Block a user