[PATCH][V4] powerpc/fsl-pci: Add pci inbound/outbound PM support

Kumar Gala galak at kernel.crashing.org
Fri Sep 21 23:15:57 EST 2012


>>>>>>> 
>>>>>>> On Sep 17, 2012, at 9:10 PM, Jia Hongtao wrote:
>>>>>>> 
>>>>>>>> Power supply for PCI inbound/outbound window registers is off
>>>>>>>> when system go to deep-sleep state. We save the values of
>>>>>>>> registers
>>>> before
>>>>>>>> suspend and restore to registers after resume.
>>>>>>>> 
>>>>>>>> Signed-off-by: Jiang Yutang <b14898 at freescale.com>
>>>>>>>> Signed-off-by: Jia Hongtao <B38951 at freescale.com>
>>>>>>>> Signed-off-by: Li Yang <leoli at freescale.com>
>>>>>>>> ---
>>>>>>>> Changes for V4:
>>>>>>>> We just rebase the patch upon following patch:
>>>>>>>> powerpc/fsl-pci: Unify pci/pcie initialization code
>>>>>>>> 
>>>>>>>> arch/powerpc/include/asm/pci-bridge.h |    2 +-
>>>>>>>> arch/powerpc/sysdev/fsl_pci.c         |  121
>>>>>>> +++++++++++++++++++++++++++++++++
>>>>>>>> 2 files changed, 122 insertions(+), 1 deletions(-)
>>>>>>> 
>>>>>>> Did you ever compare this to just re-parsing device tree method?
>>>>>>> 
>>>>>>> - k
>>>>>> 
>>>>>> I tested the re-parsing way by using setup_pci_atmu() when resume.
>>>>>> And I found out that re-parsing will *change* outbound IO
>>>>>> translation address regitster.
>>>>>> 
>>>>>> It seems that in the first bootup, after setup_atmu()
>>>>>> pcibios_setup_phb_resources() may update hose->io_resource, but
>>>>>> atmu is not updated according to the new hose->io_resource value.
>>>>>> In resume from sleep setup_atmu() will reset atmu according to
>>>>>> the new hose->io_resource value. So the setup_atmu() will cause
>>>>>> different result on outbound IO register between first bootup and
>>>>>> resume from sleep.
>>>>>> 
>>>>>> So... There's a possibility that in the first bootup atmu is not
>>>>>> setup properly.
>>>>> 
>>>>> [Are you seeing this happen in your testing?  If so its a bug we
>>>>> need
>>>> to look at fixing.]
>>>>> 
>>>>> Yes, I see this in my testing.
>>>>> Also PCIe ethernet card works well after resuming from sleep in
>>>>> both
>>>> save/restore
>>>>> and re-parsing way. (Maybe PCIe ethernet card don't need outbound
>>>>> IO
>>>> resource)
>>>>> So, I guess the result of re-parsing (actually it's re-setup) is
>>>>> right
>>>> and ATMU is not setup
>>>>> properly at the first bootup.
>>>> 
>>>> Are you seeing the following message - "PCI: I/O resource not set
>>>> for host bridge" ?
>>> 
>>> No.
>>> 
>>>> 
>>>> Trying to understand why you'd hit the reassignment of io_resource.
>>>> 
>>>> - k
>>>> 
>>> 
>>> I did some investigations and the conclusion is:
>>> 
>>> io_resource.flags & IORESOURCE_IO are both positive but
>>> io_resource.start is 0 before pcibios_setup_phb_io_space() is done.
>>> 
>>> The sequence of related process listed below:
>>> fsl_add_bridge() -> setup_pci_atmu()
>>> pcibios_init() -> pcibios_scan_phb() -> pcibios_setup_phb_io_space()
>>> 
>>> Because fsl_add_bridge() must be finished before pcibios_init() so
>>> ATMU is set when io_resource.start is 0. That means outbound IO regs
>>> are not set.
>>> 
>>> If system re-setup ATMU the io_resource.start has already updated so
>>> outbound IO regs are set.
>>> 
>>> My question is:
>>> Is there any problem if outbound IO regs are not set in first bootup?

Yes, it means that IO transactions would not work.

>> Please also provide the IO resource address range before and after the
>> pci scan.  Then we can evaluate if the range is needed to be mapped via
>> ATMU.
>> 
>> Leo
> 
> Since potar is set by out_be32(&pci->pow[j].potar, (hose->io_resource.start >> 12);
> I provide the result of hose->io_resource.start >> 12 as follows:
> 
> pcie at ffe09000:
> before pci scan: io_resource.start >> 12: 0
> after pci scan : io_resource.start >> 12: ff7ed
> 
> pcie at ffe0a000:
> before pci scan: io_resource.start >> 12: 0
> after pci scan : io_resource.start >> 12: ff7db
> 
> pcie at ffe0b000:
> before pci scan: io_resource.start >> 12: 0
> after pci scan : io_resource.start >> 12: ff7c9
> 
> Note that I tested on P1022DS.
> 
> - Hongtao.

1. What's the device tree nodes for PCIe look like?
2. Can you get the pr_debug() in setup_pci_atmu() to print and report results (as well as full boot log)

However, I think the change of the io_resource.start is normal and correct behavior.

- k



More information about the Linuxppc-dev mailing list