[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 4/7] hw/pci: add PCI resource reserve capability to l
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 4/7] hw/pci: add PCI resource reserve capability to legacy PCI bridge |
Date: |
Fri, 7 Sep 2018 17:51:24 -0400 |
From: Jing Liu <address@hidden>
Add hint to firmware (e.g. SeaBIOS) to reserve addtional
BUS/IO/MEM/PREF resource for legacy pci-pci bridge. Add the
resource reserve capability deleting in pci_bridge_dev_exitfn.
Signed-off-by: Jing Liu <address@hidden>
Reviewed-by: Marcel Apfelbaum<address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
hw/pci-bridge/pci_bridge_dev.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c
index b2d861d216..97a8e8b6a4 100644
--- a/hw/pci-bridge/pci_bridge_dev.c
+++ b/hw/pci-bridge/pci_bridge_dev.c
@@ -46,6 +46,9 @@ struct PCIBridgeDev {
uint32_t flags;
OnOffAuto msi;
+
+ /* additional resources to reserve */
+ PCIResReserve res_reserve;
};
typedef struct PCIBridgeDev PCIBridgeDev;
@@ -95,6 +98,12 @@ static void pci_bridge_dev_realize(PCIDevice *dev, Error
**errp)
error_free(local_err);
}
+ err = pci_bridge_qemu_reserve_cap_init(dev, 0,
+ bridge_dev->res_reserve, errp);
+ if (err) {
+ goto cap_error;
+ }
+
if (shpc_present(dev)) {
/* TODO: spec recommends using 64 bit prefetcheable BAR.
* Check whether that works well. */
@@ -103,6 +112,8 @@ static void pci_bridge_dev_realize(PCIDevice *dev, Error
**errp)
}
return;
+cap_error:
+ msi_uninit(dev);
msi_error:
slotid_cap_cleanup(dev);
slotid_error:
@@ -116,6 +127,8 @@ shpc_error:
static void pci_bridge_dev_exitfn(PCIDevice *dev)
{
PCIBridgeDev *bridge_dev = PCI_BRIDGE_DEV(dev);
+
+ pci_del_capability(dev, PCI_CAP_ID_VNDR, sizeof(PCIBridgeQemuCap));
if (msi_present(dev)) {
msi_uninit(dev);
}
@@ -162,6 +175,17 @@ static Property pci_bridge_dev_properties[] = {
ON_OFF_AUTO_AUTO),
DEFINE_PROP_BIT(PCI_BRIDGE_DEV_PROP_SHPC, PCIBridgeDev, flags,
PCI_BRIDGE_DEV_F_SHPC_REQ, true),
+ DEFINE_PROP_UINT32("bus-reserve", PCIBridgeDev,
+ res_reserve.bus, -1),
+ DEFINE_PROP_SIZE("io-reserve", PCIBridgeDev,
+ res_reserve.io, -1),
+ DEFINE_PROP_SIZE("mem-reserve", PCIBridgeDev,
+ res_reserve.mem_non_pref, -1),
+ DEFINE_PROP_SIZE("pref32-reserve", PCIBridgeDev,
+ res_reserve.mem_pref_32, -1),
+ DEFINE_PROP_SIZE("pref64-reserve", PCIBridgeDev,
+ res_reserve.mem_pref_64, -1),
+
DEFINE_PROP_END_OF_LIST(),
};
--
MST
- [Qemu-devel] [PULL 0/7] pci, pc, virtio: fixes, features, Michael S. Tsirkin, 2018/09/07
- [Qemu-devel] [PULL 1/7] pc: acpi: revert back to 1 SRAT entry for hotpluggable area, Michael S. Tsirkin, 2018/09/07
- [Qemu-devel] [PULL 3/7] hw/pci: factor PCI reserve resources to a separate structure, Michael S. Tsirkin, 2018/09/07
- [Qemu-devel] [PULL 2/7] virtio: update MemoryRegionCaches when guest negotiates features, Michael S. Tsirkin, 2018/09/07
- [Qemu-devel] [PULL 6/7] vhost: fix invalid downcast, Michael S. Tsirkin, 2018/09/07
- [Qemu-devel] [PULL 4/7] hw/pci: add PCI resource reserve capability to legacy PCI bridge,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 5/7] pc: make sure that guest isn't able to unplug the first cpu, Michael S. Tsirkin, 2018/09/07
- [Qemu-devel] [PULL 7/7] tests: update acpi expected files, Michael S. Tsirkin, 2018/09/07
- Re: [Qemu-devel] [PULL 0/7] pci, pc, virtio: fixes, features, Peter Maydell, 2018/09/25