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 */
 
 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;
                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;
 
 }
 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_*)
 
                                        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);
                                               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;
        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]);
 
        }
 
        /* 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:
 
                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");
        }
 
        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;
 
                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: */
 
 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]);
 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;
                        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);
 
 
 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;
 
 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);
 
                                        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;
        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;
 
        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;
 
        u32 dst_x, dst_y, dst_w, dst_h;
        uint32_t format;
        int fmt;
-       int num_planes;
        int i;
 
        if (!fb)
        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];
 
 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);