linux/drivers/gpu/drm
Rodrigo Siqueira ca08a1725d drm/amd/display: Remove wrong pipe control lock
When using a device based on DCN32/321,
we have an issue where a second
4k@60Hz display does not light up,
and the system becomes unresponsive
for a few minutes. In the debug process,
it was possible to see a hang
in the function dcn20_post_unlock_program_front_end
in this part:

for (j = 0; j < TIMEOUT_FOR_PIPE_ENABLE_MS*1000
	&& hubp->funcs->hubp_is_flip_pending(hubp); j++)
	mdelay(1);
}

The hubp_is_flip_pending always returns positive
for waiting pending flips which is a symptom of
pipe hang. Additionally, the dmesg log shows
this message after a few minutes:

  BUG: soft lockup - CPU#4 stuck for 26s!
  ...
  [  +0.000003]  dcn20_post_unlock_program_front_end+0x112/0x340 [amdgpu]
  [  +0.000171]  dc_commit_state_no_check+0x63d/0xbf0 [amdgpu]
  [  +0.000155]  ? dc_validate_global_state+0x358/0x3d0 [amdgpu]
  [  +0.000154]  dc_commit_state+0xe2/0xf0 [amdgpu]

This confirmed the hypothesis that we had a pipe
hanging somewhere. Next, after checking the
ftrace entries, we have the below weird
sequence:

 [..]
  2)               |        dcn10_lock_all_pipes [amdgpu]() {
  2)   0.120 us    |          optc1_is_tg_enabled [amdgpu]();
  2)               |          dcn20_pipe_control_lock [amdgpu]() {
  2)               |            dc_dmub_srv_clear_inbox0_ack [amdgpu]() {
  2)   0.121 us    |              amdgpu_dm_dmub_reg_write [amdgpu]();
  2)   0.551 us    |            }
  2)               |            dc_dmub_srv_send_inbox0_cmd [amdgpu]() {
  2)   0.110 us    |              amdgpu_dm_dmub_reg_write [amdgpu]();
  2)   0.511 us    |            }
  2)               |            dc_dmub_srv_wait_for_inbox0_ack [amdgpu]() {
  2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
  2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
  2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
  2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
  2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
  2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
  2)   0.110 us    |              amdgpu_dm_dmub_reg_read [amdgpu]();
 [..]

