Blackfin: fix dcache handling when doing dma memcpy's

Our dcache invalidate function doesn't just invalidate, it also flushes.
So rename the function accordingly and fix the dma_memcpy() function so it
doesn't inadvertently corrupt the data destination.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger
2008-10-06 03:35:44 -04:00
parent 68e5632494
commit 05b75e4883
3 changed files with 10 additions and 7 deletions

View File

@@ -175,19 +175,22 @@ void dma_memcpy_nocache(void *dst, const void *src, size_t count)
bfin_write_MDMA_D0_CONFIG(0);
bfin_write_MDMA_S0_CONFIG(0);
}
/* We should do a dcache invalidate on the destination after the dma, but since
* we lack such hardware capability, we'll flush/invalidate the destination
* before the dma and bank on the idea that u-boot is single threaded.
*/
void *dma_memcpy(void *dst, const void *src, size_t count)
{
if (dcache_status())
if (dcache_status()) {
blackfin_dcache_flush_range(src, src + count);
blackfin_dcache_flush_invalidate_range(dst, dst + count);
}
dma_memcpy_nocache(dst, src, count);
if (icache_status())
blackfin_icache_flush_range(dst, dst + count);
if (dcache_status())
blackfin_dcache_invalidate_range(dst, dst + count);
return dst;
}