On Thu, Nov 28, 2019 at 04:58:26PM +0100, Andrzej Pietrasiewicz wrote: > W dniu 27.11.2019 o 19:00, Daniel Vetter pisze: > > If rockchip would switch over to the generic fbdev setup we could > > grabage collect even more of all this code (all of the remaining fb > > handling code really). > > > > v2: Actually use _with_dirty like the patch subject promised (Andrzej) > > > > Cc: Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxxxx> > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> > > Cc: Sandy Huang <hjc@xxxxxxxxxxxxxx> > > Cc: "Heiko Stübner" <heiko@xxxxxxxxx> > > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > > Cc: linux-rockchip@xxxxxxxxxxxxxxxxxxx > > I understand that computing min_size is changing as per > > 042bf753842dd > drm/fourcc: Add char_per_block, block_w and block_h in drm_format_info. Yeah it's the more flexible computation, but for everything that rockchip actually supports it should be the same. > With other questions I had before answered in your previous reply the current > version of this patch is > > Reviewed-by: Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxxxx> Thanks for your review, patch applied. -Daniel > > > --- > > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +--------------------- > > 1 file changed, 1 insertion(+), 53 deletions(-) > > > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > > index ca01234c037c..221e72e71432 100644 > > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c > > @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm > > return fb; > > } > > -static struct drm_framebuffer * > > -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv, > > - const struct drm_mode_fb_cmd2 *mode_cmd) > > -{ > > - const struct drm_format_info *info = drm_get_format_info(dev, > > - mode_cmd); > > - struct drm_framebuffer *fb; > > - struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER]; > > - struct drm_gem_object *obj; > > - int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER); > > - int ret; > > - int i; > > - > > - for (i = 0; i < num_planes; i++) { > > - unsigned int width = mode_cmd->width / (i ? info->hsub : 1); > > - unsigned int height = mode_cmd->height / (i ? info->vsub : 1); > > - unsigned int min_size; > > - > > - obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]); > > - if (!obj) { > > - DRM_DEV_ERROR(dev->dev, > > - "Failed to lookup GEM object\n"); > > - ret = -ENXIO; > > - goto err_gem_object_unreference; > > - } > > - > > - min_size = (height - 1) * mode_cmd->pitches[i] + > > - mode_cmd->offsets[i] + > > - width * info->cpp[i]; > > - > > - if (obj->size < min_size) { > > - drm_gem_object_put_unlocked(obj); > > - ret = -EINVAL; > > - goto err_gem_object_unreference; > > - } > > - objs[i] = obj; > > - } > > - > > - fb = rockchip_fb_alloc(dev, mode_cmd, objs, i); > > - if (IS_ERR(fb)) { > > - ret = PTR_ERR(fb); > > - goto err_gem_object_unreference; > > - } > > - > > - return fb; > > - > > -err_gem_object_unreference: > > - for (i--; i >= 0; i--) > > - drm_gem_object_put_unlocked(objs[i]); > > - return ERR_PTR(ret); > > -} > > - > > static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = { > > .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm, > > }; > > static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = { > > - .fb_create = rockchip_user_fb_create, > > + .fb_create = drm_gem_fb_create_with_dirty, > > .output_poll_changed = drm_fb_helper_output_poll_changed, > > .atomic_check = drm_atomic_helper_check, > > .atomic_commit = drm_atomic_helper_commit, > > > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Linux-rockchip mailing list Linux-rockchip@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/linux-rockchip