[U-Boot] [PATCH 4/4] x86: qemu: Add graphics support

It turns out that QEMU x86 emulated graphic card has an built-in option ROM which can be run perfectly under native mode by U-Boot.
Signed-off-by: Bin Meng bmeng.cn@gmail.com ---
arch/x86/cpu/qemu/pci.c | 24 +++++++++++++++++++++++- configs/qemu-x86_defconfig | 3 +++ doc/README.x86 | 3 +++ include/configs/qemu-x86.h | 10 +++------- 4 files changed, 32 insertions(+), 8 deletions(-)
diff --git a/arch/x86/cpu/qemu/pci.c b/arch/x86/cpu/qemu/pci.c index d50ab75..ac9c056 100644 --- a/arch/x86/cpu/qemu/pci.c +++ b/arch/x86/cpu/qemu/pci.c @@ -6,6 +6,7 @@
#include <common.h> #include <pci.h> +#include <pci_rom.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -45,5 +46,26 @@ void board_pci_setup_hose(struct pci_controller *hose)
int board_pci_post_scan(struct pci_controller *hose) { - return 0; + int ret = 0; + ulong start; + pci_dev_t bdf; + struct pci_device_id graphic_card[] = { { 0x1234, 0x1111 } }; + + /* + * QEMU emulated graphic card shows in the PCI configuration space with + * PCI vendor id and device id as an artificial pair 0x1234:0x1111. + * It is on PCI bus 0, function 0, but device number is not consistent + * for the two x86 targets it supports. For i440FX and PIIX chipset + * board, it shows as device 2, while for Q35 and ICH9 chipset board, + * it shows as device 1. Here we locate its bdf at run-time based on + * its vendor id and device id pair so we can support both boards. + */ + bdf = pci_find_devices(graphic_card, 0); + if (bdf != -1) { + start = get_timer(0); + ret = pci_run_vga_bios(bdf, NULL, PCI_ROM_USE_NATIVE); + debug("BIOS ran in %lums\n", get_timer(start)); + } + + return ret; } diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig index 9b02322..198ab97 100644 --- a/configs/qemu-x86_defconfig +++ b/configs/qemu-x86_defconfig @@ -4,3 +4,6 @@ CONFIG_TARGET_QEMU_X86=y CONFIG_OF_CONTROL=y CONFIG_OF_SEPARATE=y CONFIG_DEFAULT_DEVICE_TREE="qemu-x86" +CONFIG_VIDEO_VESA=y +CONFIG_FRAMEBUFFER_SET_VESA_MODE=y +CONFIG_FRAMEBUFFER_VESA_MODE_111=y diff --git a/doc/README.x86 b/doc/README.x86 index 4a30f68..cfd455c 100644 --- a/doc/README.x86 +++ b/doc/README.x86 @@ -239,6 +239,9 @@ supports 3 GiB maximum system memory and reserves the last 1 GiB address space for PCI device memory-mapped I/O and other stuff, so the maximum value of '-m' would be 3072.
+QEMU emulates a graphic card which U-Boot supports. Removing '-nographic' will +show QEMU's VGA console window. + CPU Microcode ------------- Modern CPUs usually require a special bit stream called microcode [6] to be diff --git a/include/configs/qemu-x86.h b/include/configs/qemu-x86.h index 281aaa5..6467c38 100644 --- a/include/configs/qemu-x86.h +++ b/include/configs/qemu-x86.h @@ -36,9 +36,9 @@ #define CONFIG_E1000 #endif
-#define CONFIG_STD_DEVICES_SETTINGS "stdin=serial\0" \ - "stdout=serial\0" \ - "stderr=serial\0" +#define CONFIG_STD_DEVICES_SETTINGS "stdin=serial,vga\0" \ + "stdout=serial,vga\0" \ + "stderr=serial,vga\0"
#define CONFIG_SCSI_DEV_LIST \ {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_1} @@ -52,8 +52,4 @@ #undef CONFIG_ENV_IS_IN_SPI_FLASH #define CONFIG_ENV_IS_NOWHERE
-/* Video is not supported */ -#undef CONFIG_VIDEO -#undef CONFIG_CFB_CONSOLE - #endif /* __CONFIG_H */

