net: bcmgenet: Power up the internal PHY before probing the MII
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: 1c1008c793
("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>
This commit is contained in:
Родитель
07c52d6a0b
Коммит
6be371b053
|
@ -3289,6 +3289,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
|
||||||
const void *macaddr;
|
const void *macaddr;
|
||||||
struct resource *r;
|
struct resource *r;
|
||||||
int err = -EIO;
|
int err = -EIO;
|
||||||
|
const char *phy_mode_str;
|
||||||
|
|
||||||
/* Up to GENET_MAX_MQ_CNT + 1 TX queues and RX queues */
|
/* Up to GENET_MAX_MQ_CNT + 1 TX queues and RX queues */
|
||||||
dev = alloc_etherdev_mqs(sizeof(*priv), GENET_MAX_MQ_CNT + 1,
|
dev = alloc_etherdev_mqs(sizeof(*priv), GENET_MAX_MQ_CNT + 1,
|
||||||
|
@ -3396,6 +3397,13 @@ static int bcmgenet_probe(struct platform_device *pdev)
|
||||||
priv->clk_eee = NULL;
|
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);
|
err = reset_umac(priv);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_clk_disable;
|
goto err_clk_disable;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче