Commit d3ca8fb1 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by David S. Miller

ftgmac100: Add a tx timeout handler

We have a reset task to reset our chip, use it.
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent eb976a55
...@@ -1250,6 +1250,17 @@ static int ftgmac100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int ...@@ -1250,6 +1250,17 @@ static int ftgmac100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int
return phy_mii_ioctl(netdev->phydev, ifr, cmd); return phy_mii_ioctl(netdev->phydev, ifr, cmd);
} }
static void ftgmac100_tx_timeout(struct net_device *netdev)
{
struct ftgmac100 *priv = netdev_priv(netdev);
/* Disable all interrupts */
iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
/* Do the reset outside of interrupt context */
schedule_work(&priv->reset_task);
}
static const struct net_device_ops ftgmac100_netdev_ops = { static const struct net_device_ops ftgmac100_netdev_ops = {
.ndo_open = ftgmac100_open, .ndo_open = ftgmac100_open,
.ndo_stop = ftgmac100_stop, .ndo_stop = ftgmac100_stop,
...@@ -1257,6 +1268,7 @@ static const struct net_device_ops ftgmac100_netdev_ops = { ...@@ -1257,6 +1268,7 @@ static const struct net_device_ops ftgmac100_netdev_ops = {
.ndo_set_mac_address = ftgmac100_set_mac_addr, .ndo_set_mac_address = ftgmac100_set_mac_addr,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = ftgmac100_do_ioctl, .ndo_do_ioctl = ftgmac100_do_ioctl,
.ndo_tx_timeout = ftgmac100_tx_timeout,
}; };
static int ftgmac100_setup_mdio(struct net_device *netdev) static int ftgmac100_setup_mdio(struct net_device *netdev)
...@@ -1361,6 +1373,7 @@ static int ftgmac100_probe(struct platform_device *pdev) ...@@ -1361,6 +1373,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
netdev->ethtool_ops = &ftgmac100_ethtool_ops; netdev->ethtool_ops = &ftgmac100_ethtool_ops;
netdev->netdev_ops = &ftgmac100_netdev_ops; netdev->netdev_ops = &ftgmac100_netdev_ops;
netdev->watchdog_timeo = 5 * HZ;
platform_set_drvdata(pdev, netdev); platform_set_drvdata(pdev, netdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment