nand: arasan_nfc: Use the calculated ecc address for updating ecc register

This patch corrects the ecc address calculation before updating
to ecc register. The ecc address has to be calculated based on
page, oob and ecc sizes of the device.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
master
Siva Durga Prasad Paladugu 7 years ago committed by Michal Simek
parent cacb8a029f
commit f25ac66c52
  1. 7
      drivers/mtd/nand/arasan_nfc.c

@ -1133,7 +1133,7 @@ static void arasan_check_ondie(struct mtd_info *mtd)
static int arasan_nand_ecc_init(struct mtd_info *mtd) static int arasan_nand_ecc_init(struct mtd_info *mtd)
{ {
int found = -1; int found = -1;
u32 regval, eccpos_start, i; u32 regval, eccpos_start, i, eccaddr;
struct nand_chip *nand_chip = mtd_to_nand(mtd); struct nand_chip *nand_chip = mtd_to_nand(mtd);
for (i = 0; i < ARRAY_SIZE(ecc_matrix); i++) { for (i = 0; i < ARRAY_SIZE(ecc_matrix); i++) {
@ -1152,7 +1152,10 @@ static int arasan_nand_ecc_init(struct mtd_info *mtd)
if (found < 0) if (found < 0)
return 1; return 1;
regval = ecc_matrix[found].eccaddr | eccaddr = mtd->writesize + mtd->oobsize -
ecc_matrix[found].eccsize;
regval = eccaddr |
(ecc_matrix[found].eccsize << ARASAN_NAND_ECC_SIZE_SHIFT) | (ecc_matrix[found].eccsize << ARASAN_NAND_ECC_SIZE_SHIFT) |
(ecc_matrix[found].bch << ARASAN_NAND_ECC_BCH_SHIFT); (ecc_matrix[found].bch << ARASAN_NAND_ECC_BCH_SHIFT);
writel(regval, &arasan_nand_base->ecc_reg); writel(regval, &arasan_nand_base->ecc_reg);

Loading…
Cancel
Save