Skip to content

Commit

Permalink
drm/i915: Check infoframe state in intel_pipe_config_compare()
Browse files Browse the repository at this point in the history
Check the infoframes and infoframe enable state when comparing two
crtc states.

We'll use the infoframe logging functions from video/hdmi.c to
show the infoframes as part of the state dump.

TODO: Try to better integrate the infoframe dumps with
      drm state dumps

v2: drm_printk() is no more

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20190225174106.2163-9-ville.syrjala@linux.intel.com
  • Loading branch information
Ville Syrjälä committed Feb 26, 2019
1 parent 0d567f1 commit 6454cb9
Showing 1 changed file with 48 additions and 1 deletion.
49 changes: 48 additions & 1 deletion drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -11876,6 +11876,37 @@ intel_compare_link_m_n(const struct intel_link_m_n *m_n,
return false;
}

static bool
intel_compare_infoframe(const union hdmi_infoframe *a,
const union hdmi_infoframe *b)
{
return memcmp(a, b, sizeof(*a)) == 0;
}

static void
pipe_config_infoframe_err(struct drm_i915_private *dev_priv,
bool adjust, const char *name,
const union hdmi_infoframe *a,
const union hdmi_infoframe *b)
{
if (adjust) {
if ((drm_debug & DRM_UT_KMS) == 0)
return;

drm_dbg(DRM_UT_KMS, "mismatch in %s infoframe", name);
drm_dbg(DRM_UT_KMS, "expected:");
hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, a);
drm_dbg(DRM_UT_KMS, "found");
hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, b);
} else {
drm_err("mismatch in %s infoframe", name);
drm_err("expected:");
hdmi_infoframe_log(KERN_ERR, dev_priv->drm.dev, a);
drm_err("found");
hdmi_infoframe_log(KERN_ERR, dev_priv->drm.dev, b);
}
}

static void __printf(3, 4)
pipe_config_err(bool adjust, const char *name, const char *format, ...)
{
Expand Down Expand Up @@ -12059,7 +12090,17 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
} \
} while (0)

#define PIPE_CONF_QUIRK(quirk) \
#define PIPE_CONF_CHECK_INFOFRAME(name) do { \
if (!intel_compare_infoframe(&current_config->infoframes.name, \
&pipe_config->infoframes.name)) { \
pipe_config_infoframe_err(dev_priv, adjust, __stringify(name), \
&current_config->infoframes.name, \
&pipe_config->infoframes.name); \
ret = false; \
} \
} while (0)

#define PIPE_CONF_QUIRK(quirk) \
((current_config->quirks | pipe_config->quirks) & (quirk))

PIPE_CONF_CHECK_I(cpu_transcoder);
Expand Down Expand Up @@ -12192,6 +12233,12 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,

PIPE_CONF_CHECK_I(min_voltage_level);

PIPE_CONF_CHECK_X(infoframes.enable);
PIPE_CONF_CHECK_X(infoframes.gcp);
PIPE_CONF_CHECK_INFOFRAME(avi);
PIPE_CONF_CHECK_INFOFRAME(spd);
PIPE_CONF_CHECK_INFOFRAME(hdmi);

#undef PIPE_CONF_CHECK_X
#undef PIPE_CONF_CHECK_I
#undef PIPE_CONF_CHECK_BOOL
Expand Down

0 comments on commit 6454cb9

Please sign in to comment.