[U-Boot-Users] [PATCH][RFC] lib_ppc: make the flush_cache stronger
Dave Liu
r63238 at freescale.com
Tue Apr 15 07:22:03 CEST 2008
Current flush_cache code does
1. clean the dcache with dcbst, but not invalidate dcache
2. invalidate icache
This patch use the dcbf instead of dcbst to have stronger
semantic, clean the dcache and invalidate dcache.
Signed-off-by: Dave Liu <daveliu at freescale.com>
---
To meet DMA safe operation on cache enabled system, such as
DMA_TO_DEVICE/DMA_FROM_DEVICE/DMA_BIDIRECTIONAL
We have two options:
1. Separate functions for them like linux kernel.
A. clean dcache (dcbst) for DMA_TO_DEVICE
B. invalidate dcache (dcbi) for DMA_FROM_DEVICE
C. flush dcache (dcbf) for DMA_BIDIRECTIONAL.
2. Make current flush_cache stronger semanctic.
use the dcbf instead of dcbst.
Which one is better? or you have better option?
Please suggest.
Thanks,
Dave
lib_ppc/cache.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib_ppc/cache.c b/lib_ppc/cache.c
index 27e1a82..f4039ba 100644
--- a/lib_ppc/cache.c
+++ b/lib_ppc/cache.c
@@ -34,9 +34,9 @@ void flush_cache (ulong start_addr, ulong size)
for (addr = start_addr;
addr < end_addr;
addr += CFG_CACHELINE_SIZE) {
- asm ("dcbst 0,%0": :"r" (addr));
+ asm ("dcbf 0,%0": :"r" (addr));
}
- asm ("sync"); /* Wait for all dcbst to complete on bus */
+ asm ("sync"); /* Wait for all dcbf to complete on bus */
for (addr = start_addr;
addr < end_addr;
--
1.5.4.rc4
More information about the U-Boot
mailing list