linux/drivers/gpu/drm
Nicholas Kazlauskas b5e83f6fe1 drm/amd/display: Split enabling CRTC interrupts into two passes
[Why]
When disabling all the pipes for a CRTC the page-flip interrupt also
gets disabled on Raven. We can't re-enable the page-flip interrupt
unless we give DC at least one active DC plane.

We currently enable interrupts after the call to dc_commit_state since
there's currently no valid sequence that should disable all the planes
or re-enable planes for a CRTC without first going through
dc_commit_state.

If we were to allow for a CRTC to be enabled with no primary plane this
would not be the case - the call to dc_commit_updates_for_stream would
enable the planes when going from zero to at least one active plane,
but manage_dm_interrupts would have been called too early.

This results in a page-flip timeout on any subsequent commits since we
think the page-flip are now enabled when they're actually disabled.

We need to enable interrupts after the call to
dc_commit_updates_for_stream.

[How]
Split enabling interrupts into two passes. One pass before
dc_commit_updates_for_stream and one after it.

Shifting all the interrupts to be strictly below the call doesn't
currently work even though it should in theory. We end up queuing
off the vblank event to be handle by the flip handler before it's
actually enabled in some cases, particularly:

old_crtc_state->active = false -> new_crtc_state->active = true

The framebuffer states haven't changed and we can technically still
do a "pageflip" in this case and send back the event.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: David Francis <David.Francis@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2019-04-29 14:58:30 -05:00
..
amd drm/amd/display: Split enabling CRTC interrupts into two passes 2019-04-29 14:58:30 -05:00
arc drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
arm Merge commit 'refs/for-upstream/mali-dp' of git://linux-arm.org/linux-ld into drm-next 2019-04-03 13:44:40 +10:00
armada drm/armada: Use drm_fb_helper_fill_info 2019-03-27 09:56:14 +01:00
aspeed drm: Add ASPEED GFX driver 2019-04-04 11:57:34 +10:30
ast Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
atmel-hlcdc drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
bochs drm-misc-next for 5.2: 2019-04-05 11:38:02 +10:00
bridge drm/bridge: ti-tfp410: Report input bus config through bridge timings 2019-03-18 11:42:13 +02:00
cirrus drm-misc-next for 5.2: 2019-04-12 14:27:45 +10:00
etnaviv drm-misc-next for 5.2: 2019-03-25 11:05:12 +01:00
exynos drm-misc-next for 5.2: 2019-03-29 14:03:01 +10:00
fsl-dcu drm: Use new DRM_BUS_FLAG_*_(DRIVE|SAMPLE)_(POS|NEG)EDGE flags 2019-03-18 11:42:13 +02:00
gma500 drm/gma500: Use drm_fb_helper_fill_info 2019-03-27 09:57:28 +01:00
hisilicon Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
i2c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
i810
i915 drm-misc-next for 5.2: 2019-03-29 14:03:01 +10:00
imx drm-misc-next for 5.2: 2019-03-25 11:05:12 +01:00
lib
lima drm-misc-next for 5.2: 2019-04-12 14:27:45 +10:00
mediatek drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
meson drm/meson: Add G12A support for the DW-HDMI Glue 2019-04-09 11:26:08 +02:00
mga drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
mgag200 Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
msm drm-misc-next for 5.2: 2019-03-29 14:03:01 +10:00
mxsfb drm: Use new DRM_BUS_FLAG_*_(DRIVE|SAMPLE)_(POS|NEG)EDGE flags 2019-03-18 11:42:13 +02:00
nouveau Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
omapdrm drm-misc-next for 5.2: 2019-03-29 14:03:01 +10:00
panel drm-misc-next for 5.2: 2019-04-12 14:27:45 +10:00
pl111 drm-misc-next for 5.2: 2019-04-12 14:27:45 +10:00
qxl Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
r128 drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
radeon Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
rcar-du drm: rcar-du: lvds: Set LVEN and LVRES bits together on D3 2019-03-28 06:12:42 +02:00
rockchip drm: rockchip: introduce rk3066 hdmi 2019-03-31 14:24:30 +02:00
savage drm/savage: mark expected switch fall-throughs 2019-01-30 17:35:29 +01:00
scheduler Merge branch 'drm-next-5.1' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-02-22 15:56:42 +10:00
selftests drm/selftests/mm: Switch to bitmap_zalloc() 2019-03-20 17:36:06 +00:00
shmobile drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
sis
sti drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
stm drm/stm: add sleep power management 2019-04-01 11:00:18 +02:00
sun4i drm-misc-next for 5.2: 2019-04-05 11:38:02 +10:00
tdfx
tegra drm/tegra: Use drm_fb_helper_fill_info 2019-03-27 10:06:02 +01:00
tilcdc drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
tinydrm drm: move tinydrm format conversion helpers to new drm_format_helper.c 2019-04-08 06:59:26 +02:00
ttm drm/ttm: Fix spelling of "KiB" 2019-03-19 15:04:03 -05:00
tve200 drm: Use new DRM_BUS_FLAG_*_(DRIVE|SAMPLE)_(POS|NEG)EDGE flags 2019-03-18 11:42:13 +02:00
udl drm-misc-next for 5.2: 2019-03-29 14:03:01 +10:00
v3d drm/v3d: fix a missing check of pm_runtime_get_sync 2019-04-01 10:45:59 -07:00
vboxvideo Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
vc4 drm-misc-next for 5.2: 2019-04-12 14:27:45 +10:00
vgem dma-buf: make fence sequence numbers 64 bit v2 2018-12-07 12:44:16 +01:00
via drm/via: mark expected switch fall-throughs 2019-01-30 17:35:29 +01:00
virtio drm-misc-next for 5.2: 2019-04-05 11:38:02 +10:00
vkms drm: vkms: check status of alloc_ordered_workqueue 2019-03-25 09:33:42 +01:00
vmwgfx Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
xen drm/drv: drm_dev_unplug(): Move out drm_dev_put() call 2019-02-21 12:11:58 +01:00
zte drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
ati_pcigart.c drm/ati_pcigart: Fix error code in drm_ati_pcigart_init() 2018-12-17 10:47:17 +01:00
drm_agpsupport.c drm: Trivial comment grammar cleanups 2019-02-04 10:21:17 +01:00
drm_atomic_helper.c drm-misc-next for 5.2: 2019-03-25 11:05:12 +01:00
drm_atomic_state_helper.c drm: writeback: Fix leak of writeback job 2019-03-18 17:24:32 +02:00
drm_atomic_uapi.c drm-misc-next for 5.2: 2019-03-25 11:05:12 +01:00
drm_atomic.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_auth.c drm: set is_master to 0 upon drm_new_set_master() failure 2018-11-26 16:14:27 -05:00
drm_blend.c drm: Clarify DRM_MODE_REFLECT_X/Y documentation 2018-09-11 11:21:30 +01:00
drm_bridge.c drm: bridge: Constify mode arguments to bridge .mode_set() operation 2019-01-14 03:51:14 +02:00
drm_bufs.c drm: Trivial comment grammar cleanups 2019-02-04 10:21:17 +01:00
drm_cache.c
drm_client.c drm/gem: Add drm_gem_object_funcs 2018-11-20 14:56:18 +01:00
drm_color_mgmt.c drm: Constify drm_color_lut_check() 2019-01-29 23:26:12 +02:00
drm_connector.c drm/dp: Set the connector's TILE property even for DP SST connectors 2019-03-14 11:33:17 -07:00
drm_context.c drm: Fix error handling in drm_legacy_addctx 2019-01-07 11:26:31 +01:00
drm_crtc_helper_internal.h
drm_crtc_helper.c drm: Remove use of drm_mode_object 2019-01-15 13:20:56 +01:00
drm_crtc_internal.h drm: Unexport drm_crtc_force_disable 2019-01-11 15:56:40 +01:00
drm_crtc.c drm: Move the legacy kms disable_all helper to crtc helpers 2019-01-11 22:54:29 +01:00
drm_damage_helper.c drm: prepare for drmP.h removal from drm_modeset_helper.h 2019-02-07 21:48:28 +01:00
drm_debugfs_crc.c
drm_debugfs.c drm: Merge drm_info.c into drm_debugfs.c 2018-11-22 09:52:27 +01:00
drm_dma.c
drm_dp_aux_dev.c
drm_dp_cec.c drm: Do not call drm_dp_cec_set_edid() while registering DP connectors 2018-10-11 10:52:35 +02:00
drm_dp_dual_mode_helper.c
drm_dp_helper.c drm/dsc: Add kernel documentation for DRM DP DSC helpers 2019-02-08 13:38:51 -08:00
drm_dp_mst_topology.c drm/dp: Set the connector's TILE property even for DP SST connectors 2019-03-14 11:33:17 -07:00
drm_drv.c drm/drv: DOC: Add driver example code 2019-03-04 15:23:34 +01:00
drm_dsc.c drm/dsc: Split DSC PPS and SDP header initialisations 2019-03-05 13:24:34 -05:00
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm/edid: Remove defunct EDID_QUIRK_FIRST_DETAILED_PREFERRED 2019-03-27 13:55:13 +02:00
drm_encoder_slave.c
drm_encoder.c drm: Differentiate the lack of an interface from invalid parameter 2018-09-14 17:29:47 +01:00
drm_fb_cma_helper.c drm/cma-helper: Remove unused fbdev code 2019-01-17 10:56:38 +01:00
drm_fb_helper.c drm/fb-helper: generic: Call drm_client_add() after setup is done 2019-04-03 11:11:47 +02:00
drm_file.c Merge drm/drm-next into drm-misc-next 2019-03-06 09:22:18 -05:00
drm_flip_work.c drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
drm_format_helper.c drm: add drm_fb_xrgb8888_to_rgb888_dstclip() 2019-04-08 06:59:27 +02:00
drm_fourcc.c drm/fourcc: Fix conflicting Y41x definitions 2019-03-21 09:49:04 +01:00
drm_framebuffer.c drm: Trivial comment grammar cleanups 2019-02-04 10:21:17 +01:00
drm_gem_cma_helper.c drm/cma-helper: Add DRM_GEM_CMA_VMAP_DRIVER_OPS 2018-11-20 14:57:25 +01:00
drm_gem_framebuffer_helper.c drm/gem-fb-helper: Add drm_gem_fb_create_with_dirty() 2019-01-17 10:56:45 +01:00
drm_gem_shmem_helper.c drm: shmem: Off by one in drm_gem_shmem_fault() 2019-04-01 10:44:34 -07:00
drm_gem.c Merge branch 'drm-next-5.2' of git://people.freedesktop.org/~agd5f/linux into drm-next 2019-04-03 13:26:11 +10:00
drm_hashtab.c
drm_internal.h drm/syncobj: add timeline signal ioctl for syncobj v5 2019-04-01 12:09:00 +02:00
drm_ioc32.c drm: add __user attribute to ptr_to_compat() 2019-03-04 09:55:31 -05:00
drm_ioctl.c drm/syncobj: add timeline signal ioctl for syncobj v5 2019-04-01 12:09:00 +02:00
drm_irq.c drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
drm_kms_helper_common.c drm: fix spelling mistake "intead" -> "instead" 2019-03-04 11:18:50 -05:00
drm_lease.c Linux 5.0-rc7 2019-02-18 13:27:15 +10:00
drm_legacy.h
drm_lock.c drm: Differentiate the lack of an interface from invalid parameter 2018-09-14 17:29:47 +01:00
drm_memory.c drm: fallback to dma_alloc_coherent when memory encryption is active 2019-04-01 11:43:42 +02:00
drm_mipi_dsi.c
drm_mm.c drm: Trivial comment grammar cleanups 2019-02-04 10:21:17 +01:00
drm_mode_config.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_mode_object.c gpu/drm: Fix lock held when returning to user space. 2019-01-10 11:31:58 +01:00
drm_modes.c drm: Use new DRM_BUS_FLAG_*_(DRIVE|SAMPLE)_(POS|NEG)EDGE flags 2019-03-18 11:42:13 +02:00
drm_modeset_helper.c drm: prepare for drmP.h removal from drm_modeset_helper.h 2019-02-07 21:48:28 +01:00
drm_modeset_lock.c drm/atomic: integrate modeset lock with private objects 2018-12-11 15:24:30 +01:00
drm_of.c drm/of: Fix kerneldoc 2019-01-12 13:07:58 +01:00
drm_panel_orientation_quirks.c drm: panel-orientation-quirks: Add quirk for Lenovo Ideapad D330 2019-03-01 09:15:55 +02:00
drm_panel.c drm/panel: Small documentation polish 2019-01-12 13:08:12 +01:00
drm_pci.c cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
drm_plane_helper.c drm: Unexport drm_plane_helper_check_update 2018-10-05 22:45:19 +02:00
drm_plane.c drm: Auto-set allow_fb_modifiers when given modifiers at plane init 2019-01-11 16:53:55 +01:00
drm_prime.c drm: Add reservation_object to drm_gem_object 2019-02-19 11:08:40 +01:00
drm_print.c drm: Add a helper function for printing a debugfs_regset32. 2019-04-01 10:44:34 -07:00
drm_probe_helper.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
drm_property.c drm: Trivial comment grammar cleanups 2019-02-04 10:21:17 +01:00
drm_rect.c drm: Nuke drm_calc_{h,v}scale_relaxed() 2019-02-07 13:14:06 +02:00
drm_scatter.c drm: Differentiate the lack of an interface from invalid parameter 2018-09-14 17:29:47 +01:00
drm_scdc_helper.c
drm_simple_kms_helper.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
drm_syncobj.c drm/syncobj: add timeline signal ioctl for syncobj v5 2019-04-01 12:09:00 +02:00
drm_sysfs.c drm/lease: Send a distinct uevent 2018-11-30 10:57:18 +01:00
drm_trace_points.c
drm_trace.h
drm_vblank.c drm: Trivial comment grammar cleanups 2019-02-04 10:21:17 +01:00
drm_vm.c drm/drm_vm: Mark expected switch fall-throughs 2019-02-19 12:20:41 +01:00
drm_vma_manager.c drm: Remove "protection" around drm_vma_offset_manager_destroy() 2018-09-04 19:00:32 +01:00
drm_writeback.c drm: writeback: Add job prepare and cleanup operations 2019-03-18 17:24:38 +02:00
Kconfig drm-misc-next for 5.2: 2019-04-05 11:38:02 +10:00
Makefile drm-misc-next for 5.2: 2019-04-12 14:27:45 +10:00