Skip to content

Commit e4d1481

Browse files
committed
pinctrl: rp1: Support interrupt CPU affinity
See: #6077 Signed-off-by: Phil Elwell <[email protected]>
1 parent 8df639a commit e4d1481

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

drivers/pinctrl/pinctrl-rp1.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,29 @@ static void rp1_gpio_irq_ack(struct irq_data *data)
894894
writel(RP1_GPIO_CTRL_IRQRESET, pin->gpio + RP1_SET_OFFSET + RP1_GPIO_CTRL);
895895
}
896896

897+
static int rp1_gpio_irq_set_affinity(struct irq_data *data, const struct cpumask *dest, bool force)
898+
{
899+
struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
900+
struct rp1_pinctrl *pc = gpiochip_get_data(chip);
901+
const struct rp1_iobank_desc *bank;
902+
struct irq_data *parent_data = NULL;
903+
int i;
904+
905+
for (i = 0; i < 3; i++) {
906+
bank = &rp1_iobanks[i];
907+
if (data->hwirq >= bank->min_gpio &&
908+
data->hwirq < bank->min_gpio + bank->num_gpios) {
909+
parent_data = irq_get_irq_data(pc->irq[i]);
910+
break;
911+
}
912+
}
913+
914+
if (parent_data && parent_data->chip->irq_set_affinity)
915+
return parent_data->chip->irq_set_affinity(parent_data, dest, force);
916+
917+
return -EINVAL;
918+
}
919+
897920
static struct irq_chip rp1_gpio_irq_chip = {
898921
.name = MODULE_NAME,
899922
.irq_enable = rp1_gpio_irq_enable,
@@ -902,6 +925,7 @@ static struct irq_chip rp1_gpio_irq_chip = {
902925
.irq_ack = rp1_gpio_irq_ack,
903926
.irq_mask = rp1_gpio_irq_disable,
904927
.irq_unmask = rp1_gpio_irq_enable,
928+
.irq_set_affinity = rp1_gpio_irq_set_affinity,
905929
.flags = IRQCHIP_IMMUTABLE,
906930
};
907931

0 commit comments

Comments
 (0)