[Q] block / zynq: DMA bouncing
Jason Gunthorpe
jgunthorpe at obsidianresearch.com
Tue Jan 28 13:34:24 EST 2014
On Tue, Jan 28, 2014 at 01:48:27PM +0000, Russell King - ARM Linux wrote:
> On Tue, Jan 28, 2014 at 02:28:28PM +0100, Guennadi Liakhovetski wrote:
> > +static void __init zynq_memory_init(void)
> > +{
> > + /*
> > + * Reserve the 0-0x4000 addresses (before page tables and kernel)
> > + * which can't be used for DMA
> > + */
> > + if (!__pa(PAGE_OFFSET))
> > + memblock_reserve(0, 0x4000);
>
> Or maybe this:
>
> memblock_reserve(__pa(PAGE_OFFSET), __pa(swapper_pg_dir));
>
> since that's actually what you mean here.
Can you have a non-zero PAGE_OFFSET and swapper_pg_dir != 0x4000?
Crash dump kernel maybe?
Perhaps:
if (__pa(PAGE_OFFSET) < 0x8000)
memblock_reserve(__pa(PAGE_OFFSET),
min(__pa(swapper_pg_dir), 0x8000));
?
The Zynq TRM, UG585 pg 115, describes this issue. Physical addresses
below 0x8000 are not accessible to DMA from the AXI interconnect.
Though, how does a crash dump kernel know it needs to bounce buffer
the swapper if it dumps it via DMA?
Regards,
Jason
More information about the linux-arm-kernel
mailing list