diff options
author | Thomas Zimmermann <tzimmermann@suse.de> | 2025-07-06 18:26:43 +0200 |
---|---|---|
committer | Thomas Zimmermann <tzimmermann@suse.de> | 2025-07-09 14:36:21 +0200 |
commit | b1ce4ab06f70fa1dea6b4b6a372aa43989c55897 (patch) | |
tree | 4950ce4e98353f14d53d99211174cdbeb7aeb1a8 /drivers/gpu/drm/ast/ast_2600.c | |
parent | eb104c69db707ce0208f753a897dadd39f51342f (diff) |
drm/ast: Split ast_set_def_ext_reg() by chip generation
Duplicate ast_set_def_ext_reg() for individual chip generations
and move call it into per-chip source files. Remove the original
code. AST2100 and AST2500 reuse the function from earlier chips.
AST2600 appears to be incorrect as it uses an older function. Keep
this behavior for now.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/20250706162816.211552-9-tzimmermann@suse.de
Diffstat (limited to 'drivers/gpu/drm/ast/ast_2600.c')
-rw-r--r-- | drivers/gpu/drm/ast/ast_2600.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/gpu/drm/ast/ast_2600.c b/drivers/gpu/drm/ast/ast_2600.c index f58a2ceddb3a..08614090068d 100644 --- a/drivers/gpu/drm/ast/ast_2600.c +++ b/drivers/gpu/drm/ast/ast_2600.c @@ -27,13 +27,46 @@ */ #include "ast_drv.h" +#include "ast_post.h" /* * POST */ +void ast_2600_set_def_ext_reg(struct ast_device *ast) +{ + static const u8 extreginfo[] = { 0x0f, 0x04, 0x1c, 0xff }; + u8 i, index, reg; + const u8 *ext_reg_info; + + /* reset scratch */ + for (i = 0x81; i <= 0x9f; i++) + ast_set_index_reg(ast, AST_IO_VGACRI, i, 0x00); + + ext_reg_info = extreginfo; + index = 0xa0; + while (*ext_reg_info != 0xff) { + ast_set_index_reg_mask(ast, AST_IO_VGACRI, index, 0x00, *ext_reg_info); + index++; + ext_reg_info++; + } + + /* disable standard IO/MEM decode if secondary */ + /* ast_set_index_reg-mask(ast, AST_IO_VGACRI, 0xa1, 0xff, 0x3); */ + + /* Set Ext. Default */ + ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x8c, 0x00, 0x01); + ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xb7, 0x00, 0x00); + + /* Enable RAMDAC for A1 */ + reg = 0x04; + ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xb6, 0xff, reg); +} + int ast_2600_post(struct ast_device *ast) { + ast_2600_set_def_ext_reg(ast); + if (ast->tx_chip == AST_TX_ASTDP) return ast_dp_launch(ast); |