mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 20:23:16 +07:00
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;
|
||||
}
|
||||
|
||||
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, ...)
|
||||
{
|
||||
@ -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(¤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))
|
||||
|
||||
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_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
|
||||
|
Loading…
Reference in New Issue
Block a user