On 12/2/2023 3:59 PM, Dmitry Baryshkov wrote:
Provide actual documentation for the pclk and hdisplay calculations in
the case of DSC compression being used.

Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
---

Changes since v2:
- Followed suggestion by Abhinav and Marijn to improve documentatry
   comments.

Changes since v1:
- Converted dsi_adjust_pclk_for_compression() into kerneldoc (Marijn)
- Added a pointer from dsi_timing_setup() docs to
   dsi_adjust_pclk_for_compression() (Marijn)
- Fixed two typo (Marijn)

---
  drivers/gpu/drm/msm/dsi/dsi_host.c | 33 ++++++++++++++++++++++++++++--
  1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c 
b/drivers/gpu/drm/msm/dsi/dsi_host.c
index deeecdfd6c4e..d60ad796527c 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -529,6 +529,25 @@ void dsi_link_clk_disable_v2(struct msm_dsi_host *msm_host)
        clk_disable_unprepare(msm_host->byte_clk);
  }
+/**
+ * dsi_adjust_pclk_for_compression() - Adjust the pclk rate for compression 
case
+ * @mode: The selected mode for the DSI output
+ * @dsc: DRM DSC configuration for this DSI output
+ *
+ * Adjust the pclk rate by calculating a new hdisplay proportional to
+ * the compression ratio such that:
+ *     new_hdisplay = old_hdisplay * compressed_bpp / uncompressed_bpp
+ *
+ * Porches do not need to be adjusted:
+ * - For VIDEO mode they are not compressed by DSC and are passed as is.
+ * - For CMD mode there are no actual porches. Instead these fields
+ *   currently represent the overhead to the image data transfer. As such, they
+ *   are calculated for the final mode parameters (after the compression) and
+ *   are not to be adjusted too.
+ *
+ *  FIXME: Reconsider this if/when CMD mode handling is rewritten to use
+ *  refresh rate and data overhead as a starting point of the calculations.
+ */

I think instead of saying refresh rate, we should say "transfer time".

refresh rate could be confused with drm_mode_vrefresh(). But technically we could still have the same refresh rate but finish the transfer faster by bumping the pixel clock of DSI but can still be limited by the panel's refresh rate.

But rest LGTM.

  static unsigned long dsi_adjust_pclk_for_compression(const struct 
drm_display_mode *mode,
                const struct drm_dsc_config *dsc)
  {
@@ -951,8 +970,18 @@ static void dsi_timing_setup(struct msm_dsi_host 
*msm_host, bool is_bonded_dsi)
                if (ret)
                        return;
- /* Divide the display by 3 but keep back/font porch and
-                * pulse width same
+               /*
+                * DPU sends 3 bytes per pclk cycle to DSI. If widebus is
+                * enabled, bus width is extended to 6 bytes.
+                *
+                * Calculate the number of pclks needed to transmit one line of
+                * the compressed data.
+
+                * The back/font porch and pulse width are kept intact. For
+                * VIDEO mode they represent timing parameters rather than
+                * actual data transfer, see the documentation for
+                * dsi_adjust_pclk_for_compression(). For CMD mode they are
+                * unused anyway.
                 */
                h_total -= hdisplay;
                if (wide_bus_enabled && !(msm_host->mode_flags & 
MIPI_DSI_MODE_VIDEO))

Reply via email to