From 462a088c474832b19ff2730de1e6bea66d399c23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Sat, 15 Oct 2022 23:01:29 +0200 Subject: Add Turris kernel (includes patches from OpenWrt) --- ...dge-emul-Add-support-for-new-flag-PCI_BRI.patch | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 pkgs/patches-linux-5.15/0016-PCI-pci-bridge-emul-Add-support-for-new-flag-PCI_BRI.patch (limited to 'pkgs/patches-linux-5.15/0016-PCI-pci-bridge-emul-Add-support-for-new-flag-PCI_BRI.patch') diff --git a/pkgs/patches-linux-5.15/0016-PCI-pci-bridge-emul-Add-support-for-new-flag-PCI_BRI.patch b/pkgs/patches-linux-5.15/0016-PCI-pci-bridge-emul-Add-support-for-new-flag-PCI_BRI.patch new file mode 100644 index 0000000..5d0dad6 --- /dev/null +++ b/pkgs/patches-linux-5.15/0016-PCI-pci-bridge-emul-Add-support-for-new-flag-PCI_BRI.patch @@ -0,0 +1,62 @@ +From 369e0346a0e54c96ef8776bd32d810c4e1cbbb1d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Pali=20Roh=C3=A1r?= +Date: Tue, 16 Nov 2021 16:53:33 +0100 +Subject: [PATCH 16/90] PCI: pci-bridge-emul: Add support for new flag + PCI_BRIDGE_EMUL_NO_IO_FORWARD +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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. + +Signed-off-by: Pali Rohár +--- + drivers/pci/pci-bridge-emul.c | 9 +++++++++ + drivers/pci/pci-bridge-emul.h | 6 ++++++ + 2 files changed, 15 insertions(+) + +diff --git a/drivers/pci/pci-bridge-emul.c b/drivers/pci/pci-bridge-emul.c +index ceacba03e714..a16f9e30099e 100644 +--- a/drivers/pci/pci-bridge-emul.c ++++ b/drivers/pci/pci-bridge-emul.c +@@ -382,6 +382,15 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge, + bridge->pci_regs_behavior[PCI_PREF_MEMORY_BASE / 4].rw = 0; + } + ++ if (flags & PCI_BRIDGE_EMUL_NO_IO_FORWARD) { ++ bridge->pci_regs_behavior[PCI_COMMAND / 4].ro |= PCI_COMMAND_IO; ++ bridge->pci_regs_behavior[PCI_COMMAND / 4].rw &= ~PCI_COMMAND_IO; ++ bridge->pci_regs_behavior[PCI_IO_BASE / 4].ro |= GENMASK(15, 0); ++ bridge->pci_regs_behavior[PCI_IO_BASE / 4].rw &= ~GENMASK(15, 0); ++ bridge->pci_regs_behavior[PCI_IO_BASE_UPPER16 / 4].ro = ~0; ++ bridge->pci_regs_behavior[PCI_IO_BASE_UPPER16 / 4].rw = 0; ++ } ++ + return 0; + } + EXPORT_SYMBOL_GPL(pci_bridge_emul_init); +diff --git a/drivers/pci/pci-bridge-emul.h b/drivers/pci/pci-bridge-emul.h +index 087b5fa01bcf..4953274cac18 100644 +--- a/drivers/pci/pci-bridge-emul.h ++++ b/drivers/pci/pci-bridge-emul.h +@@ -125,6 +125,12 @@ enum { + * requests between primary and secondary buses. + */ + PCI_BRIDGE_EMUL_NO_PREFMEM_FORWARD = BIT(0), ++ ++ /* ++ * PCI bridge does not support forwarding of IO requests between ++ * primary and secondary buses. ++ */ ++ PCI_BRIDGE_EMUL_NO_IO_FORWARD = BIT(1), + }; + + int pci_bridge_emul_init(struct pci_bridge_emul *bridge, +-- +2.34.1 + -- cgit v1.2.3