• Darren Etheridge's avatar
    drm/tilcdc: fix kernel panic on suspend when no hdmi monitor connected · 85fd27f8
    Darren Etheridge authored
    On BeagleBone Black if no HDMI monitor is connected and suspend
    is requested a kernel panic will result:
    
    root@am335x-evm:~# echo mem > /sys/power/state
    [ 65.548710] PM: Syncing filesystems ... done.
    [ 65.631311] Freezing user space processes ... (elapsed 0.006 seconds) done.
    [ 65.648619] Freezing remaining freezable tasks ... (elapsed 0.005 seconds) done.
    [ 65.833500] Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa30e004
    [ 65.841692] Internal error: : 1028 [#1] SMP ARM
      <snip>
    [ 66.105287] [<c03765f0>] (platform_pm_suspend) from [<c037b6d4>] (dpm_run_callback+0x34/0x70)
    [ 66.114370] [<c037b6d4>] (dpm_run_callback) from [<c037ba84>] (__device_suspend+0x10c/0x2f4)
    [ 66.123357] [<c037ba84>] (__device_suspend) from [<c037d004>] (dpm_suspend+0x58/0x218)
    [ 66.131796] [<c037d004>] (dpm_suspend) from [<c008d948>] (suspend_devices_and_enter+0x9c/0x3c0)
    [ 66.141055] [<c008d948>] (suspend_devices_and_enter) from [<c008de7c>] (pm_suspend+0x210/0x24c)
    [ 66.150312] [<c008de7c>] (pm_suspend) from [<c008cabc>] (state_store+0x68/0xb8)
    [ 66.158103] [<c008cabc>] (state_store) from [<c02e9654>] (kobj_attr_store+0x14/0x20)
    [ 66.166355] [<c02e9654>] (kobj_attr_store) from [<c0185c70>] (sysfs_kf_write+0x4c/0x50)
    [ 66.174883] [<c0185c70>] (sysfs_kf_write) from [<c018926c>] (kernfs_fop_write+0xb4/0x150)
    [ 66.183598] [<c018926c>] (kernfs_fop_write) from [<c0122638>] (vfs_write+0xa8/0x180)
    [ 66.191846] [<c0122638>] (vfs_write) from [<c01229f8>] (SyS_write+0x40/0x8c)
    [ 66.199365] [<c01229f8>] (SyS_write) from [<c000e580>] (ret_fast_syscall+0x0/0x48)
    [ 66.207426] Code: e595c210 e5932000 e59cc000 e08c2002 (e592c000)
    
    This is because the lcdc module is not enabled when no monitor is detected
    to save power.  However the suspend handler just blindly tries to save the
    lcdc state by copying out the pertinent registers. However module is off
    so no good things happen when you try and access it.
    
    This patch only saves off the registers if the module is enabled, and
    then only restores the registers on resume if they were saved off during
    suspend.
    Signed-off-by: default avatarDarren Etheridge <detheridge@ti.com>
    Tested-by: default avatarDave Gerlach <d-gerlach@ti.com>
    Acked-by: default avatarFelipe Balbi <balbi@ti.com>
    Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
    Reviewed-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
    85fd27f8
tilcdc_drv.h 4.97 KB