|
@@ -18,6 +18,7 @@
|
|
|
#include <drm/drm_atomic.h>
|
|
|
#include <drm/drm_fb_helper.h>
|
|
|
#include <drm/drm_crtc_helper.h>
|
|
|
+#include <drm/drm_gem_framebuffer_helper.h>
|
|
|
|
|
|
#include "rockchip_drm_drv.h"
|
|
|
#include "rockchip_drm_fb.h"
|
|
@@ -28,40 +29,15 @@
|
|
|
|
|
|
struct rockchip_drm_fb {
|
|
|
struct drm_framebuffer fb;
|
|
|
- struct drm_gem_object *obj[ROCKCHIP_MAX_FB_BUFFER];
|
|
|
};
|
|
|
|
|
|
struct drm_gem_object *rockchip_fb_get_gem_obj(struct drm_framebuffer *fb,
|
|
|
unsigned int plane)
|
|
|
{
|
|
|
- struct rockchip_drm_fb *rk_fb = to_rockchip_fb(fb);
|
|
|
-
|
|
|
if (plane >= ROCKCHIP_MAX_FB_BUFFER)
|
|
|
return NULL;
|
|
|
|
|
|
- return rk_fb->obj[plane];
|
|
|
-}
|
|
|
-
|
|
|
-static void rockchip_drm_fb_destroy(struct drm_framebuffer *fb)
|
|
|
-{
|
|
|
- struct rockchip_drm_fb *rockchip_fb = to_rockchip_fb(fb);
|
|
|
- int i;
|
|
|
-
|
|
|
- for (i = 0; i < ROCKCHIP_MAX_FB_BUFFER; i++)
|
|
|
- drm_gem_object_put_unlocked(rockchip_fb->obj[i]);
|
|
|
-
|
|
|
- drm_framebuffer_cleanup(fb);
|
|
|
- kfree(rockchip_fb);
|
|
|
-}
|
|
|
-
|
|
|
-static int rockchip_drm_fb_create_handle(struct drm_framebuffer *fb,
|
|
|
- struct drm_file *file_priv,
|
|
|
- unsigned int *handle)
|
|
|
-{
|
|
|
- struct rockchip_drm_fb *rockchip_fb = to_rockchip_fb(fb);
|
|
|
-
|
|
|
- return drm_gem_handle_create(file_priv,
|
|
|
- rockchip_fb->obj[0], handle);
|
|
|
+ return fb->obj[plane];
|
|
|
}
|
|
|
|
|
|
static int rockchip_drm_fb_dirty(struct drm_framebuffer *fb,
|
|
@@ -75,9 +51,9 @@ static int rockchip_drm_fb_dirty(struct drm_framebuffer *fb,
|
|
|
}
|
|
|
|
|
|
static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs = {
|
|
|
- .destroy = rockchip_drm_fb_destroy,
|
|
|
- .create_handle = rockchip_drm_fb_create_handle,
|
|
|
- .dirty = rockchip_drm_fb_dirty,
|
|
|
+ .destroy = drm_gem_fb_destroy,
|
|
|
+ .create_handle = drm_gem_fb_create_handle,
|
|
|
+ .dirty = rockchip_drm_fb_dirty,
|
|
|
};
|
|
|
|
|
|
static struct rockchip_drm_fb *
|
|
@@ -95,7 +71,7 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
|
|
|
drm_helper_mode_fill_fb_struct(dev, &rockchip_fb->fb, mode_cmd);
|
|
|
|
|
|
for (i = 0; i < num_planes; i++)
|
|
|
- rockchip_fb->obj[i] = obj[i];
|
|
|
+ rockchip_fb->fb.obj[i] = obj[i];
|
|
|
|
|
|
ret = drm_framebuffer_init(dev, &rockchip_fb->fb,
|
|
|
&rockchip_drm_fb_funcs);
|