[OpenWrt-Devel] [PATCH] ath79: fix NAND driver compilation for kernel 5.4
Michal Cieslakiewicz
michal.cieslakiewicz at wp.pl
Sun Mar 22 07:35:44 EDT 2020
On Tue, 17 Mar 2020 21:59:27 +0100
David Bauer <mail at david-bauer.net> wrote:
> This fixes the compilation of the AR934x NAND controller
> driver for kernel 5.4 while leaving it untouched for
> kernel 4.19.
>
> This change is currently not run-tested, as i do not have such
> a device at hand.
>
Hello David,
Good news, Netgear WNDR4300 runs fine on kernel 5.4 with this patch
applied.
Tested-by: Michal Cieslakiewicz <michal.cieslakiewicz at wp.pl>
I would also propose to mitigate two compilation warnings by
introducing a return value here (by integrating into your patch):
=========
diff --git a/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c b/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c
index 70aa396e25..0e33b07146 100644
--- a/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c
+++ b/target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c
@@ -1082,14 +1082,24 @@ static int ar934x_nfc_write_page(struct nand_chip *chip,
return err;
}
-static int ar934x_nfc_hw_reset_assert(struct ar934x_nfc *nfc) {
- reset_control_assert(nfc->rst);
+static int ar934x_nfc_hw_reset_assert(struct ar934x_nfc *nfc)
+{
+ int err;
+
+ err = reset_control_assert(nfc->rst);
udelay(250);
+
+ return err;
}
-static int ar934x_nfc_hw_reset_deassert(struct ar934x_nfc *nfc) {
- reset_control_deassert(nfc->rst);
+static int ar934x_nfc_hw_reset_deassert(struct ar934x_nfc *nfc)
+{
+ int err;
+
+ err = reset_control_deassert(nfc->rst);
udelay(250);
+
+ return err;
}
static int ar934x_nfc_hw_init(struct ar934x_nfc *nfc)
=========
And finally, an important information:
Enabling 5.4 for this device exposes a mtd concat issue unrelated
to ar934x-nand driver, apparently affecting all routers that use
concatenation of flash areas to form one larger volume for ubi.
This appears to be a generic 5.x kernel problem not introduced by
OpenWrt in any way.
The quick and dirty solution that worked for me was reverting kernel
patch:
commit 2431c4f5b46c32c4ac495456b1ef4ce59c0bb85d
Author: Boris Brezillon <bbrezillon at kernel.org>
Date: Thu Dec 20 15:13:20 2018 +0100
mtd: Implement mtd_{read,write}() as wrappers around
mtd_{read,write}_oob()
mtd_{read,write}_oob() already take care of checking the params and
calling ->_{read,write}() or ->_{read,write}_oob() based on the
request and the operations supported by the MTD device.
No need to duplicate the logic, we can simply implement
mtd_{read,write}() as wrappers around mtd_{read,write}_oob().
Above commit makes router to oops on WARN_ON canary and exit with error
when creating mtd concat, entering boot loop. Without it my WNDR4300 runs
fine so far.
Best regards
Michal
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list