Skip to contentSkip to conversation

arc/cache: really do flush_dcache_all() even if IOC exists

PATCH New Alexey Brodkin 1 participant 2 messages Apr 18, 2016 – Apr 21, 2016 Synopsys ARC architecture

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 arc/cache: really do flush_dcache_all() even if IOC exists

flush_dcache_all() is used in the very end of U-Boot self relocation to write back all copied and then patched code and data to their new location in the very end of available memory space.

Since that has nothing to do with IO (i.e. no external DMA happens here) IOC won't help here and we need to write back data cache contents manually.

---
 arch/arc/lib/cache.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)
arch/arc/lib/cache.c +2 -5
index 56988dd..d1fb661 100644
@@ -430,13 +430,10 @@ void invalidate_dcache_all(void)
 
 void flush_dcache_all(void)
 {
-#ifdef CONFIG_ISA_ARCV2
-	if (!ioc_exists)
-#endif
-		__dc_entire_op(OP_FLUSH);
+	__dc_entire_op(OP_FLUSH);
 
 #ifdef CONFIG_ISA_ARCV2
-	if (slc_exists && !ioc_exists)
+	if (slc_exists)
 		__slc_entire_op(OP_FLUSH);
 #endif
 }
Signature · 1 line
2.5.5
author Applied
#1 lore raw

PATCH 1/1 arc/cache: really do flush_dcache_all() even if IOC exists

Hi,

Quoted 30 lines · Alexey Brodkin

flush_dcache_all() is used in the very end of U-Boot self relocation to write back all copied and then patched code and data to their new location in the very end of available memory space.

Since that has nothing to do with IO (i.e. no external DMA happens here) IOC won't help here and we need to write back data cache contents manually.

---
?arch/arc/lib/cache.c | 7 ++-----
?1 file changed, 2 insertions(+), 5 deletions(-)

arch/arc/lib/cache.c +0 -0
index 56988dd..d1fb661 100644
@@ -430,13 +430,10 @@ void invalidate_dcache_all(void)

?
?void flush_dcache_all(void)
?{

arch/arc/lib/cache.c +1 -4
-#ifdef CONFIG_ISA_ARCV2
-	if (!ioc_exists)
-#endif
-		__dc_entire_op(OP_FLUSH);
+	__dc_entire_op(OP_FLUSH);

?
?#ifdef CONFIG_ISA_ARCV2

arch/arc/lib/cache.c +1 -1
-	if (slc_exists && !ioc_exists)
+	if (slc_exists)
Quoted 3 lines

? __slc_entire_op(OP_FLUSH);
?#endif
?}

Applied, thanks!

-Alexey