> Subject: [PATCH 02/19] drm/i915/lt_phy: Add check if PLL is enabled
> 
> 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);

So unlike CX0 PHY where we the step is
Set PORT_CLOCK_CTL register PCLK PLL Request LN<Lane for maxPCLK**> to "1" to 
enable PLL.
That is not the case for LT PHY there we request and wait for ACK on Lane 0
Program PORT_CLOCK_CTL[PCLK PLL Request LN0] = 1. This will assert the MacCLK 
Request.
Poll for PORT_CLOCK_CTL[PCLK PLL Ack LN0]= 1. This is the MacCLKAck assertion. 
Expected MACCLK_TURNON_LATENCY is 100 us.
So 

Check Bspec: 74492

Regards,
Suraj Kandpal
 
> +}
> +
>  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