错误:
macb e000b000.ethernet eth0: DMA bus error: HRESP not OK
分析:
如果DMA传输驻留在小于0x00080000的内存地址中的数据,则会出现错误。根据Zynq-7000参考手册(UG585),DMA不应访问0x00000000至0x0007ffff的地址范围(对于0x00000000至0x0003ffff的地址范围:地址由SCU过滤并且OCM映射为高)。
解决:
打开linux-xlnx-xilinx-v2016.4\arch\arm\mach-zynq\common.c
将地址修改为0x80000;
/**
* zynq_memory_init - Initialize special memory
*
* We need to stop things allocating the low memory as DMA can't work in
* the 1st 512K of memory.
*/
static void __init zynq_memory_init(void)
{
if (!__pa(PAGE_OFFSET))
memblock_reserve(__pa(PAGE_OFFSET), 0x80000);
//memblock_reserve(__pa(PAGE_OFFSET),__pa(swapper_pg_dir));
}