]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
video: bochs: Avoid using IO instructions to access VGA IO port
authorBin Meng <bmeng@tinylab.org>
Sun, 23 Jul 2023 04:40:27 +0000 (12:40 +0800)
committerAnatolij Gustschin <agust@denx.de>
Tue, 1 Aug 2023 11:31:29 +0000 (13:31 +0200)
At present the driver uses IO instructions to access the legacy
VGA IO ports, which unfortunately limits the driver to work only
on x86. It turns out the IO instruction is not necessary as Bochs
VGA card remaps the legacy VGA IO ports (0x3c0 -> 0x3df) to its
memory mapped register space from offset 0x400.

Update the driver to use MMIO access for VGA IO port.

Signed-off-by: Bin Meng <bmeng@tinylab.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org> # qemu-x86_64
drivers/video/bochs.c
drivers/video/bochs.h

index 2d4526c71432fb82a64f62010189be5c26d0beb5..5923ff81c658eeb735676d39d8d3ed39e42721c8 100644 (file)
@@ -27,9 +27,9 @@ static int bochs_read(void *mmio, int index)
        return readw(mmio + MMIO_BASE + index * 2);
 }
 
-static void bochs_vga_write(uint8_t val)
+static void bochs_vga_write(void *mmio, int index, uint8_t val)
 {
-       outb(val, VGA_ATT_W);
+       writeb(val, mmio + VGA_BASE + index);
 }
 
 static int bochs_init_fb(struct udevice *dev)
@@ -79,7 +79,7 @@ static int bochs_init_fb(struct udevice *dev)
        bochs_write(mmio, INDEX_ENABLE, ENABLED | LFB_ENABLED);
 
        /* disable blanking */
-       bochs_vga_write(VGA_AR_ENABLE_DISPLAY);
+       bochs_vga_write(mmio, VGA_ATT_W - VGA_INDEX, VGA_AR_ENABLE_DISPLAY);
 
        plat->base = fb;
 
index 71d3d60141e781befadf5f8e89b1094551ce9fbf..3facf690e5d233282ceea029b04a237e6a2c8fde 100644 (file)
@@ -11,9 +11,6 @@
 #define VGA_ATT_W              0x3c0
 #define VGA_AR_ENABLE_DISPLAY  0x20
 
-#define IOPORT_INDEX   0x01ce
-#define IOPORT_DATA    0x01cf
-
 enum {
        INDEX_ID,
        INDEX_XRES,
@@ -34,6 +31,7 @@ enum {
 #define LFB_ENABLED    BIT(6)
 #define NOCLEARMEM     BIT(7)
 
+#define VGA_BASE       0x400
 #define MMIO_BASE      0x500
 
 #endif