[PATCH] ARM: CSR: call l2x0_of_init to init L2 cache of SiRFprimaII

Rob Herring robherring2 at gmail.com
Tue Sep 13 09:59:27 EDT 2011


On 09/13/2011 04:10 AM, Barry Song wrote:
> Cc: Rob Herring <robherring2 at gmail.com>
> Signed-off-by: Barry Song <Baohua.Song at csr.com>
> ---
> 
> This patch depends on:
> [1]Rob Herring
> ARM: 7009/1: l2x0: Add OF based initialization
> http://www.spinics.net/lists/arm-kernel/msg131123.html
> it has been in rmk/for-next
> 
> [2]Barry Song
> ARM: CACHE-L2X0: filter start address can be 0 and is often 0
> http://www.spinics.net/lists/arm-kernel/msg140126.html
> this patch fixes the filter start address error of Rob Herring'patch
> 
>  arch/arm/mach-prima2/l2x0.c |   48 ++----------------------------------------
>  1 files changed, 3 insertions(+), 45 deletions(-)
> 
> diff --git a/arch/arm/mach-prima2/l2x0.c b/arch/arm/mach-prima2/l2x0.c
> index 9cda205..5587958 100644
> --- a/arch/arm/mach-prima2/l2x0.c
> +++ b/arch/arm/mach-prima2/l2x0.c
> @@ -8,52 +8,10 @@
>  
>  #include <linux/init.h>
>  #include <linux/kernel.h>
> -#include <linux/io.h>
> -#include <linux/errno.h>
> -#include <linux/of.h>
> -#include <linux/of_address.h>
>  #include <asm/hardware/cache-l2x0.h>
> -#include <mach/memory.h>
>  
> -#define L2X0_ADDR_FILTERING_START       0xC00
> -#define L2X0_ADDR_FILTERING_END         0xC04
> -
> -static struct of_device_id l2x_ids[]  = {
> -	{ .compatible = "arm,pl310-cache" },
> -};
> -
> -static int __init sirfsoc_of_l2x_init(void)
> +static int __init sirfsoc_l2x0_init(void)
>  {
> -	struct device_node *np;
> -	void __iomem *sirfsoc_l2x_base;
> -
> -	np = of_find_matching_node(NULL, l2x_ids);
> -	if (!np)
> -		panic("unable to find compatible l2x node in dtb\n");
> -
> -	sirfsoc_l2x_base = of_iomap(np, 0);
> -	if (!sirfsoc_l2x_base)
> -		panic("unable to map l2x cpu registers\n");
> -
> -	of_node_put(np);
> -
> -	if (!(readl_relaxed(sirfsoc_l2x_base + L2X0_CTRL) & 1)) {
> -		/*
> -		 * set the physical memory windows L2 cache will cover
> -		 */
> -		writel_relaxed(PLAT_PHYS_OFFSET + 1024 * 1024 * 1024,
> -			sirfsoc_l2x_base + L2X0_ADDR_FILTERING_END);
> -		writel_relaxed(PLAT_PHYS_OFFSET | 0x1,
> -			sirfsoc_l2x_base + L2X0_ADDR_FILTERING_START);
> -
> -		writel_relaxed(0,
> -			sirfsoc_l2x_base + L2X0_TAG_LATENCY_CTRL);
> -		writel_relaxed(0,
> -			sirfsoc_l2x_base + L2X0_DATA_LATENCY_CTRL);
> -	}
> -	l2x0_init((void __iomem *)sirfsoc_l2x_base, 0x00040000,
> -		0x00000000);
> -
> -	return 0;
> +	return l2x0_of_init(0x40000, 0);
>  }
> -early_initcall(sirfsoc_of_l2x_init);
> +early_initcall(sirfsoc_l2x0_init);

This needs to be called from a prima2 function that is only run for this
platform rather than an initcall. This will run all platforms in a
single kernel build. However, the that's not really a new problem with
this patch, so you could fix in a follow-on patch.

Rob




More information about the linux-arm-kernel mailing list