[PATCH 00/21] Armada 370/XP NAND support

Ezequiel Garcia ezequiel.garcia at free-electrons.com
Thu Sep 19 17:17:29 EDT 2013


On Thu, Sep 19, 2013 at 07:47:42PM +0200, Daniel Mack wrote:
> On 19.09.2013 18:01, Ezequiel Garcia wrote:
> 
> > Ezequiel Garcia (21):
> >   mtd: nand: pxa3xx: Allocate data buffer on detected flash size
> >   mtd: nand: pxa3xx: Disable OOB on arbitrary length commands
> >   mtd: nand: pxa3xx: Use a completion to signal device ready
> >   mtd: nand: pxa3xx: Add bad block handling
> >   mtd: nand: pxa3xx: Add driver-specific ECC BCH support
> >   mtd: nand: pxa3xx: Configure detected pages-per-block
> >   mtd: nand: pxa3xx: Clear cmd buffer #3 (NDCB3) on command start
> >   mtd: nand: pxa3xx: Make config menu show supported platforms
> >   mtd: nand: pxa3xx: Split FIFO size from to-be-read FIFO count
> >   mtd: nand: pxa3xx: Replace host->page_size by mtd->writesize
> >   mtd: nand: pxa3xx: Add helper function to set page address
> >   mtd: nand: pxa3xx: Remove READ0 switch/case falltrough
> >   mtd: nand: pxa3xx: Split prepare_command_pool() in two stages
> >   mtd: nand: pxa3xx: Move the data buffer clean to
> >     prepare_start_command()
> >   mtd: nand: pxa3xx: Add a read/write buffers markers
> >   mtd: nand: pxa3xx: Introduce multiple page I/O support
> >   mtd: nand: pxa3xx: Add multiple chunk write support
> 
> Your patches work fine on my board with CONFIG_HAS_DMA=n.
> 
> However, it seems that with CONFIG_HAS_DMA=y, pxa3xx_nand_irq() is now
> called before pxa3xx_nand_init_buff(), which results in a NULL pointer
> dereference.

Yup, the problem is very clear: pxa3xx_nand_irq() is now called before
pxa3xx_nand_init_buff() because there must be a first device detection
to know which size the page will be. Then pxa3xx_nand_init_buff() is
called with this detected page size.

See the first patch "Allocate data buffer on detected flash size", which
removes the need to always allocate a buffer as big as the biggest page,
and tries to be smarter.

Of course, this doesn't work for DMA transfers. I guess the first device
detection should be done by PIO always.

If you agree with this I'll re-work the patches.

Thanks for testing!
-- 
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com



More information about the linux-mtd mailing list