mirror of https://gitee.com/openkylin/linux.git
net: ethernet: octeon: use phydev from struct net_device
The private structure contain a pointer to phydev, but the structure net_device already contain such pointer. So we can remove the pointer phydev in the private structure, and update the driver to use the one contained in struct net_device. Signed-off-by: Philippe Reynes <tremyfr@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
11de8e62de
commit
86bc5ed672
|
@ -36,36 +36,30 @@ static void cvm_oct_get_drvinfo(struct net_device *dev,
|
|||
|
||||
static int cvm_oct_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||
{
|
||||
struct octeon_ethernet *priv = netdev_priv(dev);
|
||||
|
||||
if (priv->phydev)
|
||||
return phy_ethtool_gset(priv->phydev, cmd);
|
||||
if (dev->phydev)
|
||||
return phy_ethtool_gset(dev->phydev, cmd);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int cvm_oct_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
||||
{
|
||||
struct octeon_ethernet *priv = netdev_priv(dev);
|
||||
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (priv->phydev)
|
||||
return phy_ethtool_sset(priv->phydev, cmd);
|
||||
if (dev->phydev)
|
||||
return phy_ethtool_sset(dev->phydev, cmd);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int cvm_oct_nway_reset(struct net_device *dev)
|
||||
{
|
||||
struct octeon_ethernet *priv = netdev_priv(dev);
|
||||
|
||||
if (!capable(CAP_NET_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (priv->phydev)
|
||||
return phy_start_aneg(priv->phydev);
|
||||
if (dev->phydev)
|
||||
return phy_start_aneg(dev->phydev);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -88,15 +82,13 @@ const struct ethtool_ops cvm_oct_ethtool_ops = {
|
|||
*/
|
||||
int cvm_oct_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||
{
|
||||
struct octeon_ethernet *priv = netdev_priv(dev);
|
||||
|
||||
if (!netif_running(dev))
|
||||
return -EINVAL;
|
||||
|
||||
if (!priv->phydev)
|
||||
if (!dev->phydev)
|
||||
return -EINVAL;
|
||||
|
||||
return phy_mii_ioctl(priv->phydev, rq, cmd);
|
||||
return phy_mii_ioctl(dev->phydev, rq, cmd);
|
||||
}
|
||||
|
||||
void cvm_oct_note_carrier(struct octeon_ethernet *priv,
|
||||
|
@ -119,9 +111,9 @@ void cvm_oct_adjust_link(struct net_device *dev)
|
|||
cvmx_helper_link_info_t link_info;
|
||||
|
||||
link_info.u64 = 0;
|
||||
link_info.s.link_up = priv->phydev->link ? 1 : 0;
|
||||
link_info.s.full_duplex = priv->phydev->duplex ? 1 : 0;
|
||||
link_info.s.speed = priv->phydev->speed;
|
||||
link_info.s.link_up = dev->phydev->link ? 1 : 0;
|
||||
link_info.s.full_duplex = dev->phydev->duplex ? 1 : 0;
|
||||
link_info.s.speed = dev->phydev->speed;
|
||||
priv->link_info = link_info.u64;
|
||||
|
||||
/*
|
||||
|
@ -130,8 +122,8 @@ void cvm_oct_adjust_link(struct net_device *dev)
|
|||
if (priv->poll)
|
||||
priv->poll(dev);
|
||||
|
||||
if (priv->last_link != priv->phydev->link) {
|
||||
priv->last_link = priv->phydev->link;
|
||||
if (priv->last_link != dev->phydev->link) {
|
||||
priv->last_link = dev->phydev->link;
|
||||
cvmx_helper_link_set(priv->port, link_info);
|
||||
cvm_oct_note_carrier(priv, link_info);
|
||||
}
|
||||
|
@ -151,9 +143,8 @@ int cvm_oct_common_stop(struct net_device *dev)
|
|||
|
||||
priv->poll = NULL;
|
||||
|
||||
if (priv->phydev)
|
||||
phy_disconnect(priv->phydev);
|
||||
priv->phydev = NULL;
|
||||
if (dev->phydev)
|
||||
phy_disconnect(dev->phydev);
|
||||
|
||||
if (priv->last_link) {
|
||||
link_info.u64 = 0;
|
||||
|
@ -176,6 +167,7 @@ int cvm_oct_phy_setup_device(struct net_device *dev)
|
|||
{
|
||||
struct octeon_ethernet *priv = netdev_priv(dev);
|
||||
struct device_node *phy_node;
|
||||
struct phy_device *phydev = NULL;
|
||||
|
||||
if (!priv->of_node)
|
||||
goto no_phy;
|
||||
|
@ -193,14 +185,14 @@ int cvm_oct_phy_setup_device(struct net_device *dev)
|
|||
if (!phy_node)
|
||||
goto no_phy;
|
||||
|
||||
priv->phydev = of_phy_connect(dev, phy_node, cvm_oct_adjust_link, 0,
|
||||
PHY_INTERFACE_MODE_GMII);
|
||||
phydev = of_phy_connect(dev, phy_node, cvm_oct_adjust_link, 0,
|
||||
PHY_INTERFACE_MODE_GMII);
|
||||
|
||||
if (!priv->phydev)
|
||||
if (!phydev)
|
||||
return -ENODEV;
|
||||
|
||||
priv->last_link = 0;
|
||||
phy_start_aneg(priv->phydev);
|
||||
phy_start_aneg(phydev);
|
||||
|
||||
return 0;
|
||||
no_phy:
|
||||
|
|
|
@ -145,7 +145,7 @@ int cvm_oct_rgmii_open(struct net_device *dev)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (priv->phydev) {
|
||||
if (dev->phydev) {
|
||||
/*
|
||||
* In phydev mode, we need still periodic polling for the
|
||||
* preamble error checking, and we also need to call this
|
||||
|
|
|
@ -457,10 +457,8 @@ int cvm_oct_common_init(struct net_device *dev)
|
|||
|
||||
void cvm_oct_common_uninit(struct net_device *dev)
|
||||
{
|
||||
struct octeon_ethernet *priv = netdev_priv(dev);
|
||||
|
||||
if (priv->phydev)
|
||||
phy_disconnect(priv->phydev);
|
||||
if (dev->phydev)
|
||||
phy_disconnect(dev->phydev);
|
||||
}
|
||||
|
||||
int cvm_oct_common_open(struct net_device *dev,
|
||||
|
@ -484,10 +482,10 @@ int cvm_oct_common_open(struct net_device *dev,
|
|||
if (octeon_is_simulation())
|
||||
return 0;
|
||||
|
||||
if (priv->phydev) {
|
||||
int r = phy_read_status(priv->phydev);
|
||||
if (dev->phydev) {
|
||||
int r = phy_read_status(dev->phydev);
|
||||
|
||||
if (r == 0 && priv->phydev->link == 0)
|
||||
if (r == 0 && dev->phydev->link == 0)
|
||||
netif_carrier_off(dev);
|
||||
cvm_oct_adjust_link(dev);
|
||||
} else {
|
||||
|
|
|
@ -40,7 +40,6 @@ struct octeon_ethernet {
|
|||
struct sk_buff_head tx_free_list[16];
|
||||
/* Device statistics */
|
||||
struct net_device_stats stats;
|
||||
struct phy_device *phydev;
|
||||
unsigned int last_speed;
|
||||
unsigned int last_link;
|
||||
/* Last negotiated link state */
|
||||
|
|
Loading…
Reference in New Issue