Skip to content

Commit dca4f40

Browse files
Venkata Narendra Kumar Guttalinusw
authored andcommitted
pinctrl: qcom: Add affinity callbacks to msmgpio IRQ chip
Wakeup capable GPIO IRQs routed via PDC are not being migrated when a CPU is hotplugged. Add affinity callbacks to msmgpio IRQ chip to update the affinity of wakeup capable IRQs. Fixes: e35a6ae ("pinctrl/msm: Setup GPIO chip in hierarchy") Signed-off-by: Venkata Narendra Kumar Gutta <[email protected]> [mkshah: updated commit text and minor code fixes] Signed-off-by: Maulik Shah <[email protected]> Tested-by: Douglas Anderson <[email protected]> Reviewed-by: Stephen Boyd <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Linus Walleij <[email protected]>
1 parent 9cd3472 commit dca4f40

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

drivers/pinctrl/qcom/pinctrl-msm.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,6 +1034,29 @@ static void msm_gpio_irq_relres(struct irq_data *d)
10341034
module_put(gc->owner);
10351035
}
10361036

1037+
static int msm_gpio_irq_set_affinity(struct irq_data *d,
1038+
const struct cpumask *dest, bool force)
1039+
{
1040+
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1041+
struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
1042+
1043+
if (d->parent_data && test_bit(d->hwirq, pctrl->skip_wake_irqs))
1044+
return irq_chip_set_affinity_parent(d, dest, force);
1045+
1046+
return 0;
1047+
}
1048+
1049+
static int msm_gpio_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
1050+
{
1051+
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1052+
struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
1053+
1054+
if (d->parent_data && test_bit(d->hwirq, pctrl->skip_wake_irqs))
1055+
return irq_chip_set_vcpu_affinity_parent(d, vcpu_info);
1056+
1057+
return 0;
1058+
}
1059+
10371060
static void msm_gpio_irq_handler(struct irq_desc *desc)
10381061
{
10391062
struct gpio_chip *gc = irq_desc_get_handler_data(desc);
@@ -1132,6 +1155,8 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
11321155
pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
11331156
pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;
11341157
pctrl->irq_chip.irq_release_resources = msm_gpio_irq_relres;
1158+
pctrl->irq_chip.irq_set_affinity = msm_gpio_irq_set_affinity;
1159+
pctrl->irq_chip.irq_set_vcpu_affinity = msm_gpio_irq_set_vcpu_affinity;
11351160

11361161
np = of_parse_phandle(pctrl->dev->of_node, "wakeup-parent", 0);
11371162
if (np) {

0 commit comments

Comments
 (0)