mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-07-24 01:54:03 -04:00
[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: Leo Li <sunpeng.li@amd.com> Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
||
---|---|---|
.. | ||
amdgpu_dm.c | ||
amdgpu_dm.h | ||
amdgpu_dm_color.c | ||
amdgpu_dm_crc.c | ||
amdgpu_dm_debugfs.c | ||
amdgpu_dm_debugfs.h | ||
amdgpu_dm_helpers.c | ||
amdgpu_dm_irq.c | ||
amdgpu_dm_irq.h | ||
amdgpu_dm_mst_types.c | ||
amdgpu_dm_mst_types.h | ||
amdgpu_dm_pp_smu.c | ||
amdgpu_dm_services.c | ||
amdgpu_dm_trace.h | ||
Makefile |