• Guenter Roeck's avatar
    drm/rockchip: cdn-dp: Do not run worker while suspended · 5eb2e6ee
    Guenter Roeck authored
    If the driver is in suspended mode, the dp block may be disabled, and
    chip registers may not be accessible. Yet, the worker may be triggered
    in this situation by an extcon event. If that happens, the following crash
    will be seen.
    
    cdn-dp fec00000.dp: [drm:cdn_dp_pd_event_work] *ERROR* Enable dp failed -19
    cdn-dp fec00000.dp: [drm:cdn_dp_pd_event_work] Connected, not enabled. Enabling cdn
    Bad mode in Error handler detected, code 0xbf000002 -- SError
    CPU: 1 PID: 10357 Comm: kworker/1:2 Not tainted 4.4.21-05903-ge0514ea #1
    Hardware name: Google Kevin (DT)
    Workqueue: events cdn_dp_pd_event_work
    task: ffffffc0cda67080 ti: ffffffc0b9b80000 task.ti: ffffffc0b9b80000
    PC is at cdn_dp_clock_reset+0x30/0xa8
    LR is at cdn_dp_enable+0x1e0/0x69c
    ...
    Call trace:
    [<ffffffc0005a7e24>] cdn_dp_pd_event_work+0x58/0x3f4
    [<ffffffc0002397f0>] process_one_work+0x240/0x424
    [<ffffffc00023a28c>] worker_thread+0x2fc/0x424
    [<ffffffc00023f5fc>] kthread+0x10c/0x114
    [<ffffffc000203dd0>] ret_from_fork+0x10/0x40
    
    Problem is two-fold: The worker should not run while suspended, and the
    suspend function should not call cdn_dp_disable() while the worker is
    running.
    Signed-off-by: default avatarGuenter Roeck <groeck@chromium.org>
    Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
    Signed-off-by: default avatarChris Zhong <zyw@rock-chips.com>
    5eb2e6ee
cdn-dp-core.c 28.7 KB