lkml.org 
[lkml]   [2016]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 003/217] PCI: imx6: Move PHY reset into imx6_pcie_establish_link()
    3.16.35-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Lucas Stach <l.stach@pengutronix.de>

    commit 54a47a83421a3b7ee0e0fab7f65d04179bdf59b6 upstream.

    This adds the PHY reset into a common error path of
    imx6_pcie_establish_link(), deduplicating some of the debug prints. Also
    reduce the severity of the "no-link" message in the one place where it is
    expected to be hit when no peripheral is attached.

    Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    [bwh: Backported to 3.16:
    - Error paths were different in imx6_pcie_start_link()
    - Adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/pci/host/pci-imx6.c | 28 +++++++++++++++-------------
    1 file changed, 15 insertions(+), 13 deletions(-)

    --- a/drivers/pci/host/pci-imx6.c
    +++ b/drivers/pci/host/pci-imx6.c
    @@ -305,10 +305,6 @@ static int imx6_pcie_wait_for_link(struc
    if (--count)
    continue;

    - dev_err(pp->dev, "phy link never came up\n");
    - dev_dbg(pp->dev, "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n",
    - readl(pp->dbi_base + PCIE_PHY_DEBUG_R0),
    - readl(pp->dbi_base + PCIE_PHY_DEBUG_R1));
    return -EINVAL;
    }

    @@ -343,8 +339,10 @@ static int imx6_pcie_start_link(struct p
    IMX6Q_GPR12_PCIE_CTL_2, 1 << 10);

    ret = imx6_pcie_wait_for_link(pp);
    - if (ret)
    - return ret;
    + if (ret) {
    + dev_info(pp->dev, "Link never came up\n");
    + goto err_reset_phy;
    + }

    /* Allow Gen2 mode after the link is up. */
    tmp = readl(pp->dbi_base + PCIE_RC_LCR);
    @@ -377,12 +375,21 @@ static int imx6_pcie_start_link(struct p

    if (ret) {
    dev_err(pp->dev, "Failed to bring link up!\n");
    + goto err_reset_phy;
    } else {
    tmp = readl(pp->dbi_base + 0x80);
    dev_dbg(pp->dev, "Link up, Gen=%i\n", (tmp >> 16) & 0xf);
    }

    return ret;
    +
    +err_reset_phy:
    + dev_dbg(pp->dev, "PHY DEBUG_R0=0x%08x DEBUG_R1=0x%08x\n",
    + readl(pp->dbi_base + PCIE_PHY_DEBUG_R0),
    + readl(pp->dbi_base + PCIE_PHY_DEBUG_R1));
    + imx6_pcie_reset_phy(pp);
    +
    + return ret;
    }

    static void imx6_pcie_host_init(struct pcie_port *pp)
    @@ -470,11 +477,6 @@ static int imx6_pcie_link_up(struct pcie
    if ((debug_r0 & 0x3f) != 0x0d)
    return 0;

    - dev_err(pp->dev, "transition to gen2 is stuck, reset PHY!\n");
    - dev_dbg(pp->dev, "debug_r0=%08x debug_r1=%08x\n", debug_r0, rc);
    -
    - imx6_pcie_reset_phy(pp);
    -
    return 0;
    }

    \
     
     \ /
      Last update: 2016-04-27 01:41    [W:2.197 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site