• Thomas Petazzoni's avatar
    irqchip/armada-370-xp: Fix regression by clearing IRQ_NOAUTOEN · 353d6d6c
    Thomas Petazzoni authored
    Commit d17cab44 ("irqchip: Kill off set_irq_flags usage") changed
    the code of armada_370_xp_mpic_irq_map() from using set_irq_flags() to
    irq_set_probe().
    
    While the commit log seems to imply that there are no functional
    changes, there are indeed functional changes introduced by this
    commit: the IRQ_NOAUTOEN flag is no longer cleared. This functional
    change causes a regression on Armada XP, which no longer works
    properly after suspend/resume because per-CPU interrupts remain
    disabled.
    
    Due to how the hardware registers work, the irq-armada-370-xp cannot
    simply save/restore a bunch of registers at suspend/resume to make
    sure that the interrupts remain in the same state after
    resuming. Therefore, it relies on the kernel to say whether the
    interrupt is disabled or not, using the irqd_irq_disabled()
    function. This was all working fine while the IRQ_NOAUTOEN flag was
    cleared.
    
    With the change introduced by Rob Herring in d17cab44, the
    IRQ_NOAUTOEN flag is now set for all interrupts. irqd_irq_disabled()
    returns false for per-CPU interrupts, and therefore our per-CPU
    interrupts are no longer re-enabled after resume.
    
    This commit works around this problem by clearing again the
    IRQ_NOAUTOEN flags, so that we are back to the situation we had before
    commit d17cab44. This work around is proposed as a minimal fix
    for the problem, while a better long-term solution is being worked on.
    
    Fixes: d17cab44 "irqchip: Kill off set_irq_flags usage"
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Link: https://lkml.kernel.org/r/1445435295-19956-1-git-send-email-thomas.petazzoni@free-electrons.comSigned-off-by: default avatarJason Cooper <jason@lakedaemon.net>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    353d6d6c
irq-armada-370-xp.c 16.3 KB