--- Quote Start ---
Hi,
In the kernel, a physical address 0x00000000 is translated to the virtual address 0xc0000000 for cached area or 0xe0000000 for non-cached area. For the DMA registers, we must convert these virtual addresses to physical ones again, but the range of physical addresses are limited within 0x00000000~0x1fffffff (that means totally 512MBytes), so the DMA does not use upper 3 bits. Thus we don't need to use the function virt_to_phys(...), because the DMA and Avalon bus will ignore upper 3bits automatically, but this is wrong from the view point of the logic.
Kazu
--- Quote End ---
Thanks for the explanation Kazu, I was getting to that conclusion. Just to clarify -- these are kernel virtual addresses (e.g. from kmalloc()) if given an address from vmalloc() this would not work, right?