[PATCH v4 6/8] drm/vc4: hdmi: Use the connector state pixel rate for the PHY

Thomas Zimmermann tzimmermann at suse.de
Mon Dec 7 09:20:39 EST 2020



Am 07.12.20 um 14:39 schrieb Maxime Ripard:
> The PHY initialisation parameters are not based on the pixel clock but
> the TMDS clock rate which can be the pixel clock in the standard case,
> but could be adjusted based on some parameters like the bits per color.
> 
> Since the TMDS clock rate is stored in our custom connector state
> already, let's reuse it from there instead of computing it again.
> 
> Signed-off-by: Maxime Ripard <maxime at cerno.tech>
> ---
>   drivers/gpu/drm/vc4/vc4_hdmi.c     | 2 +-
>   drivers/gpu/drm/vc4/vc4_hdmi.h     | 9 ++++-----
>   drivers/gpu/drm/vc4/vc4_hdmi_phy.c | 8 +++++---
>   3 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> index c1667cfe37db..795fd23c8f58 100644
> --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> @@ -714,7 +714,7 @@ static void vc4_hdmi_encoder_pre_crtc_configure(struct drm_encoder *encoder,
>   		vc4_hdmi->variant->reset(vc4_hdmi);
>   
>   	if (vc4_hdmi->variant->phy_init)
> -		vc4_hdmi->variant->phy_init(vc4_hdmi, mode);
> +		vc4_hdmi->variant->phy_init(vc4_hdmi, vc4_conn_state);
>   
>   	HDMI_WRITE(HDMI_SCHEDULER_CONTROL,
>   		   HDMI_READ(HDMI_SCHEDULER_CONTROL) |
> diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h
> index bca6943de884..6cc5b6652cca 100644
> --- a/drivers/gpu/drm/vc4/vc4_hdmi.h
> +++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
> @@ -21,10 +21,9 @@ to_vc4_hdmi_encoder(struct drm_encoder *encoder)
>   	return container_of(encoder, struct vc4_hdmi_encoder, base.base);
>   }
>   
> -struct drm_display_mode;
> -
>   struct vc4_hdmi;
>   struct vc4_hdmi_register;
> +struct vc4_hdmi_connector_state;
>   
>   enum vc4_hdmi_phy_channel {
>   	PHY_LANE_0 = 0,
> @@ -82,7 +81,7 @@ struct vc4_hdmi_variant {
>   
>   	/* Callback to initialize the PHY according to the mode */

Rather 'according to the connector state'? OTOH these comments don't 
seem to add any information. They might just be removed. :)

The patch in general is

Acked-by: Thomas Zimmermann <tzimmermann at suse.de>

>   	void (*phy_init)(struct vc4_hdmi *vc4_hdmi,
> -			 struct drm_display_mode *mode);
> +			 struct vc4_hdmi_connector_state *vc4_conn_state);
>   
>   	/* Callback to disable the PHY */
>   	void (*phy_disable)(struct vc4_hdmi *vc4_hdmi);
> @@ -192,13 +191,13 @@ conn_state_to_vc4_hdmi_conn_state(struct drm_connector_state *conn_state)
>   }
>   
>   void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
> -		       struct drm_display_mode *mode);
> +		       struct vc4_hdmi_connector_state *vc4_conn_state);
>   void vc4_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi);
>   void vc4_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi);
>   void vc4_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi);
>   
>   void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
> -		       struct drm_display_mode *mode);
> +		       struct vc4_hdmi_connector_state *vc4_conn_state);
>   void vc5_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi);
>   void vc5_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi);
>   void vc5_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi);
> diff --git a/drivers/gpu/drm/vc4/vc4_hdmi_phy.c b/drivers/gpu/drm/vc4/vc4_hdmi_phy.c
> index 057796b54c51..36535480f8e2 100644
> --- a/drivers/gpu/drm/vc4/vc4_hdmi_phy.c
> +++ b/drivers/gpu/drm/vc4/vc4_hdmi_phy.c
> @@ -127,7 +127,8 @@
>   
>   #define OSCILLATOR_FREQUENCY	54000000
>   
> -void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi, struct drm_display_mode *mode)
> +void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
> +		       struct vc4_hdmi_connector_state *conn_state)
>   {
>   	/* PHY should be in reset, like
>   	 * vc4_hdmi_encoder_disable() does.
> @@ -339,11 +340,12 @@ static void vc5_hdmi_reset_phy(struct vc4_hdmi *vc4_hdmi)
>   	HDMI_WRITE(HDMI_TX_PHY_POWERDOWN_CTL, BIT(10));
>   }
>   
> -void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi, struct drm_display_mode *mode)
> +void vc5_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
> +		       struct vc4_hdmi_connector_state *conn_state)
>   {
>   	const struct phy_lane_settings *chan0_settings, *chan1_settings, *chan2_settings, *clock_settings;
>   	const struct vc4_hdmi_variant *variant = vc4_hdmi->variant;
> -	unsigned long long pixel_freq = mode->clock * 1000;
> +	unsigned long long pixel_freq = conn_state->pixel_rate;
>   	unsigned long long vco_freq;
>   	unsigned char word_sel;
>   	u8 vco_sel, vco_div;
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20201207/0214ec87/attachment.sig>


More information about the linux-arm-kernel mailing list