From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 03:04:41 +0000 Subject: [PATCH] rk3568 rt init --- kernel/drivers/mtd/nand/raw/rockchip_nand_v6.c | 26 ++++++++++++++------------ 1 files changed, 14 insertions(+), 12 deletions(-) diff --git a/kernel/drivers/mtd/nand/raw/rockchip_nand_v6.c b/kernel/drivers/mtd/nand/raw/rockchip_nand_v6.c index 1405edb..a8ea5bf 100644 --- a/kernel/drivers/mtd/nand/raw/rockchip_nand_v6.c +++ b/kernel/drivers/mtd/nand/raw/rockchip_nand_v6.c @@ -149,6 +149,7 @@ int max_ecc_strength; u32 *oob_buf; u32 *page_buf; + struct mtd_info *mtd; }; static inline struct rk_nfc *to_rk_nfc(struct nand_controller *ctrl) @@ -348,7 +349,7 @@ if (bch_st & NANDC_V6_BCH0_ST_ERR || bch_st & NANDC_V6_BCH1_ST_ERR) { mtd->ecc_stats.failed++; - max_bitflips = -1; + max_bitflips = 0; } else { ret = NANDC_V6_ECC_ERR_CNT0(bch_st); mtd->ecc_stats.corrected += ret; @@ -599,15 +600,6 @@ if (max_strength > nfc->max_ecc_strength) max_strength = nfc->max_ecc_strength; - nfc->page_buf = kmalloc(mtd->writesize, GFP_KERNEL | GFP_DMA); - if (!nfc->page_buf) - return -ENOMEM; - nfc->oob_buf = kmalloc(ecc->steps * 128, GFP_KERNEL | GFP_DMA); - if (!nfc->oob_buf) { - kfree(nfc->page_buf); - return -ENOMEM; - } - for (i = 0; i < ARRAY_SIZE(strengths); i++) if (max_strength >= strengths[i]) break; @@ -617,6 +609,15 @@ return -ENOTSUPP; } + nfc->page_buf = (u32 *)__get_free_pages(GFP_KERNEL | GFP_DMA32, get_order(mtd->writesize)); + if (!nfc->page_buf) + return -ENOMEM; + nfc->oob_buf = (u32 *)__get_free_pages(GFP_KERNEL | GFP_DMA32, get_order(ecc->steps * 128)); + if (!nfc->oob_buf) { + free_pages((unsigned long)nfc->page_buf, get_order(mtd->writesize)); + return -ENOMEM; + } + nfc->mtd = mtd; nfc->ecc_mode = strengths[i]; rk_nfc_hw_ecc_setup(mtd, ecc, nfc->ecc_mode); @@ -951,10 +952,11 @@ static int rk_nfc_remove(struct platform_device *pdev) { struct rk_nfc *nfc = platform_get_drvdata(pdev); + struct nand_chip *nand = mtd_to_nand(nfc->mtd); rk_nand_chips_cleanup(nfc); - kfree(nfc->page_buf); - kfree(nfc->oob_buf); + free_pages((unsigned long)nfc->page_buf, get_order(nfc->mtd->writesize)); + free_pages((unsigned long)nfc->oob_buf, get_order(nand->ecc.steps * 128)); clk_disable_unprepare(nfc->clk); clk_disable_unprepare(nfc->hclk); if (!(IS_ERR(nfc->gclk))) -- Gitblit v1.6.2