Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: tegra: Fix irq_set_affinity

The irq_set_affinity callback should not be set if parent IRQ domain
doesn't present because gpio-tegra driver callback fails in this case,
causing a noisy error messages on system suspend:

Disabling non-boot CPUs ...
IRQ 26: no longer affine to CPU1
IRQ128: set affinity failed(-22).
IRQ130: set affinity failed(-22).
IRQ131: set affinity failed(-22).
IRQ 27: no longer affine to CPU2
IRQ128: set affinity failed(-22).
IRQ130: set affinity failed(-22).
IRQ131: set affinity failed(-22).
IRQ 28: no longer affine to CPU3
IRQ128: set affinity failed(-22).
IRQ130: set affinity failed(-22).
IRQ131: set affinity failed(-22).
Entering suspend state LP1

Hence just don't specify the irq_set_affinity callback if parent PMC
IRQ domain is missing. Tegra isn't capable of setting affinity per GPIO,
affinity could be set only per GPIO bank, thus there is nothing to do
for gpio-tegra in regards to CPU affinity without the parent IRQ domain.

Tested-by: Peter Geis <pgwipeout@gmail.com> # Ouya T30
Tested-by: Matt Merhar <mattmerhar@protonmail.com> # Ouya T30
Tested-by: Dmitry Osipenko <digetx@gmail.com> # A500 T20 and Nexus7 T30
Fixes: efcdca286eef ("gpio: tegra: Convert to gpio_irq_chip")
Reported-by: Matt Merhar <mattmerhar@protonmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>

authored by

Dmitry Osipenko and committed by
Bartosz Golaszewski
94de03cc 4a6eac2b

+2 -1
+2 -1
drivers/gpio/gpio-tegra.c
··· 703 703 #ifdef CONFIG_PM_SLEEP 704 704 tgi->ic.irq_set_wake = tegra_gpio_irq_set_wake; 705 705 #endif 706 - tgi->ic.irq_set_affinity = tegra_gpio_irq_set_affinity; 707 706 tgi->ic.irq_request_resources = tegra_gpio_irq_request_resources; 708 707 tgi->ic.irq_release_resources = tegra_gpio_irq_release_resources; 709 708 ··· 756 757 757 758 if (!irq->parent_domain) 758 759 return -EPROBE_DEFER; 760 + 761 + tgi->ic.irq_set_affinity = tegra_gpio_irq_set_affinity; 759 762 } 760 763 761 764 tgi->regs = devm_platform_ioremap_resource(pdev, 0);