[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH-for-10.0 v2 04/13] hw/pci: Introduce PCIBusFlag::PCI_BUS_BAR_AT_A
From: |
Philippe Mathieu-Daudé |
Subject: |
[PATCH-for-10.0 v2 04/13] hw/pci: Introduce PCIBusFlag::PCI_BUS_BAR_AT_ADDR0_REFUSED |
Date: |
Tue, 26 Nov 2024 12:22:03 +0100 |
Some machines need PCI buses to allow access at BAR0.
Introduce the PCI_BUS_BAR_AT_ADDR0_REFUSED flag and the
pci_bus_refuse_bar_at_addr_0() helper. Set the flag in
pci_root_bus_internal_init() where all root buses are
created.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/pci/pci_bus.h | 6 ++++++
hw/pci/pci.c | 5 ++++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/include/hw/pci/pci_bus.h b/include/hw/pci/pci_bus.h
index 6ecfe2e06d5..6d7bf682e8f 100644
--- a/include/hw/pci/pci_bus.h
+++ b/include/hw/pci/pci_bus.h
@@ -26,6 +26,7 @@ enum PCIBusFlag {
PCI_BUS_EXTENDED_CONFIG_SPACE = 0x0002,
/* This is a CXL Type BUS */
PCI_BUS_CXL = 0x0004,
+ PCI_BUS_BAR_AT_ADDR0_REFUSED = 0x0008,
};
#define PCI_NO_PASID UINT32_MAX
@@ -72,4 +73,9 @@ static inline bool
pci_bus_allows_extended_config_space(PCIBus *bus)
return !!(bus->flags & PCI_BUS_EXTENDED_CONFIG_SPACE);
}
+static inline bool pci_bus_refuse_bar_at_addr_0(PCIBus *bus)
+{
+ return !!(bus->flags & PCI_BUS_BAR_AT_ADDR0_REFUSED);
+}
+
#endif /* QEMU_PCI_BUS_H */
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index e05f8a828bb..27b66583e54 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -537,6 +537,9 @@ static void pci_root_bus_internal_init(PCIBus *bus,
DeviceState *parent,
bus->address_space_mem = mem;
bus->address_space_io = io;
bus->flags |= PCI_BUS_IS_ROOT;
+ if (machine_refuses_bar_at_addr_0()) {
+ bus->flags |= PCI_BUS_BAR_AT_ADDR0_REFUSED;
+ }
/* host bridge */
QLIST_INIT(&bus->child);
@@ -1479,7 +1482,7 @@ pcibus_t pci_bar_address(PCIDevice *d,
{
pcibus_t new_addr, last_addr;
uint16_t cmd = pci_get_word(d->config + PCI_COMMAND);
- bool bar_at_addr_0_refused = machine_refuses_bar_at_addr_0();
+ bool bar_at_addr_0_refused = pci_bus_refuse_bar_at_addr_0(pci_get_bus(d));
if (type & PCI_BASE_ADDRESS_SPACE_IO) {
if (!(cmd & PCI_COMMAND_IO)) {
--
2.45.2
- [PATCH-for-10.0 v2 00/13] hw/boards: Remove legacy MachineClass::pci_allow_0_address flag, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 01/13] hw/pci: Do not declare PCIBus::flags mask as enum, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 02/13] hw/pci-bridge: Initialize bridge with parent bus flags, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 03/13] hw/pci: Factor machine_refuses_bar_at_addr_0() helper out, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 04/13] hw/pci: Introduce PCIBusFlag::PCI_BUS_BAR_AT_ADDR0_REFUSED,
Philippe Mathieu-Daudé <=
- [PATCH-for-10.0 v2 06/13] hw/pci: Propagate bar_at_addr_0_refused to pci_root_bus_init(), Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 07/13] hw/pci: Propagate bar_at_addr_0_refused to pci_root_bus_new(), Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 05/13] hw/pci: Propagate bar_at_addr_0_refused to pci_root_bus_internal_init(), Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 09/13] hw/ppc/spapr: Create host bridge setting bar_at_addr_0_refused=false, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 08/13] hw/pci: Propagate bar_at_addr_0_refused to pci_register_root_bus(), Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 11/13] hw/arm/virt: Create GPEX host bridge without refuse-bar-at-addr-0, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 10/13] hw/pci-host/gpex: Expose 'refuse-bar-at-addr-0' property, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 13/13] hw/pci/pci: Remove legacy MachineClass::pci_allow_0_address flag, Philippe Mathieu-Daudé, 2024/11/26
- [PATCH-for-10.0 v2 12/13] hw/riscv/virt: Create GPEX host bridge without refuse-bar-at-addr-0, Philippe Mathieu-Daudé, 2024/11/26