[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