summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/ast/ast_2600.c
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2025-07-06 18:26:43 +0200
committerThomas Zimmermann <tzimmermann@suse.de>2025-07-09 14:36:21 +0200
commitb1ce4ab06f70fa1dea6b4b6a372aa43989c55897 (patch)
tree4950ce4e98353f14d53d99211174cdbeb7aeb1a8 /drivers/gpu/drm/ast/ast_2600.c
parenteb104c69db707ce0208f753a897dadd39f51342f (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.c33
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);