From f4f4259ca17e61a2bb14b9453e050451478f546a Mon Sep 17 00:00:00 2001 From: Koen Vandeputte Date: Tue, 6 Apr 2021 12:16:10 +0200 Subject: [PATCH] ath79: ar934x-nand: fix broken nand on kernel 5.10 Booting current 5.10.x testing kernel shows this: [ 0.335781] nand: device found, Manufacturer ID: 0xec, Chip ID: 0xf1 [ 0.342280] nand: Samsung NAND 128MiB 3,3V 8-bit [ 0.346982] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 [ 0.354703] ar934x-nand 1b800200.nand: unknown ECC mode 2 [ 0.360193] ar934x-nand 1b800200.nand: nand_scan failed, err:-22 [ 0.366341] ar934x-nand: probe of 1b800200.nand failed with error -22 ... [ 1.089264] /dev/root: Can't open blockdev [ 1.093482] VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6 [ 1.101077] Please append a correct "root=" boot option; here are the available partitions: [ 1.109555] 1f00 64 mtdblock0 [ 1.109559] (driver?) [ 1.116199] 1f01 48 mtdblock1 [ 1.116202] (driver?) [ 1.122841] 1f02 4 mtdblock2 [ 1.122844] (driver?) [ 1.129493] 1f03 4 mtdblock3 [ 1.129497] (driver?) [ 1.136138] 1f04 4 mtdblock4 [ 1.136142] (driver?) [ 1.142787] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) [ 1.151168] Rebooting in 1 seconds.. The issue is caused by a wrong check for ECC engine type on newer kernels. Fix this. Bootlog after: [ 0.335689] nand: device found, Manufacturer ID: 0xec, Chip ID: 0xf1 [ 0.342192] nand: Samsung NAND 128MiB 3,3V 8-bit [ 0.346884] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 [ 0.354611] Scanning device for bad blocks [ 0.364924] random: fast init done [ 0.496641] 3 fixed-partitions partitions found on MTD device ar934x-nand [ 0.503545] Creating 3 MTD partitions on "ar934x-nand": [ 0.508865] 0x000000000000-0x000000040000 : "booter" [ 0.515133] 0x000000040000-0x000000400000 : "kernel" [ 0.523265] 0x000000400000-0x000008000000 : "ubi" Fixes: fb64e2c30f ("ath79: ar934x-nand: add kernel 5.10 compatibility") Signed-off-by: Koen Vandeputte --- target/linux/ath79/files/drivers/mtd/nand/raw/ar934x_nand.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 207bcd59ac..ddc6d6d882 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 @@ -1341,7 +1341,7 @@ static int ar934x_nfc_attach_chip(struct nand_chip *nand) if (ret) return ret; #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0) - } else if (nand->ecc.engine_type == NAND_ECC_ENGINE_TYPE_SOFT) { + } else if (nand->ecc.engine_type != NAND_ECC_ENGINE_TYPE_SOFT) { dev_err(dev, "unknown ECC mode %d\n", nand->ecc.engine_type); #else } else if (nand->ecc.mode != NAND_ECC_SOFT) {