Clear the flag immediately before cache operation to not depend on
the previous state.

Signed-off-by: Masahiro Yamada <[email protected]>
---

 arch/arm/mach-uniphier/arm32/cache_uniphier.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-uniphier/arm32/cache_uniphier.c 
b/arch/arm/mach-uniphier/arm32/cache_uniphier.c
index 4398114..3d984a7 100644
--- a/arch/arm/mach-uniphier/arm32/cache_uniphier.c
+++ b/arch/arm/mach-uniphier/arm32/cache_uniphier.c
@@ -19,6 +19,9 @@ static void uniphier_cache_sync(void)
 
 static void uniphier_cache_maint_all(u32 operation)
 {
+       /* clear the complete notification flag */
+       writel(SSCOLPQS_EF, SSCOLPQS);
+
        /* try until the command is successfully set */
        do {
                writel(SSCOQM_S_ALL | SSCOQM_CE | operation, SSCOQM);
@@ -28,9 +31,6 @@ static void uniphier_cache_maint_all(u32 operation)
        while (readl(SSCOLPQS) != SSCOLPQS_EF)
                ;
 
-       /* clear the complete notification flag */
-       writel(SSCOLPQS_EF, SSCOLPQS);
-
        uniphier_cache_sync();
 }
 
@@ -46,6 +46,9 @@ void v7_outer_cache_inval_all(void)
 
 static void __uniphier_cache_maint_range(u32 start, u32 size, u32 operation)
 {
+       /* clear the complete notification flag */
+       writel(SSCOLPQS_EF, SSCOLPQS);
+
        /* try until the command is successfully set */
        do {
                writel(SSCOQM_S_ADDRESS | SSCOQM_CE | operation, SSCOQM);
@@ -57,9 +60,6 @@ static void __uniphier_cache_maint_range(u32 start, u32 size, 
u32 operation)
        /* wait until the operation is completed */
        while (readl(SSCOLPQS) != SSCOLPQS_EF)
                ;
-
-       /* clear the complete notification flag */
-       writel(SSCOLPQS_EF, SSCOLPQS);
 }
 
 static void uniphier_cache_maint_range(u32 start, u32 end, u32 operation)
-- 
1.9.1

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to