On Thu, 15 Feb 2024, Ville Syrjala <ville.syrj...@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
>
> Create the drm_printer at the start of intel_pipe_config_compare()
> and pass it on to all the mismatch() functions.

Nice!

Reviewed-by: Jani Nikula <jani.nik...@intel.com>


>
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 101 +++++++++----------
>  1 file changed, 46 insertions(+), 55 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 26580d4aef2d..69c9693dcc8d 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -4787,11 +4787,11 @@ intel_compare_buffer(const u8 *a, const u8 *b, size_t 
> len)
>       return memcmp(a, b, len) == 0;
>  }
>  
> -static void __printf(4, 5)
> -pipe_config_mismatch(bool fastset, const struct intel_crtc *crtc,
> +static void __printf(5, 6)
> +pipe_config_mismatch(struct drm_printer *p, bool fastset,
> +                  const struct intel_crtc *crtc,
>                    const char *name, const char *format, ...)
>  {
> -     struct drm_i915_private *i915 = to_i915(crtc->base.dev);
>       struct va_format vaf;
>       va_list args;
>  
> @@ -4800,65 +4800,55 @@ pipe_config_mismatch(bool fastset, const struct 
> intel_crtc *crtc,
>       vaf.va = &args;
>  
>       if (fastset)
> -             drm_dbg_kms(&i915->drm,
> -                         "[CRTC:%d:%s] fastset requirement not met in %s 
> %pV\n",
> -                         crtc->base.base.id, crtc->base.name, name, &vaf);
> +             drm_printf(p, "[CRTC:%d:%s] fastset requirement not met in %s 
> %pV\n",
> +                        crtc->base.base.id, crtc->base.name, name, &vaf);
>       else
> -             drm_err(&i915->drm, "[CRTC:%d:%s] mismatch in %s %pV\n",
> -                     crtc->base.base.id, crtc->base.name, name, &vaf);
> +             drm_printf(p, "[CRTC:%d:%s] mismatch in %s %pV\n",
> +                        crtc->base.base.id, crtc->base.name, name, &vaf);
>  
>       va_end(args);
>  }
>  
>  static void
> -pipe_config_infoframe_mismatch(bool fastset, const struct intel_crtc *crtc,
> +pipe_config_infoframe_mismatch(struct drm_printer *p, bool fastset,
> +                            const struct intel_crtc *crtc,
>                              const char *name,
>                              const union hdmi_infoframe *a,
>                              const union hdmi_infoframe *b)
>  {
>       struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> -     struct drm_printer p;
>       const char *loglevel;
>  
>       if (fastset) {
>               if (!drm_debug_enabled(DRM_UT_KMS))
>                       return;
>  
> -             p = drm_dbg_printer(&i915->drm, DRM_UT_KMS, NULL);
>               loglevel = KERN_DEBUG;
>       } else {
> -             p = drm_err_printer(&i915->drm, NULL);
>               loglevel = KERN_ERR;
>       }
>  
> -     pipe_config_mismatch(fastset, crtc, name, "infoframe");
> +     pipe_config_mismatch(p, fastset, crtc, name, "infoframe");
>  
> -     drm_printf(&p, "expected:\n");
> +     drm_printf(p, "expected:\n");
>       hdmi_infoframe_log(loglevel, i915->drm.dev, a);
> -     drm_printf(&p, "found:\n");
> +     drm_printf(p, "found:\n");
>       hdmi_infoframe_log(loglevel, i915->drm.dev, b);
>  }
>  
>  static void
> -pipe_config_dp_vsc_sdp_mismatch(bool fastset, const struct intel_crtc *crtc,
> +pipe_config_dp_vsc_sdp_mismatch(struct drm_printer *p, bool fastset,
> +                             const struct intel_crtc *crtc,
>                               const char *name,
>                               const struct drm_dp_vsc_sdp *a,
>                               const struct drm_dp_vsc_sdp *b)
>  {
> -     struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> -     struct drm_printer p;
> +     pipe_config_mismatch(p, fastset, crtc, name, "dp sdp");
>  
> -     if (fastset)
> -             p = drm_dbg_printer(&i915->drm, DRM_UT_KMS, NULL);
> -     else
> -             p = drm_err_printer(&i915->drm, NULL);
> -
> -     pipe_config_mismatch(fastset, crtc, name, "dp sdp");
> -
> -     drm_printf(&p, "expected:\n");
> -     drm_dp_vsc_sdp_log(&p, a);
> -     drm_printf(&p, "found:\n");
> -     drm_dp_vsc_sdp_log(&p, b);
> +     drm_printf(p, "expected:\n");
> +     drm_dp_vsc_sdp_log(p, a);
> +     drm_printf(p, "found:\n");
> +     drm_dp_vsc_sdp_log(p, b);
>  }
>  
>  /* Returns the length up to and including the last differing byte */
> @@ -4876,7 +4866,8 @@ memcmp_diff_len(const u8 *a, const u8 *b, size_t len)
>  }
>  
>  static void
> -pipe_config_buffer_mismatch(bool fastset, const struct intel_crtc *crtc,
> +pipe_config_buffer_mismatch(struct drm_printer *p, bool fastset,
> +                         const struct intel_crtc *crtc,
>                           const char *name,
>                           const u8 *a, const u8 *b, size_t len)
>  {
> @@ -4891,7 +4882,7 @@ pipe_config_buffer_mismatch(bool fastset, const struct 
> intel_crtc *crtc,
>               loglevel = KERN_ERR;
>       }
>  
> -     pipe_config_mismatch(fastset, crtc, name, "buffer");
> +     pipe_config_mismatch(p, fastset, crtc, name, "buffer");
>  
>       /* only dump up to the last difference */
>       len = memcmp_diff_len(a, b, len);
> @@ -4903,26 +4894,20 @@ pipe_config_buffer_mismatch(bool fastset, const 
> struct intel_crtc *crtc,
>  }
>  
>  static void
> -pipe_config_pll_mismatch(bool fastset,
> +pipe_config_pll_mismatch(struct drm_printer *p, bool fastset,
>                        const struct intel_crtc *crtc,
>                        const char *name,
>                        const struct intel_dpll_hw_state *a,
>                        const struct intel_dpll_hw_state *b)
>  {
>       struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> -     struct drm_printer p;
>  
> -     if (fastset)
> -             p = drm_dbg_printer(&i915->drm, DRM_UT_KMS, NULL);
> -     else
> -             p = drm_err_printer(&i915->drm, NULL);
> +     pipe_config_mismatch(p, fastset, crtc, name, " "); /* stupid 
> -Werror=format-zero-length */
>  
> -     pipe_config_mismatch(fastset, crtc, name, " "); /* stupid 
> -Werror=format-zero-length */
> -
> -     drm_dbg_kms(&i915->drm, "expected:\n");
> -     intel_dpll_dump_hw_state(i915, &p, a);
> -     drm_dbg_kms(&i915->drm, "found:\n");
> -     intel_dpll_dump_hw_state(i915, &p, b);
> +     drm_printf(p, "expected:\n");
> +     intel_dpll_dump_hw_state(i915, p, a);
> +     drm_printf(p, "found:\n");
> +     intel_dpll_dump_hw_state(i915, p, b);
>  }
>  
>  bool
> @@ -4932,13 +4917,19 @@ intel_pipe_config_compare(const struct 
> intel_crtc_state *current_config,
>  {
>       struct drm_i915_private *dev_priv = 
> to_i915(current_config->uapi.crtc->dev);
>       struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
> +     struct drm_printer p;
>       bool ret = true;
>  
> +     if (fastset)
> +             p = drm_dbg_printer(&dev_priv->drm, DRM_UT_KMS, NULL);
> +     else
> +             p = drm_err_printer(&dev_priv->drm, NULL);
> +
>  #define PIPE_CONF_CHECK_X(name) do { \
>       if (current_config->name != pipe_config->name) { \
>               BUILD_BUG_ON_MSG(__same_type(current_config->name, bool), \
>                                __stringify(name) " is bool"); \
> -             pipe_config_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \
>                                    "(expected 0x%08x, found 0x%08x)", \
>                                    current_config->name, \
>                                    pipe_config->name); \
> @@ -4950,7 +4941,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>       if ((current_config->name & (mask)) != (pipe_config->name & (mask))) { \
>               BUILD_BUG_ON_MSG(__same_type(current_config->name, bool), \
>                                __stringify(name) " is bool"); \
> -             pipe_config_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \
>                                    "(expected 0x%08x, found 0x%08x)", \
>                                    current_config->name & (mask), \
>                                    pipe_config->name & (mask)); \
> @@ -4962,7 +4953,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>       if (current_config->name != pipe_config->name) { \
>               BUILD_BUG_ON_MSG(__same_type(current_config->name, bool), \
>                                __stringify(name) " is bool"); \
> -             pipe_config_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \
>                                    "(expected %i, found %i)", \
>                                    current_config->name, \
>                                    pipe_config->name); \
> @@ -4974,7 +4965,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>       if (current_config->name != pipe_config->name) { \
>               BUILD_BUG_ON_MSG(!__same_type(current_config->name, bool), \
>                                __stringify(name) " is not bool");     \
> -             pipe_config_mismatch(fastset, crtc,  __stringify(name), \
> +             pipe_config_mismatch(&p, fastset, crtc,  __stringify(name), \
>                                    "(expected %s, found %s)", \
>                                    str_yes_no(current_config->name), \
>                                    str_yes_no(pipe_config->name)); \
> @@ -4984,7 +4975,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>  
>  #define PIPE_CONF_CHECK_P(name) do { \
>       if (current_config->name != pipe_config->name) { \
> -             pipe_config_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \
>                                    "(expected %p, found %p)", \
>                                    current_config->name, \
>                                    pipe_config->name); \
> @@ -4995,7 +4986,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>  #define PIPE_CONF_CHECK_M_N(name) do { \
>       if (!intel_compare_link_m_n(&current_config->name, \
>                                   &pipe_config->name)) { \
> -             pipe_config_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \
>                                    "(expected tu %i data %i/%i link %i/%i, " \
>                                    "found tu %i, data %i/%i link %i/%i)", \
>                                    current_config->name.tu, \
> @@ -5015,7 +5006,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>  #define PIPE_CONF_CHECK_PLL(name) do { \
>       if (!intel_dpll_compare_hw_state(dev_priv, &current_config->name, \
>                                        &pipe_config->name)) { \
> -             pipe_config_pll_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_pll_mismatch(&p, fastset, crtc, __stringify(name), \
>                                        &current_config->name, \
>                                        &pipe_config->name); \
>               ret = false; \
> @@ -5048,7 +5039,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>  
>  #define PIPE_CONF_CHECK_FLAGS(name, mask) do { \
>       if ((current_config->name ^ pipe_config->name) & (mask)) { \
> -             pipe_config_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \
>                                    "(%x) (expected %i, found %i)", \
>                                    (mask), \
>                                    current_config->name & (mask), \
> @@ -5060,7 +5051,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>  #define PIPE_CONF_CHECK_INFOFRAME(name) do { \
>       if (!intel_compare_infoframe(&current_config->infoframes.name, \
>                                    &pipe_config->infoframes.name)) { \
> -             pipe_config_infoframe_mismatch(fastset, crtc, 
> __stringify(name), \
> +             pipe_config_infoframe_mismatch(&p, fastset, crtc, 
> __stringify(name), \
>                                              
> &current_config->infoframes.name, \
>                                              &pipe_config->infoframes.name); \
>               ret = false; \
> @@ -5070,7 +5061,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>  #define PIPE_CONF_CHECK_DP_VSC_SDP(name) do { \
>       if (!intel_compare_dp_vsc_sdp(&current_config->infoframes.name, \
>                                     &pipe_config->infoframes.name)) { \
> -             pipe_config_dp_vsc_sdp_mismatch(fastset, crtc, 
> __stringify(name), \
> +             pipe_config_dp_vsc_sdp_mismatch(&p, fastset, crtc, 
> __stringify(name), \
>                                               
> &current_config->infoframes.name, \
>                                               &pipe_config->infoframes.name); 
> \
>               ret = false; \
> @@ -5081,7 +5072,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>       BUILD_BUG_ON(sizeof(current_config->name) != (len)); \
>       BUILD_BUG_ON(sizeof(pipe_config->name) != (len)); \
>       if (!intel_compare_buffer(current_config->name, pipe_config->name, 
> (len))) { \
> -             pipe_config_buffer_mismatch(fastset, crtc, __stringify(name), \
> +             pipe_config_buffer_mismatch(&p, fastset, crtc, 
> __stringify(name), \
>                                           current_config->name, \
>                                           pipe_config->name, \
>                                           (len)); \
> @@ -5094,7 +5085,7 @@ intel_pipe_config_compare(const struct intel_crtc_state 
> *current_config,
>           !intel_color_lut_equal(current_config, \
>                                  current_config->lut, pipe_config->lut, \
>                                  is_pre_csc_lut)) {   \
> -             pipe_config_mismatch(fastset, crtc, __stringify(lut), \
> +             pipe_config_mismatch(&p, fastset, crtc, __stringify(lut), \
>                                    "hw_state doesn't match sw_state"); \
>               ret = false; \
>       } \

-- 
Jani Nikula, Intel

Reply via email to