drm/amdgpu: restore the fbdev mode in lastclose
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>hifive-unleashed-5.1
parent
8c70e1cda0
commit
8b7530b15c
|
@ -402,3 +402,19 @@ bool amdgpu_fbdev_robj_is_fb(struct amdgpu_device *adev, struct amdgpu_bo *robj)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
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");
|
||||||
|
}
|
||||||
|
|
|
@ -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).
|
* 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
|
* @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)
|
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();
|
vga_switcheroo_process_delayed_switch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -567,6 +567,7 @@ void amdgpu_fbdev_fini(struct amdgpu_device *adev);
|
||||||
void amdgpu_fbdev_set_suspend(struct amdgpu_device *adev, int state);
|
void amdgpu_fbdev_set_suspend(struct amdgpu_device *adev, int state);
|
||||||
int amdgpu_fbdev_total_size(struct amdgpu_device *adev);
|
int amdgpu_fbdev_total_size(struct amdgpu_device *adev);
|
||||||
bool amdgpu_fbdev_robj_is_fb(struct amdgpu_device *adev, struct amdgpu_bo *robj);
|
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);
|
void amdgpu_fb_output_poll_changed(struct amdgpu_device *adev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue