powerpc/64: Adjust order in pcibios_init()
The pcibios_init() function for PowerPC 64 currently calls pci_bus_add_devices() before pcibios_resource_survey(). This means that at boot time, when the pcibios_bus_add_device() hooks are called by pci_bus_add_devices(), device resources have not been allocated and they are unable to perform EEH setup, so a separate pass is needed. This patch adjusts that order so that it will become possible to consolidate the EEH setup work into a single location. The only functional change is to execute pcibios_resource_survey() (excepting ppc_md.pcibios_fixup(), see below) before pci_bus_add_devices() instead of after it. Because pcibios_scan_phb() and pci_bus_add_devices() are called together in a loop, this must be broken into one loop for each call. Then the call to pcibios_resource_survey() is moved up in between them. This changes the ordering but because pcibios_resource_survey() also calls ppc_md.pcibios_fixup(), that call is extracted out into pcibios_init() to where pcibios_resource_survey() was, so that it is not moved. The only other caller of pcibios_resource_survey() is the PowerPC 32 version of pcibios_init(), and therefore, that is modified to call ppc_md.pcibios_fixup() right after pcibios_resource_survey() so that there is no functional change there at all. The re-arrangement will cause very few side-effects because at this stage in the boot, pci_bus_add_devices() does very little: - pci_create_sysfs_dev_files() does nothing (no sysfs yet) - pci_proc_attach_device() does nothing (no proc yet) - device_attach() does nothing (no drivers yet) This leaves only the pci_final_fixup calls, D3 support, and marking the device as added. Of those, only the pci_final_fixup calls have the potential to be affected by resource allocation. The only pci_final_fixup handlers that touch resources seem to be one for x86 (pci_amd_enable_64bit_bar()), and a PowerPC 32 platform driver (quirk_final_uli1575()), neither of which use this pcibios_init() function. Even if they did, it would almost certainly be a bug, under the current ordering, to rely on or make changes to resources before they were allocated. Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com> Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/4506b0489eabd0921a3587d90bd44c7683f3472d.1565930772.git.sbobroff@linux.ibm.com
This commit is contained in:
parent
56347074c5
commit
3f068aae7a
|
@ -1379,10 +1379,6 @@ void __init pcibios_resource_survey(void)
|
|||
pr_debug("PCI: Assigning unassigned resources...\n");
|
||||
pci_assign_unassigned_resources();
|
||||
}
|
||||
|
||||
/* Call machine dependent fixup */
|
||||
if (ppc_md.pcibios_fixup)
|
||||
ppc_md.pcibios_fixup();
|
||||
}
|
||||
|
||||
/* This is used by the PCI hotplug driver to allocate resource
|
||||
|
|
|
@ -263,6 +263,10 @@ static int __init pcibios_init(void)
|
|||
/* Call common code to handle resource allocation */
|
||||
pcibios_resource_survey();
|
||||
|
||||
/* Call machine dependent fixup */
|
||||
if (ppc_md.pcibios_fixup)
|
||||
ppc_md.pcibios_fixup();
|
||||
|
||||
/* Call machine dependent post-init code */
|
||||
if (ppc_md.pcibios_after_init)
|
||||
ppc_md.pcibios_after_init();
|
||||
|
|
|
@ -54,14 +54,20 @@ static int __init pcibios_init(void)
|
|||
pci_add_flags(PCI_ENABLE_PROC_DOMAINS | PCI_COMPAT_DOMAIN_0);
|
||||
|
||||
/* 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)
|
||||
pcibios_scan_phb(hose);
|
||||
pci_bus_add_devices(hose->bus);
|
||||
}
|
||||
|
||||
/* Call common code to handle resource allocation */
|
||||
pcibios_resource_survey();
|
||||
|
||||
/* Add devices. */
|
||||
list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
|
||||
pci_bus_add_devices(hose->bus);
|
||||
|
||||
/* Call machine dependent fixup */
|
||||
if (ppc_md.pcibios_fixup)
|
||||
ppc_md.pcibios_fixup();
|
||||
|
||||
printk(KERN_DEBUG "PCI: Probing PCI hardware done\n");
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue
Block a user