| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0+ |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) 2015 Microchip Technology |
|---|
| 3 | | - * |
|---|
| 4 | | - * This program is free software; you can redistribute it and/or |
|---|
| 5 | | - * modify it under the terms of the GNU General Public License |
|---|
| 6 | | - * as published by the Free Software Foundation; either version 2 |
|---|
| 7 | | - * of the License, or (at your option) any later version. |
|---|
| 8 | | - * |
|---|
| 9 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 10 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 11 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 12 | | - * GNU General Public License for more details. |
|---|
| 13 | | - * |
|---|
| 14 | | - * You should have received a copy of the GNU General Public License |
|---|
| 15 | | - * along with this program; if not, see <http://www.gnu.org/licenses/>. |
|---|
| 16 | 4 | */ |
|---|
| 17 | 5 | #include <linux/version.h> |
|---|
| 18 | 6 | #include <linux/module.h> |
|---|
| .. | .. |
|---|
| 25 | 13 | #include <linux/slab.h> |
|---|
| 26 | 14 | #include <linux/if_vlan.h> |
|---|
| 27 | 15 | #include <linux/uaccess.h> |
|---|
| 16 | +#include <linux/linkmode.h> |
|---|
| 28 | 17 | #include <linux/list.h> |
|---|
| 29 | 18 | #include <linux/ip.h> |
|---|
| 30 | 19 | #include <linux/ipv6.h> |
|---|
| .. | .. |
|---|
| 835 | 824 | u32 length, u8 *data) |
|---|
| 836 | 825 | { |
|---|
| 837 | 826 | int i; |
|---|
| 838 | | - int ret; |
|---|
| 839 | 827 | u32 buf; |
|---|
| 840 | 828 | unsigned long timeout; |
|---|
| 841 | 829 | |
|---|
| 842 | | - ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 830 | + lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 843 | 831 | |
|---|
| 844 | 832 | if (buf & OTP_PWR_DN_PWRDN_N_) { |
|---|
| 845 | 833 | /* clear it and wait to be cleared */ |
|---|
| 846 | | - ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0); |
|---|
| 834 | + lan78xx_write_reg(dev, OTP_PWR_DN, 0); |
|---|
| 847 | 835 | |
|---|
| 848 | 836 | timeout = jiffies + HZ; |
|---|
| 849 | 837 | do { |
|---|
| 850 | 838 | usleep_range(1, 10); |
|---|
| 851 | | - ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 839 | + lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 852 | 840 | if (time_after(jiffies, timeout)) { |
|---|
| 853 | 841 | netdev_warn(dev->net, |
|---|
| 854 | 842 | "timeout on OTP_PWR_DN"); |
|---|
| .. | .. |
|---|
| 858 | 846 | } |
|---|
| 859 | 847 | |
|---|
| 860 | 848 | for (i = 0; i < length; i++) { |
|---|
| 861 | | - ret = lan78xx_write_reg(dev, OTP_ADDR1, |
|---|
| 849 | + lan78xx_write_reg(dev, OTP_ADDR1, |
|---|
| 862 | 850 | ((offset + i) >> 8) & OTP_ADDR1_15_11); |
|---|
| 863 | | - ret = lan78xx_write_reg(dev, OTP_ADDR2, |
|---|
| 851 | + lan78xx_write_reg(dev, OTP_ADDR2, |
|---|
| 864 | 852 | ((offset + i) & OTP_ADDR2_10_3)); |
|---|
| 865 | 853 | |
|---|
| 866 | | - ret = lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_); |
|---|
| 867 | | - ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); |
|---|
| 854 | + lan78xx_write_reg(dev, OTP_FUNC_CMD, OTP_FUNC_CMD_READ_); |
|---|
| 855 | + lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); |
|---|
| 868 | 856 | |
|---|
| 869 | 857 | timeout = jiffies + HZ; |
|---|
| 870 | 858 | do { |
|---|
| 871 | 859 | udelay(1); |
|---|
| 872 | | - ret = lan78xx_read_reg(dev, OTP_STATUS, &buf); |
|---|
| 860 | + lan78xx_read_reg(dev, OTP_STATUS, &buf); |
|---|
| 873 | 861 | if (time_after(jiffies, timeout)) { |
|---|
| 874 | 862 | netdev_warn(dev->net, |
|---|
| 875 | 863 | "timeout on OTP_STATUS"); |
|---|
| .. | .. |
|---|
| 877 | 865 | } |
|---|
| 878 | 866 | } while (buf & OTP_STATUS_BUSY_); |
|---|
| 879 | 867 | |
|---|
| 880 | | - ret = lan78xx_read_reg(dev, OTP_RD_DATA, &buf); |
|---|
| 868 | + lan78xx_read_reg(dev, OTP_RD_DATA, &buf); |
|---|
| 881 | 869 | |
|---|
| 882 | 870 | data[i] = (u8)(buf & 0xFF); |
|---|
| 883 | 871 | } |
|---|
| .. | .. |
|---|
| 889 | 877 | u32 length, u8 *data) |
|---|
| 890 | 878 | { |
|---|
| 891 | 879 | int i; |
|---|
| 892 | | - int ret; |
|---|
| 893 | 880 | u32 buf; |
|---|
| 894 | 881 | unsigned long timeout; |
|---|
| 895 | 882 | |
|---|
| 896 | | - ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 883 | + lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 897 | 884 | |
|---|
| 898 | 885 | if (buf & OTP_PWR_DN_PWRDN_N_) { |
|---|
| 899 | 886 | /* clear it and wait to be cleared */ |
|---|
| 900 | | - ret = lan78xx_write_reg(dev, OTP_PWR_DN, 0); |
|---|
| 887 | + lan78xx_write_reg(dev, OTP_PWR_DN, 0); |
|---|
| 901 | 888 | |
|---|
| 902 | 889 | timeout = jiffies + HZ; |
|---|
| 903 | 890 | do { |
|---|
| 904 | 891 | udelay(1); |
|---|
| 905 | | - ret = lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 892 | + lan78xx_read_reg(dev, OTP_PWR_DN, &buf); |
|---|
| 906 | 893 | if (time_after(jiffies, timeout)) { |
|---|
| 907 | 894 | netdev_warn(dev->net, |
|---|
| 908 | 895 | "timeout on OTP_PWR_DN completion"); |
|---|
| .. | .. |
|---|
| 912 | 899 | } |
|---|
| 913 | 900 | |
|---|
| 914 | 901 | /* set to BYTE program mode */ |
|---|
| 915 | | - ret = lan78xx_write_reg(dev, OTP_PRGM_MODE, OTP_PRGM_MODE_BYTE_); |
|---|
| 902 | + lan78xx_write_reg(dev, OTP_PRGM_MODE, OTP_PRGM_MODE_BYTE_); |
|---|
| 916 | 903 | |
|---|
| 917 | 904 | for (i = 0; i < length; i++) { |
|---|
| 918 | | - ret = lan78xx_write_reg(dev, OTP_ADDR1, |
|---|
| 905 | + lan78xx_write_reg(dev, OTP_ADDR1, |
|---|
| 919 | 906 | ((offset + i) >> 8) & OTP_ADDR1_15_11); |
|---|
| 920 | | - ret = lan78xx_write_reg(dev, OTP_ADDR2, |
|---|
| 907 | + lan78xx_write_reg(dev, OTP_ADDR2, |
|---|
| 921 | 908 | ((offset + i) & OTP_ADDR2_10_3)); |
|---|
| 922 | | - ret = lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]); |
|---|
| 923 | | - ret = lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_); |
|---|
| 924 | | - ret = lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); |
|---|
| 909 | + lan78xx_write_reg(dev, OTP_PRGM_DATA, data[i]); |
|---|
| 910 | + lan78xx_write_reg(dev, OTP_TST_CMD, OTP_TST_CMD_PRGVRFY_); |
|---|
| 911 | + lan78xx_write_reg(dev, OTP_CMD_GO, OTP_CMD_GO_GO_); |
|---|
| 925 | 912 | |
|---|
| 926 | 913 | timeout = jiffies + HZ; |
|---|
| 927 | 914 | do { |
|---|
| 928 | 915 | udelay(1); |
|---|
| 929 | | - ret = lan78xx_read_reg(dev, OTP_STATUS, &buf); |
|---|
| 916 | + lan78xx_read_reg(dev, OTP_STATUS, &buf); |
|---|
| 930 | 917 | if (time_after(jiffies, timeout)) { |
|---|
| 931 | 918 | netdev_warn(dev->net, |
|---|
| 932 | 919 | "Timeout on OTP_STATUS completion"); |
|---|
| .. | .. |
|---|
| 1024 | 1011 | static void lan78xx_set_addr_filter(struct lan78xx_priv *pdata, |
|---|
| 1025 | 1012 | int index, u8 addr[ETH_ALEN]) |
|---|
| 1026 | 1013 | { |
|---|
| 1027 | | - u32 temp; |
|---|
| 1014 | + u32 temp; |
|---|
| 1028 | 1015 | |
|---|
| 1029 | 1016 | if ((pdata) && (index > 0) && (index < NUM_OF_MAF)) { |
|---|
| 1030 | 1017 | temp = addr[3]; |
|---|
| .. | .. |
|---|
| 1051 | 1038 | container_of(param, struct lan78xx_priv, set_multicast); |
|---|
| 1052 | 1039 | struct lan78xx_net *dev = pdata->dev; |
|---|
| 1053 | 1040 | int i; |
|---|
| 1054 | | - int ret; |
|---|
| 1055 | 1041 | |
|---|
| 1056 | 1042 | netif_dbg(dev, drv, dev->net, "deferred multicast write 0x%08x\n", |
|---|
| 1057 | 1043 | pdata->rfe_ctl); |
|---|
| .. | .. |
|---|
| 1060 | 1046 | DP_SEL_VHF_HASH_LEN, pdata->mchash_table); |
|---|
| 1061 | 1047 | |
|---|
| 1062 | 1048 | for (i = 1; i < NUM_OF_MAF; i++) { |
|---|
| 1063 | | - ret = lan78xx_write_reg(dev, MAF_HI(i), 0); |
|---|
| 1064 | | - ret = lan78xx_write_reg(dev, MAF_LO(i), |
|---|
| 1049 | + lan78xx_write_reg(dev, MAF_HI(i), 0); |
|---|
| 1050 | + lan78xx_write_reg(dev, MAF_LO(i), |
|---|
| 1065 | 1051 | pdata->pfilter_table[i][1]); |
|---|
| 1066 | | - ret = lan78xx_write_reg(dev, MAF_HI(i), |
|---|
| 1052 | + lan78xx_write_reg(dev, MAF_HI(i), |
|---|
| 1067 | 1053 | pdata->pfilter_table[i][0]); |
|---|
| 1068 | 1054 | } |
|---|
| 1069 | 1055 | |
|---|
| 1070 | | - ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); |
|---|
| 1056 | + lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); |
|---|
| 1071 | 1057 | } |
|---|
| 1072 | 1058 | |
|---|
| 1073 | 1059 | static void lan78xx_set_multicast(struct net_device *netdev) |
|---|
| .. | .. |
|---|
| 1137 | 1123 | u16 lcladv, u16 rmtadv) |
|---|
| 1138 | 1124 | { |
|---|
| 1139 | 1125 | u32 flow = 0, fct_flow = 0; |
|---|
| 1140 | | - int ret; |
|---|
| 1141 | 1126 | u8 cap; |
|---|
| 1142 | 1127 | |
|---|
| 1143 | 1128 | if (dev->fc_autoneg) |
|---|
| .. | .. |
|---|
| 1160 | 1145 | (cap & FLOW_CTRL_RX ? "enabled" : "disabled"), |
|---|
| 1161 | 1146 | (cap & FLOW_CTRL_TX ? "enabled" : "disabled")); |
|---|
| 1162 | 1147 | |
|---|
| 1163 | | - ret = lan78xx_write_reg(dev, FCT_FLOW, fct_flow); |
|---|
| 1148 | + lan78xx_write_reg(dev, FCT_FLOW, fct_flow); |
|---|
| 1164 | 1149 | |
|---|
| 1165 | 1150 | /* threshold value should be set before enabling flow */ |
|---|
| 1166 | | - ret = lan78xx_write_reg(dev, FLOW, flow); |
|---|
| 1151 | + lan78xx_write_reg(dev, FLOW, flow); |
|---|
| 1167 | 1152 | |
|---|
| 1168 | 1153 | return 0; |
|---|
| 1169 | 1154 | } |
|---|
| .. | .. |
|---|
| 1271 | 1256 | return; |
|---|
| 1272 | 1257 | } |
|---|
| 1273 | 1258 | |
|---|
| 1274 | | - memcpy(&intdata, urb->transfer_buffer, 4); |
|---|
| 1275 | | - le32_to_cpus(&intdata); |
|---|
| 1259 | + intdata = get_unaligned_le32(urb->transfer_buffer); |
|---|
| 1276 | 1260 | |
|---|
| 1277 | 1261 | if (intdata & INT_ENP_PHY_INT) { |
|---|
| 1278 | 1262 | netif_dbg(dev, link, dev->net, "PHY INTR: 0x%08x\n", intdata); |
|---|
| .. | .. |
|---|
| 1608 | 1592 | dev->fc_request_control |= FLOW_CTRL_TX; |
|---|
| 1609 | 1593 | |
|---|
| 1610 | 1594 | if (ecmd.base.autoneg) { |
|---|
| 1595 | + __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, }; |
|---|
| 1611 | 1596 | u32 mii_adv; |
|---|
| 1612 | | - u32 advertising; |
|---|
| 1613 | 1597 | |
|---|
| 1614 | | - ethtool_convert_link_mode_to_legacy_u32( |
|---|
| 1615 | | - &advertising, ecmd.link_modes.advertising); |
|---|
| 1616 | | - |
|---|
| 1617 | | - advertising &= ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause); |
|---|
| 1598 | + linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT, |
|---|
| 1599 | + ecmd.link_modes.advertising); |
|---|
| 1600 | + linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, |
|---|
| 1601 | + ecmd.link_modes.advertising); |
|---|
| 1618 | 1602 | mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); |
|---|
| 1619 | | - advertising |= mii_adv_to_ethtool_adv_t(mii_adv); |
|---|
| 1620 | | - |
|---|
| 1621 | | - ethtool_convert_legacy_u32_to_link_mode( |
|---|
| 1622 | | - ecmd.link_modes.advertising, advertising); |
|---|
| 1603 | + mii_adv_to_linkmode_adv_t(fc, mii_adv); |
|---|
| 1604 | + linkmode_or(ecmd.link_modes.advertising, fc, |
|---|
| 1605 | + ecmd.link_modes.advertising); |
|---|
| 1623 | 1606 | |
|---|
| 1624 | 1607 | phy_ethtool_ksettings_set(phydev, &ecmd); |
|---|
| 1625 | 1608 | } |
|---|
| .. | .. |
|---|
| 1683 | 1666 | .get_regs = lan78xx_get_regs, |
|---|
| 1684 | 1667 | }; |
|---|
| 1685 | 1668 | |
|---|
| 1686 | | -static int lan78xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) |
|---|
| 1687 | | -{ |
|---|
| 1688 | | - if (!netif_running(netdev)) |
|---|
| 1689 | | - return -EINVAL; |
|---|
| 1690 | | - |
|---|
| 1691 | | - return phy_mii_ioctl(netdev->phydev, rq, cmd); |
|---|
| 1692 | | -} |
|---|
| 1693 | | - |
|---|
| 1694 | 1669 | static void lan78xx_init_mac_address(struct lan78xx_net *dev) |
|---|
| 1695 | 1670 | { |
|---|
| 1696 | 1671 | u32 addr_lo, addr_hi; |
|---|
| 1697 | | - int ret; |
|---|
| 1698 | 1672 | u8 addr[6]; |
|---|
| 1699 | 1673 | |
|---|
| 1700 | | - ret = lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); |
|---|
| 1701 | | - ret = lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); |
|---|
| 1674 | + lan78xx_read_reg(dev, RX_ADDRL, &addr_lo); |
|---|
| 1675 | + lan78xx_read_reg(dev, RX_ADDRH, &addr_hi); |
|---|
| 1702 | 1676 | |
|---|
| 1703 | 1677 | addr[0] = addr_lo & 0xFF; |
|---|
| 1704 | 1678 | addr[1] = (addr_lo >> 8) & 0xFF; |
|---|
| .. | .. |
|---|
| 1731 | 1705 | (addr[2] << 16) | (addr[3] << 24); |
|---|
| 1732 | 1706 | addr_hi = addr[4] | (addr[5] << 8); |
|---|
| 1733 | 1707 | |
|---|
| 1734 | | - ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); |
|---|
| 1735 | | - ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); |
|---|
| 1708 | + lan78xx_write_reg(dev, RX_ADDRL, addr_lo); |
|---|
| 1709 | + lan78xx_write_reg(dev, RX_ADDRH, addr_hi); |
|---|
| 1736 | 1710 | } |
|---|
| 1737 | 1711 | |
|---|
| 1738 | | - ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo); |
|---|
| 1739 | | - ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); |
|---|
| 1712 | + lan78xx_write_reg(dev, MAF_LO(0), addr_lo); |
|---|
| 1713 | + lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); |
|---|
| 1740 | 1714 | |
|---|
| 1741 | 1715 | ether_addr_copy(dev->net->dev_addr, addr); |
|---|
| 1742 | 1716 | } |
|---|
| .. | .. |
|---|
| 1847 | 1821 | |
|---|
| 1848 | 1822 | node = of_get_child_by_name(dev->udev->dev.of_node, "mdio"); |
|---|
| 1849 | 1823 | ret = of_mdiobus_register(dev->mdiobus, node); |
|---|
| 1850 | | - if (node) |
|---|
| 1851 | | - of_node_put(node); |
|---|
| 1824 | + of_node_put(node); |
|---|
| 1852 | 1825 | if (ret) { |
|---|
| 1853 | 1826 | netdev_err(dev->net, "can't register MDIO bus\n"); |
|---|
| 1854 | 1827 | goto exit1; |
|---|
| .. | .. |
|---|
| 1870 | 1843 | static void lan78xx_link_status_change(struct net_device *net) |
|---|
| 1871 | 1844 | { |
|---|
| 1872 | 1845 | struct phy_device *phydev = net->phydev; |
|---|
| 1873 | | - int ret, temp; |
|---|
| 1874 | 1846 | |
|---|
| 1875 | | - /* At forced 100 F/H mode, chip may fail to set mode correctly |
|---|
| 1876 | | - * when cable is switched between long(~50+m) and short one. |
|---|
| 1877 | | - * As workaround, set to 10 before setting to 100 |
|---|
| 1878 | | - * at forced 100 F/H mode. |
|---|
| 1879 | | - */ |
|---|
| 1880 | | - if (!phydev->autoneg && (phydev->speed == 100)) { |
|---|
| 1881 | | - /* disable phy interrupt */ |
|---|
| 1882 | | - temp = phy_read(phydev, LAN88XX_INT_MASK); |
|---|
| 1883 | | - temp &= ~LAN88XX_INT_MASK_MDINTPIN_EN_; |
|---|
| 1884 | | - ret = phy_write(phydev, LAN88XX_INT_MASK, temp); |
|---|
| 1885 | | - |
|---|
| 1886 | | - temp = phy_read(phydev, MII_BMCR); |
|---|
| 1887 | | - temp &= ~(BMCR_SPEED100 | BMCR_SPEED1000); |
|---|
| 1888 | | - phy_write(phydev, MII_BMCR, temp); /* set to 10 first */ |
|---|
| 1889 | | - temp |= BMCR_SPEED100; |
|---|
| 1890 | | - phy_write(phydev, MII_BMCR, temp); /* set to 100 later */ |
|---|
| 1891 | | - |
|---|
| 1892 | | - /* clear pending interrupt generated while workaround */ |
|---|
| 1893 | | - temp = phy_read(phydev, LAN88XX_INT_STS); |
|---|
| 1894 | | - |
|---|
| 1895 | | - /* enable phy interrupt back */ |
|---|
| 1896 | | - temp = phy_read(phydev, LAN88XX_INT_MASK); |
|---|
| 1897 | | - temp |= LAN88XX_INT_MASK_MDINTPIN_EN_; |
|---|
| 1898 | | - ret = phy_write(phydev, LAN88XX_INT_MASK, temp); |
|---|
| 1899 | | - } |
|---|
| 1847 | + phy_print_status(phydev); |
|---|
| 1900 | 1848 | } |
|---|
| 1901 | 1849 | |
|---|
| 1902 | 1850 | static int irq_map(struct irq_domain *d, unsigned int irq, |
|---|
| .. | .. |
|---|
| 1949 | 1897 | struct lan78xx_net *dev = |
|---|
| 1950 | 1898 | container_of(data, struct lan78xx_net, domain_data); |
|---|
| 1951 | 1899 | u32 buf; |
|---|
| 1952 | | - int ret; |
|---|
| 1953 | 1900 | |
|---|
| 1954 | 1901 | /* call register access here because irq_bus_lock & irq_bus_sync_unlock |
|---|
| 1955 | 1902 | * are only two callbacks executed in non-atomic contex. |
|---|
| 1956 | 1903 | */ |
|---|
| 1957 | | - ret = lan78xx_read_reg(dev, INT_EP_CTL, &buf); |
|---|
| 1904 | + lan78xx_read_reg(dev, INT_EP_CTL, &buf); |
|---|
| 1958 | 1905 | if (buf != data->irqenable) |
|---|
| 1959 | | - ret = lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); |
|---|
| 1906 | + lan78xx_write_reg(dev, INT_EP_CTL, data->irqenable); |
|---|
| 1960 | 1907 | |
|---|
| 1961 | 1908 | mutex_unlock(&data->irq_lock); |
|---|
| 1962 | 1909 | } |
|---|
| .. | .. |
|---|
| 2023 | 1970 | static int lan8835_fixup(struct phy_device *phydev) |
|---|
| 2024 | 1971 | { |
|---|
| 2025 | 1972 | int buf; |
|---|
| 2026 | | - int ret; |
|---|
| 2027 | 1973 | struct lan78xx_net *dev = netdev_priv(phydev->attached_dev); |
|---|
| 2028 | 1974 | |
|---|
| 2029 | 1975 | /* LED2/PME_N/IRQ_N/RGMII_ID pin to IRQ_N mode */ |
|---|
| .. | .. |
|---|
| 2033 | 1979 | phy_write_mmd(phydev, MDIO_MMD_PCS, 0x8010, buf); |
|---|
| 2034 | 1980 | |
|---|
| 2035 | 1981 | /* RGMII MAC TXC Delay Enable */ |
|---|
| 2036 | | - ret = lan78xx_write_reg(dev, MAC_RGMII_ID, |
|---|
| 1982 | + lan78xx_write_reg(dev, MAC_RGMII_ID, |
|---|
| 2037 | 1983 | MAC_RGMII_ID_TXC_DELAY_EN_); |
|---|
| 2038 | 1984 | |
|---|
| 2039 | 1985 | /* RGMII TX DLL Tune Adjust */ |
|---|
| 2040 | | - ret = lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); |
|---|
| 1986 | + lan78xx_write_reg(dev, RGMII_TX_BYP_DLL, 0x3D00); |
|---|
| 2041 | 1987 | |
|---|
| 2042 | 1988 | dev->interface = PHY_INTERFACE_MODE_RGMII_TXID; |
|---|
| 2043 | 1989 | |
|---|
| .. | .. |
|---|
| 2075 | 2021 | phydev = phy_find_first(dev->mdiobus); |
|---|
| 2076 | 2022 | if (!phydev) { |
|---|
| 2077 | 2023 | netdev_dbg(dev->net, "PHY Not Found!! Registering Fixed PHY\n"); |
|---|
| 2078 | | - phydev = fixed_phy_register(PHY_POLL, &fphy_status, -1, |
|---|
| 2079 | | - NULL); |
|---|
| 2024 | + phydev = fixed_phy_register(PHY_POLL, &fphy_status, NULL); |
|---|
| 2080 | 2025 | if (IS_ERR(phydev)) { |
|---|
| 2081 | 2026 | netdev_err(dev->net, "No PHY/fixed_PHY found\n"); |
|---|
| 2082 | 2027 | return NULL; |
|---|
| .. | .. |
|---|
| 2119 | 2064 | |
|---|
| 2120 | 2065 | static int lan78xx_phy_init(struct lan78xx_net *dev) |
|---|
| 2121 | 2066 | { |
|---|
| 2067 | + __ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, }; |
|---|
| 2122 | 2068 | int ret; |
|---|
| 2123 | 2069 | u32 mii_adv; |
|---|
| 2124 | 2070 | struct phy_device *phydev; |
|---|
| .. | .. |
|---|
| 2178 | 2124 | } |
|---|
| 2179 | 2125 | |
|---|
| 2180 | 2126 | /* MAC doesn't support 1000T Half */ |
|---|
| 2181 | | - phydev->supported &= ~SUPPORTED_1000baseT_Half; |
|---|
| 2127 | + phy_remove_link_mode(phydev, ETHTOOL_LINK_MODE_1000baseT_Half_BIT); |
|---|
| 2182 | 2128 | |
|---|
| 2183 | 2129 | /* support both flow controls */ |
|---|
| 2184 | 2130 | dev->fc_request_control = (FLOW_CTRL_RX | FLOW_CTRL_TX); |
|---|
| 2185 | | - phydev->advertising &= ~(ADVERTISED_Pause | ADVERTISED_Asym_Pause); |
|---|
| 2131 | + linkmode_clear_bit(ETHTOOL_LINK_MODE_Pause_BIT, |
|---|
| 2132 | + phydev->advertising); |
|---|
| 2133 | + linkmode_clear_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, |
|---|
| 2134 | + phydev->advertising); |
|---|
| 2186 | 2135 | mii_adv = (u32)mii_advertise_flowctrl(dev->fc_request_control); |
|---|
| 2187 | | - phydev->advertising |= mii_adv_to_ethtool_adv_t(mii_adv); |
|---|
| 2136 | + mii_adv_to_linkmode_adv_t(fc, mii_adv); |
|---|
| 2137 | + linkmode_or(phydev->advertising, fc, phydev->advertising); |
|---|
| 2188 | 2138 | |
|---|
| 2189 | 2139 | if (phydev->mdio.dev.of_node) { |
|---|
| 2190 | 2140 | u32 reg; |
|---|
| .. | .. |
|---|
| 2217 | 2167 | |
|---|
| 2218 | 2168 | static int lan78xx_set_rx_max_frame_length(struct lan78xx_net *dev, int size) |
|---|
| 2219 | 2169 | { |
|---|
| 2220 | | - int ret = 0; |
|---|
| 2221 | 2170 | u32 buf; |
|---|
| 2222 | 2171 | bool rxenabled; |
|---|
| 2223 | 2172 | |
|---|
| 2224 | | - ret = lan78xx_read_reg(dev, MAC_RX, &buf); |
|---|
| 2173 | + lan78xx_read_reg(dev, MAC_RX, &buf); |
|---|
| 2225 | 2174 | |
|---|
| 2226 | 2175 | rxenabled = ((buf & MAC_RX_RXEN_) != 0); |
|---|
| 2227 | 2176 | |
|---|
| 2228 | 2177 | if (rxenabled) { |
|---|
| 2229 | 2178 | buf &= ~MAC_RX_RXEN_; |
|---|
| 2230 | | - ret = lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 2179 | + lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 2231 | 2180 | } |
|---|
| 2232 | 2181 | |
|---|
| 2233 | 2182 | /* add 4 to size for FCS */ |
|---|
| 2234 | 2183 | buf &= ~MAC_RX_MAX_SIZE_MASK_; |
|---|
| 2235 | 2184 | buf |= (((size + 4) << MAC_RX_MAX_SIZE_SHIFT_) & MAC_RX_MAX_SIZE_MASK_); |
|---|
| 2236 | 2185 | |
|---|
| 2237 | | - ret = lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 2186 | + lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 2238 | 2187 | |
|---|
| 2239 | 2188 | if (rxenabled) { |
|---|
| 2240 | 2189 | buf |= MAC_RX_RXEN_; |
|---|
| 2241 | | - ret = lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 2190 | + lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 2242 | 2191 | } |
|---|
| 2243 | 2192 | |
|---|
| 2244 | 2193 | return 0; |
|---|
| .. | .. |
|---|
| 2295 | 2244 | int ll_mtu = new_mtu + netdev->hard_header_len; |
|---|
| 2296 | 2245 | int old_hard_mtu = dev->hard_mtu; |
|---|
| 2297 | 2246 | int old_rx_urb_size = dev->rx_urb_size; |
|---|
| 2298 | | - int ret; |
|---|
| 2299 | 2247 | |
|---|
| 2300 | 2248 | /* no second zero-length packet read wanted after mtu-sized packets */ |
|---|
| 2301 | 2249 | if ((ll_mtu % dev->maxpacket) == 0) |
|---|
| 2302 | 2250 | return -EDOM; |
|---|
| 2303 | 2251 | |
|---|
| 2304 | | - ret = lan78xx_set_rx_max_frame_length(dev, new_mtu + VLAN_ETH_HLEN); |
|---|
| 2252 | + lan78xx_set_rx_max_frame_length(dev, new_mtu + VLAN_ETH_HLEN); |
|---|
| 2305 | 2253 | |
|---|
| 2306 | 2254 | netdev->mtu = new_mtu; |
|---|
| 2307 | 2255 | |
|---|
| .. | .. |
|---|
| 2324 | 2272 | struct lan78xx_net *dev = netdev_priv(netdev); |
|---|
| 2325 | 2273 | struct sockaddr *addr = p; |
|---|
| 2326 | 2274 | u32 addr_lo, addr_hi; |
|---|
| 2327 | | - int ret; |
|---|
| 2328 | 2275 | |
|---|
| 2329 | 2276 | if (netif_running(netdev)) |
|---|
| 2330 | 2277 | return -EBUSY; |
|---|
| .. | .. |
|---|
| 2341 | 2288 | addr_hi = netdev->dev_addr[4] | |
|---|
| 2342 | 2289 | netdev->dev_addr[5] << 8; |
|---|
| 2343 | 2290 | |
|---|
| 2344 | | - ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); |
|---|
| 2345 | | - ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); |
|---|
| 2291 | + lan78xx_write_reg(dev, RX_ADDRL, addr_lo); |
|---|
| 2292 | + lan78xx_write_reg(dev, RX_ADDRH, addr_hi); |
|---|
| 2346 | 2293 | |
|---|
| 2347 | 2294 | /* Added to support MAC address changes */ |
|---|
| 2348 | | - ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo); |
|---|
| 2349 | | - ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); |
|---|
| 2295 | + lan78xx_write_reg(dev, MAF_LO(0), addr_lo); |
|---|
| 2296 | + lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_); |
|---|
| 2350 | 2297 | |
|---|
| 2351 | 2298 | return 0; |
|---|
| 2352 | 2299 | } |
|---|
| .. | .. |
|---|
| 2358 | 2305 | struct lan78xx_net *dev = netdev_priv(netdev); |
|---|
| 2359 | 2306 | struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); |
|---|
| 2360 | 2307 | unsigned long flags; |
|---|
| 2361 | | - int ret; |
|---|
| 2362 | 2308 | |
|---|
| 2363 | 2309 | spin_lock_irqsave(&pdata->rfe_ctl_lock, flags); |
|---|
| 2364 | 2310 | |
|---|
| .. | .. |
|---|
| 2382 | 2328 | |
|---|
| 2383 | 2329 | spin_unlock_irqrestore(&pdata->rfe_ctl_lock, flags); |
|---|
| 2384 | 2330 | |
|---|
| 2385 | | - ret = lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); |
|---|
| 2331 | + lan78xx_write_reg(dev, RFE_CTL, pdata->rfe_ctl); |
|---|
| 2386 | 2332 | |
|---|
| 2387 | 2333 | return 0; |
|---|
| 2388 | 2334 | } |
|---|
| .. | .. |
|---|
| 2706 | 2652 | |
|---|
| 2707 | 2653 | static int lan78xx_stop(struct net_device *net) |
|---|
| 2708 | 2654 | { |
|---|
| 2709 | | - struct lan78xx_net *dev = netdev_priv(net); |
|---|
| 2655 | + struct lan78xx_net *dev = netdev_priv(net); |
|---|
| 2710 | 2656 | |
|---|
| 2711 | 2657 | if (timer_pending(&dev->stat_monitor)) |
|---|
| 2712 | 2658 | del_timer_sync(&dev->stat_monitor); |
|---|
| .. | .. |
|---|
| 2745 | 2691 | struct sk_buff *skb, gfp_t flags) |
|---|
| 2746 | 2692 | { |
|---|
| 2747 | 2693 | u32 tx_cmd_a, tx_cmd_b; |
|---|
| 2694 | + void *ptr; |
|---|
| 2748 | 2695 | |
|---|
| 2749 | 2696 | if (skb_cow_head(skb, TX_OVERHEAD)) { |
|---|
| 2750 | 2697 | dev_kfree_skb_any(skb); |
|---|
| .. | .. |
|---|
| 2775 | 2722 | tx_cmd_b |= skb_vlan_tag_get(skb) & TX_CMD_B_VTAG_MASK_; |
|---|
| 2776 | 2723 | } |
|---|
| 2777 | 2724 | |
|---|
| 2778 | | - skb_push(skb, 4); |
|---|
| 2779 | | - cpu_to_le32s(&tx_cmd_b); |
|---|
| 2780 | | - memcpy(skb->data, &tx_cmd_b, 4); |
|---|
| 2781 | | - |
|---|
| 2782 | | - skb_push(skb, 4); |
|---|
| 2783 | | - cpu_to_le32s(&tx_cmd_a); |
|---|
| 2784 | | - memcpy(skb->data, &tx_cmd_a, 4); |
|---|
| 2725 | + ptr = skb_push(skb, 8); |
|---|
| 2726 | + put_unaligned_le32(tx_cmd_a, ptr); |
|---|
| 2727 | + put_unaligned_le32(tx_cmd_b, ptr + 4); |
|---|
| 2785 | 2728 | |
|---|
| 2786 | 2729 | return skb; |
|---|
| 2787 | 2730 | } |
|---|
| .. | .. |
|---|
| 3020 | 2963 | |
|---|
| 3021 | 2964 | static void lan78xx_skb_return(struct lan78xx_net *dev, struct sk_buff *skb) |
|---|
| 3022 | 2965 | { |
|---|
| 3023 | | - int status; |
|---|
| 2966 | + int status; |
|---|
| 3024 | 2967 | |
|---|
| 3025 | 2968 | if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { |
|---|
| 3026 | 2969 | skb_queue_tail(&dev->rxq_pause, skb); |
|---|
| .. | .. |
|---|
| 3056 | 2999 | struct sk_buff *skb2; |
|---|
| 3057 | 3000 | unsigned char *packet; |
|---|
| 3058 | 3001 | |
|---|
| 3059 | | - memcpy(&rx_cmd_a, skb->data, sizeof(rx_cmd_a)); |
|---|
| 3060 | | - le32_to_cpus(&rx_cmd_a); |
|---|
| 3002 | + rx_cmd_a = get_unaligned_le32(skb->data); |
|---|
| 3061 | 3003 | skb_pull(skb, sizeof(rx_cmd_a)); |
|---|
| 3062 | 3004 | |
|---|
| 3063 | | - memcpy(&rx_cmd_b, skb->data, sizeof(rx_cmd_b)); |
|---|
| 3064 | | - le32_to_cpus(&rx_cmd_b); |
|---|
| 3005 | + rx_cmd_b = get_unaligned_le32(skb->data); |
|---|
| 3065 | 3006 | skb_pull(skb, sizeof(rx_cmd_b)); |
|---|
| 3066 | 3007 | |
|---|
| 3067 | | - memcpy(&rx_cmd_c, skb->data, sizeof(rx_cmd_c)); |
|---|
| 3068 | | - le16_to_cpus(&rx_cmd_c); |
|---|
| 3008 | + rx_cmd_c = get_unaligned_le16(skb->data); |
|---|
| 3069 | 3009 | skb_pull(skb, sizeof(rx_cmd_c)); |
|---|
| 3070 | 3010 | |
|---|
| 3071 | 3011 | packet = skb->data; |
|---|
| .. | .. |
|---|
| 3226 | 3166 | case -EPIPE: |
|---|
| 3227 | 3167 | dev->net->stats.rx_errors++; |
|---|
| 3228 | 3168 | lan78xx_defer_kevent(dev, EVENT_RX_HALT); |
|---|
| 3229 | | - /* FALLTHROUGH */ |
|---|
| 3169 | + fallthrough; |
|---|
| 3230 | 3170 | case -ECONNRESET: /* async unlink */ |
|---|
| 3231 | 3171 | case -ESHUTDOWN: /* hardware gone */ |
|---|
| 3232 | 3172 | netif_dbg(dev, ifdown, dev->net, |
|---|
| .. | .. |
|---|
| 3247 | 3187 | /* data overrun ... flush fifo? */ |
|---|
| 3248 | 3188 | case -EOVERFLOW: |
|---|
| 3249 | 3189 | dev->net->stats.rx_over_errors++; |
|---|
| 3250 | | - /* FALLTHROUGH */ |
|---|
| 3190 | + fallthrough; |
|---|
| 3251 | 3191 | |
|---|
| 3252 | 3192 | default: |
|---|
| 3253 | 3193 | state = rx_cleanup; |
|---|
| .. | .. |
|---|
| 3287 | 3227 | count = 0; |
|---|
| 3288 | 3228 | length = 0; |
|---|
| 3289 | 3229 | spin_lock_irqsave(&tqp->lock, flags); |
|---|
| 3290 | | - for (skb = tqp->next; pkt_cnt < tqp->qlen; skb = skb->next) { |
|---|
| 3230 | + skb_queue_walk(tqp, skb) { |
|---|
| 3291 | 3231 | if (skb_is_gso(skb)) { |
|---|
| 3292 | | - if (pkt_cnt) { |
|---|
| 3232 | + if (!skb_queue_is_first(tqp, skb)) { |
|---|
| 3293 | 3233 | /* handle previous packets first */ |
|---|
| 3294 | 3234 | break; |
|---|
| 3295 | 3235 | } |
|---|
| .. | .. |
|---|
| 3580 | 3520 | |
|---|
| 3581 | 3521 | static void lan78xx_disconnect(struct usb_interface *intf) |
|---|
| 3582 | 3522 | { |
|---|
| 3583 | | - struct lan78xx_net *dev; |
|---|
| 3584 | | - struct usb_device *udev; |
|---|
| 3585 | | - struct net_device *net; |
|---|
| 3586 | | - struct phy_device *phydev; |
|---|
| 3523 | + struct lan78xx_net *dev; |
|---|
| 3524 | + struct usb_device *udev; |
|---|
| 3525 | + struct net_device *net; |
|---|
| 3526 | + struct phy_device *phydev; |
|---|
| 3587 | 3527 | |
|---|
| 3588 | 3528 | dev = usb_get_intfdata(intf); |
|---|
| 3589 | 3529 | usb_set_intfdata(intf, NULL); |
|---|
| .. | .. |
|---|
| 3617 | 3557 | usb_put_dev(udev); |
|---|
| 3618 | 3558 | } |
|---|
| 3619 | 3559 | |
|---|
| 3620 | | -static void lan78xx_tx_timeout(struct net_device *net) |
|---|
| 3560 | +static void lan78xx_tx_timeout(struct net_device *net, unsigned int txqueue) |
|---|
| 3621 | 3561 | { |
|---|
| 3622 | 3562 | struct lan78xx_net *dev = netdev_priv(net); |
|---|
| 3623 | 3563 | |
|---|
| .. | .. |
|---|
| 3646 | 3586 | .ndo_change_mtu = lan78xx_change_mtu, |
|---|
| 3647 | 3587 | .ndo_set_mac_address = lan78xx_set_mac_addr, |
|---|
| 3648 | 3588 | .ndo_validate_addr = eth_validate_addr, |
|---|
| 3649 | | - .ndo_do_ioctl = lan78xx_ioctl, |
|---|
| 3589 | + .ndo_do_ioctl = phy_do_ioctl_running, |
|---|
| 3650 | 3590 | .ndo_set_rx_mode = lan78xx_set_multicast, |
|---|
| 3651 | 3591 | .ndo_set_features = lan78xx_set_features, |
|---|
| 3652 | 3592 | .ndo_vlan_rx_add_vid = lan78xx_vlan_rx_add_vid, |
|---|
| .. | .. |
|---|
| 3744 | 3684 | ret = lan78xx_bind(dev, intf); |
|---|
| 3745 | 3685 | if (ret < 0) |
|---|
| 3746 | 3686 | goto out2; |
|---|
| 3747 | | - strcpy(netdev->name, "eth%d"); |
|---|
| 3748 | 3687 | |
|---|
| 3749 | 3688 | if (netdev->mtu > (dev->hard_mtu - netdev->hard_header_len)) |
|---|
| 3750 | 3689 | netdev->mtu = dev->hard_mtu - netdev->hard_header_len; |
|---|
| .. | .. |
|---|
| 3845 | 3784 | static int lan78xx_set_suspend(struct lan78xx_net *dev, u32 wol) |
|---|
| 3846 | 3785 | { |
|---|
| 3847 | 3786 | u32 buf; |
|---|
| 3848 | | - int ret; |
|---|
| 3849 | 3787 | int mask_index; |
|---|
| 3850 | 3788 | u16 crc; |
|---|
| 3851 | 3789 | u32 temp_wucsr; |
|---|
| .. | .. |
|---|
| 3854 | 3792 | const u8 ipv6_multicast[3] = { 0x33, 0x33 }; |
|---|
| 3855 | 3793 | const u8 arp_type[2] = { 0x08, 0x06 }; |
|---|
| 3856 | 3794 | |
|---|
| 3857 | | - ret = lan78xx_read_reg(dev, MAC_TX, &buf); |
|---|
| 3795 | + lan78xx_read_reg(dev, MAC_TX, &buf); |
|---|
| 3858 | 3796 | buf &= ~MAC_TX_TXEN_; |
|---|
| 3859 | | - ret = lan78xx_write_reg(dev, MAC_TX, buf); |
|---|
| 3860 | | - ret = lan78xx_read_reg(dev, MAC_RX, &buf); |
|---|
| 3797 | + lan78xx_write_reg(dev, MAC_TX, buf); |
|---|
| 3798 | + lan78xx_read_reg(dev, MAC_RX, &buf); |
|---|
| 3861 | 3799 | buf &= ~MAC_RX_RXEN_; |
|---|
| 3862 | | - ret = lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 3800 | + lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 3863 | 3801 | |
|---|
| 3864 | | - ret = lan78xx_write_reg(dev, WUCSR, 0); |
|---|
| 3865 | | - ret = lan78xx_write_reg(dev, WUCSR2, 0); |
|---|
| 3866 | | - ret = lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); |
|---|
| 3802 | + lan78xx_write_reg(dev, WUCSR, 0); |
|---|
| 3803 | + lan78xx_write_reg(dev, WUCSR2, 0); |
|---|
| 3804 | + lan78xx_write_reg(dev, WK_SRC, 0xFFF1FF1FUL); |
|---|
| 3867 | 3805 | |
|---|
| 3868 | 3806 | temp_wucsr = 0; |
|---|
| 3869 | 3807 | |
|---|
| 3870 | 3808 | temp_pmt_ctl = 0; |
|---|
| 3871 | | - ret = lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); |
|---|
| 3809 | + lan78xx_read_reg(dev, PMT_CTL, &temp_pmt_ctl); |
|---|
| 3872 | 3810 | temp_pmt_ctl &= ~PMT_CTL_RES_CLR_WKP_EN_; |
|---|
| 3873 | 3811 | temp_pmt_ctl |= PMT_CTL_RES_CLR_WKP_STS_; |
|---|
| 3874 | 3812 | |
|---|
| 3875 | 3813 | for (mask_index = 0; mask_index < NUM_OF_WUF_CFG; mask_index++) |
|---|
| 3876 | | - ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); |
|---|
| 3814 | + lan78xx_write_reg(dev, WUF_CFG(mask_index), 0); |
|---|
| 3877 | 3815 | |
|---|
| 3878 | 3816 | mask_index = 0; |
|---|
| 3879 | 3817 | if (wol & WAKE_PHY) { |
|---|
| .. | .. |
|---|
| 3902 | 3840 | |
|---|
| 3903 | 3841 | /* set WUF_CFG & WUF_MASK for IPv4 Multicast */ |
|---|
| 3904 | 3842 | crc = lan78xx_wakeframe_crc16(ipv4_multicast, 3); |
|---|
| 3905 | | - ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), |
|---|
| 3843 | + lan78xx_write_reg(dev, WUF_CFG(mask_index), |
|---|
| 3906 | 3844 | WUF_CFGX_EN_ | |
|---|
| 3907 | 3845 | WUF_CFGX_TYPE_MCAST_ | |
|---|
| 3908 | 3846 | (0 << WUF_CFGX_OFFSET_SHIFT_) | |
|---|
| 3909 | 3847 | (crc & WUF_CFGX_CRC16_MASK_)); |
|---|
| 3910 | 3848 | |
|---|
| 3911 | | - ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); |
|---|
| 3912 | | - ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); |
|---|
| 3913 | | - ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); |
|---|
| 3914 | | - ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); |
|---|
| 3849 | + lan78xx_write_reg(dev, WUF_MASK0(mask_index), 7); |
|---|
| 3850 | + lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); |
|---|
| 3851 | + lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); |
|---|
| 3852 | + lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); |
|---|
| 3915 | 3853 | mask_index++; |
|---|
| 3916 | 3854 | |
|---|
| 3917 | 3855 | /* for IPv6 Multicast */ |
|---|
| 3918 | 3856 | crc = lan78xx_wakeframe_crc16(ipv6_multicast, 2); |
|---|
| 3919 | | - ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), |
|---|
| 3857 | + lan78xx_write_reg(dev, WUF_CFG(mask_index), |
|---|
| 3920 | 3858 | WUF_CFGX_EN_ | |
|---|
| 3921 | 3859 | WUF_CFGX_TYPE_MCAST_ | |
|---|
| 3922 | 3860 | (0 << WUF_CFGX_OFFSET_SHIFT_) | |
|---|
| 3923 | 3861 | (crc & WUF_CFGX_CRC16_MASK_)); |
|---|
| 3924 | 3862 | |
|---|
| 3925 | | - ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); |
|---|
| 3926 | | - ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); |
|---|
| 3927 | | - ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); |
|---|
| 3928 | | - ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); |
|---|
| 3863 | + lan78xx_write_reg(dev, WUF_MASK0(mask_index), 3); |
|---|
| 3864 | + lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); |
|---|
| 3865 | + lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); |
|---|
| 3866 | + lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); |
|---|
| 3929 | 3867 | mask_index++; |
|---|
| 3930 | 3868 | |
|---|
| 3931 | 3869 | temp_pmt_ctl |= PMT_CTL_WOL_EN_; |
|---|
| .. | .. |
|---|
| 3946 | 3884 | * for packettype (offset 12,13) = ARP (0x0806) |
|---|
| 3947 | 3885 | */ |
|---|
| 3948 | 3886 | crc = lan78xx_wakeframe_crc16(arp_type, 2); |
|---|
| 3949 | | - ret = lan78xx_write_reg(dev, WUF_CFG(mask_index), |
|---|
| 3887 | + lan78xx_write_reg(dev, WUF_CFG(mask_index), |
|---|
| 3950 | 3888 | WUF_CFGX_EN_ | |
|---|
| 3951 | 3889 | WUF_CFGX_TYPE_ALL_ | |
|---|
| 3952 | 3890 | (0 << WUF_CFGX_OFFSET_SHIFT_) | |
|---|
| 3953 | 3891 | (crc & WUF_CFGX_CRC16_MASK_)); |
|---|
| 3954 | 3892 | |
|---|
| 3955 | | - ret = lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); |
|---|
| 3956 | | - ret = lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); |
|---|
| 3957 | | - ret = lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); |
|---|
| 3958 | | - ret = lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); |
|---|
| 3893 | + lan78xx_write_reg(dev, WUF_MASK0(mask_index), 0x3000); |
|---|
| 3894 | + lan78xx_write_reg(dev, WUF_MASK1(mask_index), 0); |
|---|
| 3895 | + lan78xx_write_reg(dev, WUF_MASK2(mask_index), 0); |
|---|
| 3896 | + lan78xx_write_reg(dev, WUF_MASK3(mask_index), 0); |
|---|
| 3959 | 3897 | mask_index++; |
|---|
| 3960 | 3898 | |
|---|
| 3961 | 3899 | temp_pmt_ctl |= PMT_CTL_WOL_EN_; |
|---|
| .. | .. |
|---|
| 3963 | 3901 | temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; |
|---|
| 3964 | 3902 | } |
|---|
| 3965 | 3903 | |
|---|
| 3966 | | - ret = lan78xx_write_reg(dev, WUCSR, temp_wucsr); |
|---|
| 3904 | + lan78xx_write_reg(dev, WUCSR, temp_wucsr); |
|---|
| 3967 | 3905 | |
|---|
| 3968 | 3906 | /* when multiple WOL bits are set */ |
|---|
| 3969 | 3907 | if (hweight_long((unsigned long)wol) > 1) { |
|---|
| .. | .. |
|---|
| 3971 | 3909 | temp_pmt_ctl &= ~PMT_CTL_SUS_MODE_MASK_; |
|---|
| 3972 | 3910 | temp_pmt_ctl |= PMT_CTL_SUS_MODE_0_; |
|---|
| 3973 | 3911 | } |
|---|
| 3974 | | - ret = lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); |
|---|
| 3912 | + lan78xx_write_reg(dev, PMT_CTL, temp_pmt_ctl); |
|---|
| 3975 | 3913 | |
|---|
| 3976 | 3914 | /* clear WUPS */ |
|---|
| 3977 | | - ret = lan78xx_read_reg(dev, PMT_CTL, &buf); |
|---|
| 3915 | + lan78xx_read_reg(dev, PMT_CTL, &buf); |
|---|
| 3978 | 3916 | buf |= PMT_CTL_WUPS_MASK_; |
|---|
| 3979 | | - ret = lan78xx_write_reg(dev, PMT_CTL, buf); |
|---|
| 3917 | + lan78xx_write_reg(dev, PMT_CTL, buf); |
|---|
| 3980 | 3918 | |
|---|
| 3981 | | - ret = lan78xx_read_reg(dev, MAC_RX, &buf); |
|---|
| 3919 | + lan78xx_read_reg(dev, MAC_RX, &buf); |
|---|
| 3982 | 3920 | buf |= MAC_RX_RXEN_; |
|---|
| 3983 | | - ret = lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 3921 | + lan78xx_write_reg(dev, MAC_RX, buf); |
|---|
| 3984 | 3922 | |
|---|
| 3985 | 3923 | return 0; |
|---|
| 3986 | 3924 | } |
|---|
| .. | .. |
|---|
| 3991 | 3929 | struct lan78xx_priv *pdata = (struct lan78xx_priv *)(dev->data[0]); |
|---|
| 3992 | 3930 | u32 buf; |
|---|
| 3993 | 3931 | int ret; |
|---|
| 3994 | | - int event; |
|---|
| 3995 | | - |
|---|
| 3996 | | - event = message.event; |
|---|
| 3997 | 3932 | |
|---|
| 3998 | 3933 | if (!dev->suspend_count++) { |
|---|
| 3999 | 3934 | spin_lock_irq(&dev->txq.lock); |
|---|