Re: [PATCH 2/2] irqchip: qcom-pdc: Disconnect domain hierarchy for GPIO_NO_WAKE_IRQs

From: Marc Zyngier
Date: Wed Aug 18 2021 - 05:34:31 EST


Hi Maulik,

In the future, please always add a cover-letter email if sending a
series that has more than a single patch. This considerably helps the
tracking, and gives you an opportunity to explain what you are doing.

On Tue, 17 Aug 2021 11:19:06 +0100,
Maulik Shah <mkshah@xxxxxxxxxxxxxx> wrote:
>
> gpio_to_irq() reports error at irq_domain_trim_hierarchy() for non wakeup
> capable GPIOs that do not have dedicated interrupt at GIC.
>
> Since PDC irqchip do not allocate irq at parent GIC domain for such GPIOs
> indicate same by using irq_domain_disconnect_hierarchy().
>
> Signed-off-by: Maulik Shah <mkshah@xxxxxxxxxxxxxx>
> ---
> drivers/irqchip/qcom-pdc.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c
> index 32d5920..0ba0461 100644
> --- a/drivers/irqchip/qcom-pdc.c
> +++ b/drivers/irqchip/qcom-pdc.c
> @@ -324,8 +324,11 @@ static int qcom_pdc_gpio_alloc(struct irq_domain *domain, unsigned int virq,
> if (ret)
> return ret;
>
> - if (hwirq == GPIO_NO_WAKE_IRQ)
> + if (hwirq == GPIO_NO_WAKE_IRQ) {
> + if (domain->parent)
> + irq_domain_disconnect_hierarchy(domain->parent, virq);
> return 0;
> + }
>
> parent_hwirq = get_parent_hwirq(hwirq);
> if (parent_hwirq == PDC_NO_PARENT_IRQ)

It feels like you are papering over the core of the problem, which is
that most of the GPIO_NO_WAKE_IRQ stuff should simply go away now that
we have a way to drop parts of the hierarchy.

I had a go at that a few months back, but never had the opportunity to
actually test the resulting code[1]. Could you please give it a go and
let me know what breaks?

Thanks,

M.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms.git/commit/?h=irq/qcom-pdc-nowake&id=331b2ba388a4a79b5c40b8addf56cbe35099a410

--
Without deviation from the norm, progress is not possible.