drm/rockchip: framebuffer: Add support /dev/graphics/fb0 read

For support some application only can support framebuffer display
framework and need to read display buffer from /dev/graphics/fb0.

besides, you need to add the following patch to get kvddr:

rockchip_gem_create_with_handle()@file:
drivers/gpu/drm/rockchip/rockchip_drm_gem.c

-rk_obj = rockchip_gem_create_object(drm, size, false, flags);
+rk_obj = rockchip_gem_create_object(drm, size, true, flags);

Change-Id: Iec83dba8295268ba418e802a1cf5eeccd3880ab5
Signed-off-by: Sandy Huang <hjc@rock-chips.com>
This commit is contained in:
Sandy Huang 2018-09-12 16:17:52 +08:00 committed by Tao Huang
parent 5ad14fc5e5
commit 726122dc14
2 changed files with 7 additions and 0 deletions

View File

@ -100,6 +100,8 @@ rockchip_fb_alloc(struct drm_device *dev, struct drm_mode_fb_cmd2 *mode_cmd,
{
struct rockchip_drm_fb *rockchip_fb;
struct rockchip_gem_object *rk_obj;
struct rockchip_drm_private *private = dev->dev_private;
struct drm_fb_helper *fb_helper = private->fbdev_helper;
int ret = 0;
int i;
@ -125,6 +127,9 @@ rockchip_fb_alloc(struct drm_device *dev, struct drm_mode_fb_cmd2 *mode_cmd,
rk_obj = to_rockchip_obj(obj[i]);
rockchip_fb->dma_addr[i] = rk_obj->dma_addr;
rockchip_fb->kvaddr[i] = rk_obj->kvaddr;
private->fbdev_bo = &rk_obj->base;
if (fb_helper && fb_helper->fbdev && rk_obj->kvaddr)
fb_helper->fbdev->screen_base = rk_obj->kvaddr;
}
#ifndef MODULE
} else if (logo) {

View File

@ -60,6 +60,8 @@ static struct fb_ops rockchip_drm_fbdev_ops = {
.fb_set_par = drm_fb_helper_set_par,
.fb_blank = drm_fb_helper_blank,
.fb_pan_display = drm_fb_helper_pan_display,
.fb_read = drm_fb_helper_sys_read,
.fb_write = drm_fb_helper_sys_write,
.fb_setcmap = drm_fb_helper_setcmap,
.fb_dmabuf_export = rockchip_fbdev_get_dma_buf,
};