• Tony Lindgren's avatar
    ARM: dts: Fix omap4 hang with GPS connected to USB by using wakeupgen · cf87634c
    Tony Lindgren authored
    There's been a reproducable USB OHCI/EHCI cpuidle related hang on omap4
    for a while that happens after about 20 - 40 minutes on an idle system
    with some data feeding device being connected, like a USB GPS device or
    a cellular modem.
    
    This issue happens in cpuidle states C2 and C3 and does not happen if
    cpuidle is limited to C1 state only. The symptoms are that the whole
    system hangs and never wakes up from idle, and if a watchdog is
    configured the system reboots after a while.
    
    Turns out that OHCI/EHCI devices on omap4 are trying to use the GIC
    interrupt controller directly as a parent instead of the WUGEN. We
    need to pass the interrupts through WUGEN to GIC to provide the wakeup
    events for the processor.
    
    Let's fix the issue by removing the gic interrupt-parent and use the
    default interrupt-parent wakeupgen instead. Note that omap5.dtsi had
    this already fixes earlier by commit 7136d457 ("ARM: omap: convert
    wakeupgen to stacked domains") but we somehow missed omap4 at that
    point.
    
    Fixes: 7136d457 ("ARM: omap: convert wakeupgen to stacked domains")
    Cc: Dave Gerlach <d-gerlach@ti.com>
    Cc: Nishanth Menon <nm@ti.com>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
    Reviewed-by: default avatarRoger Quadros <rogerq@ti.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    cf87634c
omap4.dtsi 30.8 KB