[PATCH 1/2] ARM: realview: Fix PBX-A9 cache description

Mark Rutland mark.rutland at arm.com
Thu Jul 21 08:00:07 PDT 2016


On Fri, Jul 15, 2016 at 01:19:12PM +0100, Robin Murphy wrote:
> Clearly QEMU is very permissive in how its PL310 model may be set up,
> but the real hardware turns out to be far more particular about things
> actually being correct. Fix up the DT description so that the real
> thing actually boots:
> 
> - The arm,data-latency and arm,tag-latency properties need 3 cells to
>   be valid, otherwise we end up retaining the default 8-cycle latencies
>   which leads pretty quickly to lockup.
> - The arm,dirty-latency property is only relevant to L210/L220, so get
>   rid of it.
> - The cache geometry override also leads to lockup and/or general
>   misbehaviour. Irritatingly, the manual doesn't state the actual PL310
>   configuration, but based on the boardfile code and poking registers
>   from the Boot Monitor, it would seem to be 8 sets of 16KB ways.
> 
> With that, we can successfully boot to enjoy the fun of mismatched FPUs...
> 
> Signed-off-by: Robin Murphy <robin.murphy at arm.com>

Prior to this patch, v4.7-rc6 would lock up immediately after:

[    0.000000] L2C OF: override cache size: 1048576 bytes (1024KB)
[    0.000000] L2C OF: override line size: 32 bytes
[    0.000000] L2C OF: override way size: 131072 bytes (128KB)
[    0.000000] L2C OF: override associativity: 8
[    0.000000] L2C: DT/platform modifies aux control register: 0x02020000 -> 0x02080000
[    0.000000] L2C: DT/platform tries to modify or specify cache size
[    0.000000] L2C-310 errata 588369 769419 enabled
[    0.000000] L2C-310 full line of zeros enabled for Cortex-A9
[    0.000000] L2C-310 cache controller enabled, 8 ways, 1024 kB

With this patch, I make it all the way to userspace. I have a Debian Wheezy
armel image which seems happy on the board so far.

So FWIW:

Tested-by: Mark Rutland <mark.rutland at arm.com>

Thanks,
Mark.

> ---
>  arch/arm/boot/dts/arm-realview-pbx-a9.dts | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/arm-realview-pbx-a9.dts b/arch/arm/boot/dts/arm-realview-pbx-a9.dts
> index db808f92dd79..90d00b407f85 100644
> --- a/arch/arm/boot/dts/arm-realview-pbx-a9.dts
> +++ b/arch/arm/boot/dts/arm-realview-pbx-a9.dts
> @@ -70,13 +70,12 @@
>  		 * associativity as these may be erroneously set
>  		 * up by boot loader(s).
>  		 */
> -		cache-size = <1048576>; // 1MB
> -		cache-sets = <4096>;
> +		cache-size = <131072>; // 128KB
> +		cache-sets = <512>;
>  		cache-line-size = <32>;
>  		arm,parity-disable;
> -		arm,tag-latency = <1>;
> -		arm,data-latency = <1 1>;
> -		arm,dirty-latency = <1>;
> +		arm,tag-latency = <1 1 1>;
> +		arm,data-latency = <1 1 1>;
>  	};
>  
>  	scu: scu at 1f000000 {
> -- 
> 2.8.1.dirty
> 



More information about the linux-arm-kernel mailing list