qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 3/3] hw/pci: add PCI resource reserve capabil


From: Marcel Apfelbaum
Subject: Re: [Qemu-devel] [PATCH v2 3/3] hw/pci: add PCI resource reserve capability to legacy PCI bridge
Date: Fri, 17 Aug 2018 19:16:17 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1


Hi Jing,

On 08/16/2018 12:28 PM, Jing Liu wrote:
Add hint to firmware (e.g. SeaBIOS) to reserve addtional
BUS/IO/MEM/PREF resource for legacy pci-pci bridge.

Signed-off-by: Jing Liu <address@hidden>
---
  hw/pci-bridge/pci_bridge_dev.c | 25 +++++++++++++++++++++++++
  1 file changed, 25 insertions(+)

diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c
index b2d861d..874e618 100644Hi
--- a/hw/pci-bridge/pci_bridge_dev.c
+++ b/hw/pci-bridge/pci_bridge_dev.c
@@ -46,6 +46,8 @@ struct PCIBridgeDev {
      uint32_t flags;
OnOffAuto msi;
+
+    PCIResReserve res_reserve;
  };
  typedef struct PCIBridgeDev PCIBridgeDev;
@@ -95,6 +97,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 +111,10 @@ static void pci_bridge_dev_realize(PCIDevice *dev, Error 
**errp)
      }
      return;
+cap_error:
+    if (msi_present(dev)) {
+        msi_uninit(dev);

You were right. Since msi_uninit checks msi_present
inside, you don;t need this check, sorry for misleading you.

+    }
  msi_error:
      slotid_cap_cleanup(dev);
  slotid_error:
@@ -116,6 +128,8 @@ shpc_error:
  static void pci_bridge_dev_exitfn(PCIDevice *dev)
  {
      PCIBridgeDev *bridge_dev = PCI_BRIDGE_DEV(dev);
+
+    pci_bridge_qemu_reserve_cap_uninit(dev);

Here you should haveĀ  only the "delete_cap" function.

      if (msi_present(dev)) {
          msi_uninit(dev);
      }
@@ -162,6 +176,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_reserve, -1),
+    DEFINE_PROP_SIZE("io-reserve", PCIBridgeDev,
+                     res_reserve.io_reserve, -1),
+    DEFINE_PROP_SIZE("mem-reserve", PCIBridgeDev,
+                     res_reserve.mem_reserve, -1),
+    DEFINE_PROP_SIZE("pref32-reserve", PCIBridgeDev,
+                     res_reserve.pref32_reserve, -1),
+    DEFINE_PROP_SIZE("pref64-reserve", PCIBridgeDev,
+                     res_reserve.pref64_reserve, -1),
+
      DEFINE_PROP_END_OF_LIST(),
  };

Thanks,
Marcel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]