diff mbox

[U-Boot] arc/cache: really do flush_dcache_all() even if IOC exists

Message ID 1460975319-6187-1-git-send-email-abrodkin@synopsys.com
State Accepted, archived
Commit 2a8382c6fe7ddf0e15791b3ffa5f390a674a212b
Delegated to: Alexey Brodkin
Headers show

Commit Message

Alexey Brodkin April 18, 2016, 10:28 a.m. UTC
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.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
---
 arch/arc/lib/cache.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

Comments

Alexey Brodkin April 21, 2016, 5:12 p.m. UTC | #1
Hi,

On Mon, 2016-04-18 at 13:28 +0300, Alexey Brodkin wrote:
> 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.
> 
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> ---
>  arch/arc/lib/cache.c | 7 ++-----
>  1 file changed, 2 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arc/lib/cache.c b/arch/arc/lib/cache.c
> index 56988dd..d1fb661 100644
> --- a/arch/arc/lib/cache.c
> +++ b/arch/arc/lib/cache.c
> @@ -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
>  }

Applied, thanks!

-Alexey
diff mbox

Patch

diff --git a/arch/arc/lib/cache.c b/arch/arc/lib/cache.c
index 56988dd..d1fb661 100644
--- a/arch/arc/lib/cache.c
+++ b/arch/arc/lib/cache.c
@@ -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
 }