diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_display.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 93f700ab1bfb..b83ae998fe27 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/pm_runtime.h> | 35 | #include <linux/pm_runtime.h> |
36 | #include <drm/drm_crtc_helper.h> | 36 | #include <drm/drm_crtc_helper.h> |
37 | #include <drm/drm_edid.h> | 37 | #include <drm/drm_edid.h> |
38 | #include <drm/drm_gem_framebuffer_helper.h> | ||
38 | #include <drm/drm_fb_helper.h> | 39 | #include <drm/drm_fb_helper.h> |
39 | 40 | ||
40 | static void amdgpu_display_flip_callback(struct dma_fence *f, | 41 | static void amdgpu_display_flip_callback(struct dma_fence *f, |
@@ -151,8 +152,6 @@ int amdgpu_display_crtc_page_flip_target(struct drm_crtc *crtc, | |||
151 | struct drm_device *dev = crtc->dev; | 152 | struct drm_device *dev = crtc->dev; |
152 | struct amdgpu_device *adev = dev->dev_private; | 153 | struct amdgpu_device *adev = dev->dev_private; |
153 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); | 154 | struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); |
154 | struct amdgpu_framebuffer *old_amdgpu_fb; | ||
155 | struct amdgpu_framebuffer *new_amdgpu_fb; | ||
156 | struct drm_gem_object *obj; | 155 | struct drm_gem_object *obj; |
157 | struct amdgpu_flip_work *work; | 156 | struct amdgpu_flip_work *work; |
158 | struct amdgpu_bo *new_abo; | 157 | struct amdgpu_bo *new_abo; |
@@ -174,15 +173,13 @@ int amdgpu_display_crtc_page_flip_target(struct drm_crtc *crtc, | |||
174 | work->async = (page_flip_flags & DRM_MODE_PAGE_FLIP_ASYNC) != 0; | 173 | work->async = (page_flip_flags & DRM_MODE_PAGE_FLIP_ASYNC) != 0; |
175 | 174 | ||
176 | /* schedule unpin of the old buffer */ | 175 | /* schedule unpin of the old buffer */ |
177 | old_amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb); | 176 | obj = crtc->primary->fb->obj[0]; |
178 | obj = old_amdgpu_fb->obj; | ||
179 | 177 | ||
180 | /* take a reference to the old object */ | 178 | /* take a reference to the old object */ |
181 | work->old_abo = gem_to_amdgpu_bo(obj); | 179 | work->old_abo = gem_to_amdgpu_bo(obj); |
182 | amdgpu_bo_ref(work->old_abo); | 180 | amdgpu_bo_ref(work->old_abo); |
183 | 181 | ||
184 | new_amdgpu_fb = to_amdgpu_framebuffer(fb); | 182 | obj = fb->obj[0]; |
185 | obj = new_amdgpu_fb->obj; | ||
186 | new_abo = gem_to_amdgpu_bo(obj); | 183 | new_abo = gem_to_amdgpu_bo(obj); |
187 | 184 | ||
188 | /* pin the new buffer */ | 185 | /* pin the new buffer */ |
@@ -482,28 +479,9 @@ bool amdgpu_display_ddc_probe(struct amdgpu_connector *amdgpu_connector, | |||
482 | return true; | 479 | return true; |
483 | } | 480 | } |
484 | 481 | ||
485 | static void amdgpu_display_user_framebuffer_destroy(struct drm_framebuffer *fb) | ||
486 | { | ||
487 | struct amdgpu_framebuffer *amdgpu_fb = to_amdgpu_framebuffer(fb); | ||
488 | |||
489 | drm_gem_object_put_unlocked(amdgpu_fb->obj); | ||
490 | drm_framebuffer_cleanup(fb); | ||
491 | kfree(amdgpu_fb); | ||
492 | } | ||
493 | |||
494 | static int amdgpu_display_user_framebuffer_create_handle( | ||
495 | struct drm_framebuffer *fb, | ||
496 | struct drm_file *file_priv, | ||
497 | unsigned int *handle) | ||
498 | { | ||
499 | struct amdgpu_framebuffer *amdgpu_fb = to_amdgpu_framebuffer(fb); | ||
500 | |||
501 | return drm_gem_handle_create(file_priv, amdgpu_fb->obj, handle); | ||
502 | } | ||
503 | |||
504 | static const struct drm_framebuffer_funcs amdgpu_fb_funcs = { | 482 | static const struct drm_framebuffer_funcs amdgpu_fb_funcs = { |
505 | .destroy = amdgpu_display_user_framebuffer_destroy, | 483 | .destroy = drm_gem_fb_destroy, |
506 | .create_handle = amdgpu_display_user_framebuffer_create_handle, | 484 | .create_handle = drm_gem_fb_create_handle, |
507 | }; | 485 | }; |
508 | 486 | ||
509 | uint32_t amdgpu_display_framebuffer_domains(struct amdgpu_device *adev) | 487 | uint32_t amdgpu_display_framebuffer_domains(struct amdgpu_device *adev) |
@@ -526,11 +504,11 @@ int amdgpu_display_framebuffer_init(struct drm_device *dev, | |||
526 | struct drm_gem_object *obj) | 504 | struct drm_gem_object *obj) |
527 | { | 505 | { |
528 | int ret; | 506 | int ret; |
529 | rfb->obj = obj; | 507 | rfb->base.obj[0] = obj; |
530 | drm_helper_mode_fill_fb_struct(dev, &rfb->base, mode_cmd); | 508 | drm_helper_mode_fill_fb_struct(dev, &rfb->base, mode_cmd); |
531 | ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs); | 509 | ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs); |
532 | if (ret) { | 510 | if (ret) { |
533 | rfb->obj = NULL; | 511 | rfb->base.obj[0] = NULL; |
534 | return ret; | 512 | return ret; |
535 | } | 513 | } |
536 | return 0; | 514 | return 0; |