• Tony Lindgren's avatar
    ARM: OMAP5+: Fix inverted nirq pin interrupts with irq_set_type · 1b1de8b9
    Tony Lindgren authored
    commit d0243693 upstream.
    
    Commit 83a86fbb ("irqchip/gic: Loudly complain about the use of
    IRQ_TYPE_NONE") started warning about incorrect dts usage for irqs.
    ARM GIC only supports active-high interrupts for SPI (Shared Peripheral
    Interrupts), and the Palmas PMIC by default is active-low.
    
    Palmas PMIC allows changing the interrupt polarity using register
    PALMAS_POLARITY_CTRL_INT_POLARITY, but configuring sys_nirq1 with
    a pull-down and setting PALMAS_POLARITY_CTRL_INT_POLARITY made the
    Palmas RTC interrupts stop working. This can be easily tested with
    kernel tools rtctest.c.
    
    Turns out the SoC inverts the sys_nirq pins for GIC as they do not go
    through a peripheral device but go directly to the MPUSS wakeupgen.
    I've verified this by muxing the interrupt line temporarily to gpio_wk16
    instead of sys_nirq1. with a gpio, the interrupt works fine both
    active-low and active-high with the SoC internal pull configured and
    palmas polarity configured. But as sys_nirq1, the interrupt only works
    when configured ACTIVE_LOW for palmas, and ACTIVE_HIGH for GIC.
    
    Note that there was a similar issue earlier with tegra114 and palmas
    interrupt polarity that got fixed by commit df545d1c ("mfd: palmas:
    Provide irq flags through DT/platform data"). However, the difference
    between omap5 and tegra114 is that tegra inverts the palmas interrupt
    twice, once when entering tegra PMC, and again when exiting tegra PMC
    to GIC.
    
    Let's fix the issue by adding a custom wakeupgen_irq_set_type() for
    wakeupgen and invert any interrupts with wrong polarity. Let's also
    warn about any non-sysnirq pins using wrong polarity. Note that we
    also need to update the dts for the level as IRQ_TYPE_NONE never
    has irq_set_type() called, and let's add some comments and use proper
    pin nameing to avoid more confusion later on.
    
    Cc: Belisko Marek <marek.belisko@gmail.com>
    Cc: Dmitry Lifshitz <lifshitz@compulab.co.il>
    Cc: "Dr. H. Nikolaus Schaller" <hns@goldelico.com>
    Cc: Jon Hunter <jonathanh@nvidia.com>
    Cc: Keerthy <j-keerthy@ti.com>
    Cc: Laxman Dewangan <ldewangan@nvidia.com>
    Cc: Nishanth Menon <nm@ti.com>
    Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
    Cc: Richard Woodruff <r-woodruff2@ti.com>
    Cc: Santosh Shilimkar <ssantosh@kernel.org>
    Cc: Tero Kristo <t-kristo@ti.com>
    Cc: Thierry Reding <treding@nvidia.com>
    Cc: stable@vger.kernel.org # v4.17+
    Reported-by: default avatarBelisko Marek <marek.belisko@gmail.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    1b1de8b9
omap-wakeupgen.c 16.1 KB