• Grygorii Strashko's avatar
    genirq/PM: Restore system wake up from chained interrupts · 4717f133
    Grygorii Strashko authored
    Commit e509bd7d ("genirq: Allow migration of chained interrupts
    by installing default action") breaks PCS wake up IRQ behaviour on
    TI OMAP based platforms (dra7-evm).
    
    TI OMAP IRQ wake up configuration:
    GIC-irqchip->PCM_IRQ
      |- omap_prcm_register_chain_handler
         |- PRCM-irqchip -> PRCM_IO_IRQ
            |- pcs_irq_chain_handler
               |- pinctrl-irqchip -> PCS_uart1_wakeup_irq
    
    This happens because IRQ PM code (irq/pm.c) is expected to ignore
    chained interrupts by default:
      static bool suspend_device_irq(struct irq_desc *desc)
      {
    	if (!desc->action || desc->no_suspend_depth)
    		return false;
     - it's expected !desc->action = true for chained interrupts;
    
    but, after above change, all chained interrupt descriptors will
    have default action handler installed - chained_action.
    As result, chained interrupts will be silently disabled during system
    suspend.
    
    Hence, fix it by introducing helper function irq_desc_is_chained() and
    use it in suspend_device_irq() for chained interrupts identification
    and skip them, once detected.
    
    Fixes: e509bd7d ("genirq: Allow migration of chained interrupts..")
    Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
    Reviewed-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Cc: Tony Lindgren <tony@atomide.com>
    Cc: <nsekhar@ti.com>
    Cc: <linux-arm-kernel@lists.infradead.org>
    Cc: Tony Lindgren <tony@atomide.com>
    Link: http://lkml.kernel.org/r/1447149492-20699-1-git-send-email-grygorii.strashko@ti.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    4717f133
internals.h 6.58 KB