• Claudiu Beznea's avatar
    irqchip/renesas-rzg2l: Add support for suspend to RAM · 74d2ef5f
    Claudiu Beznea authored
    The irqchip-renesas-rzg2l driver is used on RZ/G3S SoC. RZ/G3S can go into
    deep sleep states where power to different SoC's parts is cut off and RAM
    is switched to self-refresh. The resume from these states is done with the
    help of the bootloader.
    
    The IA55 IRQ controller needs to be reconfigured when resuming from deep
    sleep state. For this the IA55 registers are cached in suspend and restored
    in resume.
    
    The IA55 IRQ controller is connected to GPIO controller and GIC as follows:
    
                                          ┌──────────┐          ┌──────────┐
                                          │          │ SPIX     │          │
                                          │          ├─────────►│          │
                                          │          │          │          │
                                          │          │          │          │
                  ┌────────┐IRQ0-7        │  IA55    │          │  GIC     │
     Pin0 ───────►│        ├─────────────►│          │          │          │
                  │        │              │          │ PPIY     │          │
     ...          │  GPIO  │              │          ├─────────►│          │
                  │        │GPIOINT0-127  │          │          │          │
     PinN ───────►│        ├─────────────►│          │          │          │
                  └────────┘              └──────────┘          └──────────┘
    
    where:
      - Pin0 is the first GPIO controller pin
      - PinN is the last GPIO controller pin
    
      - SPIX is the SPI interrupt with identifier X
      - PPIY is the PPI interrupt with identifier Y
    
    Implement suspend/resume functionality with syscore_ops to be able to
    cache/restore the registers after/before the GPIO controller suspend/resume
    functions are invoked.
    
    As the syscore_ops suspend/resume functions do not take any argument make
    the driver private data static so it can be accessed from the
    suspend/resume functions.
    
    The IA55 interrupt controller is resumed before the GPIO controller. As
    GPIO pins could be in an a state which causes spurious interrupts, the
    reconfiguration of the interrupt controller is restricted to restore the
    interrupt type and leave them disabled.
    
    An eventually required interrupt enable operation will be done as part of
    the GPIO controller resume function after restoring the GPIO state.
    
    [ tglx: Massaged changelog ]
    Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20231120111820.87398-8-claudiu.beznea.uj@bp.renesas.com
    74d2ef5f
irq-renesas-rzg2l.c 11.7 KB