• Jon Hunter's avatar
    gpio: tegra186: Don't set parent IRQ affinity · bdbe871e
    Jon Hunter authored
    When hotplugging CPUs on Tegra186 and Tegra194 errors such as the
    following are seen ...
    
     IRQ63: set affinity failed(-22).
     IRQ65: set affinity failed(-22).
     IRQ66: set affinity failed(-22).
     IRQ67: set affinity failed(-22).
    
    Looking at the /proc/interrupts the above are all interrupts associated
    with GPIOs. The reason why these error messages occur is because there
    is no 'parent_data' associated with any of the GPIO interrupts and so
    tegra186_irq_set_affinity() simply returns -EINVAL.
    
    To understand why there is no 'parent_data' it is first necessary to
    understand that in addition to the GPIO interrupts being routed to the
    interrupt controller (GIC), the interrupts for some GPIOs are also
    routed to the Tegra Power Management Controller (PMC) to wake up the
    system from low power states. In order to configure GPIO events as
    wake events in the PMC, the PMC is configured as IRQ parent domain
    for the GPIO IRQ domain. Originally the GIC was the IRQ parent domain
    of the PMC and although this was working, this started causing issues
    once commit 64a267e9 ("irqchip/gic: Configure SGIs as standard
    interrupts") was added, because technically, the GIC is not a parent
    of the PMC. Commit c351ab7b ("soc/tegra: pmc: Don't create fake
    interrupt hierarchy levels") fixed this by severing the IRQ domain
    hierarchy for the Tegra GPIOs and hence, there may be no IRQ parent
    domain for the GPIOs.
    
    The GPIO controllers on Tegra186 and Tegra194 have either one or six
    interrupt lines to the interrupt controller. For GPIO controllers with
    six interrupts, the mapping of the GPIO interrupt to the controller
    interrupt is configurable within the GPIO controller. Currently a
    default mapping is used, however, it could be possible to use the
    set affinity callback for the Tegra186 GPIO driver to do something a
    bit more interesting. Currently, because interrupts for all GPIOs are
    have the same mapping and any attempts to configure the affinity for
    a given GPIO can conflict with another that shares the same IRQ, for
    now it is simpler to just remove set affinity support and this avoids
    the above warnings being seen.
    
    Cc: <stable@vger.kernel.org>
    Fixes: c4e1f7d9 ("gpio: tegra186: Set affinity callback to parent")
    Signed-off-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
    bdbe871e
gpio-tegra186.c 23.7 KB