Check if corresponding port asks to override default Vswing / Preemphasis tables. As of now issue a debug message if it is the case. Do not override when not requested, hence when port's buffer's pointer is set to NULL.
With current implementation there is no way for proper rollback from intel_ddi_buf_trans_get() if request was done on platform without the support for VS/PE-O parsing. In this situation using any index will result in using zeroed tables instead of the defaults. Therefore add a workaround: check VS/PE-O parsing availability for the platform during DDI parsing. If check fails, do not allocate buffer, and hence use default encoder->get_buf_trans(). Workaround will be removed after all platforms with VS/PE-O tables are able to parse them. v2->v3 - break logging into two lines Signed-off-by: Michał Grzelak <[email protected]> --- drivers/gpu/drm/i915/display/intel_bios.c | 4 ++++ drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index 6893aa9f01aec..b2ee556e9d1f3 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -2660,12 +2660,16 @@ static void sanitize_hdmi_level_shift(struct intel_bios_encoder_data *devdata, static void override_vswing_preemph(struct intel_bios_encoder_data *devdata) { struct intel_ddi_buf_trans *buf_trans; + bool parseable = false; devdata->buf_trans = NULL; if (!intel_bios_encoder_overrides_vswing(devdata)) return; + if (!parseable) + return; + buf_trans = kzalloc_obj(*buf_trans); devdata->buf_trans = buf_trans; } diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c index 908577b04a14e..38f2a030c018d 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c +++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c @@ -3,6 +3,8 @@ * Copyright © 2020 Intel Corporation */ +#include <drm/drm_print.h> + #include "intel_cx0_phy.h" #include "intel_ddi.h" #include "intel_ddi_buf_trans.h" @@ -1857,5 +1859,9 @@ const struct intel_ddi_buf_trans *intel_ddi_buf_trans_get(struct intel_encoder * const struct intel_crtc_state *crtc_state, int *n_entries) { + if (encoder->vspeo) + drm_dbg_kms(to_intel_display(encoder)->drm, + "VS/PE-O unsupported, using default VS/PE tables"); + return encoder->get_buf_trans(encoder, crtc_state, n_entries); } -- 2.45.2
