powerpc/pci: Add config option for using all 256 PCI buses
By default on PPC32 PCI bus numbers are unique across all PCI domains. So a system could have only 256 PCI buses independently of available PCI domains. This is due to filling DT property pci-OF-bus-map which does not support a multi-domain setup. On all powerpc platforms except chrp and powermac there is no DT property pci-OF-bus-map anymore and therefore it is possible on non-chrp/powermac platforms to avoid this limitation of maximum number of 256 PCI buses in a system even on multi-domain setup. But avoiding this limitation would mean that all PCI and PCIe devices would be present on completely different BDF addresses as every PCI domain starts numbering PCI bueses from zero (instead of the last bus number of previous enumerated PCI domain). Such change could break existing software which expects fixed PCI bus numbers. So add a new config option CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT which enables this change. By default it is disabled. It causes the initial value of hose->first_busno to be zero. Signed-off-by: Pali Rohár <pali@kernel.org> [mpe: Minor change log wording] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20220706104308.5390-6-pali@kernel.org
This commit is contained in:
Родитель
7f102d6198
Коммит
5663568130
|
@ -375,6 +375,17 @@ 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_BUS_NUM_DOMAIN_DEPENDENT
|
||||||
|
depends on PPC32
|
||||||
|
depends on !PPC_PMAC && !PPC_CHRP
|
||||||
|
bool "Assign PCI bus numbers from zero individually for each PCI domain"
|
||||||
|
help
|
||||||
|
By default on PPC32 were PCI bus numbers unique across all PCI domains.
|
||||||
|
So system could have only 256 PCI buses independently of available
|
||||||
|
PCI domains. When this option is enabled then PCI bus numbers are
|
||||||
|
PCI domain dependent and each PCI controller on own domain can have
|
||||||
|
256 PCI buses, like it is on other Linux architectures.
|
||||||
|
|
||||||
config PPC_OF_PLATFORM_PCI
|
config PPC_OF_PLATFORM_PCI
|
||||||
bool
|
bool
|
||||||
depends on PCI
|
depends on PCI
|
||||||
|
|
|
@ -239,7 +239,9 @@ void pcibios_setup_phb_io_space(struct pci_controller *hose)
|
||||||
static int __init pcibios_init(void)
|
static int __init pcibios_init(void)
|
||||||
{
|
{
|
||||||
struct pci_controller *hose, *tmp;
|
struct pci_controller *hose, *tmp;
|
||||||
|
#ifndef CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT
|
||||||
int next_busno = 0;
|
int next_busno = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
printk(KERN_INFO "PCI: Probing PCI hardware\n");
|
printk(KERN_INFO "PCI: Probing PCI hardware\n");
|
||||||
|
|
||||||
|
@ -248,13 +250,17 @@ static int __init pcibios_init(void)
|
||||||
|
|
||||||
/* Scan all of the recorded PCI controllers. */
|
/* Scan all of the recorded PCI controllers. */
|
||||||
list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
|
list_for_each_entry_safe(hose, tmp, &hose_list, list_node) {
|
||||||
|
#ifndef CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT
|
||||||
if (pci_assign_all_buses)
|
if (pci_assign_all_buses)
|
||||||
hose->first_busno = next_busno;
|
hose->first_busno = next_busno;
|
||||||
|
#endif
|
||||||
hose->last_busno = 0xff;
|
hose->last_busno = 0xff;
|
||||||
pcibios_scan_phb(hose);
|
pcibios_scan_phb(hose);
|
||||||
pci_bus_add_devices(hose->bus);
|
pci_bus_add_devices(hose->bus);
|
||||||
|
#ifndef CONFIG_PPC_PCI_BUS_NUM_DOMAIN_DEPENDENT
|
||||||
if (pci_assign_all_buses || next_busno <= hose->last_busno)
|
if (pci_assign_all_buses || next_busno <= hose->last_busno)
|
||||||
next_busno = hose->last_busno + pcibios_assign_bus_offset;
|
next_busno = hose->last_busno + pcibios_assign_bus_offset;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP)
|
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_CHRP)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче