qemu: Support textmode gfx init.

Change-Id: I8b6b14b4fcf8df21d8bbf988d640b1efa013bd7f
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/5283
Tested-by: build bot (Jenkins)
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Vladimir Serbinenko 2014-02-22 10:35:45 +01:00
parent 160e9a0224
commit db7d04d1b7
5 changed files with 24 additions and 0 deletions

View File

@ -3,6 +3,7 @@ config DRIVERS_EMULATION_QEMU_BOCHS
default y default y
depends on BOARD_EMULATION_QEMU_X86 depends on BOARD_EMULATION_QEMU_X86
depends on MAINBOARD_DO_NATIVE_VGA_INIT depends on MAINBOARD_DO_NATIVE_VGA_INIT
select VGA
help help
VGA driver for qemu emulated vga cards supporting VGA driver for qemu emulated vga cards supporting
the bochs dispi interface. This includes the bochs dispi interface. This includes
@ -13,9 +14,11 @@ config DRIVERS_EMULATION_QEMU_BOCHS
config DRIVERS_EMULATION_QEMU_BOCHS_XRES config DRIVERS_EMULATION_QEMU_BOCHS_XRES
int "bochs vga xres" int "bochs vga xres"
default 800 default 800
depends on FRAMEBUFFER_KEEP_VESA_MODE
depends on DRIVERS_EMULATION_QEMU_BOCHS depends on DRIVERS_EMULATION_QEMU_BOCHS
config DRIVERS_EMULATION_QEMU_BOCHS_YRES config DRIVERS_EMULATION_QEMU_BOCHS_YRES
int "bochs vga yres" int "bochs vga yres"
default 600 default 600
depends on FRAMEBUFFER_KEEP_VESA_MODE
depends on DRIVERS_EMULATION_QEMU_BOCHS depends on DRIVERS_EMULATION_QEMU_BOCHS

View File

@ -11,6 +11,8 @@
#include <device/pci.h> #include <device/pci.h>
#include <device/pci_ids.h> #include <device/pci_ids.h>
#include <device/pci_ops.h> #include <device/pci_ops.h>
#include <pc80/vga.h>
#include <pc80/vga_io.h>
/* VGA init. We use the Bochs VESA VBE extensions */ /* VGA init. We use the Bochs VESA VBE extensions */
#define VBE_DISPI_IOPORT_INDEX 0x01CE #define VBE_DISPI_IOPORT_INDEX 0x01CE
@ -39,6 +41,7 @@
#define VBE_DISPI_LFB_ENABLED 0x40 #define VBE_DISPI_LFB_ENABLED 0x40
#define VBE_DISPI_NOCLEARMEM 0x80 #define VBE_DISPI_NOCLEARMEM 0x80
#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
static int width = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_XRES; static int width = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_XRES;
static int height = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_YRES; static int height = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_YRES;
@ -53,9 +56,11 @@ static int bochs_read(int index)
outw(index, VBE_DISPI_IOPORT_INDEX); outw(index, VBE_DISPI_IOPORT_INDEX);
return inw(VBE_DISPI_IOPORT_DATA); return inw(VBE_DISPI_IOPORT_DATA);
} }
#endif
static void bochs_init(device_t dev) static void bochs_init(device_t dev)
{ {
#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
struct edid edid; struct edid edid;
int id, mem, bar; int id, mem, bar;
u32 addr; u32 addr;
@ -111,6 +116,10 @@ static void bochs_init(device_t dev)
edid.bytes_per_line = width * 4; edid.bytes_per_line = width * 4;
edid.bpp = 32; edid.bpp = 32;
set_vbe_mode_info_valid(&edid, addr); set_vbe_mode_info_valid(&edid, addr);
#else
vga_misc_write(0x1);
vga_textmode_init();
#endif
} }
static struct device_operations qemu_graph_ops = { static struct device_operations qemu_graph_ops = {

View File

@ -36,9 +36,11 @@
#include <pc80/vga.h> #include <pc80/vga.h>
#include <pc80/vga_io.h> #include <pc80/vga_io.h>
#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
static int width = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_XRES; static int width = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_XRES;
static int height = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_YRES; static int height = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_YRES;
static u32 addr = 0; static u32 addr = 0;
#endif
enum enum
{ {
@ -197,6 +199,7 @@ enum
#define CIRRUS_SR_EXTENDED_MODE_32BPP 0x08 #define CIRRUS_SR_EXTENDED_MODE_32BPP 0x08
#define CIRRUS_HIDDEN_DAC_888COLOR 0xc5 #define CIRRUS_HIDDEN_DAC_888COLOR 0xc5
#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
static void static void
write_hidden_dac (uint8_t data) write_hidden_dac (uint8_t data)
{ {
@ -207,9 +210,11 @@ write_hidden_dac (uint8_t data)
inb (0x3c6); inb (0x3c6);
outb (data, 0x3c6); outb (data, 0x3c6);
} }
#endif
static void cirrus_init(device_t dev) static void cirrus_init(device_t dev)
{ {
#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
uint8_t cr_ext, cr_overlay; uint8_t cr_ext, cr_overlay;
unsigned pitch = (width * 4) / VGA_CR_PITCH_DIVISOR; unsigned pitch = (width * 4) / VGA_CR_PITCH_DIVISOR;
uint8_t sr_ext = 0, hidden_dac = 0; uint8_t sr_ext = 0, hidden_dac = 0;
@ -335,6 +340,11 @@ static void cirrus_init(device_t dev)
edid.bytes_per_line = width * 4; edid.bytes_per_line = width * 4;
edid.bpp = 32; edid.bpp = 32;
set_vbe_mode_info_valid(&edid, addr); set_vbe_mode_info_valid(&edid, addr);
#else
vga_misc_write(0x1);
vga_textmode_init();
#endif
} }
static struct device_operations qemu_cirrus_graph_ops = { static struct device_operations qemu_cirrus_graph_ops = {

View File

@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select EARLY_CBMEM_INIT select EARLY_CBMEM_INIT
select MAINBOARD_HAS_NATIVE_VGA_INIT select MAINBOARD_HAS_NATIVE_VGA_INIT
select MAINBOARD_DO_NATIVE_VGA_INIT select MAINBOARD_DO_NATIVE_VGA_INIT
select MAINBOARD_HAS_NATIVE_VGA_INIT_TEXTMODECFG
config MAINBOARD_DIR config MAINBOARD_DIR
string string

View File

@ -17,6 +17,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select EARLY_CBMEM_INIT select EARLY_CBMEM_INIT
select MAINBOARD_HAS_NATIVE_VGA_INIT select MAINBOARD_HAS_NATIVE_VGA_INIT
select MAINBOARD_DO_NATIVE_VGA_INIT select MAINBOARD_DO_NATIVE_VGA_INIT
select MAINBOARD_HAS_NATIVE_VGA_INIT_TEXTMODECFG
config MAINBOARD_DIR config MAINBOARD_DIR
string string