.. | .. |
---|
33 | 33 | #include "sun4i-emac.h" |
---|
34 | 34 | |
---|
35 | 35 | #define DRV_NAME "sun4i-emac" |
---|
36 | | -#define DRV_VERSION "1.02" |
---|
37 | 36 | |
---|
38 | 37 | #define EMAC_MAX_FRAME_LEN 0x0600 |
---|
39 | 38 | |
---|
.. | .. |
---|
172 | 171 | } |
---|
173 | 172 | |
---|
174 | 173 | /* mask with MAC supported features */ |
---|
175 | | - phydev->supported &= PHY_BASIC_FEATURES; |
---|
176 | | - phydev->advertising = phydev->supported; |
---|
| 174 | + phy_set_max_speed(phydev, SPEED_100); |
---|
177 | 175 | |
---|
178 | 176 | db->link = 0; |
---|
179 | 177 | db->speed = 0; |
---|
.. | .. |
---|
208 | 206 | readsl(reg, data, round_up(count, 4) / 4); |
---|
209 | 207 | } |
---|
210 | 208 | |
---|
211 | | -static int emac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) |
---|
212 | | -{ |
---|
213 | | - struct phy_device *phydev = dev->phydev; |
---|
214 | | - |
---|
215 | | - if (!netif_running(dev)) |
---|
216 | | - return -EINVAL; |
---|
217 | | - |
---|
218 | | - if (!phydev) |
---|
219 | | - return -ENODEV; |
---|
220 | | - |
---|
221 | | - return phy_mii_ioctl(phydev, rq, cmd); |
---|
222 | | -} |
---|
223 | | - |
---|
224 | 209 | /* ethtool ops */ |
---|
225 | 210 | static void emac_get_drvinfo(struct net_device *dev, |
---|
226 | 211 | struct ethtool_drvinfo *info) |
---|
227 | 212 | { |
---|
228 | | - strlcpy(info->driver, DRV_NAME, sizeof(DRV_NAME)); |
---|
229 | | - strlcpy(info->version, DRV_VERSION, sizeof(DRV_VERSION)); |
---|
| 213 | + strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); |
---|
230 | 214 | strlcpy(info->bus_info, dev_name(&dev->dev), sizeof(info->bus_info)); |
---|
231 | 215 | } |
---|
232 | 216 | |
---|
.. | .. |
---|
408 | 392 | } |
---|
409 | 393 | |
---|
410 | 394 | /* Our watchdog timed out. Called by the networking layer */ |
---|
411 | | -static void emac_timeout(struct net_device *dev) |
---|
| 395 | +static void emac_timeout(struct net_device *dev, unsigned int txqueue) |
---|
412 | 396 | { |
---|
413 | 397 | struct emac_board_info *db = netdev_priv(dev); |
---|
414 | 398 | unsigned long flags; |
---|
.. | .. |
---|
656 | 640 | struct net_device *dev = dev_id; |
---|
657 | 641 | struct emac_board_info *db = netdev_priv(dev); |
---|
658 | 642 | int int_status; |
---|
659 | | - unsigned long flags; |
---|
660 | 643 | unsigned int reg_val; |
---|
661 | 644 | |
---|
662 | 645 | /* A real interrupt coming */ |
---|
663 | 646 | |
---|
664 | | - /* holders of db->lock must always block IRQs */ |
---|
665 | | - spin_lock_irqsave(&db->lock, flags); |
---|
| 647 | + spin_lock(&db->lock); |
---|
666 | 648 | |
---|
667 | 649 | /* Disable all interrupts */ |
---|
668 | 650 | writel(0, db->membase + EMAC_INT_CTL_REG); |
---|
.. | .. |
---|
696 | 678 | reg_val |= (0xf << 0) | (0x01 << 8); |
---|
697 | 679 | writel(reg_val, db->membase + EMAC_INT_CTL_REG); |
---|
698 | 680 | } |
---|
699 | | - spin_unlock_irqrestore(&db->lock, flags); |
---|
| 681 | + spin_unlock(&db->lock); |
---|
700 | 682 | |
---|
701 | 683 | return IRQ_HANDLED; |
---|
702 | 684 | } |
---|
.. | .. |
---|
792 | 774 | .ndo_start_xmit = emac_start_xmit, |
---|
793 | 775 | .ndo_tx_timeout = emac_timeout, |
---|
794 | 776 | .ndo_set_rx_mode = emac_set_rx_mode, |
---|
795 | | - .ndo_do_ioctl = emac_ioctl, |
---|
| 777 | + .ndo_do_ioctl = phy_do_ioctl_running, |
---|
796 | 778 | .ndo_validate_addr = eth_validate_addr, |
---|
797 | 779 | .ndo_set_mac_address = emac_set_mac_address, |
---|
798 | 780 | #ifdef CONFIG_NET_POLL_CONTROLLER |
---|
.. | .. |
---|
819 | 801 | SET_NETDEV_DEV(ndev, &pdev->dev); |
---|
820 | 802 | |
---|
821 | 803 | db = netdev_priv(ndev); |
---|
822 | | - memset(db, 0, sizeof(*db)); |
---|
823 | 804 | |
---|
824 | 805 | db->dev = &pdev->dev; |
---|
825 | 806 | db->ndev = ndev; |
---|
.. | .. |
---|
862 | 843 | goto out_clk_disable_unprepare; |
---|
863 | 844 | } |
---|
864 | 845 | |
---|
865 | | - db->phy_node = of_parse_phandle(np, "phy", 0); |
---|
| 846 | + db->phy_node = of_parse_phandle(np, "phy-handle", 0); |
---|
| 847 | + if (!db->phy_node) |
---|
| 848 | + db->phy_node = of_parse_phandle(np, "phy", 0); |
---|
866 | 849 | if (!db->phy_node) { |
---|
867 | 850 | dev_err(&pdev->dev, "no associated PHY\n"); |
---|
868 | 851 | ret = -ENODEV; |
---|
.. | .. |
---|
871 | 854 | |
---|
872 | 855 | /* Read MAC-address from DT */ |
---|
873 | 856 | mac_addr = of_get_mac_address(np); |
---|
874 | | - if (mac_addr) |
---|
875 | | - memcpy(ndev->dev_addr, mac_addr, ETH_ALEN); |
---|
| 857 | + if (!IS_ERR(mac_addr)) |
---|
| 858 | + ether_addr_copy(ndev->dev_addr, mac_addr); |
---|
876 | 859 | |
---|
877 | 860 | /* Check if the MAC address is valid, if not get a random one */ |
---|
878 | 861 | if (!is_valid_ether_addr(ndev->dev_addr)) { |
---|