Add check for PLL enabling and return early if
PLL is not enabled.

Signed-off-by: Mika Kahola <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_lt_phy.c | 24 +++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c 
b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 9647afcea897..f8cea06cfa27 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2181,6 +2181,27 @@ intel_lt_phy_pll_compare_hw_state(const struct 
intel_lt_phy_pll_state *a,
        return false;
 }
 
+static u32 intel_lt_phy_get_pclk_pll_request(u8 lane_mask)
+{
+       u32 val = 0;
+       int lane = 0;
+
+       for_each_lt_phy_lane_in_mask(lane_mask, lane)
+               val |= XELPDP_LANE_PCLK_PLL_REQUEST(lane);
+
+       return val;
+}
+
+static bool intel_lt_phy_pll_is_enabled(struct intel_encoder *encoder)
+{
+       struct intel_display *display = to_intel_display(encoder);
+       struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
+       u8 lane = dig_port->lane_reversal ? INTEL_LT_PHY_LANE1 : 
INTEL_LT_PHY_LANE0;
+
+       return intel_de_read(display, XELPDP_PORT_CLOCK_CTL(display, 
encoder->port)) &
+                            intel_lt_phy_get_pclk_pll_request(lane);
+}
+
 void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
                                       const struct intel_crtc_state 
*crtc_state,
                                       struct intel_lt_phy_pll_state *pll_state)
@@ -2190,6 +2211,9 @@ void intel_lt_phy_pll_readout_hw_state(struct 
intel_encoder *encoder,
        struct ref_tracker *wakeref;
        int i, j, k;
 
+       if (!intel_lt_phy_pll_is_enabled(encoder))
+               return;
+
        pll_state->tbt_mode = 
intel_tc_port_in_tbt_alt_mode(enc_to_dig_port(encoder));
        if (pll_state->tbt_mode)
                return;
-- 
2.43.0

Reply via email to