961-4-pinctrl-rp1-Support-interrupt-CPU-affinity.patch 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. From 086480cc43b9d967647b237a84623b27b8850a64 Mon Sep 17 00:00:00 2001
  2. From: Phil Elwell <[email protected]>
  3. Date: Wed, 3 Apr 2024 23:16:47 +0100
  4. Subject: [PATCH 4/5] pinctrl: rp1: Support interrupt CPU affinity
  5. See: https://github.com/raspberrypi/linux/issues/6077
  6. Signed-off-by: Phil Elwell <[email protected]>
  7. ---
  8. drivers/pinctrl/pinctrl-rp1.c | 24 ++++++++++++++++++++++++
  9. 1 file changed, 24 insertions(+)
  10. --- a/drivers/pinctrl/pinctrl-rp1.c
  11. +++ b/drivers/pinctrl/pinctrl-rp1.c
  12. @@ -894,6 +894,29 @@ static void rp1_gpio_irq_ack(struct irq_
  13. writel(RP1_GPIO_CTRL_IRQRESET, pin->gpio + RP1_SET_OFFSET + RP1_GPIO_CTRL);
  14. }
  15. +static int rp1_gpio_irq_set_affinity(struct irq_data *data, const struct cpumask *dest, bool force)
  16. +{
  17. + struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
  18. + struct rp1_pinctrl *pc = gpiochip_get_data(chip);
  19. + const struct rp1_iobank_desc *bank;
  20. + struct irq_data *parent_data = NULL;
  21. + int i;
  22. +
  23. + for (i = 0; i < 3; i++) {
  24. + bank = &rp1_iobanks[i];
  25. + if (data->hwirq >= bank->min_gpio &&
  26. + data->hwirq < bank->min_gpio + bank->num_gpios) {
  27. + parent_data = irq_get_irq_data(pc->irq[i]);
  28. + break;
  29. + }
  30. + }
  31. +
  32. + if (parent_data && parent_data->chip->irq_set_affinity)
  33. + return parent_data->chip->irq_set_affinity(parent_data, dest, force);
  34. +
  35. + return -EINVAL;
  36. +}
  37. +
  38. static struct irq_chip rp1_gpio_irq_chip = {
  39. .name = MODULE_NAME,
  40. .irq_enable = rp1_gpio_irq_enable,
  41. @@ -902,6 +925,7 @@ static struct irq_chip rp1_gpio_irq_chip
  42. .irq_ack = rp1_gpio_irq_ack,
  43. .irq_mask = rp1_gpio_irq_disable,
  44. .irq_unmask = rp1_gpio_irq_enable,
  45. + .irq_set_affinity = rp1_gpio_irq_set_affinity,
  46. .flags = IRQCHIP_IMMUTABLE,
  47. };