]> git.itanic.dy.fi Git - linux-stable/commitdiff
powerpc/pci: Add option for using pci_to_OF_bus_map
authorPali Rohár <pali@kernel.org>
Mon, 6 Feb 2023 11:39:02 +0000 (22:39 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 7 Feb 2023 09:15:23 +0000 (20:15 +1100)
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@kernel.org>
[mpe: Reword commit & help text, shrink option name, rework to fix build errors]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20230206113902.1857123-1-mpe@ellerman.id.au
arch/powerpc/Kconfig
arch/powerpc/include/asm/pci-bridge.h
arch/powerpc/kernel/pci_32.c

index fad25aa602c8d4a68d70e8a60b3ebd21530cfd41..7dcb011cebf27c2077610aa990564074b1781f72 100644 (file)
@@ -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
index e18c95f4e1d495fc943aaf72fb46d496606d3fd0..71c1d26f2400e5cef3154d2b09c9b68adcfde07d 100644 (file)
@@ -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 */
index 855b59892c5c93ea07dad7a4e4f6cfca6a170cd3..ce0c8623e5636f49b37f0156598a43b960d92d78 100644 (file)
@@ -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 */