diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2013-08-06 10:48:41 +0200 |
---|---|---|
committer | Patrick Georgi <patrick@georgi-clan.de> | 2013-08-15 19:48:17 +0200 |
commit | 05d3f49fc67f6023f9bc64dbbce56cf4613c4ab9 (patch) | |
tree | 904f8f6111087eed49a7de4378ec7c82b1b8781e /src | |
parent | 42e11f5a03480f6bc4a7dc54dd87bea4e850042a (diff) |
qemu: reserve ports
QEMU has a bunch of non-standard virtual devices on various I/O ports.
Allocate resources for them so the coreboot resource management knows
those ports are used.
Change-Id: I51a85967cf2dcd634b0c883210bb52c0c34c8283
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-on: http://review.coreboot.org/3851
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/mainboard/emulation/qemu-i440fx/northbridge.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/mainboard/emulation/qemu-i440fx/northbridge.c b/src/mainboard/emulation/qemu-i440fx/northbridge.c index a3c2f51ef2..f975b6cdc4 100644 --- a/src/mainboard/emulation/qemu-i440fx/northbridge.c +++ b/src/mainboard/emulation/qemu-i440fx/northbridge.c @@ -28,6 +28,23 @@ static unsigned long qemu_get_high_memory_size(void) return high; } +static void qemu_reserve_ports(struct device *dev, unsigned int idx, + unsigned int base, unsigned int size, + const char *name) +{ + unsigned int end = base + size -1; + struct resource *res; + + printk(BIOS_DEBUG, "QEMU: reserve ioports 0x%04x-0x%04x [%s]\n", + base, end, name); + res = new_resource(dev, idx); + res->base = base; + res->size = size; + res->limit = 0xffff; + res->flags = IORESOURCE_IO | IORESOURCE_FIXED | IORESOURCE_STORED | + IORESOURCE_ASSIGNED; +} + static void cpu_pci_domain_set_resources(device_t dev) { assign_resources(dev->link_list); @@ -53,6 +70,19 @@ static void cpu_pci_domain_read_resources(struct device *dev) if (high) ram_resource(dev, idx++, 4 * 1024 * 1024, high); + /* Reserve I/O ports used by QEMU */ + qemu_reserve_ports(dev, idx++, 0x0510, 0x02, "firmware-config"); + qemu_reserve_ports(dev, idx++, 0x5658, 0x01, "vmware-port"); + if (i440fx) { + qemu_reserve_ports(dev, idx++, 0xae00, 0x10, "pci-hotplug"); + qemu_reserve_ports(dev, idx++, 0xaf00, 0x20, "cpu-hotplug"); + qemu_reserve_ports(dev, idx++, 0xafe0, 0x04, "piix4-gpe0"); + } + if (inb(CONFIG_CONSOLE_QEMU_DEBUGCON_PORT) == 0xe9) { + qemu_reserve_ports(dev, idx++, CONFIG_CONSOLE_QEMU_DEBUGCON_PORT, 1, + "debugcon"); + } + #if !CONFIG_DYNAMIC_CBMEM /* Leave some space for ACPI, PIRQ and MP tables */ high_tables_base = (tomk * 1024) - HIGH_MEMORY_SIZE; |