[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