diff options
-rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 6421e728f4b4..5ab972567ef6 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -257,10 +257,44 @@ static void __init imx6q_map_io(void) | |||
257 | imx_scu_map_io(); | 257 | imx_scu_map_io(); |
258 | } | 258 | } |
259 | 259 | ||
260 | #ifdef CONFIG_CACHE_L2X0 | ||
261 | static void __init imx6q_init_l2cache(void) | ||
262 | { | ||
263 | void __iomem *l2x0_base; | ||
264 | struct device_node *np; | ||
265 | unsigned int val; | ||
266 | |||
267 | np = of_find_compatible_node(NULL, NULL, "arm,pl310-cache"); | ||
268 | if (!np) | ||
269 | goto out; | ||
270 | |||
271 | l2x0_base = of_iomap(np, 0); | ||
272 | if (!l2x0_base) { | ||
273 | of_node_put(np); | ||
274 | goto out; | ||
275 | } | ||
276 | |||
277 | /* Configure the L2 PREFETCH and POWER registers */ | ||
278 | val = readl_relaxed(l2x0_base + L2X0_PREFETCH_CTRL); | ||
279 | val |= 0x70800000; | ||
280 | writel_relaxed(val, l2x0_base + L2X0_PREFETCH_CTRL); | ||
281 | val = L2X0_DYNAMIC_CLK_GATING_EN | L2X0_STNDBY_MODE_EN; | ||
282 | writel_relaxed(val, l2x0_base + L2X0_POWER_CTRL); | ||
283 | |||
284 | iounmap(l2x0_base); | ||
285 | of_node_put(np); | ||
286 | |||
287 | out: | ||
288 | l2x0_of_init(0, ~0UL); | ||
289 | } | ||
290 | #else | ||
291 | static inline void imx6q_init_l2cache(void) {} | ||
292 | #endif | ||
293 | |||
260 | static void __init imx6q_init_irq(void) | 294 | static void __init imx6q_init_irq(void) |
261 | { | 295 | { |
262 | imx6q_init_revision(); | 296 | imx6q_init_revision(); |
263 | l2x0_of_init(0, ~0UL); | 297 | imx6q_init_l2cache(); |
264 | imx_src_init(); | 298 | imx_src_init(); |
265 | imx_gpc_init(); | 299 | imx_gpc_init(); |
266 | irqchip_init(); | 300 | irqchip_init(); |