lkml.org 
[lkml]   [2017]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.4 010/101] net: bcmgenet: Power up the internal PHY before probing the MII
    Date
    From: Doug Berger <opendmb@gmail.com>

    [ Upstream commit 6be371b053dc86f11465cc1abce2e99bda0a0574 ]

    When using the internal PHY it must be powered up when the MII is probed
    or the PHY will not be detected. Since the PHY is powered up at reset
    this has not been a problem. However, when the kernel is restarted with
    kexec the PHY will likely be powered down when the kernel starts so it
    will not be detected and the Ethernet link will not be established.

    This commit explicitly powers up the internal PHY when the GENET driver
    is probed to correct this behavior.

    Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file")
    Signed-off-by: Doug Berger <opendmb@gmail.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    ---
    drivers/net/ethernet/broadcom/genet/bcmgenet.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
    index 9217a0f4082f..74dd48f2bd89 100644
    --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
    +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
    @@ -3384,6 +3384,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
    const void *macaddr;
    struct resource *r;
    int err = -EIO;
    + const char *phy_mode_str;

    /* Up to GENET_MAX_MQ_CNT + 1 TX queues and RX queues */
    dev = alloc_etherdev_mqs(sizeof(*priv), GENET_MAX_MQ_CNT + 1,
    @@ -3489,6 +3490,13 @@ static int bcmgenet_probe(struct platform_device *pdev)
    priv->clk_eee = NULL;
    }

    + /* If this is an internal GPHY, power it on now, before UniMAC is
    + * brought out of reset as absolutely no UniMAC activity is allowed
    + */
    + if (dn && !of_property_read_string(dn, "phy-mode", &phy_mode_str) &&
    + !strcasecmp(phy_mode_str, "internal"))
    + bcmgenet_power_up(priv, GENET_POWER_PASSIVE);
    +
    err = reset_umac(priv);
    if (err)
    goto err_clk_disable;
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-12-07 17:51    [W:2.104 / U:0.456 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site