gpio: sifive: Set affinity callback to parent
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 17 Nov 2020 21:33:50 +0000 (22:33 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 4 Dec 2020 08:05:12 +0000 (09:05 +0100)
This assigns the .irq_set_affinity to the parent callback.
I assume the sifive GPIO can be used in systems with
SMP.

I used the pattern making the hirerarchy tolerant for missing
parent as in Marc's earlier patches.

Suggested-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Cc: Yash Shah <yash.shah@sifive.com>
Cc: Wesley W. Terpstra <wesley@sifive.com>
Link: https://lore.kernel.org/r/20201117213351.249668-1-linus.walleij@linaro.org
drivers/gpio/gpio-sifive.c

index d5eb9ca..c7d47e4 100644 (file)
@@ -128,6 +128,16 @@ static void sifive_gpio_irq_eoi(struct irq_data *d)
        irq_chip_eoi_parent(d);
 }
 
+static int sifive_gpio_irq_set_affinity(struct irq_data *data,
+                                       const struct cpumask *dest,
+                                       bool force)
+{
+       if (data->parent_data)
+               return irq_chip_set_affinity_parent(data, dest, force);
+
+       return -EINVAL;
+}
+
 static struct irq_chip sifive_gpio_irqchip = {
        .name           = "sifive-gpio",
        .irq_set_type   = sifive_gpio_irq_set_type,
@@ -136,6 +146,7 @@ static struct irq_chip sifive_gpio_irqchip = {
        .irq_enable     = sifive_gpio_irq_enable,
        .irq_disable    = sifive_gpio_irq_disable,
        .irq_eoi        = sifive_gpio_irq_eoi,
+       .irq_set_affinity = sifive_gpio_irq_set_affinity,
 };
 
 static int sifive_gpio_child_to_parent_hwirq(struct gpio_chip *gc,