powerpc/4xx/uic: clear pending interrupt after irq type/pol change [Linux 4.9.187]

This Linux kernel change "powerpc/4xx/uic: clear pending interrupt after irq type/pol change" is included in the Linux 4.9.187 release. This change is authored by Christian Lamparter <chunkeey [at] gmail.com> on Sat Jun 15 17:23:13 2019 +0200. The commit for this change in Linux stable tree is 5bab3a0 (patch) which is from upstream commit 3ab3a06. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 3ab3a06.

powerpc/4xx/uic: clear pending interrupt after irq type/pol change

[ Upstream commit 3ab3a0689e74e6aa5b41360bc18861040ddef5b1 ]

When testing out gpio-keys with a button, a spurious
interrupt (and therefore a key press or release event)
gets triggered as soon as the driver enables the irq
line for the first time.

This patch clears any potential bogus generated interrupt
that was caused by the switching of the associated irq's
type and polarity.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>

There is one line of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 arch/powerpc/sysdev/uic.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
index a00949f..a8ebc96 100644
--- a/arch/powerpc/sysdev/uic.c
+++ b/arch/powerpc/sysdev/uic.c
@@ -158,6 +158,7 @@ static int uic_set_irq_type(struct irq_data *d, unsigned int flow_type)

    mtdcr(uic->dcrbase + UIC_PR, pr);
    mtdcr(uic->dcrbase + UIC_TR, tr);
+   mtdcr(uic->dcrbase + UIC_SR, ~mask);

    raw_spin_unlock_irqrestore(&uic->lock, flags);

Leave a Reply

Your email address will not be published. Required fields are marked *