]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/ast: Store CRTC memory request threshold in device quirks
authorThomas Zimmermann <tzimmermann@suse.de>
Tue, 7 Oct 2025 14:54:44 +0000 (16:54 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Wed, 15 Oct 2025 07:59:43 +0000 (09:59 +0200)
Store each hardware's CRTC memory threshold in the specific instance
of struct ast_device_quirks. Removes the calls to IS_AST_GENn() from
ast_set_crtthd_reg().

The values stored in the registers appear to be plain limits. Hence
write them in the driver in decimal format instead of hexadecimal.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/20251007150343.273718-4-tzimmermann@suse.de
drivers/gpu/drm/ast/ast_2000.c
drivers/gpu/drm/ast/ast_2100.c
drivers/gpu/drm/ast/ast_2200.c
drivers/gpu/drm/ast/ast_2300.c
drivers/gpu/drm/ast/ast_2400.c
drivers/gpu/drm/ast/ast_2500.c
drivers/gpu/drm/ast/ast_2600.c
drivers/gpu/drm/ast/ast_drv.h
drivers/gpu/drm/ast/ast_mode.c

index ae4d7a2a0ec801c4363651acf62e4d8cc0d047f4..fa3bc23ce0985ea55661b27f9ee0436611af563e 100644 (file)
@@ -212,6 +212,8 @@ void ast_2000_detect_tx_chip(struct ast_device *ast, bool need_post)
 }
 
 static const struct ast_device_quirks ast_2000_device_quirks = {
+       .crtc_mem_req_threshold_low = 31,
+       .crtc_mem_req_threshold_high = 47,
 };
 
 struct drm_device *ast_2000_device_create(struct pci_dev *pdev,
index 01e064e67cf7d61a955a00cb5afd5f4454d37b53..05aeb0624d4146c295c57ba56160d72802256e7d 100644 (file)
@@ -433,6 +433,8 @@ static void ast_2100_detect_widescreen(struct ast_device *ast)
 }
 
 static const struct ast_device_quirks ast_2100_device_quirks = {
+       .crtc_mem_req_threshold_low = 47,
+       .crtc_mem_req_threshold_high = 63,
 };
 
 struct drm_device *ast_2100_device_create(struct pci_dev *pdev,
index 46b6fc6cf7eb65a2ebb172a85f4a6447805eb03e..b64345d11ffa8c5e7de881947bc8bc69a8113697 100644 (file)
@@ -44,6 +44,8 @@ static void ast_2200_detect_widescreen(struct ast_device *ast)
 }
 
 static const struct ast_device_quirks ast_2200_device_quirks = {
+       .crtc_mem_req_threshold_low = 47,
+       .crtc_mem_req_threshold_high = 63,
 };
 
 struct drm_device *ast_2200_device_create(struct pci_dev *pdev,
index b76a80d6aea6790bfdafe9ee46521b0e8b3f47fc..5f50d9f91ffd62dc0749b1ea33b2a6e2eac18d4f 100644 (file)
@@ -1408,6 +1408,8 @@ static void ast_2300_detect_widescreen(struct ast_device *ast)
 }
 
 static const struct ast_device_quirks ast_2300_device_quirks = {
+       .crtc_mem_req_threshold_low = 96,
+       .crtc_mem_req_threshold_high = 120,
 };
 
 struct drm_device *ast_2300_device_create(struct pci_dev *pdev,
index 2b41ff69ab0bf33be0542e4caea2d4882c7efa3b..2e6befd24f918ae1ee2427046f8f51d68e541b7f 100644 (file)
@@ -45,6 +45,8 @@ static void ast_2400_detect_widescreen(struct ast_device *ast)
 }
 
 static const struct ast_device_quirks ast_2400_device_quirks = {
+       .crtc_mem_req_threshold_low = 96,
+       .crtc_mem_req_threshold_high = 120,
 };
 
 struct drm_device *ast_2400_device_create(struct pci_dev *pdev,
index 6d305a8ccc51655ce2d503fc0faa6692079b6bca..416bce9ea7573deb3a7c27c17b3fb0781bd5377e 100644 (file)
@@ -619,6 +619,8 @@ static void ast_2500_detect_widescreen(struct ast_device *ast)
 }
 
 static const struct ast_device_quirks ast_2500_device_quirks = {
+       .crtc_mem_req_threshold_low = 96,
+       .crtc_mem_req_threshold_high = 120,
 };
 
 struct drm_device *ast_2500_device_create(struct pci_dev *pdev,
index df3b429e81748cced02282377c8e55990055493c..bb0a50b2576653b620ada54b89292aa73a038237 100644 (file)
@@ -60,6 +60,8 @@ static void ast_2600_detect_widescreen(struct ast_device *ast)
 }
 
 static const struct ast_device_quirks ast_2600_device_quirks = {
+       .crtc_mem_req_threshold_low = 160,
+       .crtc_mem_req_threshold_high = 224,
 };
 
 struct drm_device *ast_2600_device_create(struct pci_dev *pdev,
index 2a2c28693dc6a47f58312ad73e187c1d52e53ae2..926e1c7de6f8cd4cae40d9c42ccf3d015c1d7621 100644 (file)
@@ -165,6 +165,11 @@ to_ast_connector(struct drm_connector *connector)
  */
 
 struct ast_device_quirks {
+       /*
+        * CRTC memory request threshold
+        */
+       unsigned char crtc_mem_req_threshold_low;
+       unsigned char crtc_mem_req_threshold_high;
 };
 
 struct ast_device {
index a9ffda1b1dea25ec5e17150e56f627a690185ff2..da374af9596d46b8a5d82a337fad82f17ccb0266 100644 (file)
@@ -410,20 +410,11 @@ static void ast_set_color_reg(struct ast_device *ast,
 
 static void ast_set_crtthd_reg(struct ast_device *ast)
 {
-       /* Set Threshold */
-       if (IS_AST_GEN7(ast)) {
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa7, 0xe0);
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa6, 0xa0);
-       } else if (IS_AST_GEN6(ast) || IS_AST_GEN5(ast) || IS_AST_GEN4(ast)) {
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa7, 0x78);
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa6, 0x60);
-       } else if (IS_AST_GEN3(ast) || IS_AST_GEN2(ast)) {
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa7, 0x3f);
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa6, 0x2f);
-       } else {
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa7, 0x2f);
-               ast_set_index_reg(ast, AST_IO_VGACRI, 0xa6, 0x1f);
-       }
+       u8 vgacra6 = ast->quirks->crtc_mem_req_threshold_low;
+       u8 vgacra7 = ast->quirks->crtc_mem_req_threshold_high;
+
+       ast_set_index_reg(ast, AST_IO_VGACRI, 0xa7, vgacra7);
+       ast_set_index_reg(ast, AST_IO_VGACRI, 0xa6, vgacra6);
 }
 
 static void ast_set_sync_reg(struct ast_device *ast,