Commit 384a290283fde63ba8dc671fca5420111cdac19a seems to break 11MPCore boot

Nicolas Pitre nicolas.pitre at linaro.org
Wed Jan 30 16:02:06 EST 2013


On Wed, 30 Jan 2013, Russell King - ARM Linux wrote:

> Right... this is what my current set of patches to make things work
> again looks like... and still there's more problems to go...
> 
[...]
> diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c
> index 36ae03a..87dfa90 100644
> --- a/arch/arm/common/gic.c
> +++ b/arch/arm/common/gic.c
> @@ -351,6 +351,25 @@ void __init gic_cascade_irq(unsigned int gic_nr, unsigned int irq)
>  	irq_set_chained_handler(irq, gic_handle_cascade_irq);
>  }
>  
> +static u8 gic_get_cpumask(struct gic_chip_data *gic)
> +{
> +	void __iomem *base = gic_data_dist_base(gic);
> +	u32 mask, i;
> +
> +	for (i = mask = 0; i < 32; i += 4) {
> +		mask = readl_relaxed(base + GIC_DIST_TARGET + i);
> +		mask |= mask >> 16;
> +		mask |= mask >> 8;
> +		if (mask)
> +			break;
> +	}
> +
> +	if (!mask)
> +		pr_crit("GIC CPU mask not found - kernel will fail to boot.\n");
> +
> +	return mask;
> +}
> +
>  static void __init gic_dist_init(struct gic_chip_data *gic)
>  {
>  	unsigned int i;
> @@ -369,7 +388,9 @@ static void __init gic_dist_init(struct gic_chip_data *gic)
>  	/*
>  	 * Set all global interrupts to this CPU only.
>  	 */
> -	cpumask = readl_relaxed(base + GIC_DIST_TARGET + 0);
> +	cpumask = gic_get_cpumask(gic);
> +	cpumask |= cpumask << 8;
> +	cpumask |= cpumask << 16;
>  	for (i = 32; i < gic_irqs; i += 4)
>  		writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * 4 / 4);
>  
> @@ -400,7 +421,7 @@ static void __cpuinit gic_cpu_init(struct gic_chip_data *gic)
>  	 * Get what the GIC says our CPU mask is.
>  	 */
>  	BUG_ON(cpu >= NR_GIC_CPU_IF);
> -	cpu_mask = readl_relaxed(dist_base + GIC_DIST_TARGET + 0);
> +	cpu_mask = gic_get_cpumask(gic);
>  	gic_cpu_map[cpu] = cpu_mask;
>  
>  	/*

For the above...

Reviewed-by: Nicolas Pitre <nico at linaro.org>

I'm not familiar with Realview and the other issues being fixed.


Nicolas



More information about the linux-arm-kernel mailing list