• Takashi Iwai's avatar
    drm/bochs: Add screen blanking support · 250e7439
    Takashi Iwai authored
    On bochs DRM driver, the execution of "setterm --blank force" results
    in a frozen screen instead of a blank screen.  It's due to the lack of
    the screen blanking support in its code.
    
    Actually, the QEMU bochs vga side can switch to the blanking mode when
    the bit 0x20 is cleared on VGA_ATT_IW register (0x3c0), which updates
    ar_index in QEMU side.  So, essentially, we'd just need to clear the
    bit at pipe disable callback; that's what this patch does essentially.
    
    However, a tricky part is that the access via VGA_ATT_IW is done in
    "flip-flop"; the first write is for index and the second write is for
    the data like palette.  Meanwhile, in the current bochs DRM driver,
    the flip-flop wasn't considered, and it calls only the register update
    once with the value 0x20.
    
    The spec and the actual VGA implementation in QEMU suggests that the
    flip flop flag is discarded by reading the CRTC index register
    (VGA_IS1_RC, 0x3da).  So, in this patch, we add the helper to read a
    byte and the call to clear the flip flop flag before changing the
    blank / unblank setup via VGA_ATT_IW register.
    
    v1->v2:
    * discard ar_flip_flop by reading 0x3da, add bochs_vga_readb()
    * include video/vga.h for VGA register definitions
    * move the blank/unblank code to bochs_hw_blank()
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Acked-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210421080859.14869-1-tiwai@suse.de
    250e7439
bochs_kms.c 4.84 KB