Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b0882d52 authored by Venkata Narendra Kumar Gutta's avatar Venkata Narendra Kumar Gutta
Browse files

pinctrl: Add affinity callbacks to msm pinctrl IRQ chip



Wake-up capable IRQs are not being migrated when a CPU is hot-plugged.
Add affinity callbacks to msm pinctrl IRQ chip, to update the affinity
of these wake-up capable IRQs.

Change-Id: Ic0892d583b567c7d6a2c7ab7fa9d75502c3f3a7a
Signed-off-by: default avatarVenkata Narendra Kumar Gutta <vnkgutta@codeaurora.org>
parent 137970ca
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -925,6 +925,29 @@ static int msm_gpio_irq_set_wake(struct irq_data *d, unsigned int on)
	return 0;
}

static int msm_gpio_irq_set_affinity(struct irq_data *d,
				const struct cpumask *dest, bool force)
{
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);

	if (d->parent_data && test_bit(d->hwirq, pctrl->wakeup_masked_irqs))
		return irq_chip_set_affinity_parent(d, dest, force);

	return 0;
}

static int msm_gpio_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
{
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);

	if (d->parent_data && test_bit(d->hwirq, pctrl->wakeup_masked_irqs))
		return irq_chip_set_vcpu_affinity_parent(d, vcpu_info);

	return 0;
}

static void msm_gpio_irq_handler(struct irq_desc *desc)
{
	struct gpio_chip *gc = irq_desc_get_handler_data(desc);
@@ -1110,6 +1133,8 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
	pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;
	pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;
	pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
	pctrl->irq_chip.irq_set_affinity = msm_gpio_irq_set_affinity;
	pctrl->irq_chip.irq_set_vcpu_affinity = msm_gpio_irq_set_vcpu_affinity;

	chip->irq.chip = &pctrl->irq_chip;
	chip->irq.handler = handle_edge_irq;