Patch "drm/radeon: unpin cursor BOs on suspend and pin them again on resume (v2)" has been added to the 4.1-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm/radeon: unpin cursor BOs on suspend and pin them again on resume (v2)
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-radeon-unpin-cursor-bos-on-suspend-and-pin-them-again-on-resume-v2.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f3cbb17bcf676a2fc6aedebe9fbebd59e550c51aMon Sep 17 00:00:00 2001
From: Grigori Goronzy <[email protected]>
Date: Tue, 7 Jul 2015 16:27:29 +0900
Subject: drm/radeon: unpin cursor BOs on suspend and pin them again on resume (v2)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Grigori Goronzy <[email protected]>
commit f3cbb17bcf676a2fc6aedebe9fbebd59e550c51a upstream.
Everything is evicted from VRAM before suspend, so we need to make sure all BOs are unpinned and re-pinned after resume. Fixes broken mouse cursor after resume introduced by commit b9729b17.
[Michel Dänzer: Add pinning BOs on resume]
v2:
[Alex Deucher: merge cursor unpin into fb unpin loop]
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=100541
--- drivers/gpu/drm/radeon/radeon_device.c | 34 ++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-)
drivers/gpu/drm/radeon/radeon_device.c +33 -1
@@ -1572,11 +1572,21 @@ int radeon_suspend_kms(struct drm_devicedrm_helper_connector_dpms (connector,DRM_MODE_DPMS_OFF ); } -/* unpin the front buffers */ +/* unpin the front buffers and cursors */ list_for_each_entry (crtc, &dev->mode_config.crtc_list, head) { +struct radeon_crtc *radeon_crtc =to_radeon_crtc (crtc);struct radeon_framebuffer *rfb =to_radeon_framebuffer (crtc->primary->fb);struct radeon_bo *robj; +if (radeon_crtc->cursor_bo) { +struct radeon_bo *robj =gem_to_radeon_bo (radeon_crtc->cursor_bo); + r =radeon_bo_reserve (robj, false); +if (r ==0 ) { +radeon_bo_unpin (robj); +radeon_bo_unreserve (robj); + } + } +if (rfb ==NULL || rfb->obj ==NULL ) {continue ; }
@@ -1639,6 +1649,7 @@ int radeon_resume_kms(struct drm_device {struct drm_connector *connector;struct radeon_device *rdev = dev->dev_private; +struct drm_crtc *crtc;int r;if (dev->switch_power_state ==DRM_SWITCH_POWER_OFF )
@@ -1678,6 +1689,27 @@ int radeon_resume_kms(struct drm_deviceradeon_restore_bios_scratch_regs (rdev); +/* pin cursors */ +list_for_each_entry (crtc, &dev->mode_config.crtc_list, head) { +struct radeon_crtc *radeon_crtc =to_radeon_crtc (crtc); + +if (radeon_crtc->cursor_bo) { +struct radeon_bo *robj =gem_to_radeon_bo (radeon_crtc->cursor_bo); + r =radeon_bo_reserve (robj, false); +if (r ==0 ) { +/* Only 27 bit offset for legacy cursor */ + r =radeon_bo_pin_restricted (robj, +RADEON_GEM_DOMAIN_VRAM , +ASIC_IS_AVIVO (rdev) ? +0 :1 <<27 , + &radeon_crtc->cursor_addr); +if (r !=0 ) +DRM_ERROR ("Failed to pin cursor BO (%d)\n" , r); +radeon_bo_unreserve (robj); + } + } + } +/* init dig PHYs, disp eng pll */ if (rdev->is_atom_bios) {radeon_atom_encoder_init (rdev);
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/drm-radeon-fix-hdp-flushing.patch queue-4.1/drm-radeon-clean-up-reference-counting-and-pinning-of-the-cursor-bos.patch queue-4.1/drm-radeon-unpin-cursor-bos-on-suspend-and-pin-them-again-on-resume-v2.patch