We are not expected to read from dmub register
so many times and for so long. From the trace log,
it was possible to identify that the function
dcn20_pipe_control_lock was triggering the dmub
operation when it was unnecessary and causing
the hang issue. This commit drops the unnecessary
dmub code and, consequently, fixes the second display not
lighting up the issue.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2022-10-24 14:44:03 -04:00
..
amd drm/amd/display: Remove wrong pipe control lock 2022-10-24 14:44:03 -04:00
arm drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
armada drm/gem: rename GEM CMA helpers to GEM DMA helpers 2022-08-03 18:31:49 +02:00
aspeed drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
ast drm/ast: make ast_modeset static 2022-09-26 09:11:47 +02:00
atmel-hlcdc drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
bridge drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
display Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
etnaviv
exynos IOMMU Updates for Linux v6.1: 2022-10-10 13:20:53 -07:00
fsl-dcu drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
gma500 drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
gud drm/format-helper: Rework XRGB8888-to-GRAY8 conversion 2022-08-10 09:18:49 +02:00
hisilicon drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
hyperv hyperv-next for 6.1 2022-10-10 13:59:01 -07:00
i2c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
i810
i915 Random number generator fixes for Linux 6.1-rc1. 2022-10-16 15:27:07 -07:00
imx drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
ingenic drm/gem: rename GEM CMA helpers to GEM DMA helpers 2022-08-03 18:31:49 +02:00
kmb drm/gem: rename GEM CMA helpers to GEM DMA helpers 2022-08-03 18:31:49 +02:00
lib
lima drm/lima: Migrate to dev_pm_opp_set_config() 2022-07-08 11:27:33 +05:30
logicvc drm/gem: rename GEM CMA helpers to GEM DMA helpers 2022-08-03 18:31:49 +02:00
mcde drm/gem: rename GEM CMA helpers to GEM DMA helpers 2022-08-03 18:31:49 +02:00
mediatek drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
meson drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
mga
mgag200 drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
msm drm/msm: Fix build break with recent mm tree 2022-09-30 10:13:49 +10:00
mxsfb drm/lcdif: switch to devm_drm_of_get_bridge 2022-08-22 16:53:31 +02:00
nouveau - Alistair Popple has a series which addresses a race which causes page 2022-10-14 12:28:43 -07:00
omapdrm drm/omap: dmm_tiler:Remove the print function dev_err() 2022-09-09 16:23:21 +03:00
panel drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
panfrost drm/panfrost: replace endian-specific types with native ones 2022-10-20 11:02:11 +01:00
pl111 drm:pl111: Add of_node_put() when breaking out of for_each_available_child_of_node() 2022-08-11 18:13:31 +02:00
qxl drm/qxl: drop set_prod_notify parameter from qxl_ring_create 2022-09-23 13:16:37 +02:00
r128
radeon platform-drivers-x86 for v6.1-1 2022-10-05 10:38:24 -07:00
rcar-du drm: rcar-du: dsi: Fix VCLKSET write 2022-09-07 23:48:42 +03:00
rockchip drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
savage
scheduler Merge drm/drm-fixes into drm-misc-fixes 2022-10-20 09:09:00 +02:00
shmobile drm/plane: Remove drm_plane_init() 2022-09-20 09:37:12 +02:00
sis drm/sis: use idr_init_base() to initialize dev_priv->object_idr 2022-07-28 15:35:56 +01:00
solomon drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
sprd drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
sti drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
stm drm/gem: rename GEM CMA helpers to GEM DMA helpers 2022-08-03 18:31:49 +02:00
sun4i Merge tag 'drm-misc-next-2022-09-09' of git://anongit.freedesktop.org/drm/drm-misc into drm-next 2022-09-11 22:03:07 +10:00
tdfx
tegra drm/fb: rename FB CMA helpers to FB DMA helpers 2022-08-03 18:30:55 +02:00
tests drm: tests: Fix a buffer overflow in format_helper_test 2022-10-20 09:56:05 +02:00
tidss drm/tidss: fix repeated words in comments 2022-09-09 16:23:26 +03:00
tilcdc drm/plane: Remove drm_plane_init() 2022-09-20 09:37:12 +02:00
tiny drm/simpledrm: Synchronize access to GEM BOs 2022-09-27 10:27:00 +02:00
ttm drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
tve200 drm/tve200: Fix smatch warning 2022-08-26 14:22:59 +02:00
udl drm/udl: Sync pending URBs at the end of suspend 2022-09-10 21:45:53 +02:00
v3d drm/gem: rename GEM CMA helpers to GEM DMA helpers 2022-08-03 18:31:49 +02:00
vboxvideo drm/vboxvideo: fix repeated words in comments 2022-09-17 15:01:24 +02:00
vc4 Short summary of fixes pull: 2022-10-21 08:08:30 +10:00
vgem
via drm/via: Add new condition to via_dma_cleanup() 2022-09-07 07:01:16 +02:00
virtio virtio-gpu: fix shift wrapping bug in virtio_gpu_fence_event_create() 2022-09-23 13:16:37 +02:00
vkms Merge drm/drm-next into drm-misc-next 2022-09-14 12:22:18 +01:00
vmwgfx drm/vmwgfx: Fix memory leak in vmw_mksstat_add_ioctl() 2022-09-21 12:15:15 -04:00
xen Linux 5.19-rc6 2022-07-13 10:54:56 +10:00
xlnx drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
drm_agpsupport.c
drm_aperture.c drm/aperture: Fix some kerneldoc comments 2022-09-12 09:34:07 +02:00
drm_atomic_helper.c drm/atomic-helper: Fix kernel-doc 2022-09-20 09:24:35 +02:00
drm_atomic_state_helper.c
drm_atomic_uapi.c
drm_atomic.c
drm_auth.c drm: use idr_init_base() to initialize master->lessee_idr 2022-07-28 15:35:55 +01:00
drm_blend.c
drm_bridge_connector.c
drm_bridge.c drm/bridge: Avoid uninitialized variable warning 2022-07-08 13:41:28 +02:00
drm_buddy.c
drm_bufs.c
drm_cache.c
drm_client_modeset.c
drm_client.c drm/client: Use actual bpp when allocating frame buffers 2022-07-09 15:00:52 +02:00
drm_color_mgmt.c drm: fix whitespace in drm_plane_create_color_properties() 2022-08-04 15:24:46 +02:00
drm_connector.c drm/connector: Set DDC pointer in drmm_connector_init 2022-10-20 10:53:13 +02:00
drm_context.c
drm_crtc_helper_internal.h
drm_crtc_helper.c Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
drm_crtc_internal.h
drm_crtc.c drm/crtc: Introduce drmm_crtc_init_with_planes 2022-07-13 10:46:05 +02:00
drm_damage_helper.c drm: Use original src rect while initializing damage iterator 2022-09-13 14:38:33 +03:00
drm_debugfs_crc.c
drm_debugfs.c drm/edid: Handle EDID 1.4 range descriptor h/vfreq offsets 2022-09-02 16:38:51 +03:00
drm_displayid.c
drm_dma.c
drm_drv.c
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
drm_encoder_slave.c
drm_encoder.c drm/encoder: Introduce drmm_encoder_init 2022-07-13 10:46:05 +02:00
drm_fb_dma_helper.c drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
drm_fb_helper.c drm/fb-helper: Add support for DRM_FORMAT_C[124] 2022-07-09 15:07:09 +02:00
drm_file.c drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
drm_flip_work.c
drm_format_helper.c drm/format-helper: Add KUnit tests for drm_fb_xrgb8888_to_xrgb2101010() 2022-09-27 19:41:51 +02:00
drm_fourcc.c drm/fourcc: Add DRM_FORMAT_D[1248] 2022-07-09 15:36:07 +02:00
drm_framebuffer.c drm/framebuffer: convert to drm_dbg_kms() 2022-09-28 10:43:30 +02:00
drm_gem_atomic_helper.c
drm_gem_dma_helper.c drm/gem: rename struct drm_gem_dma_object.{paddr => dma_addr} 2022-08-03 18:32:27 +02:00
drm_gem_framebuffer_helper.c drm/gem-fb-helper: Use actual bpp for size calculations 2022-07-09 15:08:16 +02:00
drm_gem_shmem_helper.c drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
drm_gem_ttm_helper.c drm/ttm: fix locking in vmap/vunmap TTM GEM helpers 2022-07-18 09:18:53 +02:00
drm_gem_vram_helper.c drm/ttm: rename and cleanup ttm_bo_init 2022-07-11 10:53:13 +02:00
drm_gem.c drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
drm_hashtab.c
drm_internal.h drm/gem: Fix GEM handle release errors 2022-08-19 13:38:12 +02:00
drm_ioc32.c
drm_ioctl.c drm: Prevent drm_copy_field() to attempt copying a NULL pointer 2022-07-15 10:25:36 +02:00
drm_irq.c
drm_kms_helper_common.c
drm_lease.c
drm_legacy_misc.c
drm_legacy.h
drm_lock.c
drm_managed.c
drm_memory.c
drm_mipi_dbi.c drm/probe-helper: Add drm_crtc_helper_mode_valid_fixed() 2022-09-12 09:14:26 +02:00
drm_mipi_dsi.c drm/mipi-dsi: Detach devices when removing the host 2022-07-13 10:46:05 +02:00
drm_mm.c
drm_mode_config.c drm: hide unregistered connectors from GETCONNECTOR IOCTL 2022-09-05 12:59:53 +02:00
drm_mode_object.c
drm_modes.c drm: Remove linux/fb.h from drm_crtc.h 2022-07-05 21:14:02 +03:00
drm_modeset_helper.c drm/plane-helper: Provide DRM_PLANE_NON_ATOMIC_FUNCS initializer macro 2022-09-20 09:42:31 +02:00
drm_modeset_lock.c
drm_nomodeset.c
drm_of.c drm: Remove linux/media-bus-format.h from drm_crtc.h 2022-07-05 21:15:13 +03:00
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Add quirk for Aya Neo Air 2022-09-17 19:58:32 +02:00
drm_panel.c
drm_pci.c
drm_plane_helper.c drm/plane-helper: Warn if atomic drivers call non-atomic helpers 2022-09-20 09:42:31 +02:00
drm_plane.c drm/plane: Allocate planes with drm_universal_plane_alloc() 2022-09-20 09:41:06 +02:00
drm_prime.c drm/gem: Fix GEM handle release errors 2022-08-19 13:38:12 +02:00
drm_print.c drm_print: add _ddebug descriptor to drm_*dbg prototypes 2022-09-24 15:02:02 +02:00
drm_privacy_screen_x86.c
drm_privacy_screen.c
drm_probe_helper.c drm/probe-helper: Add drm_crtc_helper_mode_valid_fixed() 2022-09-12 09:14:26 +02:00
drm_property.c
drm_rect.c
drm_scatter.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c drm/atomic-helper: Remove _HELPER_ infix from DRM_PLANE_HELPER_NO_SCALING 2022-07-26 18:42:00 +02:00
drm_syncobj.c
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vblank_work.c
drm_vblank.c
drm_vm.c
drm_vma_manager.c
drm_writeback.c
Kconfig Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
Makefile Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00