Skip to content

Commit 05241c1

Browse files
paliLorenzo Pieralisi
authored andcommitted
PCI: pci-bridge-emul: Add support for new flag PCI_BRIDGE_EMUL_NO_IO_FORWARD
Like PCI_BRIDGE_EMUL_NO_PREFMEM_FORWARD, this new flag specifies that emulated PCI bridge does not support forwarding of IO requests in given range between primary and secondary buses. This flag should be used as argument for pci_bridge_emul_init() for hardware setup without IO support. Setting this flag cause that IO base and limit registers are read-only. Link: https://lore.kernel.org/r/20220104153529.31647-5-pali@kernel.org Signed-off-by: Pali Rohár <pali@kernel.org> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Reviewed-by: Rob Herring <robh@kernel.org>
1 parent d3f332b commit 05241c1

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

drivers/pci/pci-bridge-emul.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,15 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge,
382382
bridge->pci_regs_behavior[PCI_PREF_MEMORY_BASE / 4].rw = 0;
383383
}
384384

385+
if (flags & PCI_BRIDGE_EMUL_NO_IO_FORWARD) {
386+
bridge->pci_regs_behavior[PCI_COMMAND / 4].ro |= PCI_COMMAND_IO;
387+
bridge->pci_regs_behavior[PCI_COMMAND / 4].rw &= ~PCI_COMMAND_IO;
388+
bridge->pci_regs_behavior[PCI_IO_BASE / 4].ro |= GENMASK(15, 0);
389+
bridge->pci_regs_behavior[PCI_IO_BASE / 4].rw &= ~GENMASK(15, 0);
390+
bridge->pci_regs_behavior[PCI_IO_BASE_UPPER16 / 4].ro = ~0;
391+
bridge->pci_regs_behavior[PCI_IO_BASE_UPPER16 / 4].rw = 0;
392+
}
393+
385394
return 0;
386395
}
387396
EXPORT_SYMBOL_GPL(pci_bridge_emul_init);

drivers/pci/pci-bridge-emul.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,12 @@ enum {
125125
* requests between primary and secondary buses.
126126
*/
127127
PCI_BRIDGE_EMUL_NO_PREFMEM_FORWARD = BIT(0),
128+
129+
/*
130+
* PCI bridge does not support forwarding of IO requests between
131+
* primary and secondary buses.
132+
*/
133+
PCI_BRIDGE_EMUL_NO_IO_FORWARD = BIT(1),
128134
};
129135

130136
int pci_bridge_emul_init(struct pci_bridge_emul *bridge,

0 commit comments

Comments
 (0)