From 89281ea41721b3027e14d66c19f2dbb4d11847d3 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 07:24:14 +0000
Subject: [PATCH] build rk3568 uboot
---
kernel/drivers/mtd/nand/raw/rockchip_nand_v9.c | 26 ++++++++++++++------------
1 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/kernel/drivers/mtd/nand/raw/rockchip_nand_v9.c b/kernel/drivers/mtd/nand/raw/rockchip_nand_v9.c
index f5ba7b4..7ef7529 100644
--- a/kernel/drivers/mtd/nand/raw/rockchip_nand_v9.c
+++ b/kernel/drivers/mtd/nand/raw/rockchip_nand_v9.c
@@ -144,6 +144,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)
@@ -338,7 +339,7 @@
if (bch_st & NANDC_V9_BCH0_ST_ERR ||
bch_st & NANDC_V9_BCH1_ST_ERR) {
mtd->ecc_stats.failed++;
- max_bitflips = -1;
+ max_bitflips = 0;
} else {
ret = NANDC_V9_ECC_ERR_CNT0(bch_st);
mtd->ecc_stats.corrected += ret;
@@ -584,15 +585,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;
@@ -602,6 +594,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);
@@ -936,10 +937,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