Move index computation for most appropriate VS/PE-O table into separate
function.

Unlike VS/PE-O tables' parsing, index computation cannot happen during
DDI ports parsing. It is because computation depends on link's port
clock, which can change with every modeset. Thus index computation must
be deferred to occur during intel_ddi_buf_trans_get(), after tables'
parsing has completed.

v2->v3
- break logging into two lines
- return -EINVAL instead of -1 (Suraj)

Signed-off-by: Michał Grzelak <[email protected]>
---
 .../gpu/drm/i915/display/intel_ddi_buf_trans.c   | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

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 38f2a030c018d..9ae7a780a7639 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
@@ -1786,6 +1786,15 @@ xe3plpd_get_lt_buf_trans(struct intel_encoder *encoder,
                return intel_get_buf_trans(&xe3plpd_lt_trans_dp14, n_entries);
 }
 
+static int
+vspeo_compute_index(struct intel_encoder *encoder)
+{
+       drm_dbg_kms(to_intel_display(encoder)->drm,
+                   "VS/PE-O unsupported, using default VS/PE tables");
+
+       return -EINVAL;
+}
+
 void intel_ddi_buf_trans_init(struct intel_encoder *encoder)
 {
        struct intel_display *display = to_intel_display(encoder);
@@ -1859,9 +1868,10 @@ 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");
+       if (!encoder->vspeo)
+               return encoder->get_buf_trans(encoder, crtc_state, n_entries);
+
+       vspeo_compute_index(encoder);
 
        return encoder->get_buf_trans(encoder, crtc_state, n_entries);
 }
-- 
2.45.2

Reply via email to