Commit 9d7e7002 authored by Daniel Stone's avatar Daniel Stone

drm/cirrus: Place GEM BOs in drm_framebuffer

Since drm_framebuffer can now store GEM objects directly, place them
there rather than in our own subclass. As this makes the framebuffer
create_handle and destroy functions the same as the GEM framebuffer
helper, we can reuse those.
Signed-off-by: default avatarDaniel Stone <daniels@collabora.com>
Reviewed-by: default avatarThierry Reding <treding@nvidia.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: virtualization@lists.linux-foundation.org
Link: https://patchwork.freedesktop.org/patch/msgid/20180330141138.28987-1-daniels@collabora.com
parent c9b6be7d
...@@ -119,7 +119,6 @@ struct cirrus_connector { ...@@ -119,7 +119,6 @@ struct cirrus_connector {
struct cirrus_framebuffer { struct cirrus_framebuffer {
struct drm_framebuffer base; struct drm_framebuffer base;
struct drm_gem_object *obj;
}; };
struct cirrus_mc { struct cirrus_mc {
......
...@@ -29,7 +29,7 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev, ...@@ -29,7 +29,7 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev,
int x2, y2; int x2, y2;
unsigned long flags; unsigned long flags;
obj = afbdev->gfb.obj; obj = afbdev->gfb.base.obj[0];
bo = gem_to_cirrus_bo(obj); bo = gem_to_cirrus_bo(obj);
/* /*
...@@ -250,9 +250,9 @@ static int cirrus_fbdev_destroy(struct drm_device *dev, ...@@ -250,9 +250,9 @@ static int cirrus_fbdev_destroy(struct drm_device *dev,
drm_fb_helper_unregister_fbi(&gfbdev->helper); drm_fb_helper_unregister_fbi(&gfbdev->helper);
if (gfb->obj) { if (gfb->base.obj[0]) {
drm_gem_object_put_unlocked(gfb->obj); drm_gem_object_put_unlocked(gfb->base.obj[0]);
gfb->obj = NULL; gfb->base.obj[0] = NULL;
} }
vfree(gfbdev->sysram); vfree(gfbdev->sysram);
......
...@@ -10,30 +10,13 @@ ...@@ -10,30 +10,13 @@
*/ */
#include <drm/drmP.h> #include <drm/drmP.h>
#include <drm/drm_crtc_helper.h> #include <drm/drm_crtc_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include "cirrus_drv.h" #include "cirrus_drv.h"
static int cirrus_create_handle(struct drm_framebuffer *fb,
struct drm_file* file_priv,
unsigned int* handle)
{
struct cirrus_framebuffer *cirrus_fb = to_cirrus_framebuffer(fb);
return drm_gem_handle_create(file_priv, cirrus_fb->obj, handle);
}
static void cirrus_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
struct cirrus_framebuffer *cirrus_fb = to_cirrus_framebuffer(fb);
drm_gem_object_put_unlocked(cirrus_fb->obj);
drm_framebuffer_cleanup(fb);
kfree(fb);
}
static const struct drm_framebuffer_funcs cirrus_fb_funcs = { static const struct drm_framebuffer_funcs cirrus_fb_funcs = {
.create_handle = cirrus_create_handle, .create_handle = drm_gem_fb_create_handle,
.destroy = cirrus_user_framebuffer_destroy, .destroy = drm_gem_fb_destroy,
}; };
int cirrus_framebuffer_init(struct drm_device *dev, int cirrus_framebuffer_init(struct drm_device *dev,
...@@ -44,7 +27,7 @@ int cirrus_framebuffer_init(struct drm_device *dev, ...@@ -44,7 +27,7 @@ int cirrus_framebuffer_init(struct drm_device *dev,
int ret; int ret;
drm_helper_mode_fill_fb_struct(dev, &gfb->base, mode_cmd); drm_helper_mode_fill_fb_struct(dev, &gfb->base, mode_cmd);
gfb->obj = obj; gfb->base.obj[0] = obj;
ret = drm_framebuffer_init(dev, &gfb->base, &cirrus_fb_funcs); ret = drm_framebuffer_init(dev, &gfb->base, &cirrus_fb_funcs);
if (ret) { if (ret) {
DRM_ERROR("drm_framebuffer_init failed: %d\n", ret); DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
......
...@@ -110,7 +110,7 @@ static int cirrus_crtc_do_set_base(struct drm_crtc *crtc, ...@@ -110,7 +110,7 @@ static int cirrus_crtc_do_set_base(struct drm_crtc *crtc,
/* push the previous fb to system ram */ /* push the previous fb to system ram */
if (!atomic && fb) { if (!atomic && fb) {
cirrus_fb = to_cirrus_framebuffer(fb); cirrus_fb = to_cirrus_framebuffer(fb);
obj = cirrus_fb->obj; obj = cirrus_fb->base.obj[0];
bo = gem_to_cirrus_bo(obj); bo = gem_to_cirrus_bo(obj);
ret = cirrus_bo_reserve(bo, false); ret = cirrus_bo_reserve(bo, false);
if (ret) if (ret)
...@@ -120,7 +120,7 @@ static int cirrus_crtc_do_set_base(struct drm_crtc *crtc, ...@@ -120,7 +120,7 @@ static int cirrus_crtc_do_set_base(struct drm_crtc *crtc,
} }
cirrus_fb = to_cirrus_framebuffer(crtc->primary->fb); cirrus_fb = to_cirrus_framebuffer(crtc->primary->fb);
obj = cirrus_fb->obj; obj = cirrus_fb->base.obj[0];
bo = gem_to_cirrus_bo(obj); bo = gem_to_cirrus_bo(obj);
ret = cirrus_bo_reserve(bo, false); ret = cirrus_bo_reserve(bo, false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment