[PATCH 1/1] irqchip: irq-gic: forward SGI to itself for cortex-a7 single core

Marc Zyngier marc.zyngier at arm.com
Tue Aug 16 09:48:36 PDT 2016


On 16/08/16 17:29, Fabio Estevam wrote:
> Hi Marc,
> 
> On Tue, Aug 9, 2016 at 5:54 AM, Marc Zyngier <marc.zyngier at arm.com> wrote:
> 
>> From 23ba8b645d219e333a10224d74fb5d8d75d67de2 Mon Sep 17 00:00:00 2001
>> From: Marc Zyngier <marc.zyngier at arm.com>
>> Date: Tue, 9 Aug 2016 07:50:44 +0100
>> Subject: [PATCH] irqchip/gic: Allow self-SGIs for SMP on UP configurations
>>
>> On systems where a single CPU is present, the GIC may not support
>> having SGIs delivered to a target list. In that case, we use the
>> self-SGI mechanism to allow the interrupt to be delivered locally.
>>
>> Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
>> ---
>>  drivers/irqchip/irq-gic.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
>> index c2cab57..390fac5 100644
>> --- a/drivers/irqchip/irq-gic.c
>> +++ b/drivers/irqchip/irq-gic.c
>> @@ -769,6 +769,13 @@ static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
>>         int cpu;
>>         unsigned long flags, map = 0;
>>
>> +       if (unlikely(nr_cpu_ids == 1)) {
>> +               /* Only one CPU? let's do a self-IPI... */
>> +               writel_relaxed(2 << 24 | irq,
>> +                              gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT);
>> +               return;
>> +       }
>> +
>>         raw_spin_lock_irqsave(&irq_controller_lock, flags);
> 
> With this patch applied 'reboot' command works fine, but now after
> going into suspend mode, it reboots automatically.
> 
> # echo mem > /sys/power/state
> [  285.299792] PM: Syncing filesystems ... done.
> [  285.397549] Freezing user space processes ... (elapsed 0.007 seconds) done.
> [  285.412868] Double checking all user space processes after OOM
> killer disable... (elapsed 0.000 seconds)
> [  285.423597] Freezing remaining freezable tasks ... (elapsed 0.008
> seconds) done.
> [  285.523882] PM: suspend of devices complete after 78.037 msecs
> [  285.529926] PM: suspend devices took 0.090 seconds
> [  285.542638] PM: late suspend of devices complete after 7.799 msecs
> [  285.557131] PM: noirq suspend of devices complete after 8.105 msecs
> [  285.563589] Disabling non-boot CPUs ...
> 
> 
> U-Boot 2016.07 (Aug 02 2016 - 17:50:40 -0300)
> 
> CPU:   Freescale i.MX6UL rev1.0 at 396 MHz
> Reset cause: POR
> Board: PICO-IMX6UL-EMMC
> DRAM:  256 MiB
> MMC:   FSL_SDHC: 0
> In:    serial
> Out:   serial
> Err:   serial
> Net:   CPU Net Initialization Failed
> No ethernet found.
> Hit any key to stop autoboot:  0
> 

Maybe because you now have a pending interrupt that you don't handle,
making your WFI exit immediately? Sorry, but without more information,
it is pretty hard to guess what's happening.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...



More information about the linux-arm-kernel mailing list