Hi Bin,
On 6 May 2015 at 03:34, Bin Meng bmeng.cn@gmail.com wrote:
It turns out that QEMU x86 emulated graphic card has an built-in option ROM which can be run perfectly under native mode by U-Boot.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/cpu/qemu/pci.c | 24 +++++++++++++++++++++++- configs/qemu-x86_defconfig | 3 +++ doc/README.x86 | 3 +++ include/configs/qemu-x86.h | 10 +++------- 4 files changed, 32 insertions(+), 8 deletions(-)
I get the window but U-Boot does not start in it. Anything else I need to do?
Regards, Simon

Hi Simon,
On Sat, May 9, 2015 at 4:43 AM, Simon Glass sjg@chromium.org wrote:
Hi Bin,
On 6 May 2015 at 03:34, Bin Meng bmeng.cn@gmail.com wrote:
It turns out that QEMU x86 emulated graphic card has an built-in option ROM which can be run perfectly under native mode by U-Boot.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/cpu/qemu/pci.c | 24 +++++++++++++++++++++++- configs/qemu-x86_defconfig | 3 +++ doc/README.x86 | 3 +++ include/configs/qemu-x86.h | 10 +++------- 4 files changed, 32 insertions(+), 8 deletions(-)
I get the window but U-Boot does not start in it. Anything else I need to do?
Can you enable '-serial stdio' to check U-Boot's serial console log to see where it boots? Like $ ./qemu-system-i386 -bios u-boot.rom -serial stdio
Also what is your QEMU version? I am using v2.3.0.
Regards, Bin

Hi Bin,
On 8 May 2015 at 21:39, Bin Meng bmeng.cn@gmail.com wrote:
Hi Simon,
On Sat, May 9, 2015 at 4:43 AM, Simon Glass sjg@chromium.org wrote:
Hi Bin,
On 6 May 2015 at 03:34, Bin Meng bmeng.cn@gmail.com wrote:
It turns out that QEMU x86 emulated graphic card has an built-in option ROM which can be run perfectly under native mode by U-Boot.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/cpu/qemu/pci.c | 24 +++++++++++++++++++++++- configs/qemu-x86_defconfig | 3 +++ doc/README.x86 | 3 +++ include/configs/qemu-x86.h | 10 +++------- 4 files changed, 32 insertions(+), 8 deletions(-)
I get the window but U-Boot does not start in it. Anything else I need to do?
Can you enable '-serial stdio' to check U-Boot's serial console log to see where it boots? Like $ ./qemu-system-i386 -bios u-boot.rom -serial stdio
Also what is your QEMU version? I am using v2.3.0.
I was using 2.0 (Trusty). With 2.3 it works!
Can you please update the docs to say that graphics requires version xx?
Regards, Simon

Hi Simon,
On Sun, May 10, 2015 at 9:45 PM, Simon Glass sjg@chromium.org wrote:
Hi Bin,
On 8 May 2015 at 21:39, Bin Meng bmeng.cn@gmail.com wrote:
Hi Simon,
On Sat, May 9, 2015 at 4:43 AM, Simon Glass sjg@chromium.org wrote:
Hi Bin,
On 6 May 2015 at 03:34, Bin Meng bmeng.cn@gmail.com wrote:
It turns out that QEMU x86 emulated graphic card has an built-in option ROM which can be run perfectly under native mode by U-Boot.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/cpu/qemu/pci.c | 24 +++++++++++++++++++++++- configs/qemu-x86_defconfig | 3 +++ doc/README.x86 | 3 +++ include/configs/qemu-x86.h | 10 +++------- 4 files changed, 32 insertions(+), 8 deletions(-)
I get the window but U-Boot does not start in it. Anything else I need to do?
Can you enable '-serial stdio' to check U-Boot's serial console log to see where it boots? Like $ ./qemu-system-i386 -bios u-boot.rom -serial stdio
Also what is your QEMU version? I am using v2.3.0.
I was using 2.0 (Trusty). With 2.3 it works!
Can you please update the docs to say that graphics requires version xx?
Sure, will do in v2.
Regards, Bin
participants (2)
-
Bin Meng
-
Simon Glass