powerpc/pci: Add option for using pci_to_OF_bus_map
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 35499c0195
("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
This commit is contained in:
Родитель
34557b7504
Коммит
5d2eb73aa0
|
@ -388,9 +388,20 @@ config PPC_DCR
|
||||||
depends on PPC_DCR_NATIVE || PPC_DCR_MMIO
|
depends on PPC_DCR_NATIVE || PPC_DCR_MMIO
|
||||||
default y
|
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
|
config PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT
|
||||||
depends on PPC32
|
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"
|
bool "Assign PCI bus numbers from zero individually for each PCI domain"
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
|
|
|
@ -176,8 +176,10 @@ extern int pci_device_from_OF_node(struct device_node *node,
|
||||||
#endif
|
#endif
|
||||||
#ifndef CONFIG_PPC64
|
#ifndef CONFIG_PPC64
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_CHRP
|
#ifdef CONFIG_PPC_PCI_OF_BUS_MAP
|
||||||
extern void pci_create_OF_bus_map(void);
|
extern void pci_create_OF_bus_map(void);
|
||||||
|
#else
|
||||||
|
static inline void pci_create_OF_bus_map(void) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else /* CONFIG_PPC64 */
|
#else /* CONFIG_PPC64 */
|
||||||
|
|
|
@ -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);
|
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 u8* pci_to_OF_bus_map;
|
||||||
static int pci_bus_count;
|
static int pci_bus_count;
|
||||||
|
@ -152,6 +152,7 @@ pcibios_make_OF_bus_map(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif // CONFIG_PPC_PCI_OF_BUS_MAP
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_PMAC
|
#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)
|
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;
|
struct pci_dev *dev = NULL;
|
||||||
|
#endif
|
||||||
const __be32 *reg;
|
const __be32 *reg;
|
||||||
int size;
|
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;
|
*bus = (be32_to_cpup(®[0]) >> 16) & 0xff;
|
||||||
*devfn = (be32_to_cpup(®[0]) >> 8) & 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
|
/* Ok, here we need some tweak. If we have already renumbered
|
||||||
* all busses, we can't rely on the OF bus number any more.
|
* 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
|
* 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;
|
return -ENODEV;
|
||||||
|
#endif // CONFIG_PPC_PCI_OF_BUS_MAP
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pci_device_from_OF_node);
|
EXPORT_SYMBOL(pci_device_from_OF_node);
|
||||||
#endif
|
#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
|
/* We create the "pci-OF-bus-map" property now so it appears in the
|
||||||
* /proc device tree
|
* /proc device tree
|
||||||
*/
|
*/
|
||||||
|
@ -221,9 +228,7 @@ pci_create_OF_bus_map(void)
|
||||||
of_node_put(dn);
|
of_node_put(dn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif // CONFIG_PPC_PCI_OF_BUS_MAP
|
||||||
|
|
||||||
#endif /* defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP) */
|
|
||||||
|
|
||||||
void pcibios_setup_phb_io_space(struct pci_controller *hose)
|
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)
|
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP)
|
||||||
|
#ifdef CONFIG_PPC_PCI_OF_BUS_MAP
|
||||||
pci_bus_count = next_busno;
|
pci_bus_count = next_busno;
|
||||||
|
|
||||||
/* OpenFirmware based machines need a map of OF bus
|
/* OpenFirmware based machines need a map of OF bus
|
||||||
|
@ -281,6 +287,7 @@ static int __init pcibios_init(void)
|
||||||
*/
|
*/
|
||||||
if (pci_assign_all_buses)
|
if (pci_assign_all_buses)
|
||||||
pcibios_make_OF_bus_map();
|
pcibios_make_OF_bus_map();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Call common code to handle resource allocation */
|
/* Call common code to handle resource allocation */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче