lkml.org 
[lkml]   [2020]   [Jun]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 10/42] net: ethernet: stmmac: Enable interface clocks on probe for IPQ806x
    Date
    From: Jonathan McDowell <noodles@earth.li>

    [ Upstream commit a96ac8a0045e3cbe3e5af6d1b3c78c6c2065dec5 ]

    The ipq806x_gmac_probe() function enables the PTP clock but not the
    appropriate interface clocks. This means that if the bootloader hasn't
    done so attempting to bring up the interface will fail with an error
    like:

    [ 59.028131] ipq806x-gmac-dwmac 37600000.ethernet: Failed to reset the dma
    [ 59.028196] ipq806x-gmac-dwmac 37600000.ethernet eth1: stmmac_hw_setup: DMA engine initialization failed
    [ 59.034056] ipq806x-gmac-dwmac 37600000.ethernet eth1: stmmac_open: Hw setup failed

    This patch, a slightly cleaned up version of one posted by Sergey
    Sergeev in:

    https://forum.openwrt.org/t/support-for-mikrotik-rb3011uias-rm/4064/257

    correctly enables the clock; we have already configured the source just
    before this.

    Tested on a MikroTik RB3011.

    Signed-off-by: Jonathan McDowell <noodles@earth.li>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c | 13 +++++++++++++
    1 file changed, 13 insertions(+)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
    index 11a4a81b0397..bcc5d1e16ce2 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c
    @@ -330,6 +330,19 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)
    /* Enable PTP clock */
    regmap_read(gmac->nss_common, NSS_COMMON_CLK_GATE, &val);
    val |= NSS_COMMON_CLK_GATE_PTP_EN(gmac->id);
    + switch (gmac->phy_mode) {
    + case PHY_INTERFACE_MODE_RGMII:
    + val |= NSS_COMMON_CLK_GATE_RGMII_RX_EN(gmac->id) |
    + NSS_COMMON_CLK_GATE_RGMII_TX_EN(gmac->id);
    + break;
    + case PHY_INTERFACE_MODE_SGMII:
    + val |= NSS_COMMON_CLK_GATE_GMII_RX_EN(gmac->id) |
    + NSS_COMMON_CLK_GATE_GMII_TX_EN(gmac->id);
    + break;
    + default:
    + /* We don't get here; the switch above will have errored out */
    + unreachable();
    + }
    regmap_write(gmac->nss_common, NSS_COMMON_CLK_GATE, val);

    if (gmac->phy_mode == PHY_INTERFACE_MODE_SGMII) {
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-09 20:23    [W:9.230 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site