mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
net: bcmgenet: Clear RGMII_LINK upon link down
commit 696450c051 upstream
Clear the RGMII_LINK bit upon detecting link down to be consistent with
setting the bit upon link up. We also move the clearing of the
out-of-band disable to the runtime initialization rather than for each
link up/down transition.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Link: https://lore.kernel.org/r/20221118213754.1383364-1-f.fainelli@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
beaf11969f
commit
ed804e9d8b
@@ -72,7 +72,6 @@ static void bcmgenet_mac_config(struct net_device *dev)
|
|||||||
* Receive clock is provided by the PHY.
|
* Receive clock is provided by the PHY.
|
||||||
*/
|
*/
|
||||||
reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
|
reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
|
||||||
reg &= ~OOB_DISABLE;
|
|
||||||
reg |= RGMII_LINK;
|
reg |= RGMII_LINK;
|
||||||
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
|
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
|
||||||
|
|
||||||
@@ -100,10 +99,18 @@ static void bcmgenet_mac_config(struct net_device *dev)
|
|||||||
*/
|
*/
|
||||||
void bcmgenet_mii_setup(struct net_device *dev)
|
void bcmgenet_mii_setup(struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
struct bcmgenet_priv *priv = netdev_priv(dev);
|
||||||
struct phy_device *phydev = dev->phydev;
|
struct phy_device *phydev = dev->phydev;
|
||||||
|
u32 reg;
|
||||||
|
|
||||||
if (phydev->link)
|
if (phydev->link) {
|
||||||
bcmgenet_mac_config(dev);
|
bcmgenet_mac_config(dev);
|
||||||
|
} else {
|
||||||
|
reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
|
||||||
|
reg &= ~RGMII_LINK;
|
||||||
|
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
|
||||||
|
}
|
||||||
|
|
||||||
phy_print_status(phydev);
|
phy_print_status(phydev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,18 +271,20 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
|
|||||||
(priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
|
(priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
|
||||||
|
|
||||||
/* This is an external PHY (xMII), so we need to enable the RGMII
|
/* This is an external PHY (xMII), so we need to enable the RGMII
|
||||||
* block for the interface to work
|
* block for the interface to work, unconditionally clear the
|
||||||
|
* Out-of-band disable since we do not need it.
|
||||||
*/
|
*/
|
||||||
|
reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
|
||||||
|
reg &= ~OOB_DISABLE;
|
||||||
if (priv->ext_phy) {
|
if (priv->ext_phy) {
|
||||||
reg = bcmgenet_ext_readl(priv, EXT_RGMII_OOB_CTRL);
|
|
||||||
reg &= ~ID_MODE_DIS;
|
reg &= ~ID_MODE_DIS;
|
||||||
reg |= id_mode_dis;
|
reg |= id_mode_dis;
|
||||||
if (GENET_IS_V1(priv) || GENET_IS_V2(priv) || GENET_IS_V3(priv))
|
if (GENET_IS_V1(priv) || GENET_IS_V2(priv) || GENET_IS_V3(priv))
|
||||||
reg |= RGMII_MODE_EN_V123;
|
reg |= RGMII_MODE_EN_V123;
|
||||||
else
|
else
|
||||||
reg |= RGMII_MODE_EN;
|
reg |= RGMII_MODE_EN;
|
||||||
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
|
|
||||||
}
|
}
|
||||||
|
bcmgenet_ext_writel(priv, reg, EXT_RGMII_OOB_CTRL);
|
||||||
|
|
||||||
if (init)
|
if (init)
|
||||||
dev_info(kdev, "configuring instance for %s\n", phy_name);
|
dev_info(kdev, "configuring instance for %s\n", phy_name);
|
||||||
|
|||||||
Reference in New Issue
Block a user