diff mbox series

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

Message ID 20250124080546.9956-4-tzimmermann@suse.de (mailing list archive)
State New, archived
Headers show
Series drm/ast: Clean up display-mode detection and validation | expand

Commit Message

Thomas Zimmermann Jan. 24, 2025, 7:57 a.m. UTC
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.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
 drivers/gpu/drm/ast/ast_main.c | 47 +++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 18 deletions(-)

Comments

Jocelyn Falempe Jan. 27, 2025, 2:26 p.m. UTC | #1
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));
}
Thomas Zimmermann Jan. 28, 2025, 2:43 p.m. UTC | #2
Hi Jocelyn


Am 27.01.25 um 15:26 schrieb Jocelyn Falempe:
> 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?

I'll add a helper here and for the code in patch 6

Best regards
Thomas

>
> 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));
> }
>
diff mbox series

Patch

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;
 	}
 }