• Leo Li's avatar
    drm/amd/display: Recreate private_obj->state during S3 resume · 113b7a01
    Leo Li authored
    [Why]
    
    When entering S3, amdgpu first calls DRM to cache the current atomic
    state, then commit the 'all-disabled' state. This sets dc->current_state
    to point at the private atomic object's dm_atomic_state->context, as
    any regular atomic commit would.
    
    Afterwards, amdgpu_dm calls dc_set_power_state() with S3 power state.
    This invalidates dc->current_state by wiping it to 0, consequently
    wiping dm_atomic_state->context.
    
    During resume, the cached atomic state is restored. When getting the
    private object however, the dm_atomic_state - containing the wiped
    context - is duplicated into the atomic state. This causes DC validation
    to fail during atomic check, as necessary function pointers in dc_state
    are now NULL.
    
    [How]
    
    Recreate the private object's dm_atomic_state->context during resume,
    restoring any static values such as function pointers.
    
    A TODO item is added to move static read-only values out of dc_state -
    they shouldn't be there anyways.
    Signed-off-by: default avatarLeo Li <sunpeng.li@amd.com>
    Reviewed-by: default avatarNicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    113b7a01
amdgpu_dm.c 183 KB