Skip to content

Commit

Permalink
ARM: 5845/1: l2x0: check whether l2x0 already enabled
Browse files Browse the repository at this point in the history
If running in non-secure mode accessing
some registers of l2x0 will fault. So
check if l2x0 is already enabled, if so
do not access those secure registers.

Signed-off-by: srinidhi kasagar <srinidhi.kasagar@stericsson.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Srinidhi Kasagar authored and Russell King committed Dec 3, 2009
1 parent 1f739d7 commit 48371cd
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions arch/arm/mm/cache-l2x0.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,18 +99,25 @@ void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)

l2x0_base = base;

/* disable L2X0 */
writel(0, l2x0_base + L2X0_CTRL);
/*
* Check if l2x0 controller is already enabled.
* If you are booting from non-secure mode
* accessing the below registers will fault.
*/
if (!(readl(l2x0_base + L2X0_CTRL) & 1)) {

aux = readl(l2x0_base + L2X0_AUX_CTRL);
aux &= aux_mask;
aux |= aux_val;
writel(aux, l2x0_base + L2X0_AUX_CTRL);
/* l2x0 controller is disabled */

l2x0_inv_all();
aux = readl(l2x0_base + L2X0_AUX_CTRL);
aux &= aux_mask;
aux |= aux_val;
writel(aux, l2x0_base + L2X0_AUX_CTRL);

/* enable L2X0 */
writel(1, l2x0_base + L2X0_CTRL);
l2x0_inv_all();

/* enable L2X0 */
writel(1, l2x0_base + L2X0_CTRL);
}

outer_cache.inv_range = l2x0_inv_range;
outer_cache.clean_range = l2x0_clean_range;
Expand Down

0 comments on commit 48371cd

Please sign in to comment.