mirror_ubuntu-kernels/drivers/gpu/drm
Nicholas Kazlauskas 58aa1c50e5 drm/amd/display: Use vblank control events for PSR enable/disable
[Why]
PSR can disable the HUBP along with the OTG when PSR is active.

We'll hit a pageflip timeout when the OTG is disable because we're no
longer updating the CRTC vblank counter and the pflip high IRQ will
not fire on the flip.

In order to flip the page flip timeout occur we should modify the
enter/exit conditions to match DRM requirements.

[How]
Use our deferred handlers for DRM vblank control to notify DMCU(B)
when it can enable or disable PSR based on whether vblank is disabled or
enabled respectively.

We'll need to pass along the stream with the notification now because
we want to access the CRTC state while the CRTC is locked to get the
stream state prior to the commit.

Retain a reference to the stream so it remains safe to continue to
access and release that reference once we're done with it.

Enable/disable logic follows what we were previously doing in
update_planes.

The workqueue has to be flushed before programming streams or planes
to ensure that we exit out of idle optimizations and PSR before
these events occur if necessary.

To keep the skip count logic the same to avoid FBCON PSR enablement
requires copying the allow condition onto the DM IRQ parameters - a
field that we can actually access from the worker.

Reviewed-by: Roman Li <Roman.Li@amd.com>
Acked-by: Wayne Lin <wayne.lin@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2021-08-16 15:35:56 -04:00
..
amd drm/amd/display: Use vblank control events for PSR enable/disable 2021-08-16 15:35:56 -04:00
arm drm/arm/komeda: Don't include drm_irq.h 2021-07-08 14:10:47 +02:00
armada drm/aperture: Pass DRM driver structure instead of driver name 2021-07-01 11:11:55 +02:00
aspeed drm/tiny: drm_gem_simple_display_pipe_prepare_fb is the default 2021-06-24 15:40:11 +02:00
ast drm/ast: Disable fast reset after DRAM initial 2021-07-20 11:19:57 +02:00
atmel-hlcdc drm/atmel-hlcdc: Allow async page flips 2021-06-19 23:06:56 +02:00
bridge drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
etnaviv drm/sched: Allow using a dedicated workqueue for the timeout/fault tdr 2021-07-01 08:53:25 +02:00
exynos drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
fsl-dcu drm: Use state helper instead of the plane state pointer 2021-02-25 08:05:28 +01:00
gma500 drm/gma500: Add the missed drm_gem_object_put() in psb_user_framebuffer_create() 2021-07-09 21:32:04 +02:00
gud drm/gud: Use framebuffer dma-buf helpers 2021-07-23 20:18:04 +02:00
hisilicon drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
hyperv drm-misc-next for v5.15: 2021-07-21 11:58:28 +10:00
i2c
i810 drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
i915 Linux 5.14-rc3 2021-07-26 09:27:59 +10:00
imx drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
ingenic drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
kmb drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
lib
lima drm-misc-next for v5.15: 2021-07-21 11:58:28 +10:00
mcde drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
mediatek drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
meson drm-misc-next for v5.15: 2021-07-21 11:58:28 +10:00
mga drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
mgag200 drm/mgag200: Constify LUT for programming bpp 2021-07-05 08:55:47 +02:00
msm Merge tag 'drm-msm-next-2021-07-28' of https://gitlab.freedesktop.org/drm/msm into drm-next 2021-07-30 16:24:01 +10:00
mxsfb drm: mxsfb: Clear FIFO_CLEAR bit 2021-07-27 21:15:24 +02:00
nouveau drm-misc-next for v5.15-rc1: 2021-07-23 11:32:43 +10:00
omapdrm drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
panel drm/panel-sony-acx424akp: Modernize backlight handling 2021-07-28 23:46:18 +02:00
panfrost drm/panfrost: devfreq: Don't display error for EPROBE_DEFER 2021-07-23 12:06:29 +01:00
pl111 drm/tiny: drm_gem_simple_display_pipe_prepare_fb is the default 2021-06-24 15:40:11 +02:00
qxl drm-misc-next for v5.15: 2021-07-21 11:58:28 +10:00
r128 drm: fix leaked dma handles after removing drm_pci_free 2021-05-26 21:18:13 +02:00
radeon DRM: gpu: radeon: Fixed coding style issues 2021-08-05 21:18:00 -04:00
rcar-du drm: rcar-du: lvds: Use dev_err_probe() 2021-07-28 16:33:32 +03:00
rockchip drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
savage drm/savage: Remove references to struct drm_device.pdev 2021-05-03 19:48:30 +02:00
scheduler drm/sched: Allow using a dedicated workqueue for the timeout/fault tdr 2021-07-01 08:53:25 +02:00
selftests drm: allow drm_atomic_print_state() to accept any drm_printer 2021-06-23 07:32:13 -07:00
shmobile drm/shmobile: Convert to Linux IRQ interfaces 2021-07-25 11:01:12 +02:00
sis drm/sis: Remove references to struct drm_device.pdev 2021-05-03 19:48:33 +02:00
sti drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
stm drm/stm: dsi: compute the transition time from LP to HS and back 2021-07-19 15:35:55 +02:00
sun4i drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
tdfx
tegra drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
tidss drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
tilcdc drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
tiny drm/st7586: Use framebuffer dma-buf helpers 2021-07-23 20:18:14 +02:00
ttm Linux 5.14-rc3 2021-07-26 09:27:59 +10:00
tve200 drm/tiny: drm_gem_simple_display_pipe_prepare_fb is the default 2021-06-24 15:40:11 +02:00
udl drm/udl: Use framebuffer dma-buf helpers 2021-07-23 20:17:42 +02:00
v3d drm/v3d: Expose performance counters to userspace 2021-07-21 00:19:59 +01:00
vboxvideo drm/vbox: Convert to Linux IRQ interfaces 2021-07-15 11:16:06 +02:00
vc4 drm-misc-next for v5.15: 2021-07-30 14:52:00 +10:00
vgem Revert "drm/vgem: Implement mmap as GEM object function" 2021-07-13 13:15:52 +02:00
via drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
virtio drm/aperture: Pass DRM driver structure instead of driver name 2021-07-01 11:11:55 +02:00
vkms drm/vkms: Use dma-buf mapping from shadow-plane state for composing 2021-07-13 13:36:21 +02:00
vmwgfx drm/vmwgfx: Use 2.19 version number to recognize mks-stats ioctls 2021-07-28 14:53:26 -04:00
xen drm/tiny: drm_gem_simple_display_pipe_prepare_fb is the default 2021-06-24 15:40:11 +02:00
xlnx drm/xlnx: Don't set struct drm_device.irq_enabled 2021-06-29 15:40:53 +02:00
zte drm/zte: Don't set struct drm_device.irq_enabled 2021-06-29 15:40:53 +02:00
drm_agpsupport.c drm: Include <asm/agp.h> iff CONFIG_AGP is set 2021-05-11 14:13:33 +02:00
drm_aperture.c drm/aperture: Pass DRM driver structure instead of driver name 2021-07-01 11:11:55 +02:00
drm_atomic_helper.c drm/atomic-helper: make drm_gem_plane_helper_prepare_fb the default 2021-06-24 15:35:13 +02:00
drm_atomic_state_helper.c
drm_atomic_uapi.c Merge tag 'drm-msm-next-2021-06-23b' of https://gitlab.freedesktop.org/drm/msm into drm-next 2021-06-24 07:21:16 +10:00
drm_atomic.c Backmerge remote-tracking branch 'drm/drm-next' into drm-misc-next 2021-07-27 12:48:17 +02:00
drm_auth.c drm: use the lookup lock in drm_is_current_master 2021-07-28 23:19:58 +02:00
drm_blend.c drm: drm_blend.c: Use tabs for code indents 2021-04-22 10:46:35 +02:00
drm_bridge_connector.c
drm_bridge.c drm/bridge: Centralize error message when bridge attach fails 2021-07-28 16:33:12 +03:00
drm_bufs.c drm: fix leaked dma handles after removing drm_pci_free 2021-05-26 21:18:13 +02:00
drm_cache.c drm: Add a prefetching memcpy_from_wc 2021-06-07 16:07:08 +02:00
drm_client_modeset.c drm: replace drm_modeset_lock_all() in drm_client_modeset_dpms_legacy() 2021-02-09 17:16:57 +01:00
drm_client.c
drm_color_mgmt.c
drm_connector.c drm: avoid circular locks in drm_mode_getconnector 2021-07-20 20:13:56 +02:00
drm_context.c drm: correct function name drm_legacy_ctxbitmap_flush() 2021-05-16 22:01:14 +02:00
drm_crtc_helper_internal.h drm: remove drm_fb_helper_modinit 2021-02-08 12:20:38 +01:00
drm_crtc_helper.c
drm_crtc_internal.h Backmerge remote-tracking branch 'drm/drm-next' into drm-misc-next 2021-07-27 12:48:17 +02:00
drm_crtc.c drm: Switch to %p4cc format modifier 2021-02-17 12:52:59 +01:00
drm_damage_helper.c drm/plane: Move drm_plane_enable_fb_damage_clips into core 2021-07-27 12:21:22 +02:00
drm_debugfs_crc.c drm/doc: document how userspace should find out CRTC index 2021-06-10 19:14:47 +02:00
drm_debugfs.c drm: avoid blocking in drm_clients_info's rcu section 2021-07-20 20:14:42 +02:00
drm_displayid.c drm/displayid: rename displayid_hdr to displayid_header 2021-03-31 15:42:39 +03:00
drm_dma.c drm: remove usage of drm_pci_alloc/free 2021-04-26 18:19:15 +02:00
drm_dp_aux_bus.c drm: Introduce the DP AUX bus 2021-06-11 12:30:39 -07:00
drm_dp_aux_dev.c drm/dp: Add backpointer to drm_device in drm_dp_aux 2021-04-27 18:43:42 -04:00
drm_dp_cec.c
drm_dp_dual_mode_helper.c drm/dp_dual_mode: Convert drm_dp_dual_mode_helper.c to using drm_err/drm_dbg_kms() 2021-04-27 18:43:45 -04:00
drm_dp_helper.c drm/dp: For drm_panel_dp_aux_backlight(), init backlight as disabled 2021-07-15 08:03:29 -07:00
drm_dp_mst_topology_internal.h
drm_dp_mst_topology.c drm/dp_mst: Fix return code on sideband message failure 2021-07-27 18:58:28 -04:00
drm_drv.c drm: Add a prefetching memcpy_from_wc 2021-06-07 16:07:08 +02:00
drm_dsc.c
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm/edid: use the new displayid iterator for tile info 2021-03-31 15:42:02 +03:00
drm_encoder_slave.c
drm_encoder.c
drm_fb_cma_helper.c drm: Add and export function drm_fb_cma_sync_non_coherent 2021-05-25 11:42:09 +01:00
drm_fb_helper.c drm/fb-helper: improve DRM fbdev emulation device names 2021-05-26 21:22:38 +02:00
drm_file.c drm: serialize drm_file.master with a new spinlock 2021-07-20 20:17:58 +02:00
drm_flip_work.c
drm_format_helper.c drm/format-helper: Add blitter functions 2021-05-01 12:45:03 +02:00
drm_fourcc.c Merge tag 'amd-drm-next-5.14-2021-06-02' of https://gitlab.freedesktop.org/agd5f/linux into drm-next 2021-06-04 06:13:57 +10:00
drm_framebuffer.c drm: add logging for RMFB ioctl 2021-07-27 14:16:40 +02:00
drm_gem_atomic_helper.c drm/gem: Export implementation of shadow-plane helpers 2021-07-13 13:30:58 +02:00
drm_gem_cma_helper.c drm: Fix misleading documentation of drm_gem_cma_create() 2021-06-01 17:27:20 +01:00
drm_gem_framebuffer_helper.c drm/gem: Provide drm_gem_fb_{begin,end}_cpu_access() helpers 2021-07-23 20:17:13 +02:00
drm_gem_shmem_helper.c drm/shmem-helper: Align to page size in dumb_create 2021-07-13 15:44:15 +02:00
drm_gem_ttm_helper.c drm/ttm: rename bo->mem and make it a pointer 2021-06-02 11:07:25 +02:00
drm_gem_vram_helper.c drm/vram-helper: Unexport drm_vram_helper_{alloc,release}_mm() 2021-07-05 08:55:11 +02:00
drm_gem.c Merge tag 'drm-msm-next-2021-07-28' of https://gitlab.freedesktop.org/drm/msm into drm-next 2021-07-30 16:24:01 +10:00
drm_hashtab.c
drm_hdcp.c
drm_internal.h drm: Mark IRQ_BUSID ioctl as legacy 2021-05-17 21:19:48 +02:00
drm_ioc32.c drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
drm_ioctl.c drm: Return -ENOTTY for non-drm ioctls 2021-07-20 15:57:43 +02:00
drm_irq.c vgaarb: provide a vga_client_unregister wrapper 2021-07-21 10:29:00 +02:00
drm_kms_helper_common.c drm: remove drm_fb_helper_modinit 2021-02-08 12:20:38 +01:00
drm_lease.c drm: clarify usage of drm leases 2021-07-29 09:12:01 +02:00
drm_legacy_misc.c drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
drm_legacy.h drm: Mark IRQ_BUSID ioctl as legacy 2021-05-17 21:19:48 +02:00
drm_lock.c
drm_managed.c
drm_memory.c drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
drm_mipi_dbi.c drm/mipi-dbi: Use framebuffer dma-buf helpers 2021-07-23 20:17:59 +02:00
drm_mipi_dsi.c
drm_mm.c
drm_mode_config.c
drm_mode_object.c
drm_modes.c Merge drm/drm-next into drm-misc-next 2021-05-11 15:59:18 +02:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c drm/of: free the iterator object on failure 2021-07-15 10:54:04 +01:00
drm_panel_orientation_quirks.c drm: Added orientation quirk for OneGX1 Pro 2021-01-20 22:33:01 +01:00
drm_panel.c drm/dp: Move panel DP AUX backlight support to drm_dp_helper 2021-07-13 06:38:37 -07:00
drm_pci.c drm: Mark IRQ_BUSID ioctl as legacy 2021-05-17 21:19:48 +02:00
drm_plane_helper.c
drm_plane.c drm/plane: Move drm_plane_enable_fb_damage_clips into core 2021-07-27 12:21:22 +02:00
drm_prime.c drm/prime: fix comment on PRIME Helpers 2021-07-27 12:21:22 +02:00
drm_print.c
drm_probe_helper.c drm/probe-helper: Check epoch counter in output_poll_execute() 2021-03-16 12:45:52 +01:00
drm_property.c drm: Few typo fixes 2021-03-18 14:22:50 +01:00
drm_rect.c
drm_scatter.c
drm_scdc_helper.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c drm/simple-helper: drm_gem_simple_display_pipe_prepare_fb as default 2021-06-24 15:39:46 +02:00
drm_syncobj.c dma-buf: add dma_fence_chain_alloc/free v3 2021-06-14 19:38:34 +02:00
drm_sysfs.c drm/sysfs: Convert sysfs sprintf/snprintf family to sysfs_emit 2021-03-23 07:41:39 -04:00
drm_trace_points.c
drm_trace.h
drm_vblank_work.c
drm_vblank.c drm: Don't test for IRQ support in VBLANK ioctls 2021-06-29 11:03:39 +02:00
drm_vm.c drm: Mark AGP implementation and ioctls as legacy 2021-05-10 15:46:58 +02:00
drm_vma_manager.c
drm_writeback.c
Kconfig drm/bochs: Move to tiny/ 2021-07-05 08:54:44 +02:00
Makefile drm/bochs: Move to tiny/ 2021-07-05 08:54:44 +02:00