From: Jocelyn Falempe <jfalempe@redhat.com>
To: Thomas Zimmermann <tzimmermann@suse.de>,
airlied@redhat.com, dianders@chromium.org, nbowler@draconx.ca
Cc: dri-devel@lists.freedesktop.org, stable@vger.kernel.org
Subject: Re: [PATCH v2] drm/ast: Blank with VGACR17 sync enable, always clear VGACRB6 sync off
Date: Tue, 14 Oct 2025 10:54:23 +0200 [thread overview]
Message-ID: <34466c59-cea5-4a09-9dfa-83e25dbc49eb@redhat.com> (raw)
In-Reply-To: <20251014084743.18242-1-tzimmermann@suse.de>
On 14/10/2025 10:46, Thomas Zimmermann wrote:
> Blank the display by disabling sync pulses with VGACR17<7>. Unblank
> by reenabling them. This VGA setting should be supported by all Aspeed
> hardware.
>
> Ast currently blanks via sync-off bits in VGACRB6. Not all BMCs handle
> VGACRB6 correctly. After disabling sync during a reboot, some BMCs do
> not reenable it after the soft reset. The display output remains dark.
> When the display is off during boot, some BMCs set the sync-off bits in
> VGACRB6, so the display remains dark. Observed with Blackbird AST2500
> BMCs. Clearing the sync-off bits unconditionally fixes these issues.
>
> Also do not modify VGASR1's SD bit for blanking, as it only disables GPU
> access to video memory.
Thanks, it looks good to me.
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
>
> v2:
> - init vgacrb6 correctly (Jocelyn)
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Fixes: ce3d99c83495 ("drm: Call drm_atomic_helper_shutdown() at shutdown time for misc drivers")
> Tested-by: Nick Bowler <nbowler@draconx.ca>
> Reported-by: Nick Bowler <nbowler@draconx.ca>
> Closes: https://lore.kernel.org/dri-devel/wpwd7rit6t4mnu6kdqbtsnk5bhftgslio6e2jgkz6kgw6cuvvr@xbfswsczfqsi/
> Cc: Douglas Anderson <dianders@chromium.org>
> Cc: Dave Airlie <airlied@redhat.com>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Jocelyn Falempe <jfalempe@redhat.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: <stable@vger.kernel.org> # v6.7+
> ---
> drivers/gpu/drm/ast/ast_mode.c | 18 ++++++++++--------
> drivers/gpu/drm/ast/ast_reg.h | 1 +
> 2 files changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> index 6b9d510c509d..9b6a7c54fbb5 100644
> --- a/drivers/gpu/drm/ast/ast_mode.c
> +++ b/drivers/gpu/drm/ast/ast_mode.c
> @@ -836,22 +836,24 @@ ast_crtc_helper_atomic_flush(struct drm_crtc *crtc,
> static void ast_crtc_helper_atomic_enable(struct drm_crtc *crtc, struct drm_atomic_state *state)
> {
> struct ast_device *ast = to_ast_device(crtc->dev);
> + u8 vgacr17 = 0x00;
> + u8 vgacrb6 = 0xff;
>
> - ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xb6, 0xfc, 0x00);
> - ast_set_index_reg_mask(ast, AST_IO_VGASRI, 0x01, 0xdf, 0x00);
> + vgacr17 |= AST_IO_VGACR17_SYNC_ENABLE;
> + vgacrb6 &= ~(AST_IO_VGACRB6_VSYNC_OFF | AST_IO_VGACRB6_HSYNC_OFF);
> +
> + ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x17, 0x7f, vgacr17);
> + ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xb6, 0xfc, vgacrb6);
> }
>
> static void ast_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_state *state)
> {
> struct drm_crtc_state *old_crtc_state = drm_atomic_get_old_crtc_state(state, crtc);
> struct ast_device *ast = to_ast_device(crtc->dev);
> - u8 vgacrb6;
> + u8 vgacr17 = 0xff;
>
> - ast_set_index_reg_mask(ast, AST_IO_VGASRI, 0x01, 0xdf, AST_IO_VGASR1_SD);
> -
> - vgacrb6 = AST_IO_VGACRB6_VSYNC_OFF |
> - AST_IO_VGACRB6_HSYNC_OFF;
> - ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xb6, 0xfc, vgacrb6);
> + vgacr17 &= ~AST_IO_VGACR17_SYNC_ENABLE;
> + ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x17, 0x7f, vgacr17);
>
> /*
> * HW cursors require the underlying primary plane and CRTC to
> diff --git a/drivers/gpu/drm/ast/ast_reg.h b/drivers/gpu/drm/ast/ast_reg.h
> index e15adaf3a80e..30578e3b07e4 100644
> --- a/drivers/gpu/drm/ast/ast_reg.h
> +++ b/drivers/gpu/drm/ast/ast_reg.h
> @@ -29,6 +29,7 @@
> #define AST_IO_VGAGRI (0x4E)
>
> #define AST_IO_VGACRI (0x54)
> +#define AST_IO_VGACR17_SYNC_ENABLE BIT(7) /* called "Hardware reset" in docs */
> #define AST_IO_VGACR80_PASSWORD (0xa8)
> #define AST_IO_VGACR99_VGAMEM_RSRV_MASK GENMASK(1, 0)
> #define AST_IO_VGACRA1_VGAIO_DISABLED BIT(1)
next prev parent reply other threads:[~2025-10-14 8:54 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-14 8:46 [PATCH v2] drm/ast: Blank with VGACR17 sync enable, always clear VGACRB6 sync off Thomas Zimmermann
2025-10-14 8:54 ` Jocelyn Falempe [this message]
2025-10-22 3:27 ` [REGRESSION][BISECTED] Screen goes blank with ASpeed AST2300 in 6.18-rc2 (was: Re: [PATCH v2] drm/ast: Blank with VGACR17 sync enable, always clear VGACRB6 sync off) Peter Schneider
2025-10-22 6:51 ` [REGRESSION][BISECTED] Screen goes blank with ASpeed AST2300 in 6.18-rc2 Thomas Zimmermann
2025-10-22 8:08 ` Peter Schneider
2025-10-22 9:11 ` Thomas Zimmermann
2025-10-22 9:16 ` Peter Schneider
2025-10-22 10:20 ` Thomas Zimmermann
2025-10-22 11:23 ` Peter Schneider
2025-10-23 12:46 ` Thomas Zimmermann
2025-10-23 12:50 ` Thomas Zimmermann
2025-10-23 19:11 ` Peter Schneider
2025-10-24 5:34 ` Peter Schneider
2025-10-24 6:15 ` 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=34466c59-cea5-4a09-9dfa-83e25dbc49eb@redhat.com \
--to=jfalempe@redhat.com \
--cc=airlied@redhat.com \
--cc=dianders@chromium.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=nbowler@draconx.ca \
--cc=stable@vger.kernel.org \
--cc=tzimmermann@suse.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).