ARM926EJS: Make asm routines volatile in cache ops
PATCH 1/2 ARM926EJS: Make asm routines volatile in cache ops
We certainly don't want the compiler to reorganise the code for dcache flushing.
--- arch/arm/cpu/arm926ejs/cache.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/cpu/arm926ejs/cache.c +1 -1
@@ -82,7 +82,7 @@ void flush_dcache_range(unsigned long start, unsigned long stop) start +=CONFIG_SYS_CACHELINE_SIZE ; } - asm("mcr p15, 0, %0, c7, c10, 4\n" ::"r" (0 )); + asmvolatile ("mcr p15, 0, %0, c7, c10, 4\n" ::"r" (0 )); }void flush_cache (unsigned long start,unsigned long size)
Signature · 1 line
1.7.9.1
PATCH 2/2 ARM926EJS: Fix cache.c to comply with checkpatch.pl
--- arch/arm/cpu/arm926ejs/cache.c | 17 ++++++++--------- 1 files changed, 8 insertions(+), 9 deletions(-)
arch/arm/cpu/arm926ejs/cache.c +8 -9
@@ -30,7 +30,7 @@void invalidate_dcache_all (void ) { - asmvolatile ("mcr p15, 0, %0, c7, c6, 0\n" ::"r" (0 )); + asmvolatile ("mcr p15, 0, %0, c7, c6, 0\n" : :"r" (0 )); }void flush_dcache_all (void )
@@ -40,7 +40,7 @@ void flush_dcache_all(void) "mrc p15, 0, r15, c7, c14, 3\n" "bne 0b\n" "mcr p15, 0, %0, c7, c10, 4\n" - ::"r"(0):"memory" + : : "r"(0) : "memory" ); }
@@ -67,7 +67,7 @@ void invalidate_dcache_range(unsigned long start, unsigned long stop)return ;while (start < stop) { - asmvolatile ("mcr p15, 0, %0, c7, c6, 1\n" ::"r" (start)); + asmvolatile ("mcr p15, 0, %0, c7, c6, 1\n" : :"r" (start)); start +=CONFIG_SYS_CACHELINE_SIZE ; } }
@@ -78,11 +78,11 @@ void flush_dcache_range(unsigned long start, unsigned long stop)return ;while (start < stop) { - asmvolatile ("mcr p15, 0, %0, c7, c14, 1\n" ::"r" (start)); + asmvolatile ("mcr p15, 0, %0, c7, c14, 1\n" : :"r" (start)); start +=CONFIG_SYS_CACHELINE_SIZE ; } - asmvolatile ("mcr p15, 0, %0, c7, c10, 4\n" ::"r" (0 )); + asmvolatile ("mcr p15, 0, %0, c7, c10, 4\n" : :"r" (0 )); }void flush_cache (unsigned long start,unsigned long size)
@@ -114,8 +114,7 @@ void flush_cache(unsigned long start, unsigned long size)/* * Stub implementations for l2 cache operations */ -void __l2_cache_disable (void ) -{ -} +void __l2_cache_disable (void ) {} +void l2_cache_disable (void ) - __attribute__((weak,alias ("__l2_cache_disable" ))); + __attribute__((weak,alias ("__l2_cache_disable" )));
Signature · 1 line
1.7.9.1
PATCH 1/2 ARM926EJS: Make asm routines volatile in cache ops
In reply to Marek Vasut-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120406/9d40e3a7/attachment.pgp>
PATCH 1/2 ARM926EJS: Make asm routines volatile in cache ops
In reply to Marek VasutQuoted 14 lines · Marek Vasut
We certainly don't want the compiler to reorganise the code for dcache flushing.
Signed-off-by Marek Vasut <[email protected]>Cc Stefano Babic <[email protected]>Cc Albert ARIBAUD <[email protected]>--- arch/arm/cpu/arm926ejs/cache.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)arch/arm/cpu/arm926ejs/cache.c +0
-0
arch/arm/cpu/arm926ejs/cache.c void flush_dcache_range(unsigned long start, unsigned long stop) · line 88
Quoted 8 lines
arch/arm/cpu/arm926ejs/cache.c +1
-1@@ -82,7 +82,7 @@ void flush_dcache_range(unsigned long start, unsigned long stop) start +=CONFIG_SYS_CACHELINE_SIZE ; } - asm("mcr p15, 0, %0, c7, c10, 4\n" ::"r" (0 )); + asmvolatile ("mcr p15, 0, %0, c7, c10, 4\n" ::"r" (0 )); }void flush_cache (unsigned long start,unsigned long size)
Thanks to point this issue - the same happens on MX3x. I will send a patch (ptch for cache in ARM1136 is already merged).
Stefano
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================