ソースを参照

ARM: uniphier: clear notification flag before L2 operation

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

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Masahiro Yamada 8 年 前
コミット
ebab100a98
1 ファイル変更6 行追加6 行削除
  1. 6 6
      arch/arm/mach-uniphier/arm32/cache_uniphier.c

+ 6 - 6
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)