[RFC][PATCH 2/2] powerpc/fsl-pci Make PCIe hotplug work with Freescale

Kumar Gala galak at kernel.crashing.org
Fri Mar 15 07:35:40 EST 2013


On Mar 14, 2013, at 4:43 AM, Rojhalat Ibrahim wrote:

> On Wednesday 13 March 2013 14:07:16 Kumar Gala wrote:
>> diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
>> index 41bbcc4..b18c377 100644
>> --- a/arch/powerpc/sysdev/fsl_pci.c
>> +++ b/arch/powerpc/sysdev/fsl_pci.c
>> @@ -74,6 +74,35 @@ static int __init fsl_pcie_check_link(struct
>> pci_controller *hose) return 0;
>> }
>> 
>> +static int fsl_indirect_read_config(struct pci_bus *bus, unsigned int
>> devfn, +				    int offset, int len, u32 *val)
>> +{
>> +	struct pci_controller *hose = pci_bus_to_host(bus);
>> +
>> +	/* check the link status */
>> +	if ((bus->number == hose->first_busno) && (devfn == 0)) {
>> +		if (fsl_pcie_check_link(hose))
>> +			hose->indirect_type |= PPC_INDIRECT_TYPE_NO_PCIE_LINK;
>> +		else
>> +			hose->indirect_type &= ~PPC_INDIRECT_TYPE_NO_PCIE_LINK;
>> +	}
>> +	return indirect_read_config(bus, devfn, offset, len, val);
>> +}
>> +
> 
> This does not work because fsl_indirect_read_config calls fsl_pcie_check_link which calls early_read_config_dword which eventually calls fsl_indirect_read_config, so the kernel hangs in a recursion loop. Below is a modified patch that does work.

ok, that makes sense, but I guess now its making me question the following statement:

> if ((bus->number == hose->first_busno) && (devfn == 0)) {

Why do we have this conditional?

- k


More information about the Linuxppc-dev mailing list