mirror of https://gitee.com/openkylin/linux.git
drm/i915: Add state readout for DP VSC SDP
Added state readout for DP VSC SDP and enabled state validation for DP VSC SDP. v2: Minor style fix v3: Replace a structure name to drm_dp_vsc_sdp from intel_dp_vsc_sdp v4: Use struct drm_device logging macros v10: Skip checking of VSC SDP when a crtc config has psr. Signed-off-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com> Reviewed-by: Uma Shankar <uma.shankar@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200514060732.3378396-10-gwan-gyeong.mun@intel.com
This commit is contained in:
parent
dee66f3e07
commit
2c3928e4d8
|
@ -4307,6 +4307,7 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
|
|||
bdw_get_trans_port_sync_config(pipe_config);
|
||||
|
||||
intel_read_dp_sdp(encoder, pipe_config, HDMI_PACKET_TYPE_GAMUT_METADATA);
|
||||
intel_read_dp_sdp(encoder, pipe_config, DP_SDP_VSC);
|
||||
}
|
||||
|
||||
static enum intel_output_type
|
||||
|
|
|
@ -13490,6 +13490,13 @@ intel_compare_infoframe(const union hdmi_infoframe *a,
|
|||
return memcmp(a, b, sizeof(*a)) == 0;
|
||||
}
|
||||
|
||||
static bool
|
||||
intel_compare_dp_vsc_sdp(const struct drm_dp_vsc_sdp *a,
|
||||
const struct drm_dp_vsc_sdp *b)
|
||||
{
|
||||
return memcmp(a, b, sizeof(*a)) == 0;
|
||||
}
|
||||
|
||||
static void
|
||||
pipe_config_infoframe_mismatch(struct drm_i915_private *dev_priv,
|
||||
bool fastset, const char *name,
|
||||
|
@ -13515,6 +13522,31 @@ pipe_config_infoframe_mismatch(struct drm_i915_private *dev_priv,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pipe_config_dp_vsc_sdp_mismatch(struct drm_i915_private *dev_priv,
|
||||
bool fastset, const char *name,
|
||||
const struct drm_dp_vsc_sdp *a,
|
||||
const struct drm_dp_vsc_sdp *b)
|
||||
{
|
||||
if (fastset) {
|
||||
if (!drm_debug_enabled(DRM_UT_KMS))
|
||||
return;
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"fastset mismatch in %s dp sdp\n", name);
|
||||
drm_dbg_kms(&dev_priv->drm, "expected:\n");
|
||||
drm_dp_vsc_sdp_log(KERN_DEBUG, dev_priv->drm.dev, a);
|
||||
drm_dbg_kms(&dev_priv->drm, "found:\n");
|
||||
drm_dp_vsc_sdp_log(KERN_DEBUG, dev_priv->drm.dev, b);
|
||||
} else {
|
||||
drm_err(&dev_priv->drm, "mismatch in %s dp sdp\n", name);
|
||||
drm_err(&dev_priv->drm, "expected:\n");
|
||||
drm_dp_vsc_sdp_log(KERN_ERR, dev_priv->drm.dev, a);
|
||||
drm_err(&dev_priv->drm, "found:\n");
|
||||
drm_dp_vsc_sdp_log(KERN_ERR, dev_priv->drm.dev, b);
|
||||
}
|
||||
}
|
||||
|
||||
static void __printf(4, 5)
|
||||
pipe_config_mismatch(bool fastset, const struct intel_crtc *crtc,
|
||||
const char *name, const char *format, ...)
|
||||
|
@ -13716,6 +13748,17 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
#define PIPE_CONF_CHECK_DP_VSC_SDP(name) do { \
|
||||
if (!current_config->has_psr && !pipe_config->has_psr && \
|
||||
!intel_compare_dp_vsc_sdp(¤t_config->infoframes.name, \
|
||||
&pipe_config->infoframes.name)) { \
|
||||
pipe_config_dp_vsc_sdp_mismatch(dev_priv, fastset, __stringify(name), \
|
||||
¤t_config->infoframes.name, \
|
||||
&pipe_config->infoframes.name); \
|
||||
ret = false; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define PIPE_CONF_CHECK_COLOR_LUT(name1, name2, bit_precision) do { \
|
||||
if (current_config->name1 != pipe_config->name1) { \
|
||||
pipe_config_mismatch(fastset, crtc, __stringify(name1), \
|
||||
|
@ -13893,6 +13936,7 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
|
|||
PIPE_CONF_CHECK_INFOFRAME(spd);
|
||||
PIPE_CONF_CHECK_INFOFRAME(hdmi);
|
||||
PIPE_CONF_CHECK_INFOFRAME(drm);
|
||||
PIPE_CONF_CHECK_DP_VSC_SDP(vsc);
|
||||
|
||||
PIPE_CONF_CHECK_X(sync_mode_slaves_mask);
|
||||
PIPE_CONF_CHECK_I(master_transcoder);
|
||||
|
|
Loading…
Reference in New Issue