On Monday 06 February 2023 22:39:02 Michael Ellerman wrote:
> From: Pali Rohár <p...@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.ca...@kernel.crashing.org/
> 
> Signed-off-by: Pali Rohár <p...@kernel.org>
> [mpe: Reword commit & help text, shrink option name, rework to fix build 
> errors]

Thank you for this!

> Signed-off-by: Michael Ellerman <m...@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(&reg[0]) >> 16) & 0xff;
>       *devfn = (be32_to_cpup(&reg[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
> 

Reply via email to