• Carlos Leija's avatar
    ARM: OMAP4: PM: update ROM return address for OSWR and OFF · b3d09a06
    Carlos Leija authored
    We need to add a dummy smc call to the cpuidle wakeup path to force the
    ROM code to save the return address after MMU is enabled again. This is
    needed to prevent random hangs on secure devices like droid4.
    
    Otherwise the system will eventually hang when entering deeper SoC idle
    states with the core and mpu domains in open-switch retention (OSWR).
    The hang happens as the ROM code tries to use the earlier physical return
    address set by omap-headsmp.S with MMU off while waking up CPU1 again.
    
    The hangs started happening in theory already with commit caf8c87d
    ("ARM: OMAP2+: Allow core oswr for omap4"), but in practise the issue went
    unnoticed as various drivers were often blocking any deeper idle states
    with hardware autoidle features.
    
    This patch is based on an earlier TI Linux kernel tree commit 92f0b3028d9e
    ("OMAP4: PM: update ROM return address for OSWR and OFF") written by
    Carlos Leija <cileija@ti.com>, Praneeth Bajjuri <praneeth@ti.com>, and
    Bryan Buckley <bryan.buckley@ti.com>. A later version of the patch was
    updated to use CPU_PM notifiers by Tero Kristo <t-kristo@ti.com>.
    Signed-off-by: default avatarCarlos Leija <cileija@ti.com>
    Signed-off-by: default avatarPraneeth Bajjuri <praneeth@ti.com>
    Signed-off-by: default avatarBryan Buckley <bryan.buckley@ti.com>
    Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
    Fixes: caf8c87d ("ARM: OMAP2+: Allow core oswr for omap4")
    Reported-by: default avatarCarl Philipp Klemm <philipp@uvos.xyz>
    Reported-by: default avatarMerlijn Wajer <merlijn@wizzup.org>
    Cc: Ivan Jelincic <parazyd@dyne.org>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Sebastian Reichel <sre@kernel.org>
    Cc: Tero Kristo <kristo@kernel.org>
    [tony@atomide.com: updated to apply, updated description]
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    b3d09a06
omap-secure.h 2.89 KB