diff options
Diffstat (limited to 'arch/arm/mach-imx/system.c')
-rw-r--r-- | arch/arm/mach-imx/system.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c index 6fe81bb4d3c9..64ff37ea72b1 100644 --- a/arch/arm/mach-imx/system.c +++ b/arch/arm/mach-imx/system.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <asm/system_misc.h> | 27 | #include <asm/system_misc.h> |
28 | #include <asm/proc-fns.h> | 28 | #include <asm/proc-fns.h> |
29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
30 | #include <asm/hardware/cache-l2x0.h> | ||
30 | 31 | ||
31 | #include "common.h" | 32 | #include "common.h" |
32 | #include "hardware.h" | 33 | #include "hardware.h" |
@@ -95,3 +96,35 @@ void __init mxc_arch_reset_init_dt(void) | |||
95 | 96 | ||
96 | clk_prepare(wdog_clk); | 97 | clk_prepare(wdog_clk); |
97 | } | 98 | } |
99 | |||
100 | #ifdef CONFIG_CACHE_L2X0 | ||
101 | void __init imx_init_l2cache(void) | ||
102 | { | ||
103 | void __iomem *l2x0_base; | ||
104 | struct device_node *np; | ||
105 | unsigned int val; | ||
106 | |||
107 | np = of_find_compatible_node(NULL, NULL, "arm,pl310-cache"); | ||
108 | if (!np) | ||
109 | goto out; | ||
110 | |||
111 | l2x0_base = of_iomap(np, 0); | ||
112 | if (!l2x0_base) { | ||
113 | of_node_put(np); | ||
114 | goto out; | ||
115 | } | ||
116 | |||
117 | /* Configure the L2 PREFETCH and POWER registers */ | ||
118 | val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL); | ||
119 | val |= 0x70800000; | ||
120 | writel_relaxed(val, l2x0_base + L2X0_PREFETCH_CTRL); | ||
121 | val = L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN; | ||
122 | writel_relaxed(val, l2x0_base + L2X0_POWER_CTRL); | ||
123 | |||
124 | iounmap(l2x0_base); | ||
125 | of_node_put(np); | ||
126 | |||
127 | out: | ||
128 | l2x0_of_init(0, ~0UL); | ||
129 | } | ||
130 | #endif | ||