diff options
author | Robert Tivy <rtivy@ti.com> | 2015-01-06 18:07:47 -0800 |
---|---|---|
committer | Robert Tivy <rtivy@ti.com> | 2015-01-06 18:07:47 -0800 |
commit | 55e1fad1d8afca1b26f1da3499aa99814452a92d (patch) | |
tree | 8c53632fed6c19edc4dbe628ffadb33afc55f678 | |
parent | 4f3e5fab22012d4326b31754aa8ee430d31ad250 (diff) | |
download | linuxutils-55e1fad1d8afca1b26f1da3499aa99814452a92d.tar.gz |
Fix cache handling code
Cache handling code was using the wrong physical address.
Cache invalidations need to use outer/inner operation ordering (was
reversed).
-rw-r--r-- | src/cmem/module/cmemk.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/cmem/module/cmemk.c b/src/cmem/module/cmemk.c index 53e7a92..03e8eeb 100644 --- a/src/cmem/module/cmemk.c +++ b/src/cmem/module/cmemk.c @@ -1474,9 +1474,8 @@ alloc: */ virtp_end = virtp + size; #if 1 + outer_inv_range(physp, physp + size); dmac_map_area(virtp, size, DMA_FROM_DEVICE); - outer_inv_range(__pa((u32)virtp), - __pa((u32)virtp_end)); #else dma_sync_single_for_device(NULL, (dma_addr_t)physp, size, DMA_FROM_DEVICE); #endif @@ -1750,8 +1749,7 @@ alloc: case CMEM_IOCCACHEWB: #if 1 dmac_map_area(virtp, block.size, DMA_TO_DEVICE); - outer_clean_range(__pa((u32)virtp), - __pa((u32)virtp + block.size)); + outer_clean_range(physp, physp + block.size); #else dma_sync_single_for_device(NULL, (dma_addr_t)physp, block.size, DMA_TO_DEVICE); #endif @@ -1762,9 +1760,8 @@ alloc: case CMEM_IOCCACHEINV: #if 1 + outer_inv_range(physp, physp + block.size); dmac_map_area(virtp, block.size, DMA_FROM_DEVICE); - outer_inv_range(__pa((u32)virtp), - __pa((u32)virtp + block.size)); #else dma_sync_single_for_device(NULL, (dma_addr_t)physp, block.size, DMA_FROM_DEVICE); #endif @@ -1776,8 +1773,7 @@ alloc: case CMEM_IOCCACHEWBINV: #if 1 dmac_map_area(virtp, block.size, DMA_BIDIRECTIONAL); - outer_flush_range(__pa((u32)virtp), - __pa((u32)virtp + block.size)); + outer_flush_range(physp, physp + block.size); #else dma_sync_single_for_device(NULL, (dma_addr_t)physp, block.size, DMA_TO_DEVICE); dma_sync_single_for_device(NULL, (dma_addr_t)physp, block.size, DMA_FROM_DEVICE); |