[PATCH] ARM: l2x0: make sure I&D are not locked down on init
Will Deacon
will.deacon at arm.com
Sun Sep 4 08:09:25 EDT 2011
Hi Santosh,
On Sun, Sep 04, 2011 at 11:13:45AM +0100, Santosh wrote:
> diff --git a/arch/arm/include/asm/hardware/cache-l2x0.h
> b/arch/arm/include/asm/hardware/cache-l2x0.h
> index 16bd480..e04e947 100644
> --- a/arch/arm/include/asm/hardware/cache-l2x0.h
> +++ b/arch/arm/include/asm/hardware/cache-l2x0.h
> @@ -45,8 +45,10 @@
> #define L2X0_CLEAN_INV_LINE_PA 0x7F0
> #define L2X0_CLEAN_INV_LINE_IDX 0x7F8
> #define L2X0_CLEAN_INV_WAY 0x7FC
> -#define L2X0_LOCKDOWN_WAY_D 0x900
> -#define L2X0_LOCKDOWN_WAY_I 0x904
> +#define L2X0_LOCKDOWN_WAY_D0 0x900
> +#define L2X0_LOCKDOWN_WAY_D1 0x908
> +#define L2X0_LOCKDOWN_WAY_I0 0x904
> +#define L2X0_LOCKDOWN_WAY_I1 0x90C
Maybe you could macroify these to take the CPU number as an argument?
> diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
> index 44c0867..f95b269 100644
> --- a/arch/arm/mm/cache-l2x0.c
> +++ b/arch/arm/mm/cache-l2x0.c
> @@ -322,6 +322,12 @@ void __init l2x0_init(void __iomem *base, __u32
> aux_val, __u32 aux_mask)
> way_size = 1 << (way_size + 3);
> l2x0_size = ways * way_size * SZ_1K;
>
> + /* Clear the I and D lock-down way registers */
> + writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_D0);
> + writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_D1);
> + writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_I0);
> + writel_relaxed(0x0, l2x0_base + L2X0_LOCKDOWN_WAY_I1);
Then you could write this as a for loop from 0 to 7 for the PL310. For
L210/220 I think there's just a single register pair.
Will
More information about the linux-arm-kernel
mailing list