diff options
author | Bin Meng | 2015-05-25 22:36:27 +0800 |
---|---|---|
committer | Simon Glass | 2015-06-04 02:39:40 -0600 |
commit | 4be2f42bbc8171eae930db37f370f10779c5b02c (patch) | |
tree | eca1cd196755740b614bdeb06e9d9df10b16dbe5 | |
parent | 0fcb7acf6748d2ee0b7abfd75e074840be6b7e0e (diff) |
x86: qemu: Adjust VGA initialization
As VGA option rom needs to run at C segment, although QEMU PAM emulation
seems to only guard E/F segments, for correctness, move VGA initialization
after PAM decode C/D/E/F segments.
Also since we already tested QEMU targets to differentiate I440FX and Q35
platforms, change to locate the VGA device via hardcoded b.d.f instead of
dynamic search for its vendor id & device id pair.
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | arch/x86/cpu/qemu/pci.c | 34 | ||||
-rw-r--r-- | arch/x86/include/asm/arch-qemu/device.h | 2 |
2 files changed, 17 insertions, 19 deletions
diff --git a/arch/x86/cpu/qemu/pci.c b/arch/x86/cpu/qemu/pci.c index 467d51dbed8..1a9140b46e0 100644 --- a/arch/x86/cpu/qemu/pci.c +++ b/arch/x86/cpu/qemu/pci.c @@ -50,27 +50,10 @@ void board_pci_setup_hose(struct pci_controller *hose) int board_pci_post_scan(struct pci_controller *hose) { int ret = 0; - ulong start; - pci_dev_t bdf; - struct pci_device_id graphic_card[] = { { 0x1234, 0x1111 } }; u16 device; int pam, i; - - /* - * 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)); - } + pci_dev_t vga; + ulong start; /* * i440FX and Q35 chipset have different PAM register offset, but with @@ -101,5 +84,18 @@ int board_pci_post_scan(struct pci_controller *hose) x86_pci_write_config16(PIIX_IDE, IDE1_TIM, IDE_DECODE_EN); } + /* + * 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. + */ + vga = (device == PCI_DEVICE_ID_INTEL_82441) ? I440FX_VGA : Q35_VGA; + start = get_timer(0); + ret = pci_run_vga_bios(vga, NULL, PCI_ROM_USE_NATIVE); + debug("BIOS ran in %lums\n", get_timer(start)); + return ret; } diff --git a/arch/x86/include/asm/arch-qemu/device.h b/arch/x86/include/asm/arch-qemu/device.h index 2a8d460bf79..75a435e67b9 100644 --- a/arch/x86/include/asm/arch-qemu/device.h +++ b/arch/x86/include/asm/arch-qemu/device.h @@ -13,7 +13,9 @@ #define PIIX_ISA PCI_BDF(0, 1, 0) #define PIIX_IDE PCI_BDF(0, 1, 1) #define PIIX_USB PCI_BDF(0, 1, 2) +#define I440FX_VGA PCI_BDF(0, 2, 0) #define QEMU_Q35 PCI_BDF(0, 0, 0) +#define Q35_VGA PCI_BDF(0, 1, 0) #endif /* _QEMU_DEVICE_H_ */ |