diff mbox series

drm/bochs: fix blanking

Message ID 20220906142957.2763577-1-kraxel@redhat.com (mailing list archive)
State New, archived
Headers show
Series drm/bochs: fix blanking | expand

Commit Message

Gerd Hoffmann Sept. 6, 2022, 2:29 p.m. UTC
VGA_IS1_RC is the color mode register (VGA_IS1_RM the one for monochrome
mode, note C vs. M at the end).  So when using VGA_IS1_RC make sure the
vga device is actually in color mode and set the corresponding bit in the
misc register.

Reproducible when booting VMs in UEFI mode with some edk2 versions (edk2
fix is on the way too).  Doesn't happen in BIOS mode because in that
case the vgabios already flips the bit.

Fixes: 250e743915d4 ("drm/bochs: Add screen blanking support")
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/tiny/bochs.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Thomas Zimmermann Sept. 7, 2022, 7:36 a.m. UTC | #1
Am 06.09.22 um 16:29 schrieb Gerd Hoffmann:
> VGA_IS1_RC is the color mode register (VGA_IS1_RM the one for monochrome
> mode, note C vs. M at the end).  So when using VGA_IS1_RC make sure the
> vga device is actually in color mode and set the corresponding bit in the
> misc register.
> 
> Reproducible when booting VMs in UEFI mode with some edk2 versions (edk2
> fix is on the way too).  Doesn't happen in BIOS mode because in that
> case the vgabios already flips the bit.
> 
> Fixes: 250e743915d4 ("drm/bochs: Add screen blanking support")
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>

> ---
>   drivers/gpu/drm/tiny/bochs.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c
> index 08de13774862..a51262289aef 100644
> --- a/drivers/gpu/drm/tiny/bochs.c
> +++ b/drivers/gpu/drm/tiny/bochs.c
> @@ -309,6 +309,8 @@ static void bochs_hw_fini(struct drm_device *dev)
>   static void bochs_hw_blank(struct bochs_device *bochs, bool blank)
>   {
>   	DRM_DEBUG_DRIVER("hw_blank %d\n", blank);
> +	/* enable color bit (so VGA_IS1_RC access works) */
> +	bochs_vga_writeb(bochs, VGA_MIS_W, VGA_MIS_COLOR);
>   	/* discard ar_flip_flop */
>   	(void)bochs_vga_readb(bochs, VGA_IS1_RC);
>   	/* blank or unblank; we need only update index and set 0x20 */
diff mbox series

Patch

diff --git a/drivers/gpu/drm/tiny/bochs.c b/drivers/gpu/drm/tiny/bochs.c
index 08de13774862..a51262289aef 100644
--- a/drivers/gpu/drm/tiny/bochs.c
+++ b/drivers/gpu/drm/tiny/bochs.c
@@ -309,6 +309,8 @@  static void bochs_hw_fini(struct drm_device *dev)
 static void bochs_hw_blank(struct bochs_device *bochs, bool blank)
 {
 	DRM_DEBUG_DRIVER("hw_blank %d\n", blank);
+	/* enable color bit (so VGA_IS1_RC access works) */
+	bochs_vga_writeb(bochs, VGA_MIS_W, VGA_MIS_COLOR);
 	/* discard ar_flip_flop */
 	(void)bochs_vga_readb(bochs, VGA_IS1_RC);
 	/* blank or unblank; we need only update index and set 0x20 */