mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-20 01:24:39 +08:00
net: bcmgenet: Refactor register access in bcmgenet_mii_config
The register access in bcmgenet_mii_config() is a little bit opaque and not easy to extend. In preparation for the missing RGMII PHY modes move all the phy name assignments into the switch statement and the register access to the end of the function. This make the code easier to read and extend. Signed-off-by: Stefan Wahren <wahrenst@gmx.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a50e3a9931
commit
4f8d81b77e
@ -213,11 +213,10 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
|
||||
udelay(2);
|
||||
}
|
||||
|
||||
priv->ext_phy = !priv->internal_phy &&
|
||||
(priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
|
||||
|
||||
switch (priv->phy_interface) {
|
||||
case PHY_INTERFACE_MODE_INTERNAL:
|
||||
phy_name = "internal PHY";
|
||||
/* fall through */
|
||||
case PHY_INTERFACE_MODE_MOCA:
|
||||
/* Irrespective of the actually configured PHY speed (100 or
|
||||
* 1000) GENETv4 only has an internal GPHY so we will just end
|
||||
@ -229,11 +228,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
|
||||
else
|
||||
port_ctrl = PORT_MODE_INT_EPHY;
|
||||
|
||||
bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL);
|
||||
|
||||
if (priv->internal_phy) {
|
||||
phy_name = "internal PHY";
|
||||
} else if (priv->phy_interface == PHY_INTERFACE_MODE_MOCA) {
|
||||
if (!phy_name) {
|
||||
phy_name = "MoCA";
|
||||
bcmgenet_moca_phy_setup(priv);
|
||||
}
|
||||
@ -242,11 +237,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
|
||||
case PHY_INTERFACE_MODE_MII:
|
||||
phy_name = "external MII";
|
||||
phy_set_max_speed(phydev, SPEED_100);
|
||||
bcmgenet_sys_writel(priv,
|
||||
PORT_MODE_EXT_EPHY, SYS_PORT_CTRL);
|
||||
/* Restore the MII PHY after isolation */
|
||||
if (bmcr >= 0)
|
||||
phy_write(phydev, MII_BMCR, bmcr);
|
||||
port_ctrl = PORT_MODE_EXT_EPHY;
|
||||
break;
|
||||
|
||||
case PHY_INTERFACE_MODE_REVMII:
|
||||
@ -261,31 +252,38 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
|
||||
port_ctrl = PORT_MODE_EXT_RVMII_50;
|
||||
else
|
||||
port_ctrl = PORT_MODE_EXT_RVMII_25;
|
||||
bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL);
|
||||
break;
|
||||
|
||||
case PHY_INTERFACE_MODE_RGMII:
|
||||
/* RGMII_NO_ID: TXC transitions at the same time as TXD
|
||||
* (requires PCB or receiver-side delay)
|
||||
* RGMII: Add 2ns delay on TXC (90 degree shift)
|
||||
*
|
||||
* ID is implicitly disabled for 100Mbps (RG)MII operation.
|
||||
*/
|
||||
id_mode_dis = BIT(16);
|
||||
/* fall through */
|
||||
case PHY_INTERFACE_MODE_RGMII_TXID:
|
||||
if (id_mode_dis)
|
||||
phy_name = "external RGMII (no delay)";
|
||||
else
|
||||
id_mode_dis = BIT(16);
|
||||
port_ctrl = PORT_MODE_EXT_GPHY;
|
||||
break;
|
||||
|
||||
case PHY_INTERFACE_MODE_RGMII_TXID:
|
||||
/* RGMII_TXID: Add 2ns delay on TXC (90 degree shift) */
|
||||
phy_name = "external RGMII (TX delay)";
|
||||
bcmgenet_sys_writel(priv,
|
||||
PORT_MODE_EXT_GPHY, SYS_PORT_CTRL);
|
||||
port_ctrl = PORT_MODE_EXT_GPHY;
|
||||
break;
|
||||
default:
|
||||
dev_err(kdev, "unknown phy mode: %d\n", priv->phy_interface);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL);
|
||||
|
||||
/* Restore the MII PHY after isolation */
|
||||
if (bmcr >= 0)
|
||||
phy_write(phydev, MII_BMCR, bmcr);
|
||||
|
||||
priv->ext_phy = !priv->internal_phy &&
|
||||
(priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
|
||||
|
||||
/* This is an external PHY (xMII), so we need to enable the RGMII
|
||||
* block for the interface to work
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user