On 10/7/25 16:54, Thomas Zimmermann wrote:
Init the new field dclk_table in struct ast_device to the per-gen
table of DRAM clock parameters. Use the field during modesetting.

The table is static, so a setup is only required once. Removes the
call to IS_AST_GEN() from the atomic commit's code path.

Thanks, it looks good to me.

Reviewed-by: Jocelyn Falempe <[email protected]>


Signed-off-by: Thomas Zimmermann <[email protected]>
---
  drivers/gpu/drm/ast/ast_2000.c | 2 ++
  drivers/gpu/drm/ast/ast_2100.c | 2 ++
  drivers/gpu/drm/ast/ast_2200.c | 2 ++
  drivers/gpu/drm/ast/ast_2300.c | 2 ++
  drivers/gpu/drm/ast/ast_2400.c | 2 ++
  drivers/gpu/drm/ast/ast_2500.c | 2 ++
  drivers/gpu/drm/ast/ast_2600.c | 2 ++
  drivers/gpu/drm/ast/ast_drv.h  | 2 ++
  drivers/gpu/drm/ast/ast_mode.c | 7 +------
  9 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/ast/ast_2000.c b/drivers/gpu/drm/ast/ast_2000.c
index 03b0dcea43d1..74a041e99061 100644
--- a/drivers/gpu/drm/ast/ast_2000.c
+++ b/drivers/gpu/drm/ast/ast_2000.c
@@ -230,6 +230,8 @@ struct drm_device *ast_2000_device_create(struct pci_dev 
*pdev,
ast_device_init(ast, chip, config_mode, regs, ioregs); + ast->dclk_table = ast_2000_dclk_table;
+
        ast_2000_detect_tx_chip(ast, need_post);
if (need_post) {
diff --git a/drivers/gpu/drm/ast/ast_2100.c b/drivers/gpu/drm/ast/ast_2100.c
index 540972daec52..eb3336c84833 100644
--- a/drivers/gpu/drm/ast/ast_2100.c
+++ b/drivers/gpu/drm/ast/ast_2100.c
@@ -451,6 +451,8 @@ struct drm_device *ast_2100_device_create(struct pci_dev 
*pdev,
ast_device_init(ast, chip, config_mode, regs, ioregs); + ast->dclk_table = ast_2000_dclk_table;
+
        ast_2000_detect_tx_chip(ast, need_post);
if (need_post) {
diff --git a/drivers/gpu/drm/ast/ast_2200.c b/drivers/gpu/drm/ast/ast_2200.c
index 4795966dc2a7..391034d5f425 100644
--- a/drivers/gpu/drm/ast/ast_2200.c
+++ b/drivers/gpu/drm/ast/ast_2200.c
@@ -62,6 +62,8 @@ struct drm_device *ast_2200_device_create(struct pci_dev 
*pdev,
ast_device_init(ast, chip, config_mode, regs, ioregs); + ast->dclk_table = ast_2000_dclk_table;
+
        ast_2000_detect_tx_chip(ast, need_post);
if (need_post) {
diff --git a/drivers/gpu/drm/ast/ast_2300.c b/drivers/gpu/drm/ast/ast_2300.c
index d1d63e58f3d6..3c9e1960b90c 100644
--- a/drivers/gpu/drm/ast/ast_2300.c
+++ b/drivers/gpu/drm/ast/ast_2300.c
@@ -1426,6 +1426,8 @@ struct drm_device *ast_2300_device_create(struct pci_dev 
*pdev,
ast_device_init(ast, chip, config_mode, regs, ioregs); + ast->dclk_table = ast_2000_dclk_table;
+
        ast_2300_detect_tx_chip(ast);
if (need_post) {
diff --git a/drivers/gpu/drm/ast/ast_2400.c b/drivers/gpu/drm/ast/ast_2400.c
index 596338ea22f4..be866d1cd06a 100644
--- a/drivers/gpu/drm/ast/ast_2400.c
+++ b/drivers/gpu/drm/ast/ast_2400.c
@@ -63,6 +63,8 @@ struct drm_device *ast_2400_device_create(struct pci_dev 
*pdev,
ast_device_init(ast, chip, config_mode, regs, ioregs); + ast->dclk_table = ast_2000_dclk_table;
+
        ast_2300_detect_tx_chip(ast);
if (need_post) {
diff --git a/drivers/gpu/drm/ast/ast_2500.c b/drivers/gpu/drm/ast/ast_2500.c
index 2c56db644f06..086c74682a55 100644
--- a/drivers/gpu/drm/ast/ast_2500.c
+++ b/drivers/gpu/drm/ast/ast_2500.c
@@ -637,6 +637,8 @@ struct drm_device *ast_2500_device_create(struct pci_dev 
*pdev,
ast_device_init(ast, chip, config_mode, regs, ioregs); + ast->dclk_table = ast_2500_dclk_table;
+
        ast_2300_detect_tx_chip(ast);
if (need_post) {
diff --git a/drivers/gpu/drm/ast/ast_2600.c b/drivers/gpu/drm/ast/ast_2600.c
index 30490c473797..1f709486f491 100644
--- a/drivers/gpu/drm/ast/ast_2600.c
+++ b/drivers/gpu/drm/ast/ast_2600.c
@@ -78,6 +78,8 @@ struct drm_device *ast_2600_device_create(struct pci_dev 
*pdev,
ast_device_init(ast, chip, config_mode, regs, ioregs); + ast->dclk_table = ast_2500_dclk_table;
+
        ast_2300_detect_tx_chip(ast);
switch (ast->tx_chip) {
diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
index 35c476c85b9a..b2b30a0e4ffb 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -174,6 +174,8 @@ struct ast_device {
        enum ast_config_mode config_mode;
        enum ast_chip chip;
+ const struct ast_vbios_dclk_info *dclk_table;
+
        void __iomem    *vram;
        unsigned long   vram_base;
        unsigned long   vram_size;
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index 6b9d510c509d..a9ffda1b1dea 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -370,12 +370,7 @@ static void ast_set_dclk_reg(struct ast_device *ast,
                             struct drm_display_mode *mode,
                             const struct ast_vbios_enhtable *vmode)
  {
-       const struct ast_vbios_dclk_info *clk_info;
-
-       if (IS_AST_GEN6(ast) || IS_AST_GEN7(ast))
-               clk_info = &ast_2500_dclk_table[vmode->dclk_index];
-       else
-               clk_info = &ast_2000_dclk_table[vmode->dclk_index];
+       const struct ast_vbios_dclk_info *clk_info = 
&ast->dclk_table[vmode->dclk_index];
ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xc0, 0x00, clk_info->param1);
        ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xc1, 0x00, 
clk_info->param2);

Reply via email to