sync_write_buffer();
 }
 
-void dcache_invalidate_range(volatile void *start, size_t size)
+void invalidate_dcache_range(unsigned long start, unsigned long stop)
 {
-       unsigned long v, begin, end, linesz;
+       unsigned long v, linesz;
 
        linesz = CONFIG_SYS_DCACHE_LINESZ;
 
        /* You asked for it, you got it */
-       begin = (unsigned long)start & ~(linesz - 1);
-       end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1);
+       start = start & ~(linesz - 1);
+       stop = (stop + linesz - 1) & ~(linesz - 1);
 
-       for (v = begin; v < end; v += linesz)
+       for (v = start; v < stop; v += linesz)
                dcache_invalidate_line((void *)v);
 }
 
-void dcache_flush_range(volatile void *start, size_t size)
+void flush_dcache_range(unsigned long start, unsigned long stop)
 {
-       unsigned long v, begin, end, linesz;
+       unsigned long v, linesz;
 
        linesz = CONFIG_SYS_DCACHE_LINESZ;
 
        /* You asked for it, you got it */
-       begin = (unsigned long)start & ~(linesz - 1);
-       end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1);
+       start = start & ~(linesz - 1);
+       stop = (stop + linesz - 1) & ~(linesz - 1);
 
-       for (v = begin; v < end; v += linesz)
+       for (v = start; v < stop; v += linesz)
                dcache_flush_line((void *)v);
 
        sync_write_buffer();
 
  * Applies the above functions on all lines that are touched by the
  * specified virtual address range.
  */
-void dcache_invalidate_range(volatile void *start, size_t len);
 void dcache_clean_range(volatile void *start, size_t len);
-void dcache_flush_range(volatile void *start, size_t len);
 void icache_invalidate_range(volatile void *start, size_t len);
 
 static inline void dcache_flush_unlocked(void)
 
 
        switch (dir) {
        case DMA_BIDIRECTIONAL:
-               dcache_flush_range(vaddr, len);
+               flush_dcache_range((unsigned long)vaddr,
+                                  (unsigned long)vaddr + len);
                break;
        case DMA_TO_DEVICE:
                dcache_clean_range(vaddr, len);
                break;
        case DMA_FROM_DEVICE:
-               dcache_invalidate_range(vaddr, len);
+               invalidate_dcache_range((unsigned long)vaddr,
+                                       (unsigned long)vaddr + len);
                break;
        default:
                /* This will cause a linker error */
 
        printf("DMA: Using memory from 0x%08lx to 0x%08lx\n",
               dma_alloc_start, dma_alloc_end);
 
-       dcache_invalidate_range(cached(dma_alloc_start),
-                               dma_alloc_end - dma_alloc_start);
+       invalidate_dcache_range((unsigned long)cached(dma_alloc_start),
+                               dma_alloc_end);
 }
 
 void *dma_alloc_coherent(size_t len, unsigned long *handle)