From: Thomas Zimmermann <tzimmermann@suse.de>
To: airlied@redhat.com, jfalempe@redhat.com,
maarten.lankhorst@linux.intel.com, mripard@kernel.org,
daniel@ffwll.ch, airlied@gmail.com
Cc: Thomas Zimmermann <tzimmermann@suse.de>, dri-devel@lists.freedesktop.org
Subject: [PATCH v2 05/10] drm/ast: Enable VGA without ast device instance
Date: Thu, 16 Nov 2023 10:59:24 +0100 [thread overview]
Message-ID: <20231116100240.22975-6-tzimmermann@suse.de> (raw)
In-Reply-To: <20231116100240.22975-1-tzimmermann@suse.de>
We'll have to enable the VGA functionality for detecting the ast
device type. Make this work without an instance of the ast device.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
---
drivers/gpu/drm/ast/ast_main.c | 29 ++++++++++++-----------------
drivers/gpu/drm/ast/ast_reg.h | 9 +++++++--
2 files changed, 19 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index 026ef893dd509..82fcee967d984 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -35,22 +35,17 @@
#include "ast_drv.h"
-static bool ast_is_vga_enabled(struct drm_device *dev)
+static bool ast_is_vga_enabled(void __iomem *ioregs)
{
- struct ast_device *ast = to_ast_device(dev);
- u8 ch;
-
- ch = ast_io_read8(ast, AST_IO_VGAER);
+ u8 vgaer = __ast_read8(ioregs, AST_IO_VGAER);
- return !!(ch & 0x01);
+ return vgaer & AST_IO_VGAER_VGA_ENABLE;
}
-static void ast_enable_vga(struct drm_device *dev)
+static void ast_enable_vga(void __iomem *ioregs)
{
- struct ast_device *ast = to_ast_device(dev);
-
- ast_io_write8(ast, AST_IO_VGAER, 0x01);
- ast_io_write8(ast, AST_IO_VGAMR_W, 0x01);
+ __ast_write8(ioregs, AST_IO_VGAER, AST_IO_VGAER_VGA_ENABLE);
+ __ast_write8(ioregs, AST_IO_VGAMR_W, AST_IO_VGAMR_IOSEL);
}
/*
@@ -74,9 +69,9 @@ static int ast_enable_mmio(struct ast_device *ast)
return devm_add_action_or_reset(dev->dev, ast_enable_mmio_release, ast);
}
-static void ast_open_key(struct ast_device *ast)
+static void ast_open_key(void __iomem *ioregs)
{
- ast_set_index_reg(ast, AST_IO_VGACRI, 0x80, 0xA8);
+ __ast_write8_i(ioregs, AST_IO_VGACRI, 0x80, AST_IO_VGACR80_PASSWORD);
}
static int ast_device_config_init(struct ast_device *ast)
@@ -487,7 +482,7 @@ struct ast_device *ast_device_create(const struct drm_driver *drv,
ast->regs = regs;
ast->ioregs = ioregs;
- if (!ast_is_vga_enabled(dev)) {
+ if (!ast_is_vga_enabled(ioregs)) {
drm_info(dev, "VGA not enabled on entry, requesting chip POST\n");
need_post = true;
}
@@ -497,10 +492,10 @@ struct ast_device *ast_device_create(const struct drm_driver *drv,
* access to the scratch registers will fail.
*/
if (need_post)
- ast_enable_vga(dev);
-
+ ast_enable_vga(ioregs);
/* Enable extended register access */
- ast_open_key(ast);
+ ast_open_key(ioregs);
+
ret = ast_enable_mmio(ast);
if (ret)
return ERR_PTR(ret);
diff --git a/drivers/gpu/drm/ast/ast_reg.h b/drivers/gpu/drm/ast/ast_reg.h
index 05bab94a9a906..5258a84ef3a6f 100644
--- a/drivers/gpu/drm/ast/ast_reg.h
+++ b/drivers/gpu/drm/ast/ast_reg.h
@@ -13,8 +13,14 @@
#define AST_IO_MM_LENGTH (128)
#define AST_IO_VGAARI_W (0x40)
+
#define AST_IO_VGAMR_W (0x42)
+#define AST_IO_VGAMR_R (0x4c)
+#define AST_IO_VGAMR_IOSEL BIT(0)
+
#define AST_IO_VGAER (0x43)
+#define AST_IO_VGAER_VGA_ENABLE BIT(0)
+
#define AST_IO_VGASRI (0x44)
#define AST_IO_VGADRR (0x47)
#define AST_IO_VGADWR (0x48)
@@ -22,14 +28,13 @@
#define AST_IO_VGAGRI (0x4E)
#define AST_IO_VGACRI (0x54)
+#define AST_IO_VGACR80_PASSWORD (0xa8)
#define AST_IO_VGACRCB_HWC_16BPP BIT(0) /* set: ARGB4444, cleared: 2bpp palette */
#define AST_IO_VGACRCB_HWC_ENABLED BIT(1)
#define AST_IO_VGAIR1_R (0x5A)
#define AST_IO_VGAIR1_VREFRESH BIT(3)
-#define AST_IO_VGAMR_R (0x4C)
-
/*
* Display Transmitter Type
*/
--
2.42.0
next prev parent reply other threads:[~2023-11-16 10:03 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-16 9:59 [PATCH v2 00/10] drm/ast: Detect device type before init Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 01/10] drm/ast: Turn ioregs_lock to modeset_lock Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 02/10] drm/ast: Rework I/O register setup Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 03/10] drm/ast: Retrieve I/O-memory ranges without ast device Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 04/10] drm/ast: Add I/O helpers " Thomas Zimmermann
2023-11-16 14:22 ` [v2,04/10] " Sui Jingfeng
2023-11-16 9:59 ` Thomas Zimmermann [this message]
2023-11-16 9:59 ` [PATCH v2 06/10] drm/ast: Enable MMIO without ast device instance Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 07/10] drm/ast: Partially implement POST " Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 08/10] drm/ast: Add enum ast_config_mode Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 09/10] drm/ast: Detect ast device type and config mode without ast device Thomas Zimmermann
2023-11-16 9:59 ` [PATCH v2 10/10] drm/ast: Move detection code into PCI probe helper Thomas Zimmermann
2023-11-18 15:06 ` [PATCH v2 00/10] drm/ast: Detect device type before init Sui Jingfeng
2023-11-20 6:53 ` Thomas Zimmermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231116100240.22975-6-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@gmail.com \
--cc=airlied@redhat.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=jfalempe@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.