[PATCH 04/10] drm/ast: astdp: Replace ast_dp_set_on_off()

Jocelyn Falempe jfalempe at redhat.com
Thu Sep 12 13:38:28 UTC 2024


On 11/09/2024 13:51, Thomas Zimmermann wrote:
> Replace ast_dp_set_on_off() with ast_dp_set_enable(). The helper's
> new name reflects the performed operation. If enabling fails, the
> new helper prints a warning. The code that waits for the programmed
> effect to take place is now located in __ast_dp_wait_enable().
> 
> Also align the register constants with the rest of the code.
> 

Thanks, it looks good to me.

Reviewed-by: Jocelyn Falempe <jfalempe at redhat.com>

> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
>   drivers/gpu/drm/ast/ast_dp.c  | 49 +++++++++++++++++++++++------------
>   drivers/gpu/drm/ast/ast_reg.h | 13 ++--------
>   2 files changed, 35 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ast/ast_dp.c b/drivers/gpu/drm/ast/ast_dp.c
> index d4362807d777..0e282b7b167c 100644
> --- a/drivers/gpu/drm/ast/ast_dp.c
> +++ b/drivers/gpu/drm/ast/ast_dp.c
> @@ -186,22 +186,39 @@ static void ast_dp_link_training(struct ast_device *ast)
>   	drm_err(dev, "Link training failed\n");
>   }
>   
> -static void ast_dp_set_on_off(struct ast_device *ast, bool on)
> +static bool __ast_dp_wait_enable(struct ast_device *ast, bool enabled)
>   {
> -	u8 video_on_off = on;
> -	u32 i = 0;
> -
> -	// Video On/Off
> -	ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xE3, (u8) ~AST_DP_VIDEO_ENABLE, on);
> -
> -	video_on_off <<= 4;
> -	while (ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xDF,
> -						ASTDP_MIRROR_VIDEO_ENABLE) != video_on_off) {
> -		// wait 1 ms
> -		mdelay(1);
> -		if (++i > 200)
> -			break;
> +	u8 vgacrdf_test = 0x00;
> +	u8 vgacrdf;
> +	unsigned int i;
> +
> +	if (enabled)
> +		vgacrdf_test |= AST_IO_VGACRDF_DP_VIDEO_ENABLE;
> +
> +	for (i = 0; i < 200; ++i) {
> +		if (i)
> +			mdelay(1);
> +		vgacrdf = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xdf,
> +						 AST_IO_VGACRDF_DP_VIDEO_ENABLE);
> +		if (vgacrdf == vgacrdf_test)
> +			return true;
>   	}
> +
> +	return false;
> +}
> +
> +static void ast_dp_set_enable(struct ast_device *ast, bool enabled)
> +{
> +	struct drm_device *dev = &ast->base;
> +	u8 vgacre3 = 0x00;
> +
> +	if (enabled)
> +		vgacre3 |= AST_IO_VGACRE3_DP_VIDEO_ENABLE;
> +
> +	ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xe3, (u8)~AST_IO_VGACRE3_DP_VIDEO_ENABLE,
> +			       vgacre3);
> +
> +	drm_WARN_ON(dev, !__ast_dp_wait_enable(ast, enabled));
>   }
>   
>   static void ast_dp_set_mode(struct drm_crtc *crtc, struct ast_vbios_mode_info *vbios_mode)
> @@ -318,7 +335,7 @@ static void ast_astdp_encoder_helper_atomic_enable(struct drm_encoder *encoder,
>   		ast_dp_link_training(ast);
>   
>   		ast_wait_for_vretrace(ast);
> -		ast_dp_set_on_off(ast, 1);
> +		ast_dp_set_enable(ast, true);
>   	}
>   }
>   
> @@ -327,7 +344,7 @@ static void ast_astdp_encoder_helper_atomic_disable(struct drm_encoder *encoder,
>   {
>   	struct ast_device *ast = to_ast_device(encoder->dev);
>   
> -	ast_dp_set_on_off(ast, 0);
> +	ast_dp_set_enable(ast, false);
>   	ast_dp_set_phy_sleep(ast, true);
>   }
>   
> diff --git a/drivers/gpu/drm/ast/ast_reg.h b/drivers/gpu/drm/ast/ast_reg.h
> index d7a22cea8271..6a1f756650ab 100644
> --- a/drivers/gpu/drm/ast/ast_reg.h
> +++ b/drivers/gpu/drm/ast/ast_reg.h
> @@ -41,6 +41,8 @@
>   #define AST_IO_VGACRD7_EDID_VALID_FLAG	BIT(0)
>   #define AST_IO_VGACRDC_LINK_SUCCESS	BIT(0)
>   #define AST_IO_VGACRDF_HPD		BIT(0)
> +#define AST_IO_VGACRDF_DP_VIDEO_ENABLE	BIT(4) /* mirrors AST_IO_VGACRE3_DP_VIDEO_ENABLE */
> +#define AST_IO_VGACRE3_DP_VIDEO_ENABLE	BIT(0)
>   #define AST_IO_VGACRE3_DP_PHY_SLEEP	BIT(4)
>   #define AST_IO_VGACRE5_EDID_READ_DONE	BIT(0)
>   
> @@ -69,17 +71,6 @@
>    * AST DisplayPort
>    */
>   
> -/* Define for Soc scratched reg used on ASTDP */
> -#define AST_DP_VIDEO_ENABLE		BIT(0)
> -
> -/*
> - * CRDF[b4]: Mirror of AST_DP_VIDEO_ENABLE
> - * Precondition:	A. ~AST_DP_PHY_SLEEP  &&
> - *			B. DP_HPD &&
> - *			C. DP_LINK_SUCCESS
> - */
> -#define ASTDP_MIRROR_VIDEO_ENABLE	BIT(4)
> -
>   /*
>    * ASTDP setmode registers:
>    * CRE0[7:0]: MISC0 ((0x00: 18-bpp) or (0x20: 24-bpp)



More information about the dri-devel mailing list