[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CACRpkdY-zRy9h9bg-sJRr4Ux9rC8ZnjGxN04OQ_ZaDzN3X-SDA@mail.gmail.com>
Date: Fri, 14 Mar 2025 12:04:57 +0100
From: Linus Walleij <linus.walleij@...aro.org>
To: Stephan Gerhold <stephan.gerhold@...aro.org>
Cc: Bjorn Andersson <andersson@...nel.org>, Douglas Anderson <dianders@...omium.org>,
Maulik Shah <quic_mkshah@...cinc.com>, Stephen Boyd <swboyd@...omium.org>,
linux-arm-msm@...r.kernel.org, linux-gpio@...r.kernel.org,
linux-kernel@...r.kernel.org, Johan Hovold <johan@...nel.org>,
Bjorn Andersson <bjorn.andersson@....qualcomm.com>
Subject: Re: [PATCH] pinctrl: qcom: Clear latched interrupt status when
changing IRQ type
On Wed, Mar 12, 2025 at 2:19 PM Stephan Gerhold
<stephan.gerhold@...aro.org> wrote:
> When submitting the TLMM test driver, Bjorn reported that some of the test
> cases are failing for GPIOs that not are backed by PDC (i.e. "non-wakeup"
> GPIOs that are handled directly in pinctrl-msm). Basically, lingering
> latched interrupt state is still being delivered at IRQ request time, e.g.:
>
> ok 1 tlmm_test_silent_rising
> tlmm_test_silent_falling: ASSERTION FAILED at drivers/pinctrl/qcom/tlmm-test.c:178
> Expected atomic_read(&priv->intr_count) == 0, but
> atomic_read(&priv->intr_count) == 1 (0x1)
> not ok 2 tlmm_test_silent_falling
> tlmm_test_silent_low: ASSERTION FAILED at drivers/pinctrl/qcom/tlmm-test.c:178
> Expected atomic_read(&priv->intr_count) == 0, but
> atomic_read(&priv->intr_count) == 1 (0x1)
> not ok 3 tlmm_test_silent_low
> ok 4 tlmm_test_silent_high
>
> Whether to report interrupts that came in while the IRQ was unclaimed
> doesn't seem to be well-defined in the Linux IRQ API. However, looking
> closer at these specific cases, we're actually reporting events that do not
> match the interrupt type requested by the driver:
>
> 1. After "ok 1 tlmm_test_silent_rising", the GPIO is in low state and
> configured for IRQF_TRIGGER_RISING.
>
> 2. (a) In preparation for "tlmm_test_silent_falling", the GPIO is switched
> to high state. The rising interrupt gets latched.
> (b) The GPIO is re-configured for IRQF_TRIGGER_FALLING, but the latched
> interrupt isn't cleared.
> (c) The IRQ handler is called for the latched interrupt, but there
> wasn't any falling edge.
>
> 3. (a) For "tlmm_test_silent_low", the GPIO remains in high state.
> (b) The GPIO is re-configured for IRQF_TRIGGER_LOW. This seems to
> result in a phantom interrupt that gets latched.
> (c) The IRQ handler is called for the latched interrupt, but the GPIO
> isn't in low state.
>
> 4. (a) For "tlmm_test_silent_high", the GPIO is switched to low state.
> (b) This doesn't result in a latched interrupt, because RAW_STATUS_EN
> was cleared when masking the level-triggered interrupt.
>
> Fix this by clearing the interrupt state whenever making any changes to the
> interrupt configuration. This includes previously disabled interrupts, but
> also any changes to interrupt polarity or detection type.
>
> With this change, all 16 test cases are now passing for the non-wakeup
> GPIOs in the TLMM.
>
> Cc: stable@...r.kernel.org
> Fixes: cf9d052aa600 ("pinctrl: qcom: Don't clear pending interrupts when enabling")
> Reported-by: Bjorn Andersson <bjorn.andersson@....qualcomm.com>
> Closes: https://lore.kernel.org/r/20250227-tlmm-test-v1-1-d18877b4a5db@oss.qualcomm.com/
> Signed-off-by: Stephan Gerhold <stephan.gerhold@...aro.org>
Patch applied!
Yours,
Linus Walleij
Powered by blists - more mailing lists