[PATCH 00/20] drm: Split out the formats API and move it to a common place

Paul Kocialkowski paul.kocialkowski at bootlin.com
Wed Apr 17 12:38:29 UTC 2019


Hi,

On Wed, 2019-04-17 at 09:54 +0200, Maxime Ripard wrote:
> Hi,
> 
> DRM comes with an extensive format support to retrieve the various
> parameters associated with a given format (such as the subsampling, or the
> bits per pixel), as well as some helpers and utilities to ease the driver
> development.
> 
> v4l2, on the other side, doesn't provide such facilities, leaving each
> driver reimplement a subset of the formats parameters for the one supported
> by that particular driver. This leads to a lot of duplication and
> boilerplate code in the v4l2 drivers.
> 
> This series tries to address this by moving the DRM format API into lib and
> turning it into a more generic API. In order to do this, we've needed to do
> some preliminary changes on the DRM drivers, then moved the API and finally
> converted a v4l2 driver to give an example of how such library could be
> used.
> 
> Let me know what you think,

Another thing to consider would be using unsigned ints for the plane
index so we can avoid < 0 checks all over the place.

What do you think?

Cheers,

Paul

> Maxime
> 
> Changes from RFC:
>   - Rebased on next
>   - Fixed the various formats mapping
>   - Added tags
>   - Did most of the formats functions as inline functions
>   - Used a consistent prefix for all the utilities functions
>   - Fixed the compilation breakages, and did a run of allmodconfig for arm,
>     arm64 and x86_64
>   - Fixed out of array bounds warnings in the image_format_info_block_*
>     functions
>   - Added License and copyright headers on missing files
> 
> Maxime Ripard (20):
>   drm: Remove users of drm_format_num_planes
>   drm: Remove users of drm_format_(horz|vert)_chroma_subsampling
>   drm/fourcc: Pass the format_info pointer to drm_format_plane_cpp
>   drm/fourcc: Pass the format_info pointer to drm_format_plane_width/height
>   drm: Replace instances of drm_format_info by drm_get_format_info
>   lib: Add video format information library
>   drm/fb: Move from drm_format_info to image_format_info
>   drm/malidp: Convert to generic image format library
>   drm/client: Convert to generic image format library
>   drm/exynos: Convert to generic image format library
>   drm/i915: Convert to generic image format library
>   drm/ipuv3: Convert to generic image format library
>   drm/msm: Convert to generic image format library
>   drm/omap: Convert to generic image format library
>   drm/rockchip: Convert to generic image format library
>   drm/tegra: Convert to generic image format library
>   drm/fourcc: Remove old DRM format API
>   lib: image-formats: Add v4l2 formats support
>   lib: image-formats: Add more functions
>   media: sun6i: Convert to the image format API
> 
>  drivers/gpu/drm/Kconfig                                |   2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c                 |   4 +-
>  drivers/gpu/drm/arm/malidp_drv.c                       |   3 +-
>  drivers/gpu/drm/arm/malidp_hw.c                        |   3 +-
>  drivers/gpu/drm/arm/malidp_mw.c                        |   2 +-
>  drivers/gpu/drm/arm/malidp_planes.c                    |  20 +-
>  drivers/gpu/drm/armada/armada_fb.c                     |   3 +-
>  drivers/gpu/drm/armada/armada_overlay.c                |   2 +-
>  drivers/gpu/drm/armada/armada_plane.c                  |   2 +-
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c        |  11 +-
>  drivers/gpu/drm/bochs/bochs.h                          |   4 +-
>  drivers/gpu/drm/bochs/bochs_hw.c                       |   2 +-
>  drivers/gpu/drm/drm_client.c                           |   7 +-
>  drivers/gpu/drm/drm_fb_cma_helper.c                    |   4 +-
>  drivers/gpu/drm/drm_fb_helper.c                        |  14 +-
>  drivers/gpu/drm/drm_format_helper.c                    |   4 +-
>  drivers/gpu/drm/drm_fourcc.c                           | 345 +-----
>  drivers/gpu/drm/drm_framebuffer.c                      |  10 +-
>  drivers/gpu/drm/drm_gem_framebuffer_helper.c           |   4 +-
>  drivers/gpu/drm/exynos/exynos_drm_fb.c                 |   2 +-
>  drivers/gpu/drm/exynos/exynos_drm_ipp.c                |   2 +-
>  drivers/gpu/drm/exynos/exynos_drm_ipp.h                |   4 +-
>  drivers/gpu/drm/exynos/exynos_drm_scaler.c             |   3 +-
>  drivers/gpu/drm/gma500/framebuffer.c                   |   4 +-
>  drivers/gpu/drm/i915/i915_drv.h                        |   6 +-
>  drivers/gpu/drm/i915/intel_display.c                   |  14 +-
>  drivers/gpu/drm/i915/intel_pm.c                        |   6 +-
>  drivers/gpu/drm/i915/intel_sprite.c                    |   3 +-
>  drivers/gpu/drm/imx/ipuv3-plane.c                      |  19 +-
>  drivers/gpu/drm/mediatek/mtk_drm_fb.c                  |   8 +-
>  drivers/gpu/drm/meson/meson_overlay.c                  |  14 +-
>  drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c            |  11 +-
>  drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c              |  10 +-
>  drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c              |   4 +-
>  drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c             |  25 +-
>  drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c               |   8 +-
>  drivers/gpu/drm/msm/msm_fb.c                           |  18 +-
>  drivers/gpu/drm/omapdrm/dss/dispc.c                    |   9 +-
>  drivers/gpu/drm/omapdrm/omap_fb.c                      |  15 +-
>  drivers/gpu/drm/radeon/radeon_fb.c                     |   4 +-
>  drivers/gpu/drm/rockchip/rockchip_drm_fb.c             |  17 +-
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.c            |  14 +-
>  drivers/gpu/drm/selftests/Makefile                     |   3 +-
>  drivers/gpu/drm/selftests/drm_modeset_selftests.h      |   3 +-
>  drivers/gpu/drm/selftests/test-drm_format.c            | 280 +----
>  drivers/gpu/drm/selftests/test-drm_modeset_common.h    |   3 +-
>  drivers/gpu/drm/stm/ltdc.c                             |   2 +-
>  drivers/gpu/drm/sun4i/sun4i_backend.c                  |   6 +-
>  drivers/gpu/drm/sun4i/sun4i_frontend.c                 |  18 +-
>  drivers/gpu/drm/sun4i/sun8i_vi_layer.c                 |   4 +-
>  drivers/gpu/drm/sun4i/sun8i_vi_scaler.c                |   6 +-
>  drivers/gpu/drm/sun4i/sun8i_vi_scaler.h                |   5 +-
>  drivers/gpu/drm/tegra/fb.c                             |  14 +-
>  drivers/gpu/drm/tegra/plane.c                          |   4 +-
>  drivers/gpu/drm/vc4/vc4_plane.c                        |  15 +-
>  drivers/gpu/drm/zte/zx_plane.c                         |   6 +-
>  drivers/gpu/ipu-v3/ipu-pre.c                           |   3 +-
>  drivers/gpu/ipu-v3/ipu-prg.c                           |   3 +-
>  drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c     |  89 +-
>  drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h     |  49 +-
>  drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_reg.h |   6 +-
>  drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c   |  11 +-
>  include/drm/drm_fourcc.h                               | 219 +---
>  include/drm/drm_framebuffer.h                          |   4 +-
>  include/drm/drm_mode_config.h                          |   5 +-
>  include/linux/image-formats.h                          | 438 ++++++-
>  lib/Kconfig                                            |   7 +-
>  lib/Makefile                                           |   3 +-
>  lib/image-formats-selftests.c                          | 325 +++++-
>  lib/image-formats.c                                    | 717 ++++++++++-
>  70 files changed, 1740 insertions(+), 1174 deletions(-)
>  delete mode 100644 drivers/gpu/drm/selftests/test-drm_format.c
>  create mode 100644 include/linux/image-formats.h
>  create mode 100644 lib/image-formats-selftests.c
>  create mode 100644 lib/image-formats.c
> 
> base-commit: de3c659c83ce88d495f2a36397071fdd0a337345
-- 
Paul Kocialkowski, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com



More information about the dri-devel mailing list