1. 25 11月, 2020 1 次提交
  2. 19 11月, 2020 1 次提交
    • R
      drm/amd/display: Always get CRTC updated constant values inside commit tail · 2b3af270
      Rodrigo Siqueira 提交于
      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 6d90a208
      ("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/1349Reviewed-by: NHarry Wentland <harry.wentland@amd.com>
      Signed-off-by: NRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      2b3af270
  3. 17 11月, 2020 1 次提交
  4. 06 11月, 2020 1 次提交
  5. 04 11月, 2020 3 次提交
  6. 29 10月, 2020 1 次提交
  7. 27 10月, 2020 7 次提交
  8. 22 10月, 2020 2 次提交
    • A
      drm/amd/display: Avoid MST manager resource leak. · 5dff80bd
      Andrey Grodzovsky 提交于
      On connector destruction call drm_dp_mst_topology_mgr_destroy
      to release resources allocated in drm_dp_mst_topology_mgr_init.
      Do it only if MST manager was initilized before otherwsie a crash
      is seen on driver unload/device unplug.
      Reviewed-by: NNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Signed-off-by: NAndrey Grodzovsky <andrey.grodzovsky@amd.com>
      Acked-by: NAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      5dff80bd
    • A
      drm/amd/display: Revert "drm/amd/display: Fix a list corruption" · 0d427f6c
      Andrey Grodzovsky 提交于
      This fixes regression on device unplug and/or driver unload.
      
      [   65.681501 <    0.000004>] BUG: kernel NULL pointer dereference, address: 0000000000000008
      [   65.681504 <    0.000003>] #PF: supervisor write access in kernel mode
      [   65.681506 <    0.000002>] #PF: error_code(0x0002) - not-present page
      [   65.681507 <    0.000001>] PGD 7c9437067 P4D 7c9437067 PUD 7c9db7067 PMD 0
      [   65.681511 <    0.000004>] Oops: 0002 [#1] SMP NOPTI
      [   65.681512 <    0.000001>] CPU: 8 PID: 127 Comm: kworker/8:1 Tainted: G        W  O      5.9.0-rc2-dev+ #59
      [   65.681514 <    0.000002>] Hardware name: System manufacturer System Product Name/PRIME X470-PRO, BIOS 4406 02/28/2019
      [   65.681525 <    0.000011>] Workqueue: events drm_connector_free_work_fn [drm]
      [   65.681535 <    0.000010>] RIP: 0010:drm_atomic_private_obj_fini+0x11/0x60 [drm]
      [   65.681537 <    0.000002>] Code: de 4c 89 e7 e8 70 f2 ba f8 48 8d 65 d8 5b 41 5c 41 5d 41 5e 41 5f 5d c3 90 0f 1f 44 00 00 48 8b 47 08 48 8b 17 55 48 89 e5 53 <48> 89 42 08 48 89 10 48 b8 00 01 00 00 00 00 ad de 48 89 fb 48 89
      [   65.681541 <    0.000004>] RSP: 0018:ffffa5fa805efdd8 EFLAGS: 00010246
      [   65.681542 <    0.000001>] RAX: 0000000000000000 RBX: ffff9a4b094654d8 RCX: 0000000000000000
      [   65.681544 <    0.000002>] RDX: 0000000000000000 RSI: ffffffffba197bc2 RDI: ffff9a4b094654d8
      [   65.681545 <    0.000001>] RBP: ffffa5fa805efde0 R08: ffffffffba197b82 R09: 0000000000000040
      [   65.681547 <    0.000002>] R10: ffffa5fa805efdc8 R11: 000000000000007f R12: ffff9a4b09465888
      [   65.681549 <    0.000002>] R13: ffff9a4b36f20010 R14: ffff9a4b36f20290 R15: ffff9a4b3a692840
      [   65.681551 <    0.000002>] FS:  0000000000000000(0000) GS:ffff9a4b3ea00000(0000) knlGS:0000000000000000
      [   65.681553 <    0.000002>] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   65.681554 <    0.000001>] CR2: 0000000000000008 CR3: 00000007c9c82000 CR4: 00000000003506e0
      [   65.681556 <    0.000002>] Call Trace:
      [   65.681561 <    0.000005>]  drm_dp_mst_topology_mgr_destroy+0xc4/0xe0 [drm_kms_helper]
      [   65.681612 <    0.000051>]  amdgpu_dm_connector_destroy+0x3d/0x110 [amdgpu]
      [   65.681622 <    0.000010>]  drm_connector_free_work_fn+0x78/0x90 [drm]
      [   65.681624 <    0.000002>]  process_one_work+0x164/0x410
      [   65.681626 <    0.000002>]  worker_thread+0x4d/0x450
      [   65.681628 <    0.000002>]  ? rescuer_thread+0x390/0x390
      [   65.681630 <    0.000002>]  kthread+0x10a/0x140
      [   65.681632 <    0.000002>]  ? kthread_unpark+0x70/0x70
      [   65.681634 <    0.000002>]  ret_from_fork+0x22/0x30
      
      This reverts commit 1545fbf9.
      Signed-off-by: NAndrey Grodzovsky <andrey.grodzovsky@amd.com>
      Acked-by: NAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      0d427f6c
  9. 19 10月, 2020 1 次提交
  10. 15 10月, 2020 2 次提交
    • M
      drm/amd/display: kernel-doc: document force_timing_sync · c0e35ed9
      Mauro Carvalho Chehab 提交于
      As warned when running "make htmldocs":
      
      	./drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:345: warning: Function parameter or member 'force_timing_sync' not described in 'amdgpu_display_manager'
      
      This new struct member was not documented at kernel-doc markup.
      
      Fixes: 3d4e52d0 ("drm/amd/display: Add debugfs for forcing stream timing sync")
      Signed-off-by: NMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      c0e35ed9
    • R
      drm/amd/display: Fix module load hangs when connected to an eDP · 44264591
      Rodrigo Siqueira 提交于
      It was recently introduced a change that enables driver to disable
      streams if pixel clock changes. Consequently, the code path executed in
      the disable vbios function expanded to an encoder verification part.
      The encoder loop is nested inside the pipe count loop, and both loops
      share the 'i' variable in control of their flow. This situation may lead
      to an infinite loop because the encoder loop constantly updates the `i`
      variable, making the first loop always positive. As a result, we can see
      a soft hang during the module load (modprobe amdgpu) and a series of
      dmesg log that looks like this:
      
      kernel:[  124.538727] watchdog: BUG: soft lockup - CPU#2 stuck for 22s!
      [modprobe:1000]
      
      RSP: 0018:ffffabbf419bf0e8 EFLAGS: 00000282
      RAX: ffffffffc0809de0 RBX: ffff93b35ccc0000 RCX: ffff93b366c21800
      RDX: 0000000000000000 RSI: 0000000000000141 RDI: ffff93b35ccc0000
      RBP: ffffabbf419bf108 R08: ffffabbf419bf164 R09: 0000000000000001
      R10: 0000000000000003 R11: 0000000000000003 R12: 0000000008677d40
      R13: 0000000000000141 R14: ffff93b35cfc0000 R15: ffff93b35abc0000
      FS:  00007f1400717540(0000) GS:ffff93b37f680000(0000)
           knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00005649b66b0968 CR3: 00000003e0fec000 CR4: 0000000000350ee0
      Call Trace:
       amdgpu_device_rreg+0x17/0x20 [amdgpu]
       amdgpu_cgs_read_register+0x14/0x20 [amdgpu]
       dm_read_reg_func+0x3a/0xb0 [amdgpu]
       get_pixel_clk_frequency_100hz+0x30/0x50 [amdgpu]
       dc_commit_state+0x8f1/0xae0 [amdgpu]
       ? drm_calc_timestamping_constants+0x101/0x160 [drm]
       amdgpu_dm_atomic_commit_tail+0x39d/0x21a0 [amdgpu]
       ? dcn21_validate_bandwidth+0xe5/0x290 [amdgpu]
       ? kfree+0xc3/0x390
       ? dcn21_validate_bandwidth+0xe5/0x290 [amdgpu]
      ...
      RSP: 002b:00007fff26009bd8 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
      RAX: ffffffffffffffda RBX: 000055a8025bea50 RCX: 00007f140085c89d
      RDX: 0000000000000000 RSI: 000055a8025b8290 RDI: 000000000000000c
      RBP: 0000000000040000 R08: 0000000000000000 R09: 0000000000000000
      R10: 000000000000000c R11: 0000000000000246 R12: 000055a8025b8290
      R13: 0000000000000000 R14: 000055a8025bead0 R15: 000055a8025bea50
      
      This issue was fixed by introducing a second variable for the internal
      loop.
      
      Fixes: 8353d30e ("drm/amd/display: disable stream if pixel clock changed with link active")
      Reviewed-by: NRoman Li <Roman.Li@amd.com>
      Reviewed-by: NNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
      Signed-off-by: NRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      44264591
  11. 10 10月, 2020 2 次提交
  12. 09 10月, 2020 1 次提交
  13. 06 10月, 2020 3 次提交
  14. 01 10月, 2020 1 次提交
  15. 30 9月, 2020 13 次提交