From b245bc23ff5840f1f0d54d2d76ff5facc03a51bb Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Tue, 7 Oct 2025 16:54:46 +0200 Subject: [PATCH] drm/ast: Store HSync adjustment in device quirks Add the add4 flag to struct ast_device_quirks and set it on AST2600. Replaces a call to IS_AST_GEN7() in ast_set_crtc_reg(). Signed-off-by: Thomas Zimmermann Reviewed-by: Jocelyn Falempe > Link: https://lore.kernel.org/r/20251007150343.273718-6-tzimmermann@suse.de --- drivers/gpu/drm/ast/ast_2600.c | 1 + drivers/gpu/drm/ast/ast_drv.h | 6 ++++++ drivers/gpu/drm/ast/ast_mode.c | 3 +-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/ast/ast_2600.c b/drivers/gpu/drm/ast/ast_2600.c index 7cde5ce9c41f8..dee78fd5b022c 100644 --- a/drivers/gpu/drm/ast/ast_2600.c +++ b/drivers/gpu/drm/ast/ast_2600.c @@ -63,6 +63,7 @@ static const struct ast_device_quirks ast_2600_device_quirks = { .crtc_mem_req_threshold_low = 160, .crtc_mem_req_threshold_high = 224, .crtc_hsync_precatch_needed = true, + .crtc_hsync_add4_needed = true, }; struct drm_device *ast_2600_device_create(struct pci_dev *pdev, diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h index 76969244d36fd..7be36a358e746 100644 --- a/drivers/gpu/drm/ast/ast_drv.h +++ b/drivers/gpu/drm/ast/ast_drv.h @@ -176,6 +176,12 @@ struct ast_device_quirks { * by AST2500PreCatchCRT in VBIOS mode flags. */ bool crtc_hsync_precatch_needed; + + /* + * Workaround for modes with HSync Time that is not a multiple + * of 8 (e.g., 1920x1080@60Hz, HSync +44 pixels). + */ + bool crtc_hsync_add4_needed; }; struct ast_device { diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c index ebb1ec82d9045..a8917ab7028c2 100644 --- a/drivers/gpu/drm/ast/ast_mode.c +++ b/drivers/gpu/drm/ast/ast_mode.c @@ -288,8 +288,7 @@ static void ast_set_crtc_reg(struct ast_device *ast, struct drm_display_mode *mo ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xAC, 0x00, jregAC); ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xAD, 0x00, jregAD); - // Workaround for HSync Time non octave pixels (1920x1080@60Hz HSync 44 pixels); - if (IS_AST_GEN7(ast) && (mode->crtc_vdisplay == 1080)) + if (ast->quirks->crtc_hsync_add4_needed && mode->crtc_vdisplay == 1080) ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xFC, 0xFD, 0x02); else ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xFC, 0xFD, 0x00); -- 2.47.3