linux-xiaomi-chiron/drivers/gpu/drm/amd/display/amdgpu_dm
Rodrigo Siqueira 2b3af27056 drm/amd/display: Always get CRTC updated constant values inside commit tail
We recently improved our display atomic commit and tail sequence to
avoid some issues related to concurrency. One of the major changes
consisted of moving the interrupt disable and the stream release from
our atomic commit to our atomic tail (commit 6d90a208cf
("drm/amd/display: Move disable interrupt into commit tail")) .
However, the new code introduced inside our commit tail function was
inserted right after the function
drm_atomic_helper_update_legacy_modeset_state(), which has routines for
updating internal data structs related to timestamps. As a result, in
certain conditions, the display module can reach a situation where we
update our constants and, after that, clean it. This situation generates
the following warning:

 amdgpu 0000:03:00.0: drm_WARN_ON_ONCE(drm_drv_uses_atomic_modeset(dev))
 WARNING: CPU: 6 PID: 1269 at drivers/gpu/drm/drm_vblank.c:722
 drm_crtc_vblank_helper_get_vblank_timestamp_internal+0x32b/0x340 [drm]
 ...
 RIP:
 0010:drm_crtc_vblank_helper_get_vblank_timestamp_internal+0x32b/0x340
 [drm]
 ...
 Call Trace:
  ? dc_stream_get_vblank_counter+0x57/0x60 [amdgpu]
  drm_crtc_vblank_helper_get_vblank_timestamp+0x1c/0x20 [drm]
  drm_get_last_vbltimestamp+0xad/0xc0 [drm]
  drm_reset_vblank_timestamp+0x63/0xd0 [drm]
  drm_crtc_vblank_on+0x85/0x150 [drm]
  amdgpu_dm_atomic_commit_tail+0xaf1/0x2330 [amdgpu]
  commit_tail+0x99/0x130 [drm_kms_helper]
  drm_atomic_helper_commit+0x123/0x150 [drm_kms_helper]
  amdgpu_dm_atomic_commit+0x11/0x20 [amdgpu]
  drm_atomic_commit+0x4a/0x50 [drm]
  drm_atomic_helper_set_config+0x7c/0xc0 [drm_kms_helper]
  drm_mode_setcrtc+0x20b/0x7e0 [drm]
  ? tomoyo_path_number_perm+0x6f/0x200
  ? drm_mode_getcrtc+0x190/0x190 [drm]
  drm_ioctl_kernel+0xae/0xf0 [drm]
  drm_ioctl+0x245/0x400 [drm]
  ? drm_mode_getcrtc+0x190/0x190 [drm]
  amdgpu_drm_ioctl+0x4e/0x80 [amdgpu]
  __x64_sys_ioctl+0x91/0xc0
  do_syscall_64+0x38/0x90
  entry_SYSCALL_64_after_hwframe+0x44/0xa9
 ...

For fixing this issue we rely upon a refactor introduced on
drm_atomic_helper_update_legacy_modeset_state ("Remove the timestamping
constant update from drm_atomic_helper_update_legacy_modeset_state()")
which decouples constant values update from
drm_atomic_helper_update_legacy_modeset_state to a new helper.
Basically, this commit uses this new helper and place it right after our
release module to avoid a situation where our CRTC struct gets wrong
values.

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1373
Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1349
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2020-11-18 15:12:22 -05:00
..
amdgpu_dm.c drm/amd/display: Always get CRTC updated constant values inside commit tail 2020-11-18 15:12:22 -05:00
amdgpu_dm.h drm: amdgpu_dm: fix a typo 2020-10-28 11:42:02 -06:00
amdgpu_dm_color.c drm/amdgpu: drm_device to amdgpu_device by inline-f (v2) 2020-08-24 13:06:06 -04:00
amdgpu_dm_crc.c drm/amdgpu: drm_device to amdgpu_device by inline-f (v2) 2020-08-24 13:06:06 -04:00
amdgpu_dm_crc.h drm/amd/display: Split out DC programming for CRC capture 2019-08-21 22:18:25 -05:00
amdgpu_dm_debugfs.c drm/amd/display: fix crash/reboot while accessing sysfs files 2020-09-22 12:25:09 -04:00
amdgpu_dm_debugfs.h amdgpu_dm: no need to check return value of debugfs_create functions 2019-06-13 13:59:49 -05:00
amdgpu_dm_hdcp.c drm/amd/display: fix return value check for hdcp_work 2020-09-25 16:53:32 -04:00
amdgpu_dm_hdcp.h drm/amd/display: Add sysfs interface for set/get srm 2020-02-06 15:04:36 -05:00
amdgpu_dm_helpers.c drm/amd/display: Add DCN3 Support in DM (v2) 2020-07-01 01:59:15 -04:00
amdgpu_dm_irq.c drm/amdgpu: Get DRM dev from adev by inline-f 2020-08-24 13:06:06 -04:00
amdgpu_dm_irq.h
amdgpu_dm_irq_params.h drm/amd/display: Refactor to prevent crtc state access in DM IRQ handler 2020-09-15 17:52:39 -04:00
amdgpu_dm_mst_types.c drm/amd/display: Fix incorrect dsc force enable logic 2020-10-19 09:13:53 +10:00
amdgpu_dm_mst_types.h drm/amdgpu/display: create fake mst encoders ahead of time (v4) 2020-07-14 15:11:07 -04:00
amdgpu_dm_pp_smu.c drm/amd/pm: drop unnecessary wrappers around watermark setting 2020-09-17 17:48:00 -04:00
amdgpu_dm_services.c drm/amd/display: Handle persistence in DM 2020-05-28 14:00:47 -04:00
amdgpu_dm_trace.h drm/amd/display: Add tracing to dc 2018-12-05 17:49:49 -05:00
Makefile drm/amd/display: Create amdgpu_dm_hdcp 2019-10-03 09:10:58 -05:00