drm/i915: Check infoframe state in intel_pipe_config_compare()
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
This commit is contained in:
parent
0d567f1eae
commit
6454cb9feb
|
@ -11876,6 +11876,37 @@ intel_compare_link_m_n(const struct intel_link_m_n *m_n,
|
||||||
return false;
|
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)
|
static void __printf(3, 4)
|
||||||
pipe_config_err(bool adjust, const char *name, const char *format, ...)
|
pipe_config_err(bool adjust, const char *name, const char *format, ...)
|
||||||
{
|
{
|
||||||
|
@ -12059,7 +12090,17 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define PIPE_CONF_QUIRK(quirk) \
|
#define PIPE_CONF_CHECK_INFOFRAME(name) do { \
|
||||||
|
if (!intel_compare_infoframe(¤t_config->infoframes.name, \
|
||||||
|
&pipe_config->infoframes.name)) { \
|
||||||
|
pipe_config_infoframe_err(dev_priv, adjust, __stringify(name), \
|
||||||
|
¤t_config->infoframes.name, \
|
||||||
|
&pipe_config->infoframes.name); \
|
||||||
|
ret = false; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define PIPE_CONF_QUIRK(quirk) \
|
||||||
((current_config->quirks | pipe_config->quirks) & (quirk))
|
((current_config->quirks | pipe_config->quirks) & (quirk))
|
||||||
|
|
||||||
PIPE_CONF_CHECK_I(cpu_transcoder);
|
PIPE_CONF_CHECK_I(cpu_transcoder);
|
||||||
|
@ -12192,6 +12233,12 @@ intel_pipe_config_compare(struct drm_i915_private *dev_priv,
|
||||||
|
|
||||||
PIPE_CONF_CHECK_I(min_voltage_level);
|
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_X
|
||||||
#undef PIPE_CONF_CHECK_I
|
#undef PIPE_CONF_CHECK_I
|
||||||
#undef PIPE_CONF_CHECK_BOOL
|
#undef PIPE_CONF_CHECK_BOOL
|
||||||
|
|
Loading…
Reference in New Issue