Merge ra.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux
All conflicts were trivial overlapping changes, so reasonably easy to resolve. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -980,6 +980,13 @@ static void ravb_adjust_link(struct net_device *ndev)
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
struct phy_device *phydev = ndev->phydev;
|
||||
bool new_state = false;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
|
||||
/* Disable TX and RX right over here, if E-MAC change is ignored */
|
||||
if (priv->no_avb_link)
|
||||
ravb_rcv_snd_disable(ndev);
|
||||
|
||||
if (phydev->link) {
|
||||
if (phydev->duplex != priv->duplex) {
|
||||
@@ -997,18 +1004,21 @@ static void ravb_adjust_link(struct net_device *ndev)
|
||||
ravb_modify(ndev, ECMR, ECMR_TXF, 0);
|
||||
new_state = true;
|
||||
priv->link = phydev->link;
|
||||
if (priv->no_avb_link)
|
||||
ravb_rcv_snd_enable(ndev);
|
||||
}
|
||||
} else if (priv->link) {
|
||||
new_state = true;
|
||||
priv->link = 0;
|
||||
priv->speed = 0;
|
||||
priv->duplex = -1;
|
||||
if (priv->no_avb_link)
|
||||
ravb_rcv_snd_disable(ndev);
|
||||
}
|
||||
|
||||
/* Enable TX and RX right over here, if E-MAC change is ignored */
|
||||
if (priv->no_avb_link && phydev->link)
|
||||
ravb_rcv_snd_enable(ndev);
|
||||
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
if (new_state && netif_msg_link(priv))
|
||||
phy_print_status(phydev);
|
||||
}
|
||||
@@ -1096,75 +1106,6 @@ static int ravb_phy_start(struct net_device *ndev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ravb_get_link_ksettings(struct net_device *ndev,
|
||||
struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
unsigned long flags;
|
||||
|
||||
if (!ndev->phydev)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
phy_ethtool_ksettings_get(ndev->phydev, cmd);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ravb_set_link_ksettings(struct net_device *ndev,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
unsigned long flags;
|
||||
int error;
|
||||
|
||||
if (!ndev->phydev)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
|
||||
/* Disable TX and RX */
|
||||
ravb_rcv_snd_disable(ndev);
|
||||
|
||||
error = phy_ethtool_ksettings_set(ndev->phydev, cmd);
|
||||
if (error)
|
||||
goto error_exit;
|
||||
|
||||
if (cmd->base.duplex == DUPLEX_FULL)
|
||||
priv->duplex = 1;
|
||||
else
|
||||
priv->duplex = 0;
|
||||
|
||||
ravb_set_duplex(ndev);
|
||||
|
||||
error_exit:
|
||||
mdelay(1);
|
||||
|
||||
/* Enable TX and RX */
|
||||
ravb_rcv_snd_enable(ndev);
|
||||
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static int ravb_nway_reset(struct net_device *ndev)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
int error = -ENODEV;
|
||||
unsigned long flags;
|
||||
|
||||
if (ndev->phydev) {
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
error = phy_start_aneg(ndev->phydev);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static u32 ravb_get_msglevel(struct net_device *ndev)
|
||||
{
|
||||
struct ravb_private *priv = netdev_priv(ndev);
|
||||
@@ -1377,7 +1318,7 @@ static int ravb_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
|
||||
}
|
||||
|
||||
static const struct ethtool_ops ravb_ethtool_ops = {
|
||||
.nway_reset = ravb_nway_reset,
|
||||
.nway_reset = phy_ethtool_nway_reset,
|
||||
.get_msglevel = ravb_get_msglevel,
|
||||
.set_msglevel = ravb_set_msglevel,
|
||||
.get_link = ethtool_op_get_link,
|
||||
@@ -1387,8 +1328,8 @@ static const struct ethtool_ops ravb_ethtool_ops = {
|
||||
.get_ringparam = ravb_get_ringparam,
|
||||
.set_ringparam = ravb_set_ringparam,
|
||||
.get_ts_info = ravb_get_ts_info,
|
||||
.get_link_ksettings = ravb_get_link_ksettings,
|
||||
.set_link_ksettings = ravb_set_link_ksettings,
|
||||
.get_link_ksettings = phy_ethtool_get_link_ksettings,
|
||||
.set_link_ksettings = phy_ethtool_set_link_ksettings,
|
||||
.get_wol = ravb_get_wol,
|
||||
.set_wol = ravb_set_wol,
|
||||
};
|
||||
|
@@ -1921,8 +1921,15 @@ static void sh_eth_adjust_link(struct net_device *ndev)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
struct phy_device *phydev = ndev->phydev;
|
||||
unsigned long flags;
|
||||
int new_state = 0;
|
||||
|
||||
spin_lock_irqsave(&mdp->lock, flags);
|
||||
|
||||
/* Disable TX and RX right over here, if E-MAC change is ignored */
|
||||
if (mdp->cd->no_psr || mdp->no_ether_link)
|
||||
sh_eth_rcv_snd_disable(ndev);
|
||||
|
||||
if (phydev->link) {
|
||||
if (phydev->duplex != mdp->duplex) {
|
||||
new_state = 1;
|
||||
@@ -1941,18 +1948,21 @@ static void sh_eth_adjust_link(struct net_device *ndev)
|
||||
sh_eth_modify(ndev, ECMR, ECMR_TXF, 0);
|
||||
new_state = 1;
|
||||
mdp->link = phydev->link;
|
||||
if (mdp->cd->no_psr || mdp->no_ether_link)
|
||||
sh_eth_rcv_snd_enable(ndev);
|
||||
}
|
||||
} else if (mdp->link) {
|
||||
new_state = 1;
|
||||
mdp->link = 0;
|
||||
mdp->speed = 0;
|
||||
mdp->duplex = -1;
|
||||
if (mdp->cd->no_psr || mdp->no_ether_link)
|
||||
sh_eth_rcv_snd_disable(ndev);
|
||||
}
|
||||
|
||||
/* Enable TX and RX right over here, if E-MAC change is ignored */
|
||||
if ((mdp->cd->no_psr || mdp->no_ether_link) && phydev->link)
|
||||
sh_eth_rcv_snd_enable(ndev);
|
||||
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&mdp->lock, flags);
|
||||
|
||||
if (new_state && netif_msg_link(mdp))
|
||||
phy_print_status(phydev);
|
||||
}
|
||||
@@ -2024,60 +2034,6 @@ static int sh_eth_phy_start(struct net_device *ndev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sh_eth_get_link_ksettings(struct net_device *ndev,
|
||||
struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
unsigned long flags;
|
||||
|
||||
if (!ndev->phydev)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&mdp->lock, flags);
|
||||
phy_ethtool_ksettings_get(ndev->phydev, cmd);
|
||||
spin_unlock_irqrestore(&mdp->lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sh_eth_set_link_ksettings(struct net_device *ndev,
|
||||
const struct ethtool_link_ksettings *cmd)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
if (!ndev->phydev)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&mdp->lock, flags);
|
||||
|
||||
/* disable tx and rx */
|
||||
sh_eth_rcv_snd_disable(ndev);
|
||||
|
||||
ret = phy_ethtool_ksettings_set(ndev->phydev, cmd);
|
||||
if (ret)
|
||||
goto error_exit;
|
||||
|
||||
if (cmd->base.duplex == DUPLEX_FULL)
|
||||
mdp->duplex = 1;
|
||||
else
|
||||
mdp->duplex = 0;
|
||||
|
||||
if (mdp->cd->set_duplex)
|
||||
mdp->cd->set_duplex(ndev);
|
||||
|
||||
error_exit:
|
||||
mdelay(1);
|
||||
|
||||
/* enable tx and rx */
|
||||
sh_eth_rcv_snd_enable(ndev);
|
||||
|
||||
spin_unlock_irqrestore(&mdp->lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* If it is ever necessary to increase SH_ETH_REG_DUMP_MAX_REGS, the
|
||||
* version must be bumped as well. Just adding registers up to that
|
||||
* limit is fine, as long as the existing register indices don't
|
||||
@@ -2257,22 +2213,6 @@ static void sh_eth_get_regs(struct net_device *ndev, struct ethtool_regs *regs,
|
||||
pm_runtime_put_sync(&mdp->pdev->dev);
|
||||
}
|
||||
|
||||
static int sh_eth_nway_reset(struct net_device *ndev)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
if (!ndev->phydev)
|
||||
return -ENODEV;
|
||||
|
||||
spin_lock_irqsave(&mdp->lock, flags);
|
||||
ret = phy_start_aneg(ndev->phydev);
|
||||
spin_unlock_irqrestore(&mdp->lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static u32 sh_eth_get_msglevel(struct net_device *ndev)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
@@ -2423,7 +2363,7 @@ static int sh_eth_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
|
||||
static const struct ethtool_ops sh_eth_ethtool_ops = {
|
||||
.get_regs_len = sh_eth_get_regs_len,
|
||||
.get_regs = sh_eth_get_regs,
|
||||
.nway_reset = sh_eth_nway_reset,
|
||||
.nway_reset = phy_ethtool_nway_reset,
|
||||
.get_msglevel = sh_eth_get_msglevel,
|
||||
.set_msglevel = sh_eth_set_msglevel,
|
||||
.get_link = ethtool_op_get_link,
|
||||
@@ -2432,8 +2372,8 @@ static const struct ethtool_ops sh_eth_ethtool_ops = {
|
||||
.get_sset_count = sh_eth_get_sset_count,
|
||||
.get_ringparam = sh_eth_get_ringparam,
|
||||
.set_ringparam = sh_eth_set_ringparam,
|
||||
.get_link_ksettings = sh_eth_get_link_ksettings,
|
||||
.set_link_ksettings = sh_eth_set_link_ksettings,
|
||||
.get_link_ksettings = phy_ethtool_get_link_ksettings,
|
||||
.set_link_ksettings = phy_ethtool_set_link_ksettings,
|
||||
.get_wol = sh_eth_get_wol,
|
||||
.set_wol = sh_eth_set_wol,
|
||||
};
|
||||
|
Reference in New Issue
Block a user