On Wed, Jul 13, 2016 at 10:11:46AM +0200, Stefan Christ wrote: > From: Xinliang Liu <xinliang.liu@xxxxxxxxxx> > > This patch add a config to support to create multi buffer for cma fbdev. > Such as double buffer and triple buffer. > > Cma fbdev is convient to add a legency fbdev. And still many Android > devices use fbdev now and at least double buffer is needed for these > Android devices, so that a buffer flip can be operated. It will need > some time for Android device vendors to abondon legency fbdev. So multi > buffer for fbdev is needed. > > Signed-off-by: Xinliang Liu <xinliang.liu@xxxxxxxxxx> > [s.christ@xxxxxxxxx: Picking patch from > https://lkml.org/lkml/2015/9/14/188] > Signed-off-by: Stefan Christ <s.christ@xxxxxxxxx> We first need to discuss whether we want to do this as a high level idea, but meanwhile also some comments about details on the patches. > --- > drivers/gpu/drm/Kconfig | 8 ++++++++ > drivers/gpu/drm/drm_fb_cma_helper.c | 8 +++++++- > 2 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > index fc35731..56cf34d 100644 > --- a/drivers/gpu/drm/Kconfig > +++ b/drivers/gpu/drm/Kconfig > @@ -106,6 +106,14 @@ config DRM_KMS_CMA_HELPER > help > Choose this if you need the KMS CMA helper functions > > +config DRM_CMA_FBDEV_BUFFER_NUM > + int "Cma Fbdev Buffer Number" > + depends on DRM_KMS_CMA_HELPER > + default 1 > + help > + Defines the buffer number of cma fbdev. Default is one buffer. > + For double buffer please set to 2 and 3 for triple buffer. > + > source "drivers/gpu/drm/i2c/Kconfig" > > config DRM_TDFX > diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c > index 5075fae..be66042 100644 > --- a/drivers/gpu/drm/drm_fb_cma_helper.c > +++ b/drivers/gpu/drm/drm_fb_cma_helper.c > @@ -27,6 +27,12 @@ > > #define DEFAULT_FBDEFIO_DELAY_MS 50 > > +#ifdef CONFIG_DRM_CMA_FBDEV_BUFFER_NUM > +#define FBDEV_BUFFER_NUM CONFIG_DRM_CMA_FBDEV_BUFFER_NUM > +#else > +#define FBDEV_BUFFER_NUM 1 > +#endif Imo this should be done in the core helpers, we could do this by multiplying the height of buffers. And I think we should also expose this as a module option, with Kconfig simply setting the default. -Daniel > + > struct drm_fb_cma { > struct drm_framebuffer fb; > struct drm_gem_cma_object *obj[4]; > @@ -389,7 +395,7 @@ int drm_fbdev_cma_create_with_funcs(struct drm_fb_helper *helper, > bytes_per_pixel = DIV_ROUND_UP(sizes->surface_bpp, 8); > > mode_cmd.width = sizes->surface_width; > - mode_cmd.height = sizes->surface_height; > + mode_cmd.height = sizes->surface_height * FBDEV_BUFFER_NUM; > mode_cmd.pitches[0] = sizes->surface_width * bytes_per_pixel; > mode_cmd.pixel_format = drm_mode_legacy_fb_format(sizes->surface_bpp, > sizes->surface_depth); > -- > 1.9.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel