[BUG] pxa3xx: wait time out when scanning for bb

Sean Nyekjær sean.nyekjaer at prevas.dk
Mon Dec 11 22:36:40 PST 2017


Hi Greg
>
> I am not completely up-to-date on this, but everything in your traces 
> reads like the same issue I was having on bringup for Armada 385 nand 
> (under 4.9). I've been stuck on another project, so I haven't had time 
> to follow up further, but I just diffed against linux-stable v4.12 
> pxa3xx_nand.c and it looks like the problem is still there.
>
> As far as I can see, the driver is broken for OOB reads when BCH is 
> enabled because the setup in prepare_set_command() results in 
> drain_fifo() not reading enough words from the read fifo in the nfc2 
> IP block.
>
> The patch we are using is below. I have the following in my DTS. 
> nand-keep-config is commented out because I was having some issues 
> with u-boot at the time and it may no longer be relevant:
> flash at d0000 {
> status = "okay";
> num-cs = <1>;
> //marvell,nand-keep-config;
> marvell,nand-enable-arbiter;
> nand-on-flash-bbt;
> nand-ecc-strength = <4>;
> nand-ecc-step-size = <512>;
> };
>
> --- /home/user/build/linux-stable/drivers/mtd/nand/pxa3xx_nand.c
> +++ 
> /home/user/build/beam/openwrt/build_dir/target-arm_cortex-a9+vfpv3_musl_eabi/linux-mvebu/linux-4.9.34/drivers/mtd/nand/pxa3xx_nand.c
> @@ -668,7 +669,7 @@
>  static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int 
> len)
>  {
> -if (info->ecc_bch) {
> +if (info->use_ecc && info->ecc_bch) {
> u32 val;
> int ret;
> @@ -1012,7 +1014,11 @@
> if (info->cur_chunk < info->nfullchunks) {
> info->step_chunk_size = info->chunk_size;
> -info->step_spare_size = info->spare_size;
> +if (info->use_ecc) {
> +info->step_spare_size = info->spare_size;
> +} else {
> +info->step_spare_size = info->spare_size + info->ecc_size;
> +}
> } else {
> info->step_chunk_size = info->last_chunk_size;
> info->step_spare_size = info->last_spare_size;
>
> Regards,
> Greg
>
This patch does indeed fix our issues :-)
I'm able to run the nanddump command without any timeouts and
run without bbt (not that i would prefer that).

root at output-module:~# nanddump -oa /dev/mtd1
ECC failed: 0
ECC corrected: 0
Number of bad blocks: 0
Number of bbt blocks: 8
Block size 131072, page size 2048, OOB size 64
Dumping data starting at 0x00000000 and ending at 0x0ff00000...
UBIXS

Please submit a patch.

Thanks
/Sean



More information about the linux-mtd mailing list