[PATCH v3] powerpc/pci: Add option for using pci_to_OF_bus_map
Pali Rohár
pali at kernel.org
Tue Feb 7 09:48:23 AEDT 2023
On Monday 06 February 2023 22:39:02 Michael Ellerman wrote:
> From: Pali Rohár <pali at kernel.org>
>
> The "pci-OF-bus-map" property was declared deprecated in 2006 [1] and to
> the best of everyone's knowledge is not used by anything anymore [2].
>
> The creation of the property was disabled on powermac (arch/powerpc) in
> 2005 by commit 35499c0195e4 ("powerpc: Merge in 64-bit powermac
> support."). But it is still created by default on CHRP.
>
> On powermac the actual map (pci_to_OF_bus_map) is still used by default,
> even though the device tree property is not created.
>
> Add an option to enable/disable use of the pci_to_OF_bus_map, and
> creation of the property (on CHRP).
>
> Disabling the option allows enabling CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT
> which allows "normal" bus numbering and more than 256 buses, like 64-bit
> and other architectures.
>
> Mark the new option as default n, the intention is that the option and
> the code will be removed in a future release.
>
> [1]: https://lore.kernel.org/linuxppc-dev/1148016268.13249.14.camel@localhost.localdomain/
> [2]: https://lore.kernel.org/all/575f239205e8635add81c9f902b7d9db7beb83ea.camel@kernel.crashing.org/
>
> Signed-off-by: Pali Rohár <pali at kernel.org>
> [mpe: Reword commit & help text, shrink option name, rework to fix build errors]
Thank you for this!
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>
> ---
> arch/powerpc/Kconfig | 13 ++++++++++++-
> arch/powerpc/include/asm/pci-bridge.h | 4 +++-
> arch/powerpc/kernel/pci_32.c | 17 ++++++++++++-----
> 3 files changed, 27 insertions(+), 7 deletions(-)
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index fad25aa602c8..7dcb011cebf2 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -388,9 +388,20 @@ config PPC_DCR
> depends on PPC_DCR_NATIVE || PPC_DCR_MMIO
> default y
>
> +config PPC_PCI_OF_BUS_MAP
> + bool "Use pci_to_OF_bus_map (deprecated)"
> + depends on PPC32
> + depends on PPC_PMAC || PPC_CHRP
> + help
> + This option uses pci_to_OF_bus_map to map OF nodes to PCI devices, which
> + restricts the system to only having 256 PCI buses. On CHRP it also causes
> + the "pci-OF-bus-map" property to be created in the device tree.
> +
> + If unsure, say "N".
> +
> config PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT
> depends on PPC32
> - depends on !PPC_PMAC && !PPC_CHRP
> + depends on !PPC_PCI_OF_BUS_MAP
> bool "Assign PCI bus numbers from zero individually for each PCI domain"
> default y
> help
> diff --git a/arch/powerpc/include/asm/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h
> index e18c95f4e1d4..71c1d26f2400 100644
> --- a/arch/powerpc/include/asm/pci-bridge.h
> +++ b/arch/powerpc/include/asm/pci-bridge.h
> @@ -176,8 +176,10 @@ extern int pci_device_from_OF_node(struct device_node *node,
> #endif
> #ifndef CONFIG_PPC64
>
> -#ifdef CONFIG_PPC_CHRP
> +#ifdef CONFIG_PPC_PCI_OF_BUS_MAP
> extern void pci_create_OF_bus_map(void);
> +#else
> +static inline void pci_create_OF_bus_map(void) {}
> #endif
>
> #else /* CONFIG_PPC64 */
> diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c
> index 855b59892c5c..ce0c8623e563 100644
> --- a/arch/powerpc/kernel/pci_32.c
> +++ b/arch/powerpc/kernel/pci_32.c
> @@ -62,7 +62,7 @@ fixup_cpc710_pci64(struct pci_dev* dev)
> }
> DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CPC710_PCI64, fixup_cpc710_pci64);
>
> -#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP)
> +#ifdef CONFIG_PPC_PCI_OF_BUS_MAP
>
> static u8* pci_to_OF_bus_map;
> static int pci_bus_count;
> @@ -152,6 +152,7 @@ pcibios_make_OF_bus_map(void)
> }
> #endif
> }
> +#endif // CONFIG_PPC_PCI_OF_BUS_MAP
>
>
> #ifdef CONFIG_PPC_PMAC
> @@ -160,7 +161,9 @@ pcibios_make_OF_bus_map(void)
> */
> int pci_device_from_OF_node(struct device_node *node, u8 *bus, u8 *devfn)
> {
> +#ifdef CONFIG_PPC_PCI_OF_BUS_MAP
> struct pci_dev *dev = NULL;
> +#endif
> const __be32 *reg;
> int size;
>
> @@ -175,6 +178,9 @@ int pci_device_from_OF_node(struct device_node *node, u8 *bus, u8 *devfn)
> *bus = (be32_to_cpup(®[0]) >> 16) & 0xff;
> *devfn = (be32_to_cpup(®[0]) >> 8) & 0xff;
>
> +#ifndef CONFIG_PPC_PCI_OF_BUS_MAP
> + return 0;
> +#else
> /* Ok, here we need some tweak. If we have already renumbered
> * all busses, we can't rely on the OF bus number any more.
> * the pci_to_OF_bus_map is not enough as several PCI busses
> @@ -192,11 +198,12 @@ int pci_device_from_OF_node(struct device_node *node, u8 *bus, u8 *devfn)
> }
>
> return -ENODEV;
> +#endif // CONFIG_PPC_PCI_OF_BUS_MAP
> }
> EXPORT_SYMBOL(pci_device_from_OF_node);
> #endif
>
> -#ifdef CONFIG_PPC_CHRP
> +#ifdef CONFIG_PPC_PCI_OF_BUS_MAP
> /* We create the "pci-OF-bus-map" property now so it appears in the
> * /proc device tree
> */
> @@ -221,9 +228,7 @@ pci_create_OF_bus_map(void)
> of_node_put(dn);
> }
> }
> -#endif
> -
> -#endif /* defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP) */
> +#endif // CONFIG_PPC_PCI_OF_BUS_MAP
>
> void pcibios_setup_phb_io_space(struct pci_controller *hose)
> {
> @@ -273,6 +278,7 @@ static int __init pcibios_init(void)
> }
>
> #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP)
> +#ifdef CONFIG_PPC_PCI_OF_BUS_MAP
> pci_bus_count = next_busno;
>
> /* OpenFirmware based machines need a map of OF bus
> @@ -281,6 +287,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.39.1
>
More information about the Linuxppc-dev
mailing list