From 7d07b3ae8ddad407913c5301877e694430a3263f Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Thu, 23 Nov 2023 08:24:31 +0000
Subject: [PATCH] add build kerneldeb
---
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