diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0570-drm-amdgpu-restore-the-fbdev-mode-in-lastclose.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0570-drm-amdgpu-restore-the-fbdev-mode-in-lastclose.patch | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0570-drm-amdgpu-restore-the-fbdev-mode-in-lastclose.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0570-drm-amdgpu-restore-the-fbdev-mode-in-lastclose.patch new file mode 100644 index 00000000..a34aa778 --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0570-drm-amdgpu-restore-the-fbdev-mode-in-lastclose.patch @@ -0,0 +1,81 @@ +From 8b7530b15c3332220a081035ab467c9359aff409 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Fri, 2 Oct 2015 16:59:34 -0400 +Subject: [PATCH 0570/1050] drm/amdgpu: restore the fbdev mode in lastclose +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +restore the fbdev state if a drm app like X is killed. + +Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 16 ++++++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 5 ++++- + drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 1 + + 3 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +index 8a122b1..96290d9 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +@@ -402,3 +402,19 @@ bool amdgpu_fbdev_robj_is_fb(struct amdgpu_device *adev, struct amdgpu_bo *robj) + return true; + return false; + } ++ ++void amdgpu_fbdev_restore_mode(struct amdgpu_device *adev) ++{ ++ struct amdgpu_fbdev *afbdev = adev->mode_info.rfbdev; ++ struct drm_fb_helper *fb_helper; ++ int ret; ++ ++ if (!afbdev) ++ return; ++ ++ fb_helper = &afbdev->helper; ++ ++ ret = drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper); ++ if (ret) ++ DRM_DEBUG("failed to restore crtc mode\n"); ++} +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +index 8c735f5..5d11e79 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +@@ -485,7 +485,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file + * Outdated mess for old drm with Xorg being in charge (void function now). + */ + /** +- * amdgpu_driver_firstopen_kms - drm callback for last close ++ * amdgpu_driver_lastclose_kms - drm callback for last close + * + * @dev: drm dev pointer + * +@@ -493,6 +493,9 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file + */ + void amdgpu_driver_lastclose_kms(struct drm_device *dev) + { ++ struct amdgpu_device *adev = dev->dev_private; ++ ++ amdgpu_fbdev_restore_mode(adev); + vga_switcheroo_process_delayed_switch(); + } + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h +index 64efe5b..7bd470d 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h +@@ -567,6 +567,7 @@ void amdgpu_fbdev_fini(struct amdgpu_device *adev); + void amdgpu_fbdev_set_suspend(struct amdgpu_device *adev, int state); + int amdgpu_fbdev_total_size(struct amdgpu_device *adev); + bool amdgpu_fbdev_robj_is_fb(struct amdgpu_device *adev, struct amdgpu_bo *robj); ++void amdgpu_fbdev_restore_mode(struct amdgpu_device *adev); + + void amdgpu_fb_output_poll_changed(struct amdgpu_device *adev); + +-- +1.9.1 + |