[PATCH 00/12] Marvell NAND controller rework with ->exec_op()
Robert Jarzmik
robert.jarzmik at free.fr
Sat Dec 23 05:42:20 PST 2017
Miquel RAYNAL <miquel.raynal at free-electrons.com> writes:
I removed a lot of people from the recipients, as this is a debug session.
>> > Now I get a lot of these message which I didn't have before :
>> > [ 26.897372] ubi0 warning: ubi_io_read: error -74 (ECC error)
>> > while reading 126976 bytes from PEB 242:4096, read only 126976
>> Looks like a mismatch in the ECC config. Can you check the ecc
>> strength/step_size in both situation (old driver vs new driver)?
>
> For that, you might want to add traces in marvell_nand_ecc_init() and
> marvell_nand_hw_ecc_ctrl_init().
>
>> Could you also dump the NDCR register in both cases?
>
> NDCR register (as well as NDCBx registers) will appear if you let
>
> #define DEBUG
>
> at the beginning of the driver.
>
> Also, can you please give us the entire dmesg (I mean the boot, not the
> flow of UBIFS errors of course).
Here it comes in [3]. I suspect the BBT parser here, here is the extract that
_might_ be relevant:
[ 3.372907] nand: ->exec_op() parser: pattern not found!
[ 3.378445] marvell-nfc pxa3xx-nand:
... repeats many times ...
[ 3.666571] Bad block table not found for chip 0
[ 3.671368] Scanning device for bad blocks
[ 3.675540] nand: nand_do_read_oob: from = 0x00000000, len = 64
[ 3.681688] marvell-nfc pxa3xx-nand:
[ 3.681688] NDCR: 0x9d079fff
[ 3.681688] NDCB0: 0x000d3000
[ 3.681688] NDCB1: 0x00000000
[ 3.681688] NDCB2: 0x00000000
[ 3.681688] NDCB3: 0x00000000
[ 3.700570] Bad eraseblock 0 at 0x000000000000
My configuration is :
- make zylonite_defconfig
- apply patch in [1] for arch/arm/mach-pxa
- apply patch in [2] for drivers/mtd
- run the test (make zylonite_defconfig; make; do_the_test_with_jenkins)
That should give you all my setup information, ie. platform_data, ECC and BBT
settings (ie. the "MBBbt0" pattern).
Cheers.
--
Robert
[1] Patch for zylonite
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c
index 0534949d63f6..d247ef01dc62 100644
--- a/arch/arm/mach-pxa/zylonite.c
+++ b/arch/arm/mach-pxa/zylonite.c
@@ -378,6 +378,8 @@ static struct mtd_partition zylonite_nand_partitions[] = {
static struct pxa3xx_nand_platform_data zylonite_nand_info = {
.parts = zylonite_nand_partitions,
.nr_parts = ARRAY_SIZE(zylonite_nand_partitions),
+ .flash_bbt = 1,
+ .keep_config = 1,
};
static void __init zylonite_init_nand(void)
[2] Patch for mtd
diff --git a/drivers/mtd/nand/marvell_nand.c b/drivers/mtd/nand/marvell_nand.c
index c618ccb22a61..957219e7c23d 100644
--- a/drivers/mtd/nand/marvell_nand.c
+++ b/drivers/mtd/nand/marvell_nand.c
@@ -7,6 +7,8 @@
* SPDX-License-Identifier: GPL-2.0
*/
+#define DEBUG 1
+
#include <linux/module.h>
#include <linux/clk.h>
#include <linux/mtd/rawnand.h>
@@ -2480,6 +2482,7 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc,
* in the DT node, this entry will be overwritten in nand_scan_ident().
*/
chip->ecc.mode = NAND_ECC_HW;
+ chip->options |= NAND_BUSWIDTH_AUTO;
ret = nand_scan_ident(mtd, marvell_nand->nsels, NULL);
if (ret) {
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 469220065b8b..0beed1cd58b3 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -27,6 +27,8 @@
*
*/
+#define DEBUG 1
+
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h>
[3] Dmesg of my failing zylonite
Loading ARM Linux zImage '/mnt/tftp/zImage_jenkins'
commandline: ram=64M console=ttyS0,115200 ip=dhcp root=/dev/nfs nfsroot=/home/none/nfsroot/zylonite,v3,tcp earlycon mtdparts=pxa3xx_nand-0:128k at 0(TIMH)ro,128k at 128k(OBMI)ro,768k at 256k(barebox),256k at 1024k(barebox-env),12M at 1280k(kernel),38016k at 13568k(root)
arch_number: 1233
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.15.0-rc1-00041-g8ba5ca3 (jenkins at belgarath) (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) #747 PREEMPT Sat Dec 23 11:55:09 CET 2017
[ 0.000000] CPU: XScale-V3 based processor [69056891] revision 1 (ARMv5TE), cr=0000397f
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
[ 0.000000] Machine: PXA3xx Platform Development Kit (aka Zylonite)
[ 0.000000] Ignoring tag cmdline (using the default kernel command line)
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] RO Mode clock: 0.00MHz
[ 0.000000] Run Mode clock: 0.00MHz
[ 0.000000] Turbo Mode clock: 0.00MHz
[ 0.000000] System bus clock: 0.00MHz
[ 0.000000] On node 0 totalpages: 16384
[ 0.000000] Normal zone: 128 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 16384 pages, LIFO batch:3
[ 0.000000] random: fast init done
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 16256
[ 0.000000] Kernel command line: root=/dev/ram0 ip=192.168.1.232:192.168.1.5::255.255.255.0::eth0:on console=ttyS0,115200 mem=64M mtdparts=pxa3xx_nand-0:128k at 0(TIMH)ro,128k at 128k(OBMI)ro,768k at 256k(barebox),256k at 1024k(barebox-env),12M at 1280k(kernel),38016k at 13568k(root) ubi.mtd=5 earlycon=pxa,io,0xf6200000,115200n8 debug no_console_suspend
[ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.000000] Memory: 56856K/65536K available (4226K kernel code, 202K rwdata, 972K rodata, 2396K init, 102K bss, 8680K reserved, 0K cma-reserved)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[ 0.000000] vmalloc : 0xc4800000 - 0xff800000 ( 944 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xc4000000 ( 64 MB)
[ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB)
[ 0.000000] .text : 0xc0008000 - 0xc0428a08 (4227 kB)
[ 0.000000] .init : 0xc053f000 - 0xc0796000 (2396 kB)
[ 0.000000] .data : 0xc0796000 - 0xc07c8bec ( 203 kB)
[ 0.000000] .bss : 0xc07c8bec - 0xc07e25fc ( 103 kB)
[ 0.000000] Preemptible hierarchical RCU implementation.
[ 0.000000] Tasks RCU enabled.
[ 0.000000] NR_IRQS: 16, nr_irqs: 336, preallocated irqs: 336
[ 0.000000] RJK: parent_rate=13000000, xl=8, xn=1
[ 0.000069] sched_clock: 32 bits at 3250kHz, resolution 307ns, wraps every 660764198758ns
[ 0.000266] clocksource: oscr0: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 588080137591 ns
[ 0.002138] Console: colour dummy device 80x30
[ 0.002299] Calibrating delay loop... 103.83 BogoMIPS (lpj=519168)
[ 0.081018] pid_max: default: 32768 minimum: 301
[ 0.081861] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.081960] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.085170] CPU: Testing write buffer coherency: ok
[ 0.088970] Setting up static identity map for 0x80008200 - 0x80008260
[ 0.089927] Hierarchical SRCU implementation.
[ 0.103027] devtmpfs: initialized
[ 0.113870] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.114009] futex hash table entries: 256 (order: -1, 3072 bytes)
[ 0.116340] NET: Registered protocol family 16
[ 0.119151] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.388383] Advanced Linux Sound Architecture Driver Initialized.
[ 0.399046] clocksource: Switched to clocksource oscr0
[ 0.551948] NET: Registered protocol family 2
[ 0.557703] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.557940] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.558123] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.558662] UDP hash table entries: 256 (order: 0, 4096 bytes)
[ 0.558853] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[ 0.560546] NET: Registered protocol family 1
[ 0.562593] RPC: Registered named UNIX socket transport module.
[ 0.562693] RPC: Registered udp transport module.
[ 0.562747] RPC: Registered tcp transport module.
[ 0.562806] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 2.499969] Initialise system trusted keyrings
[ 2.501747] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[ 2.505617] NFS: Registering the id_resolver key type
[ 2.505846] Key type id_resolver registered
[ 2.505907] Key type id_legacy registered
[ 2.512358] Key type asymmetric registered
[ 2.512460] Asymmetric key parser 'x509' registered
[ 2.512619] io scheduler noop registered
[ 2.512685] io scheduler deadline registered
[ 2.513081] io scheduler cfq registered (default)
[ 2.513152] io scheduler mq-deadline registered
[ 2.513215] io scheduler kyber registered
[ 2.573653] pxa-dma pxa-dma.0: initialized 32 channels on 100 requestors
[ 2.577078] pxa2xx-uart.0: ttyS0 at MMIO 0x40100000 (irq = 38, base_baud = 928571) is a UART1
[ 3.052691] console [ttyS0] enabled
[ 3.059293] pxa2xx-uart.1: ttyS1 at MMIO 0x40200000 (irq = 37, base_baud = 928571) is a UART2
[ 3.071727] pxa2xx-uart.2: ttyS2 at MMIO 0x40700000 (irq = 36, base_baud = 928571) is a UART3
[ 3.087282] nand: executing subop:
[ 3.093208] nand: ->CMD [0xff]
[ 3.097110] nand: ->WAITRDY [max 250 ms]
[ 3.102330] marvell-nfc pxa3xx-nand:
[ 3.102330] NDCR: 0x90079fff
[ 3.102330] NDCB0: 0x00a000ff
[ 3.102330] NDCB1: 0x00000000
[ 3.102330] NDCB2: 0x00000000
[ 3.102330] NDCB3: 0x00000000
[ 3.121601] nand: executing subop:
[ 3.125071] nand: ->CMD [0x90]
[ 3.128946] nand: ->ADDR [1 cyc: 00]
[ 3.133608] nand: ->DATA_IN [2 B, force 8-bit]
[ 3.138617] marvell-nfc pxa3xx-nand:
[ 3.138617] NDCR: 0x90079fff
[ 3.138617] NDCB0: 0x00610090
[ 3.138617] NDCB1: 0x00000000
[ 3.138617] NDCB2: 0x00000000
[ 3.138617] NDCB3: 0x00000000
[ 3.157454] nand: executing subop:
[ 3.161098] nand: ->CMD [0x90]
[ 3.164983] nand: ->ADDR [1 cyc: 00]
[ 3.169424] nand: ->DATA_IN [8 B, force 8-bit]
[ 3.174412] marvell-nfc pxa3xx-nand:
[ 3.174412] NDCR: 0x90079fff
[ 3.174412] NDCB0: 0x00610090
[ 3.174412] NDCB1: 0x00000000
[ 3.174412] NDCB2: 0x00000000
[ 3.174412] NDCB3: 0x00000000
[ 3.193079] nand: executing subop:
[ 3.196531] nand: ->CMD [0x90]
[ 3.200553] nand: ->ADDR [1 cyc: 20]
[ 3.204867] nand: ->DATA_IN [4 B, force 8-bit]
[ 3.209975] marvell-nfc pxa3xx-nand:
[ 3.209975] NDCR: 0x90079fff
[ 3.209975] NDCB0: 0x00610090
[ 3.209975] NDCB1: 0x00000020
[ 3.209975] NDCB2: 0x00000000
[ 3.209975] NDCB3: 0x00000000
[ 3.228598] nand: executing subop:
[ 3.232187] nand: ->CMD [0x90]
[ 3.236077] nand: ->ADDR [1 cyc: 40]
[ 3.240517] nand: ->DATA_IN [5 B, force 8-bit]
[ 3.245499] marvell-nfc pxa3xx-nand:
[ 3.245499] NDCR: 0x90079fff
[ 3.245499] NDCB0: 0x00610090
[ 3.245499] NDCB1: 0x00000040
[ 3.245499] NDCB2: 0x00000000
[ 3.245499] NDCB3: 0x00000000
[ 3.264138] nand: device found, Manufacturer ID: 0x20, Chip ID: 0xba
[ 3.270650] nand: ST Micro NAND 256MiB 1,8V 16-bit
[ 3.275491] nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[ 3.283219] marvell-nfc pxa3xx-nand: No minimum ECC strength, using 1b/512B
[ 3.290880] marvell-nfc pxa3xx-nand:
[ 3.290880] NDCR: 0xdd079fff
[ 3.290880] NDCB0: 0x000d3000
[ 3.290880] NDCB1: 0xffc00000
[ 3.290880] NDCB2: 0x00000001
[ 3.290880] NDCB3: 0x00000000
[ 3.310230] marvell-nfc pxa3xx-nand:
[ 3.310230] NDCR: 0xdd079fff
[ 3.310230] NDCB0: 0x000d3000
[ 3.310230] NDCB1: 0xff800000
[ 3.310230] NDCB2: 0x00000001
[ 3.310230] NDCB3: 0x00000000
[ 3.329329] marvell-nfc pxa3xx-nand:
[ 3.329329] NDCR: 0xdd079fff
[ 3.329329] NDCB0: 0x000d3000
[ 3.329329] NDCB1: 0xff400000
[ 3.329329] NDCB2: 0x00000001
[ 3.329329] NDCB3: 0x00000000
[ 3.348256] nand: ->exec_op() parser: pattern not found!
[ 3.353989] marvell-nfc pxa3xx-nand:
[ 3.353989] NDCR: 0xdd079fff
[ 3.353989] NDCB0: 0x000d3000
[ 3.353989] NDCB1: 0xff000000
[ 3.353989] NDCB2: 0x00000001
[ 3.353989] NDCB3: 0x00000000
[ 3.372907] nand: ->exec_op() parser: pattern not found!
[ 3.378445] marvell-nfc pxa3xx-nand:
... repeats many times ...
[ 3.666571] Bad block table not found for chip 0
[ 3.671368] Scanning device for bad blocks
[ 3.675540] nand: nand_do_read_oob: from = 0x00000000, len = 64
[ 3.681688] marvell-nfc pxa3xx-nand:
[ 3.681688] NDCR: 0x9d079fff
[ 3.681688] NDCB0: 0x000d3000
[ 3.681688] NDCB1: 0x00000000
[ 3.681688] NDCB2: 0x00000000
[ 3.681688] NDCB3: 0x00000000
[ 3.700570] Bad eraseblock 0 at 0x000000000000
[ 3.705096] nand: nand_do_read_oob: from = 0x00020000, len = 64
[ 3.711275] marvell-nfc pxa3xx-nand:
[ 3.711275] NDCR: 0x9d079fff
[ 3.711275] NDCB0: 0x000d3000
[ 3.711275] NDCB1: 0x00400000
[ 3.711275] NDCB2: 0x00000000
[ 3.711275] NDCB3: 0x00000000
[ 3.730190] nand: nand_do_read_oob: from = 0x00040000, len = 64
[ 3.736221] marvell-nfc pxa3xx-nand:
[ 3.736221] NDCR: 0x9d079fff
[ 3.736221] NDCB0: 0x000d3000
[ 3.736221] NDCB1: 0x00800000
[ 3.736221] NDCB2: 0x00000000
[ 3.736221] NDCB3: 0x00000000
[ 3.755106] Bad eraseblock 2 at 0x000000040000
[ 3.759786] nand: nand_do_read_oob: from = 0x00060000, len = 64
[ 3.765804] marvell-nfc pxa3xx-nand:
[ 3.765804] NDCR: 0x9d079fff
[ 3.765804] NDCB0: 0x000d3000
[ 3.765804] NDCB1: 0x00c00000
[ 3.765804] NDCB2: 0x00000000
[ 3.765804] NDCB3: 0x00000000
[ 3.784670] Bad eraseblock 3 at 0x000000060000
[ 3.789346] nand: nand_do_read_oob: from = 0x00080000, len = 64
[ 3.795363] marvell-nfc pxa3xx-nand:
[ 3.795363] NDCR: 0x9d079fff
[ 3.795363] NDCB0: 0x000d3000
[ 3.795363] NDCB1: 0x01000000
[ 3.795363] NDCB2: 0x00000000
[ 3.795363] NDCB3: 0x00000000
[ 3.814234] Bad eraseblock 4 at 0x000000080000
... repeats many times ...
More information about the linux-arm-kernel
mailing list