Re: [PATCH v2 2/5] PCI: imx6: wait the clocks to stabilize after ref_en

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 23, 2014 at 5:28 AM, Tim Harvey <tharvey@xxxxxxxxxxxxx> wrote:
> On Tue, Sep 23, 2014 at 2:56 AM, Lucas Stach <l.stach@xxxxxxxxxxxxxx> wrote:
>> Am Dienstag, den 23.09.2014, 12:11 +0800 schrieb Richard Zhu:
>>> - a while delay is mandatory required after pcie_ref_clk_en
>>> is set. Otherwise, the system would be hang on imx6qdl ard
>>> boards, because that imx6qdl boards don't have the reset_gpio.
>>> - the clocks should be stable already after the
>>> "clk_prepare_enable" is return. So I think it's ok to move the
>>> usleep delay after the pcie_ref_en is set.
>>>
>>
>> You are describing a lot of the conditions around the issue, but not the
>> issue itself, which makes it hard to follow your commit message. After
>> looking at the code I think the problem is this (and should be described
>> accordingly):
>>
>> For boards without a reset gpio we skip the delay between enabling the
>> pcie_ref_clk and touching the RC registers for configuration. Apparently
>> this hangs when the clocks are not yet settled in the DW PCIe core. So
>> we need to make sure that there is always an appropriate delay between
>> those two actions.
>>
>> I have not found this constraint anywhere in the i.MX6 Reference Manual,
>> nor in the DW PCIe documents I have access to, which makes me a bit feel
>> a bit unhappy about this. Richard, do you have better info on why this
>> delay is needed and how long it needs to be? Or is this just empirical?
>>
>> In general I'm ok with this patch, but still want a confirmation from
>> Tim that this doesn't break anything.
>
> I agree with Lucas' comments and also agree that this can use some
> testing. Based on my previous findings PCI link is very fragile. It
> will take me a few days to get a proper test setup in a thermal
> chamber with a host of boards but I will report back when I have
> findings.
>
> Tim
>
>>
>>> Signed-off-by: Richard Zhu <r65037@xxxxxxxxxxxxx>
>>> ---
>>>  drivers/pci/host/pci-imx6.c | 6 +++---
>>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c
>>> index 233fe8a..bc4222b 100644
>>> --- a/drivers/pci/host/pci-imx6.c
>>> +++ b/drivers/pci/host/pci-imx6.c
>>> @@ -275,15 +275,15 @@ static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
>>>               goto err_pcie;
>>>       }
>>>
>>> -     /* allow the clocks to stabilize */
>>> -     usleep_range(200, 500);
>>> -
>>>       /* power up core phy and enable ref clock */
>>>       regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>>>                       IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
>>>       regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
>>>                       IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
>>>
>>> +     /* allow the clocks to stabilize */
>>> +     usleep_range(200, 500);
>>> +
>>>       /* Some boards don't have PCIe reset GPIO. */
>>>       if (gpio_is_valid(imx6_pcie->reset_gpio)) {
>>>               gpio_set_value(imx6_pcie->reset_gpio, 0);
>>

I tested this across temperature over 300+ boots each on several IMX6
based boards with switches and did not encounter any link failures.

Tested-by: Tim Harvey <tharvey@xxxxxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux