[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/20] pcihp: make pci_read() mmio calback compatible
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 04/20] pcihp: make pci_read() mmio calback compatible with legacy ACPI hotplug |
Date: |
Mon, 10 Feb 2014 18:47:53 +0200 |
From: Igor Mammedov <address@hidden>
due to recent change introduced by:
"pcihp: reduce number of device check events"
'up' field is cleared right after it's read.
This is incompatible with legacy BIOS ACPI code
where PCNF ACPI method reads this field 32 times.
To make pci_read mmio callback compatible with legacy
'up' behavior, pcihp code will need to know in which
mode it runs add 'legacy_piix' field to AcpiPciHpState
structure and alter register behavior accordingly.
Signed-off-by: Igor Mammedov <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
include/hw/acpi/pcihp.h | 3 ++-
hw/acpi/pcihp.c | 7 +++++--
hw/acpi/piix4.c | 3 ++-
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/include/hw/acpi/pcihp.h b/include/hw/acpi/pcihp.h
index aa297c2..02d3ce3 100644
--- a/include/hw/acpi/pcihp.h
+++ b/include/hw/acpi/pcihp.h
@@ -46,10 +46,11 @@ typedef struct AcpiPciHpState {
uint32_t hotplug_select;
PCIBus *root;
MemoryRegion io;
+ bool legacy_piix;
} AcpiPciHpState;
void acpi_pcihp_init(AcpiPciHpState *, PCIBus *root,
- MemoryRegion *address_space_io);
+ MemoryRegion *address_space_io, bool bridges_enabled);
/* Invoke on device hotplug */
int acpi_pcihp_device_hotplug(AcpiPciHpState *, PCIDevice *,
diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
index 64c8cf2..974f01c 100644
--- a/hw/acpi/pcihp.c
+++ b/hw/acpi/pcihp.c
@@ -215,7 +215,9 @@ static uint64_t pci_read(void *opaque, hwaddr addr,
unsigned int size)
switch (addr) {
case PCI_UP_BASE:
val = s->acpi_pcihp_pci_status[bsel].up;
- s->acpi_pcihp_pci_status[bsel].up = 0;
+ if (!s->legacy_piix) {
+ s->acpi_pcihp_pci_status[bsel].up = 0;
+ }
ACPI_PCIHP_DPRINTF("pci_up_read %" PRIu32 "\n", val);
break;
case PCI_DOWN_BASE:
@@ -273,9 +275,10 @@ static const MemoryRegionOps acpi_pcihp_io_ops = {
};
void acpi_pcihp_init(AcpiPciHpState *s, PCIBus *root_bus,
- MemoryRegion *address_space_io)
+ MemoryRegion *address_space_io, bool bridges_enabled)
{
s->root= root_bus;
+ s->legacy_piix = !bridges_enabled;
memory_region_init_io(&s->io, NULL, &acpi_pcihp_io_ops, s,
"acpi-pci-hotplug",
PCI_HOTPLUG_SIZE);
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
index 5d55a3c..2aedfe5 100644
--- a/hw/acpi/piix4.c
+++ b/hw/acpi/piix4.c
@@ -695,7 +695,8 @@ static void piix4_acpi_system_hot_add_init(MemoryRegion
*parent,
memory_region_add_subregion(parent, GPE_BASE, &s->io_gpe);
if (s->use_acpi_pci_hotplug) {
- acpi_pcihp_init(&s->acpi_pci_hotplug, bus, parent);
+ acpi_pcihp_init(&s->acpi_pci_hotplug, bus, parent,
+ s->use_acpi_pci_hotplug);
} else {
memory_region_init_io(&s->io_pci, OBJECT(s), &piix4_pci_ops, s,
"acpi-pci-hotplug", PCI_HOTPLUG_SIZE);
--
MST
- [Qemu-devel] [PULL 00/20] acpi,pc,pci fixes and enhancements, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 01/20] pcihp: reduce number of device check events, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 03/20] pcihp: make PCI hotplug mmio handlers indifferent to PCI_HOTPLUG_ADDR, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 04/20] pcihp: make pci_read() mmio calback compatible with legacy ACPI hotplug,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 02/20] pcihp: replace enable|disable_device() with oneliners, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 06/20] hw:piix4:acpi: reuse pcihp code for legacy PCI hotplug, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 05/20] pcihp: remove unused AcpiPciHpPciStatus.device_present field, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 07/20] qtest: don't report signals if qtest driver enabled, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 08/20] pc_piix: enable legacy hotplug for Xen, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 10/20] loader: document that errno is set, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 09/20] pc.c: better error message on initrd sizing failure, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 11/20] define hotplug interface, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 12/20] qdev: add to BusState "hotplug-handler" link, Michael S. Tsirkin, 2014/02/10
- [Qemu-devel] [PULL 13/20] qdev: add "hotpluggable" property to Device, Michael S. Tsirkin, 2014/02/10