ARM: dts: imx6: RDU2: fix irq type for mv88e6xxx switch
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 19 Jul 2018 19:38:23 +0000 (21:38 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Aug 2018 11:09:20 +0000 (13:09 +0200)
[ Upstream commit e01a06c8089132bb4da035c6a83df23916ca3ebf ]

The Marvell switches report their interrupts in a level sensitive way.
When using edge sensitive detection a race condition in the interrupt
handler of the swich might result in the OS to miss all future events
which might make the switch non-functional.

The problem is that both mv88e6xxx_g2_irq_thread_fn() and
mv88e6xxx_g1_irq_thread_work() sample the irq cause register
(MV88E6XXX_G2_INT_SRC and MV88E6XXX_G1_STS respectively) once and then
handle the observed sources. If after sampling but before all observed
irq sources are handled a new irq source gets active this is not noticed
by the handler which returns unsuspecting, but the interrupt line stays
active which prevents the edge detector to kick in.

All device trees but imx6qdl-zii-rdu2 get this right (most of them by
not specifying an interrupt parent). So fix imx6qdl-zii-rdu2
accordingly.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Fixes: f64992d1a916 ("ARM: dts: imx6: RDU2: Add Switch interrupts")
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/arm/boot/dts/imx6qdl-zii-rdu2.dtsi

index eeb7679fd348a4932d123a8bd7ec76fb5107cc63..849eb3443cde2712705bbbe6c74679ddb81095a8 100644 (file)
                        dsa,member = <0 0>;
                        eeprom-length = <512>;
                        interrupt-parent = <&gpio6>;
-                       interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
+                       interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
                        interrupt-controller;
                        #interrupt-cells = <2>;