lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20230128133459.32123-2-pali@kernel.org> Date: Sat, 28 Jan 2023 14:34:59 +0100 From: Pali Rohár <pali@...nel.org> To: Michael Ellerman <mpe@...erman.id.au>, Nicholas Piggin <npiggin@...il.com>, Christophe Leroy <christophe.leroy@...roup.eu> Cc: linuxppc-dev@...ts.ozlabs.org, linux-kernel@...r.kernel.org Subject: [PATCH v2 2/2] powerpc/pci: Allow to disable filling deprecated pci-OF-bus-map Creating or filling pci-OF-bus-map property in the device-tree is deprecated since May 2006 [1]. Allow to disable filling this property by unsetting config option CONFIG_PPC_PCI_OF_BUS_MAP_FILL for remaining chrp and powermac code. Disabling of pci-OF-bus-map property allows to enable new option CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT also for chrp and powermac. [1] - https://lore.kernel.org/linuxppc-dev/1148016268.13249.14.camel@localhost.localdomain/ Signed-off-by: Pali Rohár <pali@...nel.org> --- Changes in v2: * Provide stripped version of pci_device_from_OF_node() without pci_to_OF_bus_map when compiling with CONFIG_PPC_PCI_OF_BUS_MAP_FILL=n --- arch/powerpc/Kconfig | 12 +++++++++++- arch/powerpc/kernel/pci_32.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index fad25aa602c8..3f8499faa88a 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -388,9 +388,19 @@ config PPC_DCR depends on PPC_DCR_NATIVE || PPC_DCR_MMIO default y +config PPC_PCI_OF_BUS_MAP_FILL + bool "Fill pci-OF-bus-map property in the device-tree" + depends on PPC32 + depends on PPC_PMAC || PPC_CHRP + default y + help + This option creates and fills pci-OF-bus-map property in the + device-tree which is deprecated and is needed only for old + platforms. + config PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT depends on PPC32 - depends on !PPC_PMAC && !PPC_CHRP + depends on !PPC_PCI_OF_BUS_MAP_FILL bool "Assign PCI bus numbers from zero individually for each PCI domain" default y help diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index 855b59892c5c..82a8981d4c47 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c @@ -64,6 +64,8 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CPC710_PCI64, fixu #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP) +#ifdef CONFIG_PPC_PCI_OF_BUS_MAP_FILL + static u8* pci_to_OF_bus_map; static int pci_bus_count; @@ -223,6 +225,32 @@ pci_create_OF_bus_map(void) } #endif +#else /* CONFIG_PPC_PCI_OF_BUS_MAP_FILL */ + +/* + * Returns the PCI device matching a given OF node without pci_to_OF_bus_map + */ +int pci_device_from_OF_node(struct device_node *node, u8 *bus, u8 *devfn) +{ + const __be32 *reg; + int size; + + /* Check if it might have a chance to be a PCI device */ + if (!pci_find_hose_for_OF_device(node)) + return -ENODEV; + + reg = of_get_property(node, "reg", &size); + if (!reg || size < 5 * sizeof(u32)) + return -ENODEV; + + *bus = (be32_to_cpup(®[0]) >> 16) & 0xff; + *devfn = (be32_to_cpup(®[0]) >> 8) & 0xff; + + return 0; +} + +#endif /* CONFIG_PPC_PCI_OF_BUS_MAP_FILL */ + #endif /* defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP) */ void pcibios_setup_phb_io_space(struct pci_controller *hose) @@ -273,6 +301,7 @@ static int __init pcibios_init(void) } #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP) +#ifdef CONFIG_PPC_PCI_OF_BUS_MAP_FILL pci_bus_count = next_busno; /* OpenFirmware based machines need a map of OF bus @@ -281,6 +310,7 @@ static int __init pcibios_init(void) */ if (pci_assign_all_buses) pcibios_make_OF_bus_map(); +#endif #endif /* Call common code to handle resource allocation */ -- 2.20.1
Powered by blists - more mailing lists