Message ID | 20191127180035.416209-1-daniel.vetter@ffwll.ch (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] drm/rockchip: Use drm_gem_fb_create_with_dirty | expand |
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@collabora.com> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> > Cc: Sandy Huang <hjc@rock-chips.com> > Cc: "Heiko Stübner" <heiko@sntech.de> > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-rockchip@lists.infradead.org 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. With other questions I had before answered in your previous reply the current version of this patch is Reviewed-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com> > --- > 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, >
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@collabora.com> > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> > > Cc: Sandy Huang <hjc@rock-chips.com> > > Cc: "Heiko Stübner" <heiko@sntech.de> > > Cc: linux-arm-kernel@lists.infradead.org > > Cc: linux-rockchip@lists.infradead.org > > 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@collabora.com> 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, > > >
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,
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@collabora.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Cc: Sandy Huang <hjc@rock-chips.com> Cc: "Heiko Stübner" <heiko@sntech.de> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-rockchip@lists.infradead.org --- drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +--------------------- 1 file changed, 1 insertion(+), 53 deletions(-)