[PATCH 03/15] drm/ast: Reorganize widescreen test around hardware Gens

Jocelyn Falempe jfalempe at redhat.com
Mon Jan 27 14:26:30 UTC 2025


On 24/01/2025 08:57, Thomas Zimmermann wrote:
> Testing for support of widescreen modes mixes up various hardware
> Gens. First branch by hardware Gen, then do specific tests for each
> Gen. By default, widesscreen support is disabled.
> 
> Later patches will add more specific tests for each Gen.

I think it introduces a bit too much repeated code.

Maybe adding a small helper like this would help?

static bool ast_vgacrd0_support_wuxga(struct ast_device *ast) {
	u8 vgacrd0;
	vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
	return !(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC) ||
		(vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN));
}

-- 

Jocelyn

> 
> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
> ---
>   drivers/gpu/drm/ast/ast_main.c | 47 +++++++++++++++++++++-------------
>   1 file changed, 29 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
> index 2a813f0128eb8..4f402e0b9b5c1 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -40,29 +40,40 @@ static void ast_detect_widescreen(struct ast_device *ast)
>   {
>   	u8 vgacrd0;
>   
> -	/* Check if we support wide screen */
> -	switch (AST_GEN(ast)) {
> -	case 1:
> -		ast->support_wide_screen = false;
> -		break;
> -	default:
> +	ast->support_wide_screen = false;
> +
> +	if (AST_GEN(ast) >= 7) {
> +		ast->support_wide_screen = true;
> +	} else if (AST_GEN(ast) >= 6) {
> +		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
> +		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
> +			ast->support_wide_screen = true;
> +		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
> +			ast->support_wide_screen = true;
> +		else if (ast->chip == AST2510)
> +			ast->support_wide_screen = true;
> +	} else if (AST_GEN(ast) >= 5) {
> +		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
> +		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
> +			ast->support_wide_screen = true;
> +		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
> +			ast->support_wide_screen = true;
> +		else if (ast->chip == AST1400)
> +			ast->support_wide_screen = true;
> +	} else if (AST_GEN(ast) >= 4) {
> +		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
> +		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
> +			ast->support_wide_screen = true;
> +		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
> +			ast->support_wide_screen = true;
> +		else if (ast->chip == AST1300)
> +			ast->support_wide_screen = true;
> +	} else if (AST_GEN(ast) >= 2) {
>   		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
>   		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
>   			ast->support_wide_screen = true;
>   		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
>   			ast->support_wide_screen = true;
> -		else {
> -			ast->support_wide_screen = false;
> -			if (ast->chip == AST1300)
> -				ast->support_wide_screen = true;
> -			if (ast->chip == AST1400)
> -				ast->support_wide_screen = true;
> -			if (ast->chip == AST2510)
> -				ast->support_wide_screen = true;
> -			if (IS_AST_GEN7(ast))
> -				ast->support_wide_screen = true;
> -		}
> -		break;
>   	}
>   }
>   



More information about the dri-devel mailing list