]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm: Remove users of drm_format_num_planes
authorMaxime Ripard <maxime.ripard@bootlin.com>
Thu, 16 May 2019 10:31:47 +0000 (12:31 +0200)
committerMaxime Ripard <maxime.ripard@bootlin.com>
Mon, 20 May 2019 11:32:57 +0000 (13:32 +0200)
drm_format_num_planes() is basically a lookup in the drm_format_info table
plus an access to the num_planes field of the appropriate entry.

Most drivers are using this function while having access to the entry
already, which means that we will perform an unnecessary lookup. Removing
the call to drm_format_num_planes is therefore more efficient.

Some drivers will not have access to that entry in the function, but in
this case the overhead is minimal (we just have to call drm_format_info()
to perform the lookup) and we can even avoid multiple, inefficient lookups
in some places that need multiple fields from the drm_format_info
structure.

Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/5ffcec9d14a50ed538e37d565f546802452ee672.1558002671.git-series.maxime.ripard@bootlin.com
14 files changed:
drivers/gpu/drm/arm/malidp_mw.c
drivers/gpu/drm/armada/armada_fb.c
drivers/gpu/drm/drm_fourcc.c
drivers/gpu/drm/mediatek/mtk_drm_fb.c
drivers/gpu/drm/meson/meson_overlay.c
drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c
drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c
drivers/gpu/drm/msm/msm_fb.c
drivers/gpu/drm/omapdrm/omap_fb.c
drivers/gpu/drm/rockchip/rockchip_drm_fb.c
drivers/gpu/drm/tegra/fb.c
drivers/gpu/drm/vc4/vc4_plane.c
drivers/gpu/drm/zte/zx_plane.c
include/drm/drm_fourcc.h

index 5f102bdaf84198ba9ffa9a964644f06bec502323..2e812525025dd193792d67b0ba4163731885744a 100644 (file)
@@ -158,7 +158,7 @@ malidp_mw_encoder_atomic_check(struct drm_encoder *encoder,
                return -EINVAL;
        }
 
-       n_planes = drm_format_num_planes(fb->format->format);
+       n_planes = fb->format->num_planes;
        for (i = 0; i < n_planes; i++) {
                struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, i);
                /* memory write buffers are never rotated */
