It looks like consistent_sync() is off by one on arm as the dmac
functions are being called with start and end instead of start and length.
Also posted to linux-arm-kernel mailing list:
http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2005-November/032037.html
void consistent_sync(void *vaddr, size_t size, int direction)
{
unsigned long start = (unsigned long)vaddr;
- unsigned long end = start + size;
+ unsigned long end = start + size - 1;
switch (direction) {
case DMA_FROM_DEVICE: /* invalidate only */