--- Quote Start ---
Moreover, the author is forgetting that the DMA is working in the physical address world,
so we need to set the pointers of descripters like
// desc->source = read_addr;
desc->source = virt_to_phys(read_addr);
// desc->destination = write_addr;
desc->destination = virt_to_phys(write_addr);
// desc->next = (unsigned int *)next;
desc->next = (unsigned int *)((unsigned long)next & 0x1fffffffUL);
and so on.
--- Quote End ---
The current altera_tse code works, but does not do this translation. Any idea why setting virtual addresses here actually does work?