ar71xx/ath79: ag71xx: fix sleep in atomic
[openwrt/openwrt.git] / target / linux / ath79 / files / drivers / net / ethernet / atheros / ag71xx / ag71xx_main.c
index 8cff56a11a66f9c90e75c4d67acfd2e1cb965005..3b2584c132e414031c8922349b801b433c797517 100644 (file)
@@ -581,6 +581,7 @@ static void ath79_mii0_ctrl_set_if(struct ag71xx *ag)
                mii_if = AR71XX_MII0_CTRL_IF_GMII;
                break;
        case PHY_INTERFACE_MODE_RGMII:
+       case PHY_INTERFACE_MODE_RGMII_ID:
                mii_if = AR71XX_MII0_CTRL_IF_RGMII;
                break;
        case PHY_INTERFACE_MODE_RMII:
@@ -603,6 +604,7 @@ static void ath79_mii1_ctrl_set_if(struct ag71xx *ag)
                mii_if = AR71XX_MII1_CTRL_IF_RMII;
                break;
        case PHY_INTERFACE_MODE_RGMII:
+       case PHY_INTERFACE_MODE_RGMII_ID:
                mii_if = AR71XX_MII1_CTRL_IF_RGMII;
                break;
        default:
@@ -763,10 +765,6 @@ static int ag71xx_hw_enable(struct ag71xx *ag)
 
 static void ag71xx_hw_disable(struct ag71xx *ag)
 {
-       unsigned long flags;
-
-       spin_lock_irqsave(&ag->lock, flags);
-
        netif_stop_queue(ag->dev);
 
        ag71xx_hw_stop(ag);
@@ -775,8 +773,6 @@ static void ag71xx_hw_disable(struct ag71xx *ag)
        napi_disable(&ag->napi);
        del_timer_sync(&ag->oom_timer);
 
-       spin_unlock_irqrestore(&ag->lock, flags);
-
        ag71xx_rings_cleanup(ag);
 }
 
@@ -946,18 +942,9 @@ err_drop:
 static int ag71xx_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 {
        struct ag71xx *ag = netdev_priv(dev);
-       int ret;
 
-       switch (cmd) {
-       case SIOCETHTOOL:
-               if (ag->phy_dev == NULL)
-                       break;
-
-               spin_lock_irq(&ag->lock);
-               ret = phy_ethtool_ioctl(ag->phy_dev, (void *) ifr->ifr_data);
-               spin_unlock_irq(&ag->lock);
-               return ret;
 
+       switch (cmd) {
        case SIOCSIFHWADDR:
                if (copy_from_user
                        (dev->dev_addr, ifr->ifr_data, sizeof(dev->dev_addr)))