Split dpu_format_populate_layout() into addess-related and
pitch/format-related parts.

Reviewed-by: Abhinav Kumar <quic_abhin...@quicinc.com>
Tested-by: Abhinav Kumar <quic_abhin...@quicinc.com> # sc7280
Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
---
 .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c    |  8 +++++-
 drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c        | 32 +++++++++++++---------
 drivers/gpu/drm/msm/disp/dpu1/dpu_formats.h        |  8 ++++--
 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c          | 15 ++++++++--
 4 files changed, 44 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c
index c4a16a73bc97..ede926d30285 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c
@@ -579,7 +579,13 @@ static void dpu_encoder_phys_wb_prepare_wb_job(struct 
dpu_encoder_phys *phys_enc
 
        format = msm_framebuffer_format(job->fb);
 
-       ret = dpu_format_populate_layout(aspace, job->fb, &wb_cfg->dest);
+       ret = dpu_format_populate_plane_sizes(job->fb, &wb_cfg->dest);
+       if (ret) {
+               DPU_DEBUG("failed to populate plane sizes%d\n", ret);
+               return;
+       }
+
+       ret = dpu_format_populate_addrs(aspace, job->fb, &wb_cfg->dest);
        if (ret) {
                DPU_DEBUG("failed to populate layout %d\n", ret);
                return;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c
index 4d17eb88af40..abe3a1c0e409 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c
@@ -93,7 +93,7 @@ static int _dpu_format_get_media_color_ubwc(const struct 
msm_format *fmt)
        return color_fmt;
 }
 
-static int _dpu_format_get_plane_sizes_ubwc(
+static int _dpu_format_populate_plane_sizes_ubwc(
                const struct msm_format *fmt,
                struct drm_framebuffer *fb,
                struct dpu_hw_fmt_layout *layout)
@@ -170,7 +170,7 @@ static int _dpu_format_get_plane_sizes_ubwc(
        return 0;
 }
 
-static int _dpu_format_get_plane_sizes_linear(
+static int _dpu_format_populate_plane_sizes_linear(
                const struct msm_format *fmt,
                struct drm_framebuffer *fb,
                struct dpu_hw_fmt_layout *layout)
@@ -244,12 +244,21 @@ static int _dpu_format_get_plane_sizes_linear(
        return 0;
 }
 
-static int dpu_format_get_plane_sizes(
-               const struct msm_format *fmt,
+/*
+ * dpu_format_populate_addrs - populate non-address part of the layout based on
+ *                     fb, and format found in the fb
+ * @fb:                framebuffer pointer
+ * @layout:              format layout structure to populate
+ *
+ * Return: error code on failure or 0 if new addresses were populated
+ */
+int dpu_format_populate_plane_sizes(
                struct drm_framebuffer *fb,
                struct dpu_hw_fmt_layout *layout)
 {
-       if (!layout || !fmt) {
+       const struct msm_format *fmt;
+
+       if (!layout || !fb) {
                DRM_ERROR("invalid pointer\n");
                return -EINVAL;
        }
@@ -260,10 +269,12 @@ static int dpu_format_get_plane_sizes(
                return -ERANGE;
        }
 
+       fmt = msm_framebuffer_format(fb);
+
        if (MSM_FORMAT_IS_UBWC(fmt) || MSM_FORMAT_IS_TILE(fmt))
-               return _dpu_format_get_plane_sizes_ubwc(fmt, fb, layout);
+               return _dpu_format_populate_plane_sizes_ubwc(fmt, fb, layout);
 
-       return _dpu_format_get_plane_sizes_linear(fmt, fb, layout);
+       return _dpu_format_populate_plane_sizes_linear(fmt, fb, layout);
 }
 
 static int _dpu_format_populate_addrs_ubwc(
@@ -377,7 +388,7 @@ static int _dpu_format_populate_addrs_linear(
        return 0;
 }
 
-int dpu_format_populate_layout(
+int dpu_format_populate_addrs(
                struct msm_gem_address_space *aspace,
                struct drm_framebuffer *fb,
                struct dpu_hw_fmt_layout *layout)
@@ -398,11 +409,6 @@ int dpu_format_populate_layout(
 
        fmt = msm_framebuffer_format(fb);
 
-       /* Populate the plane sizes etc via get_format */
-       ret = dpu_format_get_plane_sizes(fmt, fb, layout);
-       if (ret)
-               return ret;
-
        /* Populate the addresses given the fb */
        if (MSM_FORMAT_IS_UBWC(fmt) ||
                        MSM_FORMAT_IS_TILE(fmt))
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.h 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.h
index ef1239c95058..2f2bff14c0db 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_formats.h
@@ -32,7 +32,7 @@ static inline bool dpu_find_format(u32 format, const u32 
*supported_formats,
 }
 
 /**
- * dpu_format_populate_layout - populate the given format layout based on
+ * dpu_format_populate_addrs - populate buffer addresses based on
  *                     mmu, fb, and format found in the fb
  * @aspace:            address space pointer
  * @fb:                framebuffer pointer
@@ -41,9 +41,13 @@ static inline bool dpu_find_format(u32 format, const u32 
*supported_formats,
  * Return: error code on failure, -EAGAIN if success but the addresses
  *         are the same as before or 0 if new addresses were populated
  */
-int dpu_format_populate_layout(
+int dpu_format_populate_addrs(
                struct msm_gem_address_space *aspace,
                struct drm_framebuffer *fb,
                struct dpu_hw_fmt_layout *fmtl);
 
+int dpu_format_populate_plane_sizes(
+               struct drm_framebuffer *fb,
+               struct dpu_hw_fmt_layout *layout);
+
 #endif /*_DPU_FORMATS_H */
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index 93ac5afb623c..39ceb7b65318 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -675,10 +675,19 @@ static int dpu_plane_prepare_fb(struct drm_plane *plane,
                }
        }
 
+       ret = dpu_format_populate_plane_sizes(new_state->fb, &pstate->layout);
+       if (ret) {
+               DPU_ERROR_PLANE(pdpu, "failed to get format plane sizes, %d\n", 
ret);
+               if (pstate->aspace)
+                       msm_framebuffer_cleanup(new_state->fb, pstate->aspace,
+                                               pstate->needs_dirtyfb);
+               return ret;
+       }
+
        /* validate framebuffer layout before commit */
-       ret = dpu_format_populate_layout(pstate->aspace,
-                                        new_state->fb,
-                                        &pstate->layout);
+       ret = dpu_format_populate_addrs(pstate->aspace,
+                                       new_state->fb,
+                                       &pstate->layout);
        if (ret) {
                DPU_ERROR_PLANE(pdpu, "failed to get format layout, %d\n", ret);
                if (pstate->aspace)

-- 
2.39.2

Reply via email to