[PATCH][V4] powerpc/fsl-pci: Add pci inbound/outbound PM support
Kumar Gala
galak at kernel.crashing.org
Thu Sep 27 22:05:39 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.
>>
>> I agree.
>>
>>>
>>>>> 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)
>>
>> Please refer to the attached file.
>> In the log file I also print the device tree.
>>
>> - Hongtao.
>>
>>>
>>> However, I think the change of the io_resource.start is normal and
>>> correct behavior.
>>>
>>> - k
>>>
>>
>
> Hi Kumar,
> I have already sent the log.
> Do you have any comment on it?
>
> Thanks.
> - Hongtao.
>
Hongtao,
You mentioned:
> 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.
What do the values look like in both ATMU registers and io_resource if you reparse?
- k
More information about the Linuxppc-dev
mailing list