ARM: uniphier: export uniphier_cache_enable/disable functions
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Wed, 10 Aug 2016 07:08:42 +0000 (16:08 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Thu, 11 Aug 2016 08:49:25 +0000 (17:49 +0900)
The System Cache (outer cache) is used not only as L2 cache,
but also as locked SRAM.  The functions for turning on/off it
is necessary whether the L2 cache is enabled or not.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
arch/arm/mach-uniphier/arm32/cache-uniphier.c
arch/arm/mach-uniphier/arm32/cache-uniphier.h

index 66e9f6b9b7a8b1de5766f338d87a16b1905f8a8d..4bb7d951c0f409f145da13b76212d2a3135e99e7 100644 (file)
@@ -130,6 +130,28 @@ void uniphier_cache_touch_zero_range(u32 start, u32 end, u32 ways)
                                   UNIPHIER_SSCOQM_CM_TOUCH_ZERO);
 }
 
+static void uniphier_cache_endisable(int enable)
+{
+       u32 tmp;
+
+       tmp = readl(UNIPHIER_SSCC);
+       if (enable)
+               tmp |= UNIPHIER_SSCC_ON;
+       else
+               tmp &= ~UNIPHIER_SSCC_ON;
+       writel(tmp, UNIPHIER_SSCC);
+}
+
+void uniphier_cache_enable(void)
+{
+       uniphier_cache_endisable(1);
+}
+
+void uniphier_cache_disable(void)
+{
+       uniphier_cache_endisable(0);
+}
+
 #ifdef CONFIG_UNIPHIER_L2CACHE_ON
 void v7_outer_cache_flush_all(void)
 {
@@ -176,21 +198,13 @@ void v7_outer_cache_inval_range(u32 start, u32 end)
 
 void v7_outer_cache_enable(void)
 {
-       u32 tmp;
-
        writel(U32_MAX, UNIPHIER_SSCLPDAWCR);   /* activate all ways */
-       tmp = readl(UNIPHIER_SSCC);
-       tmp |= UNIPHIER_SSCC_ON;
-       writel(tmp, UNIPHIER_SSCC);
+       uniphier_cache_enable();
 }
 
 void v7_outer_cache_disable(void)
 {
-       u32 tmp;
-
-       tmp = readl(UNIPHIER_SSCC);
-       tmp &= ~UNIPHIER_SSCC_ON;
-       writel(tmp, UNIPHIER_SSCC);
+       uniphier_cache_disable();
 }
 #endif
 
index f67f6ae7eb3142c8a3b03137e7e005e6e2874e00..733cd80dc55978fe8bdbf23fd1fb24ecbbead725 100644 (file)
@@ -13,5 +13,7 @@
 void uniphier_cache_prefetch_range(u32 start, u32 end, u32 ways);
 void uniphier_cache_touch_range(u32 start, u32 end, u32 ways);
 void uniphier_cache_touch_zero_range(u32 start, u32 end, u32 ways);
+void uniphier_cache_enable(void);
+void uniphier_cache_disable(void);
 
 #endif /* __CACHE_UNIPHIER_H */