index 058ac7d9920f7a07cffe39e90c3dd0bc116963ed..a2f6472eb482eb86986ffcbac7b44c16f49d3492 100644 (file)
@@ -87,6 +87,7 @@ struct armada_framebuffer *armada_framebuffer_create(struct drm_device *dev,
 struct drm_framebuffer *armada_fb_create(struct drm_device *dev,
        struct drm_file *dfile, const struct drm_mode_fb_cmd2 *mode)
 {
+       const struct drm_format_info *info = drm_get_format_info(dev, mode);
        struct armada_gem_object *obj;
        struct armada_framebuffer *dfb;
        int ret;
@@ -97,7 +98,7 @@ struct drm_framebuffer *armada_fb_create(struct drm_device *dev,
                mode->pitches[2]);
 
        /* We can only handle a single plane at the moment */
-       if (drm_format_num_planes(mode->pixel_format) > 1 &&
+       if (info->num_planes > 1 &&
            (mode->handles[0] != mode->handles[1] ||
             mode->handles[0] != mode->handles[2])) {
                ret = -EINVAL;
index 6ea55fb4526d0b34e176662bd1fbf1f4559eb985..873c0001d8c8ee2309d399bb6a2df0847a0d1799 100644 (file)
@@ -332,22 +332,6 @@ drm_get_format_info(struct drm_device *dev,
 }
 EXPORT_SYMBOL(drm_get_format_info);
 
-/**
- * drm_format_num_planes - get the number of planes for format
- * @format: pixel format (DRM_FORMAT_*)
- *
- * Returns:
- * The number of planes used by the specified pixel format.
- */
-int drm_format_num_planes(uint32_t format)
-{
-       const struct drm_format_info *info;
-
-       info = drm_format_info(format);
-       return info ? info->num_planes : 1;
-}
-EXPORT_SYMBOL(drm_format_num_planes);
-
 /**
  * drm_format_plane_cpp - determine the bytes per pixel value
  * @format: pixel format (DRM_FORMAT_*)
index e20fcaef28515b346b4e9b27bce0d59274271d4f..68fdef8b12bde99ad6176fd96232c3dfc8278f84 100644 (file)
@@ -32,10 +32,11 @@ static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
                                        const struct drm_mode_fb_cmd2 *mode,
                                        struct drm_gem_object *obj)
 {
+       const struct drm_format_info *info = drm_get_format_info(dev, mode);
        struct drm_framebuffer *fb;
        int ret;
 
-       if (drm_format_num_planes(mode->pixel_format) != 1)
+       if (info->num_planes != 1)
                return ERR_PTR(-EINVAL);
 
        fb = kzalloc(sizeof(*fb), GFP_KERNEL);
@@ -88,6 +89,7 @@ struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
                                               struct drm_file *file,
                                               const struct drm_mode_fb_cmd2 *cmd)
 {
+       const struct drm_format_info *info = drm_get_format_info(dev, cmd);
        struct drm_framebuffer *fb;
        struct drm_gem_object *gem;
        unsigned int width = cmd->width;
@@ -95,7 +97,7 @@ struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
        unsigned int size, bpp;
        int ret;
 
-       if (drm_format_num_planes(cmd->pixel_format) != 1)
+       if (info->num_planes != 1)
                return ERR_PTR(-EINVAL);
 
        gem = drm_gem_object_lookup(file, cmd->handles[0]);
index bdbf925ff3e8550326b89fd9d164ec103bdc854e..fb8515b2860ccd6555709b14cb7f704b469e72b9 100644 (file)
@@ -458,7 +458,7 @@ static void meson_overlay_atomic_update(struct drm_plane *plane,
        }
 
        /* Update Canvas with buffer address */
-       priv->viu.vd1_planes = drm_format_num_planes(fb->format->format);
+       priv->viu.vd1_planes = fb->format->num_planes;
 
        switch (priv->viu.vd1_planes) {
        case 3:
index f59fe1a9f4b9a62f475be4fd6e9a1d33f88417e4..c3d491e8d44b6137bab26d9f153c1ec66259138e 100644 (file)
@@ -1040,10 +1040,11 @@ int dpu_format_check_modified_format(
                const struct drm_mode_fb_cmd2 *cmd,
                struct drm_gem_object **bos)
 {
-       int ret, i, num_base_fmt_planes;
+       const struct drm_format_info *info;
        const struct dpu_format *fmt;
        struct dpu_hw_fmt_layout layout;
        uint32_t bos_total_size = 0;
+       int ret, i;
 
        if (!msm_fmt || !cmd || !bos) {
                DRM_ERROR("invalid arguments\n");
@@ -1051,14 +1052,16 @@ int dpu_format_check_modified_format(
        }
 
        fmt = to_dpu_format(msm_fmt);
-       num_base_fmt_planes = drm_format_num_planes(fmt->base.pixel_format);
+       info = drm_format_info(fmt->base.pixel_format);
+       if (!info)
+               return -EINVAL;
 
        ret = dpu_format_get_plane_sizes(fmt, cmd->width, cmd->height,
                        &layout, cmd->pitches);
        if (ret)
                return ret;
 
-       for (i = 0; i < num_base_fmt_planes; i++) {
+       for (i = 0; i < info->num_planes; i++) {
                if (!bos[i]) {
                        DRM_ERROR("invalid handle for plane %d\n", i);
                        return -EINVAL;
index 6153514db04c2a209c7d08b756ec1397e532c8b5..72ab8d89efa4924beff467a0cfb883659332c049 100644 (file)
@@ -127,13 +127,14 @@ uint32_t mdp5_smp_calculate(struct mdp5_smp *smp,
                const struct mdp_format *format,
                u32 width, bool hdecim)
 {
+       const struct drm_format_info *info = drm_format_info(format->base.pixel_format);
        struct mdp5_kms *mdp5_kms = get_kms(smp);
        int rev = mdp5_cfg_get_hw_rev(mdp5_kms->cfg);
        int i, hsub, nplanes, nlines;
        u32 fmt = format->base.pixel_format;
        uint32_t blkcfg = 0;
 
-       nplanes = drm_format_num_planes(fmt);
+       nplanes = info->num_planes;
        hsub = drm_format_horz_chroma_subsampling(fmt);
 
        /* different if BWC (compressed framebuffer?) enabled: */
index 136058978e0fd095013ded524e18c839849a52e3..432beddafb9e9faf61a980350578dddc56f00cb5 100644 (file)
@@ -106,9 +106,11 @@ const struct msm_format *msm_framebuffer_format(struct drm_framebuffer *fb)
 struct drm_framebuffer *msm_framebuffer_create(struct drm_device *dev,
                struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)
 {
+       const struct drm_format_info *info = drm_get_format_info(dev,
+                                                                mode_cmd);
        struct drm_gem_object *bos[4] = {0};
        struct drm_framebuffer *fb;
-       int ret, i, n = drm_format_num_planes(mode_cmd->pixel_format);
+       int ret, i, n = info->num_planes;
 
        for (i = 0; i < n; i++) {
                bos[i] = drm_gem_object_lookup(file, mode_cmd->handles[i]);
@@ -135,6 +137,8 @@ struct drm_framebuffer *msm_framebuffer_create(struct drm_device *dev,
 static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
                const struct drm_mode_fb_cmd2 *mode_cmd, struct drm_gem_object **bos)
 {
+       const struct drm_format_info *info = drm_get_format_info(dev,
+                                                                mode_cmd);
        struct msm_drm_private *priv = dev->dev_private;
        struct msm_kms *kms = priv->kms;
        struct msm_framebuffer *msm_fb = NULL;
@@ -147,7 +151,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
                        dev, mode_cmd, mode_cmd->width, mode_cmd->height,
                        (char *)&mode_cmd->pixel_format);
 
-       n = drm_format_num_planes(mode_cmd->pixel_format);
+       n = info->num_planes;
        hsub = drm_format_horz_chroma_subsampling(mode_cmd->pixel_format);
        vsub = drm_format_vert_chroma_subsampling(mode_cmd->pixel_format);
 
index 4f8eb9d08f998768403dc4672c502732eec2cbcb..cfb641363a3238e976ea8583456944a80fb9a7f4 100644 (file)
@@ -298,7 +298,9 @@ void omap_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m)
 struct drm_framebuffer *omap_framebuffer_create(struct drm_device *dev,
                struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd)
 {
-       unsigned int num_planes = drm_format_num_planes(mode_cmd->pixel_format);
+       const struct drm_format_info *info = drm_get_format_info(dev,
+                                                                mode_cmd);
+       unsigned int num_planes = info->num_planes;
        struct drm_gem_object *bos[4];
        struct drm_framebuffer *fb;
        int i;
index 97438bbbe3892c5b231df6e457b66509e225f7dc..606d176d5d968edbd8684c522b77814cec647129 100644 (file)
@@ -74,19 +74,19 @@ 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;
        unsigned int hsub;
        unsigned int vsub;
-       int num_planes;
+       int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
        int ret;
        int i;
 
        hsub = drm_format_horz_chroma_subsampling(mode_cmd->pixel_format);
        vsub = drm_format_vert_chroma_subsampling(mode_cmd->pixel_format);
-       num_planes = min(drm_format_num_planes(mode_cmd->pixel_format),
-                        ROCKCHIP_MAX_FB_BUFFER);
 
        for (i = 0; i < num_planes; i++) {
                unsigned int width = mode_cmd->width / (i ? hsub : 1);
index 1dd83a757dba233a0a362d8cc2e7ce15e622af49..da0747e317b7f7ec2f8f456a2f566a90f2e85f41 100644 (file)
@@ -131,6 +131,7 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
                                        struct drm_file *file,
                                        const struct drm_mode_fb_cmd2 *cmd)
 {
+       const struct drm_format_info *info = drm_get_format_info(drm, cmd);
        unsigned int hsub, vsub, i;
        struct tegra_bo *planes[4];
        struct drm_gem_object *gem;
@@ -140,7 +141,7 @@ struct drm_framebuffer *tegra_fb_create(struct drm_device *drm,
        hsub = drm_format_horz_chroma_subsampling(cmd->pixel_format);
        vsub = drm_format_vert_chroma_subsampling(cmd->pixel_format);
 
-       for (i = 0; i < drm_format_num_planes(cmd->pixel_format); i++) {
+       for (i = 0; i < info->num_planes; i++) {
                unsigned int width = cmd->width / (i ? hsub : 1);
                unsigned int height = cmd->height / (i ? vsub : 1);
                unsigned int size, bpp;
index 4d918d3e4858dcc859c4a110adcf9f5fe856e369..e3c0a350cb779ab66dc30575389e8242de597165 100644 (file)
@@ -592,7 +592,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
        u32 ctl0_offset = vc4_state->dlist_count;
        const struct hvs_format *format = vc4_get_hvs_format(fb->format->format);
        u64 base_format_mod = fourcc_mod_broadcom_mod(fb->modifier);
-       int num_planes = drm_format_num_planes(format->drm);
+       int num_planes = fb->format->num_planes;
        u32 h_subsample, v_subsample;
        bool mix_plane_alpha;
        bool covers_screen;
index 83d236fd893c5e96c6e3c9518919e8a04ceedcd4..c6a8be4443008e1f0b1ab700df7439af2c370968 100644 (file)
@@ -199,7 +199,6 @@ static void zx_vl_plane_atomic_update(struct drm_plane *plane,
        u32 dst_x, dst_y, dst_w, dst_h;
        uint32_t format;
        int fmt;
-       int num_planes;
        int i;
 
        if (!fb)
@@ -218,9 +217,8 @@ static void zx_vl_plane_atomic_update(struct drm_plane *plane,
        dst_h = drm_rect_height(dst);
 
        /* Set up data address registers for Y, Cb and Cr planes */
-       num_planes = drm_format_num_planes(format);
        paddr_reg = layer + VL_Y;
-       for (i = 0; i < num_planes; i++) {
+       for (i = 0; i < fb->format->num_planes; i++) {
                cma_obj = drm_fb_cma_get_gem_obj(fb, i);
                paddr = cma_obj->paddr + fb->offsets[i];
                paddr += src_y * fb->pitches[i];
index b3d9d88ab2902e360b6adff982be9e5a438e7ba9..41779b327d9117ac0e692183e0da603f56e3b578 100644 (file)
@@ -268,7 +268,6 @@ drm_get_format_info(struct drm_device *dev,
 uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth);
 uint32_t drm_driver_legacy_fb_format(struct drm_device *dev,
                                     uint32_t bpp, uint32_t depth);
-int drm_format_num_planes(uint32_t format);
 int drm_format_plane_cpp(uint32_t format, int plane);
 int drm_format_horz_chroma_subsampling(uint32_t format);
 int drm_format_vert_chroma_subsampling(uint32_t format);