]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/ast: Store HSync adjustment in device quirks
authorThomas Zimmermann <tzimmermann@suse.de>
Tue, 7 Oct 2025 14:54:46 +0000 (16:54 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Wed, 15 Oct 2025 07:59:47 +0000 (09:59 +0200)
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 <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>>
Link: https://lore.kernel.org/r/20251007150343.273718-6-tzimmermann@suse.de
drivers/gpu/drm/ast/ast_2600.c
drivers/gpu/drm/ast/ast_drv.h
drivers/gpu/drm/ast/ast_mode.c

index 7cde5ce9c41f839996dd6df06f5245f2d7278bac..dee78fd5b022c312402f0119d7cbed162b55aa73 100644 (file)
@@ -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,
index 76969244d36fda33a00df1a1bf4df23dffd392ef..7be36a358e746a56dbd2ee72478ef7c9c4861d3e 100644 (file)
@@ -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 {
index ebb1ec82d9045cccfc5347c993b50dd39a921af8..a8917ab7028c260818adb753bbec2cbe7c3b1d6e 100644 (file)
@@ -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);