|
@@ -192,6 +192,26 @@ void uniphier_cache_inv_way(u32 ways)
|
|
|
UNIPHIER_SSCOQM_CM_INV);
|
|
|
}
|
|
|
|
|
|
+void uniphier_cache_set_active_ways(int cpu, u32 active_ways)
|
|
|
+{
|
|
|
+ void __iomem *base = (void __iomem *)UNIPHIER_SSCC + 0xc00;
|
|
|
+
|
|
|
+ switch (readl(UNIPHIER_SSCID)) { /* revision */
|
|
|
+ case 0x11: /* sLD3 */
|
|
|
+ base = (void __iomem *)UNIPHIER_SSCC + 0x870;
|
|
|
+ break;
|
|
|
+ case 0x12: /* LD4 */
|
|
|
+ case 0x16: /* sld8 */
|
|
|
+ base = (void __iomem *)UNIPHIER_SSCC + 0x840;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ base = (void __iomem *)UNIPHIER_SSCC + 0xc00;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ writel(active_ways, base + 4 * cpu);
|
|
|
+}
|
|
|
+
|
|
|
static void uniphier_cache_endisable(int enable)
|
|
|
{
|
|
|
u32 tmp;
|
|
@@ -260,7 +280,7 @@ void v7_outer_cache_inval_range(u32 start, u32 end)
|
|
|
|
|
|
void v7_outer_cache_enable(void)
|
|
|
{
|
|
|
- writel(U32_MAX, UNIPHIER_SSCLPDAWCR); /* activate all ways */
|
|
|
+ uniphier_cache_set_active_ways(0, U32_MAX); /* activate all ways */
|
|
|
uniphier_cache_enable();
|
|
|
}
|
|
|
|