summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Serbinenko <phcoder@gmail.com>2014-02-22 10:35:45 +0100
committerVladimir Serbinenko <phcoder@gmail.com>2014-03-03 23:14:04 +0100
commitdb7d04d1b753eee52448e48ca55b28564d998bf5 (patch)
tree5da00d6d44ff33c86b7b7da0f93b1b433aad7a12
parent160e9a0224890219199f4af7cc79934cfcf45155 (diff)
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>
-rw-r--r--src/drivers/emulation/qemu/Kconfig3
-rw-r--r--src/drivers/emulation/qemu/bochs.c9
-rw-r--r--src/drivers/emulation/qemu/cirrus.c10
-rw-r--r--src/mainboard/emulation/qemu-i440fx/Kconfig1
-rw-r--r--src/mainboard/emulation/qemu-q35/Kconfig1
5 files changed, 24 insertions, 0 deletions
diff --git a/src/drivers/emulation/qemu/Kconfig b/src/drivers/emulation/qemu/Kconfig
index 56fdacaf3c..168b1c5325 100644
--- a/src/drivers/emulation/qemu/Kconfig
+++ b/src/drivers/emulation/qemu/Kconfig
@@ -3,6 +3,7 @@ config DRIVERS_EMULATION_QEMU_BOCHS
default y
depends on BOARD_EMULATION_QEMU_X86
depends on MAINBOARD_DO_NATIVE_VGA_INIT
+ select VGA
help
VGA driver for qemu emulated vga cards supporting
the bochs dispi interface. This includes
@@ -13,9 +14,11 @@ config DRIVERS_EMULATION_QEMU_BOCHS
config DRIVERS_EMULATION_QEMU_BOCHS_XRES
int "bochs vga xres"
default 800
+ depends on FRAMEBUFFER_KEEP_VESA_MODE
depends on DRIVERS_EMULATION_QEMU_BOCHS
config DRIVERS_EMULATION_QEMU_BOCHS_YRES
int "bochs vga yres"
default 600
+ depends on FRAMEBUFFER_KEEP_VESA_MODE
depends on DRIVERS_EMULATION_QEMU_BOCHS
diff --git a/src/drivers/emulation/qemu/bochs.c b/src/drivers/emulation/qemu/bochs.c
index 1e7986cc62..715c94c6ec 100644
--- a/src/drivers/emulation/qemu/bochs.c
+++ b/src/drivers/emulation/qemu/bochs.c
@@ -11,6 +11,8 @@
#include <device/pci.h>
#include <device/pci_ids.h>
#include <device/pci_ops.h>
+#include <pc80/vga.h>
+#include <pc80/vga_io.h>
/* VGA init. We use the Bochs VESA VBE extensions */
#define VBE_DISPI_IOPORT_INDEX 0x01CE
@@ -39,6 +41,7 @@
#define VBE_DISPI_LFB_ENABLED 0x40
#define VBE_DISPI_NOCLEARMEM 0x80
+#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
static int width = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_XRES;
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);
return inw(VBE_DISPI_IOPORT_DATA);
}
+#endif
static void bochs_init(device_t dev)
{
+#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
struct edid edid;
int id, mem, bar;
u32 addr;
@@ -111,6 +116,10 @@ static void bochs_init(device_t dev)
edid.bytes_per_line = width * 4;
edid.bpp = 32;
set_vbe_mode_info_valid(&edid, addr);
+#else
+ vga_misc_write(0x1);
+ vga_textmode_init();
+#endif
}
static struct device_operations qemu_graph_ops = {
diff --git a/src/drivers/emulation/qemu/cirrus.c b/src/drivers/emulation/qemu/cirrus.c
index b4928fef32..5f8a01ec3e 100644
--- a/src/drivers/emulation/qemu/cirrus.c
+++ b/src/drivers/emulation/qemu/cirrus.c
@@ -36,9 +36,11 @@
#include <pc80/vga.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 height = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_YRES;
static u32 addr = 0;
+#endif
enum
{
@@ -197,6 +199,7 @@ enum
#define CIRRUS_SR_EXTENDED_MODE_32BPP 0x08
#define CIRRUS_HIDDEN_DAC_888COLOR 0xc5
+#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
static void
write_hidden_dac (uint8_t data)
{
@@ -207,9 +210,11 @@ write_hidden_dac (uint8_t data)
inb (0x3c6);
outb (data, 0x3c6);
}
+#endif
static void cirrus_init(device_t dev)
{
+#if IS_ENABLED(CONFIG_FRAMEBUFFER_KEEP_VESA_MODE)
uint8_t cr_ext, cr_overlay;
unsigned pitch = (width * 4) / VGA_CR_PITCH_DIVISOR;
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.bpp = 32;
set_vbe_mode_info_valid(&edid, addr);
+#else
+ vga_misc_write(0x1);
+
+ vga_textmode_init();
+#endif
}
static struct device_operations qemu_cirrus_graph_ops = {
diff --git a/src/mainboard/emulation/qemu-i440fx/Kconfig b/src/mainboard/emulation/qemu-i440fx/Kconfig
index 0d4d07ad69..b9df41eba9 100644
--- a/src/mainboard/emulation/qemu-i440fx/Kconfig
+++ b/src/mainboard/emulation/qemu-i440fx/Kconfig
@@ -14,6 +14,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select EARLY_CBMEM_INIT
select MAINBOARD_HAS_NATIVE_VGA_INIT
select MAINBOARD_DO_NATIVE_VGA_INIT
+ select MAINBOARD_HAS_NATIVE_VGA_INIT_TEXTMODECFG
config MAINBOARD_DIR
string
diff --git a/src/mainboard/emulation/qemu-q35/Kconfig b/src/mainboard/emulation/qemu-q35/Kconfig
index cd7024b393..ad7576bfe5 100644
--- a/src/mainboard/emulation/qemu-q35/Kconfig
+++ b/src/mainboard/emulation/qemu-q35/Kconfig
@@ -17,6 +17,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
select EARLY_CBMEM_INIT
select MAINBOARD_HAS_NATIVE_VGA_INIT
select MAINBOARD_DO_NATIVE_VGA_INIT
+ select MAINBOARD_HAS_NATIVE_VGA_INIT_TEXTMODECFG
config MAINBOARD_DIR
string