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

Reply via email to