Lines Matching refs:tp
807 void (*init)(struct r8152 *tp);
808 int (*enable)(struct r8152 *tp);
809 void (*disable)(struct r8152 *tp);
810 void (*up)(struct r8152 *tp);
811 void (*down)(struct r8152 *tp);
812 void (*unload)(struct r8152 *tp);
813 int (*eee_get)(struct r8152 *tp, struct ethtool_eee *eee);
814 int (*eee_set)(struct r8152 *tp, struct ethtool_eee *eee);
815 bool (*in_nway)(struct r8152 *tp);
816 void (*hw_phy_cfg)(struct r8152 *tp);
817 void (*autosuspend_en)(struct r8152 *tp, bool enable);
844 int (*pre_fw)(struct r8152 *tp);
845 int (*post_fw)(struct r8152 *tp);
1034 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in get_registers() argument
1043 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), in get_registers()
1057 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
1066 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), in set_registers()
1075 static void rtl_set_unplug(struct r8152 *tp) in rtl_set_unplug() argument
1077 if (tp->udev->state == USB_STATE_NOTATTACHED) { in rtl_set_unplug()
1078 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl_set_unplug()
1083 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
1089 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
1101 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
1109 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
1121 rtl_set_unplug(tp); in generic_ocp_read()
1126 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
1133 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
1147 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1160 ret = set_registers(tp, index, in generic_ocp_write()
1170 ret = set_registers(tp, index, in generic_ocp_write()
1184 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1191 rtl_set_unplug(tp); in generic_ocp_write()
1197 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
1199 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
1203 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
1205 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
1209 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
1211 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
1214 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
1218 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
1223 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
1227 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
1230 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
1240 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen); in ocp_read_word()
1249 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
1267 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
1270 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
1278 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
1287 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
1305 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
1308 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
1313 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1314 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
1315 tp->ocp_base = ocp_base; in ocp_reg_read()
1319 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
1322 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
1327 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1328 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
1329 tp->ocp_base = ocp_base; in ocp_reg_write()
1333 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
1336 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
1338 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
1341 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
1343 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
1346 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
1348 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
1349 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
1352 static u16 sram_read(struct r8152 *tp, u16 addr) in sram_read() argument
1354 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_read()
1355 return ocp_reg_read(tp, OCP_SRAM_DATA); in sram_read()
1360 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
1363 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
1369 ret = r8152_mdio_read(tp, reg); in read_mii_word()
1377 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
1379 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
1385 r8152_mdio_write(tp, reg, val); in write_mii_word()
1389 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1393 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_mac_address() local
1400 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_mac_address()
1404 mutex_lock(&tp->control); in rtl8152_set_mac_address()
1408 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8152_set_mac_address()
1409 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in rtl8152_set_mac_address()
1410 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8152_set_mac_address()
1412 mutex_unlock(&tp->control); in rtl8152_set_mac_address()
1414 usb_autopm_put_interface(tp->intf); in rtl8152_set_mac_address()
1423 static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) in vendor_mac_passthru_addr_read() argument
1435 if (test_bit(LENOVO_MACPASSTHRU, &tp->flags)) { in vendor_mac_passthru_addr_read()
1441 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in vendor_mac_passthru_addr_read()
1444 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE); in vendor_mac_passthru_addr_read()
1446 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1452 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in vendor_mac_passthru_addr_read()
1454 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1471 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1479 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1485 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1492 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1500 static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa) in determine_ethernet_addr() argument
1502 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1507 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data); in determine_ethernet_addr()
1509 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1510 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1515 ret = vendor_mac_passthru_addr_read(tp, sa); in determine_ethernet_addr()
1517 ret = pla_ocp_read(tp, PLA_BACKUP, 8, in determine_ethernet_addr()
1523 netif_err(tp, probe, dev, "Get ether addr fail\n"); in determine_ethernet_addr()
1525 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in determine_ethernet_addr()
1529 netif_info(tp, probe, dev, "Random ether addr %pM\n", in determine_ethernet_addr()
1537 static int set_ethernet_addr(struct r8152 *tp) in set_ethernet_addr() argument
1539 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1543 ret = determine_ethernet_addr(tp, &sa); in set_ethernet_addr()
1547 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1560 struct r8152 *tp; in read_bulk_callback() local
1567 tp = agg->context; in read_bulk_callback()
1568 if (!tp) in read_bulk_callback()
1571 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1574 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1577 netdev = tp->netdev; in read_bulk_callback()
1584 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1591 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1592 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1593 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1594 napi_schedule(&tp->napi); in read_bulk_callback()
1597 rtl_set_unplug(tp); in read_bulk_callback()
1598 netif_device_detach(tp->netdev); in read_bulk_callback()
1612 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1620 struct r8152 *tp; in write_bulk_callback() local
1628 tp = agg->context; in write_bulk_callback()
1629 if (!tp) in write_bulk_callback()
1632 netdev = tp->netdev; in write_bulk_callback()
1643 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1644 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1645 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1647 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1652 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1655 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1658 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1659 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1664 struct r8152 *tp; in intr_callback() local
1669 tp = urb->context; in intr_callback()
1670 if (!tp) in intr_callback()
1673 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1676 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1684 netif_device_detach(tp->netdev); in intr_callback()
1688 netif_info(tp, intr, tp->netdev, in intr_callback()
1692 netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n"); in intr_callback()
1696 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1702 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1703 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1704 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1707 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1708 netif_stop_queue(tp->netdev); in intr_callback()
1709 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1710 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1717 rtl_set_unplug(tp); in intr_callback()
1718 netif_device_detach(tp->netdev); in intr_callback()
1720 netif_err(tp, intr, tp->netdev, in intr_callback()
1735 static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg) in free_rx_agg() argument
1743 atomic_dec(&tp->rx_count); in free_rx_agg()
1746 static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags) in alloc_rx_agg() argument
1748 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
1750 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
1768 rx_agg->context = tp; in alloc_rx_agg()
1772 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
1773 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
1774 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
1776 atomic_inc(&tp->rx_count); in alloc_rx_agg()
1787 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
1793 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
1795 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
1796 free_rx_agg(tp, agg); in free_all_mem()
1798 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
1800 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
1803 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1804 tp->tx_info[i].urb = NULL; in free_all_mem()
1806 kfree(tp->tx_info[i].buffer); in free_all_mem()
1807 tp->tx_info[i].buffer = NULL; in free_all_mem()
1808 tp->tx_info[i].head = NULL; in free_all_mem()
1811 usb_free_urb(tp->intr_urb); in free_all_mem()
1812 tp->intr_urb = NULL; in free_all_mem()
1814 kfree(tp->intr_buff); in free_all_mem()
1815 tp->intr_buff = NULL; in free_all_mem()
1818 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
1820 struct net_device *netdev = tp->netdev; in alloc_all_mem()
1821 struct usb_interface *intf = tp->intf; in alloc_all_mem()
1828 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
1829 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
1830 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
1831 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
1832 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
1833 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
1834 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
1835 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
1838 if (!alloc_rx_agg(tp, GFP_KERNEL)) in alloc_all_mem()
1864 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
1865 tp->tx_info[i].context = tp; in alloc_all_mem()
1866 tp->tx_info[i].urb = urb; in alloc_all_mem()
1867 tp->tx_info[i].buffer = buf; in alloc_all_mem()
1868 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
1870 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
1873 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
1874 if (!tp->intr_urb) in alloc_all_mem()
1877 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
1878 if (!tp->intr_buff) in alloc_all_mem()
1881 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
1882 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), in alloc_all_mem()
1883 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
1884 tp, tp->intr_interval); in alloc_all_mem()
1889 free_all_mem(tp); in alloc_all_mem()
1893 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
1898 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
1901 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
1902 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
1905 cursor = tp->tx_free.next; in r8152_get_tx_agg()
1909 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
1918 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
1922 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
1949 stats = &tp->netdev->stats; in r8152_csum_workaround()
1974 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
1987 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2019 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2059 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
2061 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2097 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { in r8152_tx_agg_fill()
2098 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
2108 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2124 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8152_tx_agg_fill()
2134 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2136 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2137 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2138 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2140 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2142 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2146 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), in r8152_tx_agg_fill()
2152 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2158 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
2163 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2187 static inline bool rx_count_exceed(struct r8152 *tp) in rx_count_exceed() argument
2189 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2197 static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags) in rtl_get_free_rx() argument
2202 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2204 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2211 if (rx_count_exceed(tp)) { in rtl_get_free_rx()
2213 free_rx_agg(tp, agg); in rtl_get_free_rx()
2219 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2221 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2222 agg_free = alloc_rx_agg(tp, mflags); in rtl_get_free_rx()
2227 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
2232 struct napi_struct *napi = &tp->napi; in rx_bottom()
2234 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2236 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2237 struct net_device *netdev = tp->netdev; in rx_bottom()
2252 if (list_empty(&tp->rx_done)) in rx_bottom()
2256 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2257 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2258 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2274 agg_free = rtl_get_free_rx(tp, GFP_ATOMIC); in rx_bottom()
2281 struct net_device *netdev = tp->netdev; in rx_bottom()
2287 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000)) in rx_bottom()
2301 if (!agg_free || tp->rx_copybreak > pkt_len) in rx_bottom()
2304 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2312 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2333 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2346 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2348 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2350 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2354 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2359 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
2367 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2368 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
2369 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2376 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
2381 struct net_device *netdev = tp->netdev; in tx_bottom()
2384 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2387 agg = r8152_get_tx_agg(tp); in tx_bottom()
2391 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
2396 rtl_set_unplug(tp); in tx_bottom()
2402 netif_warn(tp, tx_err, netdev, in tx_bottom()
2406 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2407 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2408 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2415 struct r8152 *tp; in bottom_half() local
2417 tp = (struct r8152 *)data; in bottom_half()
2419 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
2422 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2427 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2430 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2432 tx_bottom(tp); in bottom_half()
2437 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
2440 work_done = rx_bottom(tp, budget); in r8152_poll()
2445 if (!list_empty(&tp->rx_done)) in r8152_poll()
2454 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
2459 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
2460 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2463 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), in r8152_submit_rx()
2464 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2469 rtl_set_unplug(tp); in r8152_submit_rx()
2470 netif_device_detach(tp->netdev); in r8152_submit_rx()
2476 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2477 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2478 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2480 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2483 napi_schedule(&tp->napi); in r8152_submit_rx()
2489 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
2491 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2492 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2511 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
2513 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
2515 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2520 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
2523 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2524 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2530 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
2536 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
2542 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
2568 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
2569 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
2592 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
2596 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2598 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2599 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2600 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2601 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2603 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2604 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2606 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2613 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2617 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2619 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2621 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2624 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2628 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2631 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2637 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2639 struct net_device *netdev = tp->netdev; in set_tx_qlen()
2641 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN + in set_tx_qlen()
2645 static inline u8 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2647 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2650 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
2655 speed = rtl8152_get_speed(tp); in rtl_set_eee_plus()
2657 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2659 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2661 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_set_eee_plus()
2663 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_set_eee_plus()
2667 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
2671 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
2676 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
2679 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
2688 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2690 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2691 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
2693 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
2695 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2702 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2703 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
2704 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2706 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2707 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
2708 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2710 ret = r8152_submit_rx(tp, agg, GFP_KERNEL); in rtl_start_rx()
2714 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2715 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
2716 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
2717 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2722 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
2736 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2737 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
2738 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2745 free_rx_agg(tp, agg); in rtl_stop_rx()
2751 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2752 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
2753 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
2754 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2756 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2757 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2762 static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp) in r8153b_rx_agg_chg_indicate() argument
2764 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN, in r8153b_rx_agg_chg_indicate()
2768 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
2772 r8152b_reset_packet_filter(tp); in rtl_enable()
2774 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
2776 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
2778 switch (tp->version) { in rtl_enable()
2781 r8153b_rx_agg_chg_indicate(tp); in rtl_enable()
2787 rxdy_gated_en(tp, false); in rtl_enable()
2792 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
2794 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
2797 set_tx_qlen(tp); in rtl8152_enable()
2798 rtl_set_eee_plus(tp); in rtl8152_enable()
2800 return rtl_enable(tp); in rtl8152_enable()
2803 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
2805 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
2807 switch (tp->version) { in r8153_set_rx_early_timeout()
2812 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2821 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
2823 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
2832 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
2834 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
2836 switch (tp->version) { in r8153_set_rx_early_size()
2841 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2846 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
2855 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
2857 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
2860 set_tx_qlen(tp); in rtl8153_enable()
2861 rtl_set_eee_plus(tp); in rtl8153_enable()
2862 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
2863 r8153_set_rx_early_size(tp); in rtl8153_enable()
2865 if (tp->version == RTL_VER_09) { in rtl8153_enable()
2868 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in rtl8153_enable()
2870 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
2873 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
2876 return rtl_enable(tp); in rtl8153_enable()
2879 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
2884 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
2885 rtl_drop_queued_tx(tp); in rtl_disable()
2889 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
2891 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
2893 rtl_drop_queued_tx(tp); in rtl_disable()
2896 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
2898 rxdy_gated_en(tp, true); in rtl_disable()
2901 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
2908 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
2913 rtl_stop_rx(tp); in rtl_disable()
2915 rtl8152_nic_reset(tp); in rtl_disable()
2918 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
2922 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
2927 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
2929 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
2931 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
2934 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
2938 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
2943 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
2950 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
2953 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
2957 mutex_lock(&tp->control); in rtl8152_set_features()
2961 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
2963 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
2966 mutex_unlock(&tp->control); in rtl8152_set_features()
2968 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
2976 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
2981 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
2985 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
2993 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
3000 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
3004 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
3006 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
3010 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
3012 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
3020 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
3022 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
3024 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
3028 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
3031 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3033 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3036 static void r8153_mac_clk_spd(struct r8152 *tp, bool enable) in r8153_mac_clk_spd() argument
3040 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, in r8153_mac_clk_spd()
3042 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, in r8153_mac_clk_spd()
3044 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, in r8153_mac_clk_spd()
3047 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, in r8153_mac_clk_spd()
3052 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, 0); in r8153_mac_clk_spd()
3053 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, 0); in r8153_mac_clk_spd()
3054 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, 0); in r8153_mac_clk_spd()
3055 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, 0); in r8153_mac_clk_spd()
3059 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
3068 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
3071 static void r8153b_u1u2en(struct r8152 *tp, bool enable) in r8153b_u1u2en() argument
3075 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG); in r8153b_u1u2en()
3081 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data); in r8153b_u1u2en()
3084 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
3088 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
3093 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
3096 static void r8153b_ups_flags(struct r8152 *tp) in r8153b_ups_flags() argument
3100 if (tp->ups_info.green) in r8153b_ups_flags()
3103 if (tp->ups_info.aldps) in r8153b_ups_flags()
3106 if (tp->ups_info.eee) in r8153b_ups_flags()
3109 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3112 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3115 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3118 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3121 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3124 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3127 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3130 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3133 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3165 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags); in r8153b_ups_flags()
3168 static void r8153b_green_en(struct r8152 *tp, bool enable) in r8153b_green_en() argument
3173 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */ in r8153b_green_en()
3174 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3175 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3177 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */ in r8153b_green_en()
3178 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3179 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3182 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_green_en()
3184 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_green_en()
3186 tp->ups_info.green = enable; in r8153b_green_en()
3189 static u16 r8153_phy_status(struct r8152 *tp, u16 desired) in r8153_phy_status() argument
3195 data = ocp_reg_read(tp, OCP_PHY_STATUS); in r8153_phy_status()
3206 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_phy_status()
3213 static void r8153b_ups_en(struct r8152 *tp, bool enable) in r8153b_ups_en() argument
3215 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_ups_en()
3218 r8153b_ups_flags(tp); in r8153b_ups_en()
3221 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3223 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
3225 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
3230 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3232 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff); in r8153b_ups_en()
3234 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data); in r8153b_ups_en()
3236 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_ups_en()
3238 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_ups_en()
3240 data = r8153_phy_status(tp, 0); in r8153b_ups_en()
3245 r8153b_green_en(tp, in r8153b_ups_en()
3246 test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_ups_en()
3248 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_ups_en()
3251 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_ups_en()
3253 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_ups_en()
3258 netif_warn(tp, link, tp->netdev, in r8153b_ups_en()
3265 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
3269 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
3274 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
3276 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
3278 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
3281 static void r8153b_power_cut_en(struct r8152 *tp, bool enable) in r8153b_power_cut_en() argument
3285 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_power_cut_en()
3290 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_power_cut_en()
3292 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_power_cut_en()
3294 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_power_cut_en()
3297 static void r8153_queue_wake(struct r8152 *tp, bool enable) in r8153_queue_wake() argument
3301 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG); in r8153_queue_wake()
3306 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data); in r8153_queue_wake()
3308 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG); in r8153_queue_wake()
3310 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data); in r8153_queue_wake()
3312 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_queue_wake()
3314 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_queue_wake()
3317 static bool rtl_can_wakeup(struct r8152 *tp) in rtl_can_wakeup() argument
3319 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3324 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
3329 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
3331 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3333 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3335 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3337 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3341 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
3343 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3345 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3347 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3349 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3353 static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) in rtl8153_runtime_enable() argument
3356 r8153_u1u2en(tp, false); in rtl8153_runtime_enable()
3357 r8153_u2p3en(tp, false); in rtl8153_runtime_enable()
3358 r8153_mac_clk_spd(tp, true); in rtl8153_runtime_enable()
3359 rtl_runtime_suspend_enable(tp, true); in rtl8153_runtime_enable()
3361 rtl_runtime_suspend_enable(tp, false); in rtl8153_runtime_enable()
3362 r8153_mac_clk_spd(tp, false); in rtl8153_runtime_enable()
3364 switch (tp->version) { in rtl8153_runtime_enable()
3371 r8153_u2p3en(tp, true); in rtl8153_runtime_enable()
3375 r8153_u1u2en(tp, true); in rtl8153_runtime_enable()
3379 static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable) in rtl8153b_runtime_enable() argument
3382 r8153_queue_wake(tp, true); in rtl8153b_runtime_enable()
3383 r8153b_u1u2en(tp, false); in rtl8153b_runtime_enable()
3384 r8153_u2p3en(tp, false); in rtl8153b_runtime_enable()
3385 rtl_runtime_suspend_enable(tp, true); in rtl8153b_runtime_enable()
3386 r8153b_ups_en(tp, true); in rtl8153b_runtime_enable()
3388 r8153b_ups_en(tp, false); in rtl8153b_runtime_enable()
3389 r8153_queue_wake(tp, false); in rtl8153b_runtime_enable()
3390 rtl_runtime_suspend_enable(tp, false); in rtl8153b_runtime_enable()
3391 if (tp->udev->speed != USB_SPEED_HIGH) in rtl8153b_runtime_enable()
3392 r8153b_u1u2en(tp, true); in rtl8153b_runtime_enable()
3396 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
3400 switch (tp->version) { in r8153_teredo_off()
3408 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
3411 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
3419 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff); in r8153_teredo_off()
3426 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
3427 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
3428 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
3431 static void rtl_reset_bmu(struct r8152 *tp) in rtl_reset_bmu() argument
3435 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl_reset_bmu()
3437 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3439 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3443 static void rtl_clear_bp(struct r8152 *tp, u16 type) in rtl_clear_bp() argument
3445 switch (tp->version) { in rtl_clear_bp()
3454 ocp_write_byte(tp, type, PLA_BP_EN, 0); in rtl_clear_bp()
3460 ocp_write_byte(tp, MCU_TYPE_USB, USB_BP2_EN, 0); in rtl_clear_bp()
3462 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_8, 0); in rtl_clear_bp()
3463 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_9, 0); in rtl_clear_bp()
3464 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_10, 0); in rtl_clear_bp()
3465 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_11, 0); in rtl_clear_bp()
3466 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_12, 0); in rtl_clear_bp()
3467 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_13, 0); in rtl_clear_bp()
3468 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_14, 0); in rtl_clear_bp()
3469 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_15, 0); in rtl_clear_bp()
3471 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0); in rtl_clear_bp()
3476 ocp_write_word(tp, type, PLA_BP_0, 0); in rtl_clear_bp()
3477 ocp_write_word(tp, type, PLA_BP_1, 0); in rtl_clear_bp()
3478 ocp_write_word(tp, type, PLA_BP_2, 0); in rtl_clear_bp()
3479 ocp_write_word(tp, type, PLA_BP_3, 0); in rtl_clear_bp()
3480 ocp_write_word(tp, type, PLA_BP_4, 0); in rtl_clear_bp()
3481 ocp_write_word(tp, type, PLA_BP_5, 0); in rtl_clear_bp()
3482 ocp_write_word(tp, type, PLA_BP_6, 0); in rtl_clear_bp()
3483 ocp_write_word(tp, type, PLA_BP_7, 0); in rtl_clear_bp()
3487 ocp_write_word(tp, type, PLA_BP_BA, 0); in rtl_clear_bp()
3490 static int r8153_patch_request(struct r8152 *tp, bool request) in r8153_patch_request() argument
3495 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD); in r8153_patch_request()
3500 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data); in r8153_patch_request()
3504 if (ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY) in r8153_patch_request()
3508 if (request && !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) { in r8153_patch_request()
3509 netif_err(tp, drv, tp->netdev, "patch request fail\n"); in r8153_patch_request()
3510 r8153_patch_request(tp, false); in r8153_patch_request()
3517 static int r8153_pre_ram_code(struct r8152 *tp, u16 key_addr, u16 patch_key) in r8153_pre_ram_code() argument
3519 if (r8153_patch_request(tp, true)) { in r8153_pre_ram_code()
3520 dev_err(&tp->intf->dev, "patch request fail\n"); in r8153_pre_ram_code()
3524 sram_write(tp, key_addr, patch_key); in r8153_pre_ram_code()
3525 sram_write(tp, SRAM_PHY_LOCK, PHY_PATCH_LOCK); in r8153_pre_ram_code()
3530 static int r8153_post_ram_code(struct r8152 *tp, u16 key_addr) in r8153_post_ram_code() argument
3534 sram_write(tp, 0x0000, 0x0000); in r8153_post_ram_code()
3536 data = ocp_reg_read(tp, OCP_PHY_LOCK); in r8153_post_ram_code()
3538 ocp_reg_write(tp, OCP_PHY_LOCK, data); in r8153_post_ram_code()
3540 sram_write(tp, key_addr, 0x0000); in r8153_post_ram_code()
3542 r8153_patch_request(tp, false); in r8153_post_ram_code()
3544 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base); in r8153_post_ram_code()
3549 static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_is_fw_phy_nc_ok() argument
3555 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
3571 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
3577 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
3583 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
3588 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
3593 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
3598 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3604 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3610 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
3616 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
3625 static bool rtl8152_is_fw_mac_ok(struct r8152 *tp, struct fw_mac *mac) in rtl8152_is_fw_mac_ok() argument
3634 switch (tp->version) { in rtl8152_is_fw_mac_ok()
3660 switch (tp->version) { in rtl8152_is_fw_mac_ok()
3691 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
3697 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
3703 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
3708 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
3713 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
3718 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
3723 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
3729 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
3735 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
3749 static long rtl8152_fw_verify_checksum(struct r8152 *tp, in rtl8152_fw_verify_checksum() argument
3766 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n", in rtl8152_fw_verify_checksum()
3786 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
3796 static long rtl8152_check_firmware(struct r8152 *tp, struct rtl_fw *rtl_fw) in rtl8152_check_firmware() argument
3808 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
3812 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
3833 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3839 if (!rtl8152_is_fw_mac_ok(tp, pla)) { in rtl8152_check_firmware()
3840 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3847 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3853 if (!rtl8152_is_fw_mac_ok(tp, usb)) { in rtl8152_check_firmware()
3854 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3861 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3867 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3876 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3882 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3891 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3897 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3903 if (!rtl8152_is_fw_phy_nc_ok(tp, phy_nc)) { in rtl8152_check_firmware()
3904 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
3911 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
3922 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
3931 static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_fw_phy_nc_apply() argument
3938 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
3939 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
3947 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
3949 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i])); in rtl8152_fw_phy_nc_apply()
3951 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
3957 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
3961 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
3963 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
3966 static void rtl8152_fw_mac_apply(struct r8152 *tp, struct fw_mac *mac) in rtl8152_fw_mac_apply() argument
3984 rtl_clear_bp(tp, type); in rtl8152_fw_mac_apply()
3989 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
3990 !(ocp_read_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST) & DEBUG_OE)) { in rtl8152_fw_mac_apply()
3991 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_PRE, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
3992 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
4001 generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data, in rtl8152_fw_mac_apply()
4004 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
4010 ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i])); in rtl8152_fw_mac_apply()
4016 ocp_write_word(tp, type, bp_en_addr, in rtl8152_fw_mac_apply()
4021 ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg, in rtl8152_fw_mac_apply()
4024 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
4027 static void rtl8152_apply_firmware(struct r8152 *tp) in rtl8152_apply_firmware() argument
4029 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
4043 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
4053 rtl8152_fw_mac_apply(tp, (struct fw_mac *)block); in rtl8152_apply_firmware()
4058 r8153_pre_ram_code(tp, key_addr, in rtl8152_apply_firmware()
4063 r8153_post_ram_code(tp, key_addr); in rtl8152_apply_firmware()
4066 rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block); in rtl8152_apply_firmware()
4077 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
4080 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
4083 static void rtl8152_release_firmware(struct r8152 *tp) in rtl8152_release_firmware() argument
4085 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
4093 static int rtl8152_request_firmware(struct r8152 *tp) in rtl8152_request_firmware() argument
4095 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
4099 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
4104 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
4108 rc = rtl8152_check_firmware(tp, rtl_fw); in rtl8152_request_firmware()
4116 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
4124 static void r8152_aldps_en(struct r8152 *tp, bool enable) in r8152_aldps_en() argument
4127 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152_aldps_en()
4130 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | in r8152_aldps_en()
4136 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
4138 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
4139 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
4140 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
4143 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
4147 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
4148 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
4149 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
4154 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
4156 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
4157 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
4158 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
4161 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
4166 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
4167 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
4168 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
4169 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
4186 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
4187 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
4188 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
4189 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
4192 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
4197 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
4198 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
4208 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
4209 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
4211 tp->ups_info.eee = enable; in r8153_eee_en()
4214 static void rtl_eee_enable(struct r8152 *tp, bool enable) in rtl_eee_enable() argument
4216 switch (tp->version) { in rtl_eee_enable()
4221 r8152_eee_en(tp, true); in rtl_eee_enable()
4222 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, in rtl_eee_enable()
4223 tp->eee_adv); in rtl_eee_enable()
4225 r8152_eee_en(tp, false); in rtl_eee_enable()
4226 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0); in rtl_eee_enable()
4236 r8153_eee_en(tp, true); in rtl_eee_enable()
4237 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
4239 r8153_eee_en(tp, false); in rtl_eee_enable()
4240 ocp_reg_write(tp, OCP_EEE_ADV, 0); in rtl_eee_enable()
4248 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
4252 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
4254 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
4256 tp->ups_info.flow_control = true; in r8152b_enable_fc()
4259 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
4261 r8152_aldps_en(tp, false); in rtl8152_disable()
4262 rtl_disable(tp); in rtl8152_disable()
4263 r8152_aldps_en(tp, true); in rtl8152_disable()
4266 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
4268 rtl8152_apply_firmware(tp); in r8152b_hw_phy_cfg()
4269 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
4270 r8152_aldps_en(tp, true); in r8152b_hw_phy_cfg()
4271 r8152b_enable_fc(tp); in r8152b_hw_phy_cfg()
4273 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
4276 static void wait_oob_link_list_ready(struct r8152 *tp) in wait_oob_link_list_ready() argument
4282 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in wait_oob_link_list_ready()
4289 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
4293 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
4295 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
4297 rxdy_gated_en(tp, true); in r8152b_exit_oob()
4298 r8153_teredo_off(tp); in r8152b_exit_oob()
4299 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
4300 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
4302 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
4304 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
4306 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
4308 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
4310 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
4312 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
4314 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
4316 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
4318 rtl8152_nic_reset(tp); in r8152b_exit_oob()
4321 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
4323 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
4324 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
4326 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
4328 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
4332 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
4334 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
4339 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL); in r8152b_exit_oob()
4341 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
4342 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
4343 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
4346 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
4348 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
4350 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
4352 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
4355 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
4359 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
4361 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
4363 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
4364 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
4365 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
4367 rtl_disable(tp); in r8152b_enter_oob()
4369 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
4371 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
4373 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
4375 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
4377 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
4379 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
4381 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8152b_enter_oob()
4383 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8152b_enter_oob()
4385 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
4387 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
4389 rxdy_gated_en(tp, false); in r8152b_enter_oob()
4391 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
4393 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
4396 static int r8153_pre_firmware_1(struct r8152 *tp) in r8153_pre_firmware_1() argument
4402 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL); in r8153_pre_firmware_1()
4412 static int r8153_post_firmware_1(struct r8152 *tp) in r8153_post_firmware_1() argument
4415 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) in r8153_post_firmware_1()
4416 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY); in r8153_post_firmware_1()
4419 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_1()
4424 static int r8153_pre_firmware_2(struct r8152 *tp) in r8153_pre_firmware_2() argument
4428 r8153_pre_firmware_1(tp); in r8153_pre_firmware_2()
4430 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_pre_firmware_2()
4432 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_pre_firmware_2()
4437 static int r8153_post_firmware_2(struct r8152 *tp) in r8153_post_firmware_2() argument
4442 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) { in r8153_post_firmware_2()
4443 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153_post_firmware_2()
4445 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153_post_firmware_2()
4449 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_2()
4452 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, U3P3_CHECK_EN | 4); in r8153_post_firmware_2()
4454 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_post_firmware_2()
4456 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_post_firmware_2()
4458 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_2()
4460 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_2()
4465 static int r8153_post_firmware_3(struct r8152 *tp) in r8153_post_firmware_3() argument
4469 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_3()
4471 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_3()
4473 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153_post_firmware_3()
4475 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153_post_firmware_3()
4480 static int r8153b_pre_firmware_1(struct r8152 *tp) in r8153b_pre_firmware_1() argument
4483 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER, in r8153b_pre_firmware_1()
4489 static int r8153b_post_firmware_1(struct r8152 *tp) in r8153b_post_firmware_1() argument
4494 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in r8153b_post_firmware_1()
4496 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153b_post_firmware_1()
4498 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153b_post_firmware_1()
4501 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8153b_post_firmware_1()
4503 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8153b_post_firmware_1()
4505 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8153b_post_firmware_1()
4507 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8153b_post_firmware_1()
4509 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153b_post_firmware_1()
4511 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153b_post_firmware_1()
4516 static void r8153_aldps_en(struct r8152 *tp, bool enable) in r8153_aldps_en() argument
4520 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_aldps_en()
4523 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
4528 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
4531 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100) in r8153_aldps_en()
4536 tp->ups_info.aldps = enable; in r8153_aldps_en()
4539 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
4545 r8153_aldps_en(tp, false); in r8153_hw_phy_cfg()
4548 rtl_eee_enable(tp, false); in r8153_hw_phy_cfg()
4550 rtl8152_apply_firmware(tp); in r8153_hw_phy_cfg()
4552 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
4553 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
4555 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
4558 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
4560 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
4562 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
4564 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
4565 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
4567 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
4568 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
4570 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
4572 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
4575 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
4578 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
4579 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
4581 if (tp->eee_en) in r8153_hw_phy_cfg()
4582 rtl_eee_enable(tp, true); in r8153_hw_phy_cfg()
4584 r8153_aldps_en(tp, true); in r8153_hw_phy_cfg()
4585 r8152b_enable_fc(tp); in r8153_hw_phy_cfg()
4587 switch (tp->version) { in r8153_hw_phy_cfg()
4594 r8153_u2p3en(tp, true); in r8153_hw_phy_cfg()
4598 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
4601 static u32 r8152_efuse_read(struct r8152 *tp, u8 addr) in r8152_efuse_read() argument
4605 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr); in r8152_efuse_read()
4606 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD); in r8152_efuse_read()
4608 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA); in r8152_efuse_read()
4613 static void r8153b_hw_phy_cfg(struct r8152 *tp) in r8153b_hw_phy_cfg() argument
4619 r8153_aldps_en(tp, false); in r8153b_hw_phy_cfg()
4622 rtl_eee_enable(tp, false); in r8153b_hw_phy_cfg()
4624 rtl8152_apply_firmware(tp); in r8153b_hw_phy_cfg()
4626 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
4628 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_hw_phy_cfg()
4630 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_hw_phy_cfg()
4631 data = ocp_reg_read(tp, OCP_NCTL_CFG); in r8153b_hw_phy_cfg()
4633 ocp_reg_write(tp, OCP_NCTL_CFG, data); in r8153b_hw_phy_cfg()
4640 ocp_data = r8152_efuse_read(tp, 0x7d); in r8153b_hw_phy_cfg()
4643 ocp_reg_write(tp, OCP_ADC_IOFFSET, data); in r8153b_hw_phy_cfg()
4649 ocp_data = ocp_reg_read(tp, 0xc426); in r8153b_hw_phy_cfg()
4655 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG); in r8153b_hw_phy_cfg()
4657 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data); in r8153b_hw_phy_cfg()
4660 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_hw_phy_cfg()
4662 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_hw_phy_cfg()
4665 if (!r8153_patch_request(tp, true)) { in r8153b_hw_phy_cfg()
4666 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153b_hw_phy_cfg()
4668 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153b_hw_phy_cfg()
4669 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
4671 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153b_hw_phy_cfg()
4673 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153b_hw_phy_cfg()
4674 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
4675 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
4676 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
4678 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8153b_hw_phy_cfg()
4679 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
4680 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
4682 r8153_patch_request(tp, false); in r8153b_hw_phy_cfg()
4685 if (tp->eee_en) in r8153b_hw_phy_cfg()
4686 rtl_eee_enable(tp, true); in r8153b_hw_phy_cfg()
4688 r8153_aldps_en(tp, true); in r8153b_hw_phy_cfg()
4689 r8152b_enable_fc(tp); in r8153b_hw_phy_cfg()
4691 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
4694 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
4698 r8153_mac_clk_spd(tp, false); in r8153_first_init()
4699 rxdy_gated_en(tp, true); in r8153_first_init()
4700 r8153_teredo_off(tp); in r8153_first_init()
4702 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
4704 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
4706 rtl8152_nic_reset(tp); in r8153_first_init()
4707 rtl_reset_bmu(tp); in r8153_first_init()
4709 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
4711 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
4713 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
4715 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
4717 wait_oob_link_list_ready(tp); in r8153_first_init()
4719 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
4721 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
4723 wait_oob_link_list_ready(tp); in r8153_first_init()
4725 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
4727 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_first_init()
4728 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_first_init()
4729 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in r8153_first_init()
4731 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
4733 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
4735 rtl8152_nic_reset(tp); in r8153_first_init()
4738 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
4739 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
4740 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
4742 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
4745 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
4749 r8153_mac_clk_spd(tp, true); in r8153_enter_oob()
4751 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
4753 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
4755 rtl_disable(tp); in r8153_enter_oob()
4756 rtl_reset_bmu(tp); in r8153_enter_oob()
4758 wait_oob_link_list_ready(tp); in r8153_enter_oob()
4760 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
4762 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
4764 wait_oob_link_list_ready(tp); in r8153_enter_oob()
4766 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN; in r8153_enter_oob()
4767 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data); in r8153_enter_oob()
4769 switch (tp->version) { in r8153_enter_oob()
4774 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
4776 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
4785 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in r8153_enter_oob()
4792 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
4794 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8153_enter_oob()
4796 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8153_enter_oob()
4798 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
4800 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
4802 rxdy_gated_en(tp, false); in r8153_enter_oob()
4804 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
4806 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
4809 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
4811 r8153_aldps_en(tp, false); in rtl8153_disable()
4812 rtl_disable(tp); in rtl8153_disable()
4813 rtl_reset_bmu(tp); in rtl8153_disable()
4814 r8153_aldps_en(tp, true); in rtl8153_disable()
4817 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex, in rtl8152_set_speed() argument
4832 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
4834 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
4841 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
4843 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
4847 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
4849 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
4859 tp->mii.full_duplex = 1; in rtl8152_set_speed()
4861 tp->mii.full_duplex = 0; in rtl8152_set_speed()
4863 tp->mii.force_media = 1; in rtl8152_set_speed()
4871 if (tp->mii.supports_gmii) in rtl8152_set_speed()
4877 anar = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
4882 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
4886 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
4891 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
4895 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
4899 r8152_mdio_write(tp, MII_ADVERTISE, tmp1); in rtl8152_set_speed()
4900 tp->mii.advertising = tmp1; in rtl8152_set_speed()
4903 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
4906 gbcr = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
4912 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
4916 r8152_mdio_write(tp, MII_CTRL1000, tmp1); in rtl8152_set_speed()
4921 tp->mii.force_media = 0; in rtl8152_set_speed()
4924 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
4927 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
4934 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
4943 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
4945 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
4948 r8152_aldps_en(tp, false); in rtl8152_up()
4949 r8152b_exit_oob(tp); in rtl8152_up()
4950 r8152_aldps_en(tp, true); in rtl8152_up()
4953 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
4955 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
4956 rtl_drop_queued_tx(tp); in rtl8152_down()
4960 r8152_power_cut_en(tp, false); in rtl8152_down()
4961 r8152_aldps_en(tp, false); in rtl8152_down()
4962 r8152b_enter_oob(tp); in rtl8152_down()
4963 r8152_aldps_en(tp, true); in rtl8152_down()
4966 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
4970 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
4973 r8153_u1u2en(tp, false); in rtl8153_up()
4974 r8153_u2p3en(tp, false); in rtl8153_up()
4975 r8153_aldps_en(tp, false); in rtl8153_up()
4976 r8153_first_init(tp); in rtl8153_up()
4978 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_up()
4980 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_up()
4982 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in rtl8153_up()
4984 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in rtl8153_up()
4986 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1); in rtl8153_up()
4988 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1, ocp_data); in rtl8153_up()
4990 r8153_aldps_en(tp, true); in rtl8153_up()
4992 switch (tp->version) { in rtl8153_up()
4999 r8153_u2p3en(tp, true); in rtl8153_up()
5003 r8153_u1u2en(tp, true); in rtl8153_up()
5006 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
5010 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
5011 rtl_drop_queued_tx(tp); in rtl8153_down()
5015 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_down()
5017 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_down()
5019 r8153_u1u2en(tp, false); in rtl8153_down()
5020 r8153_u2p3en(tp, false); in rtl8153_down()
5021 r8153_power_cut_en(tp, false); in rtl8153_down()
5022 r8153_aldps_en(tp, false); in rtl8153_down()
5023 r8153_enter_oob(tp); in rtl8153_down()
5024 r8153_aldps_en(tp, true); in rtl8153_down()
5027 static void rtl8153b_up(struct r8152 *tp) in rtl8153b_up() argument
5031 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_up()
5034 r8153b_u1u2en(tp, false); in rtl8153b_up()
5035 r8153_u2p3en(tp, false); in rtl8153b_up()
5036 r8153_aldps_en(tp, false); in rtl8153b_up()
5038 r8153_first_init(tp); in rtl8153b_up()
5039 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153b_up()
5041 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_up()
5043 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_up()
5045 r8153_aldps_en(tp, true); in rtl8153b_up()
5047 if (tp->udev->speed != USB_SPEED_HIGH) in rtl8153b_up()
5048 r8153b_u1u2en(tp, true); in rtl8153b_up()
5051 static void rtl8153b_down(struct r8152 *tp) in rtl8153b_down() argument
5055 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153b_down()
5056 rtl_drop_queued_tx(tp); in rtl8153b_down()
5060 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_down()
5062 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_down()
5064 r8153b_u1u2en(tp, false); in rtl8153b_down()
5065 r8153_u2p3en(tp, false); in rtl8153b_down()
5066 r8153b_power_cut_en(tp, false); in rtl8153b_down()
5067 r8153_aldps_en(tp, false); in rtl8153b_down()
5068 r8153_enter_oob(tp); in rtl8153b_down()
5069 r8153_aldps_en(tp, true); in rtl8153b_down()
5072 static bool rtl8152_in_nway(struct r8152 *tp) in rtl8152_in_nway() argument
5076 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000); in rtl8152_in_nway()
5077 tp->ocp_base = 0x2000; in rtl8152_in_nway()
5078 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */ in rtl8152_in_nway()
5079 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a); in rtl8152_in_nway()
5088 static bool rtl8153_in_nway(struct r8152 *tp) in rtl8153_in_nway() argument
5090 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff; in rtl8153_in_nway()
5098 static void set_carrier(struct r8152 *tp) in set_carrier() argument
5100 struct net_device *netdev = tp->netdev; in set_carrier()
5101 struct napi_struct *napi = &tp->napi; in set_carrier()
5104 speed = rtl8152_get_speed(tp); in set_carrier()
5108 tp->rtl_ops.enable(tp); in set_carrier()
5112 rtl_start_rx(tp); in set_carrier()
5113 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
5115 napi_enable(&tp->napi); in set_carrier()
5117 netif_info(tp, link, netdev, "carrier on\n"); in set_carrier()
5119 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
5125 tasklet_disable(&tp->tx_tl); in set_carrier()
5127 tp->rtl_ops.disable(tp); in set_carrier()
5129 tasklet_enable(&tp->tx_tl); in set_carrier()
5130 netif_info(tp, link, netdev, "carrier off\n"); in set_carrier()
5137 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
5142 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
5145 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
5148 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
5151 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
5152 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
5156 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
5157 set_carrier(tp); in rtl_work_func_t()
5159 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
5160 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
5163 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
5164 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
5165 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
5167 mutex_unlock(&tp->control); in rtl_work_func_t()
5170 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
5175 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work); in rtl_hw_phy_work_func_t() local
5177 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl_hw_phy_work_func_t()
5180 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
5183 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
5185 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
5186 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
5187 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
5191 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
5195 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
5197 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
5198 tp->advertising); in rtl_hw_phy_work_func_t()
5201 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
5203 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
5210 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier); in rtl_notifier() local
5215 usb_autopm_get_interface(tp->intf); in rtl_notifier()
5220 usb_autopm_put_interface(tp->intf); in rtl_notifier()
5235 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
5238 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
5239 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
5240 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
5243 res = alloc_all_mem(tp); in rtl8152_open()
5247 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
5251 mutex_lock(&tp->control); in rtl8152_open()
5253 tp->rtl_ops.up(tp); in rtl8152_open()
5257 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
5259 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
5262 netif_device_detach(tp->netdev); in rtl8152_open()
5263 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
5267 napi_enable(&tp->napi); in rtl8152_open()
5268 tasklet_enable(&tp->tx_tl); in rtl8152_open()
5270 mutex_unlock(&tp->control); in rtl8152_open()
5272 usb_autopm_put_interface(tp->intf); in rtl8152_open()
5274 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
5275 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
5280 mutex_unlock(&tp->control); in rtl8152_open()
5281 usb_autopm_put_interface(tp->intf); in rtl8152_open()
5283 free_all_mem(tp); in rtl8152_open()
5290 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
5294 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
5296 tasklet_disable(&tp->tx_tl); in rtl8152_close()
5297 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
5298 usb_kill_urb(tp->intr_urb); in rtl8152_close()
5299 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
5300 napi_disable(&tp->napi); in rtl8152_close()
5303 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
5304 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
5305 rtl_drop_queued_tx(tp); in rtl8152_close()
5306 rtl_stop_rx(tp); in rtl8152_close()
5308 mutex_lock(&tp->control); in rtl8152_close()
5310 tp->rtl_ops.down(tp); in rtl8152_close()
5312 mutex_unlock(&tp->control); in rtl8152_close()
5314 usb_autopm_put_interface(tp->intf); in rtl8152_close()
5317 free_all_mem(tp); in rtl8152_close()
5322 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
5326 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
5328 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
5331 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
5336 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
5339 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_init()
5342 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_init()
5345 r8152_aldps_en(tp, false); in r8152b_init()
5347 if (tp->version == RTL_VER_01) { in r8152b_init()
5348 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
5350 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
5353 r8152_power_cut_en(tp, false); in r8152b_init()
5355 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
5357 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
5358 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
5361 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
5364 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
5366 rtl_tally_reset(tp); in r8152b_init()
5369 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
5371 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
5374 static void r8153_init(struct r8152 *tp) in r8153_init() argument
5380 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
5383 r8153_u1u2en(tp, false); in r8153_init()
5386 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
5391 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
5395 data = r8153_phy_status(tp, 0); in r8153_init()
5397 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
5398 tp->version == RTL_VER_05) in r8153_init()
5399 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_init()
5401 data = r8152_mdio_read(tp, MII_BMCR); in r8153_init()
5404 r8152_mdio_write(tp, MII_BMCR, data); in r8153_init()
5407 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153_init()
5409 r8153_u2p3en(tp, false); in r8153_init()
5411 if (tp->version == RTL_VER_04) { in r8153_init()
5412 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
5415 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
5417 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
5419 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
5420 } else if (tp->version == RTL_VER_05) { in r8153_init()
5421 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
5423 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
5425 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
5426 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
5430 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
5431 } else if (tp->version == RTL_VER_06) { in r8153_init()
5432 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
5433 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
5437 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
5439 r8153_queue_wake(tp, false); in r8153_init()
5441 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_init()
5442 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153_init()
5447 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_init()
5450 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
5452 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
5454 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
5456 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
5458 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
5460 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
5463 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
5467 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
5469 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
5472 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
5474 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
5476 r8153_power_cut_en(tp, false); in r8153_init()
5477 rtl_runtime_suspend_enable(tp, false); in r8153_init()
5478 r8153_u1u2en(tp, true); in r8153_init()
5479 r8153_mac_clk_spd(tp, false); in r8153_init()
5480 usb_enable_lpm(tp->udev); in r8153_init()
5482 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in r8153_init()
5484 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in r8153_init()
5486 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in r8153_init()
5488 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in r8153_init()
5491 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_init()
5493 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags)) in r8153_init()
5496 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_init()
5498 rtl_tally_reset(tp); in r8153_init()
5500 switch (tp->udev->speed) { in r8153_init()
5503 tp->coalesce = COALESCE_SUPER; in r8153_init()
5506 tp->coalesce = COALESCE_HIGH; in r8153_init()
5509 tp->coalesce = COALESCE_SLOW; in r8153_init()
5514 static void r8153b_init(struct r8152 *tp) in r8153b_init() argument
5520 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
5523 r8153b_u1u2en(tp, false); in r8153b_init()
5526 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_init()
5531 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
5535 data = r8153_phy_status(tp, 0); in r8153b_init()
5537 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_init()
5540 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_init()
5543 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_init()
5545 r8153_u2p3en(tp, false); in r8153b_init()
5548 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153b_init()
5551 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8153b_init()
5553 r8153b_power_cut_en(tp, false); in r8153b_init()
5554 r8153b_ups_en(tp, false); in r8153b_init()
5555 r8153_queue_wake(tp, false); in r8153b_init()
5556 rtl_runtime_suspend_enable(tp, false); in r8153b_init()
5558 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153b_init()
5559 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153b_init()
5564 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153b_init()
5566 if (tp->udev->speed != USB_SPEED_HIGH) in r8153b_init()
5567 r8153b_u1u2en(tp, true); in r8153b_init()
5568 usb_enable_lpm(tp->udev); in r8153b_init()
5571 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8153b_init()
5573 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8153b_init()
5575 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8153b_init()
5577 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8153b_init()
5579 if (tp->version == RTL_VER_09) { in r8153b_init()
5581 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) { in r8153b_init()
5582 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_init()
5584 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_init()
5588 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
5591 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153b_init()
5593 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153b_init()
5595 rtl_tally_reset(tp); in r8153b_init()
5597 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
5602 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_pre_reset() local
5605 if (!tp) in rtl8152_pre_reset()
5608 netdev = tp->netdev; in rtl8152_pre_reset()
5613 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
5614 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
5615 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
5616 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
5617 napi_disable(&tp->napi); in rtl8152_pre_reset()
5619 mutex_lock(&tp->control); in rtl8152_pre_reset()
5620 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
5621 mutex_unlock(&tp->control); in rtl8152_pre_reset()
5629 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_post_reset() local
5633 if (!tp) in rtl8152_post_reset()
5637 if (determine_ethernet_addr(tp, &sa) >= 0) { in rtl8152_post_reset()
5639 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
5643 netdev = tp->netdev; in rtl8152_post_reset()
5647 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
5649 mutex_lock(&tp->control); in rtl8152_post_reset()
5650 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
5651 rtl_start_rx(tp); in rtl8152_post_reset()
5653 mutex_unlock(&tp->control); in rtl8152_post_reset()
5656 napi_enable(&tp->napi); in rtl8152_post_reset()
5657 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
5659 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
5661 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
5662 napi_schedule(&tp->napi); in rtl8152_post_reset()
5667 static bool delay_autosuspend(struct r8152 *tp) in delay_autosuspend() argument
5669 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
5670 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS); in delay_autosuspend()
5676 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
5682 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
5684 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
5690 static int rtl8152_runtime_resume(struct r8152 *tp) in rtl8152_runtime_resume() argument
5692 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
5695 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
5697 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
5699 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
5702 if (rtl8152_get_speed(tp) & LINK_STATUS) { in rtl8152_runtime_resume()
5703 rtl_start_rx(tp); in rtl8152_runtime_resume()
5706 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
5707 netif_info(tp, link, netdev, "linking down\n"); in rtl8152_runtime_resume()
5712 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
5715 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
5716 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
5718 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
5721 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
5723 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
5729 static int rtl8152_system_resume(struct r8152 *tp) in rtl8152_system_resume() argument
5731 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
5736 tp->rtl_ops.up(tp); in rtl8152_system_resume()
5738 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
5739 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
5745 static int rtl8152_runtime_suspend(struct r8152 *tp) in rtl8152_runtime_suspend() argument
5747 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
5750 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
5753 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
5759 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8152_runtime_suspend()
5761 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8152_runtime_suspend()
5762 rxdy_gated_en(tp, true); in rtl8152_runtime_suspend()
5763 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, in rtl8152_runtime_suspend()
5766 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
5767 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
5768 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
5775 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
5776 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
5778 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
5781 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
5784 rtl_stop_rx(tp); in rtl8152_runtime_suspend()
5785 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
5786 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
5790 if (delay_autosuspend(tp)) { in rtl8152_runtime_suspend()
5791 rtl8152_runtime_resume(tp); in rtl8152_runtime_suspend()
5800 static int rtl8152_system_suspend(struct r8152 *tp) in rtl8152_system_suspend() argument
5802 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
5806 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
5807 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
5809 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
5810 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
5811 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
5813 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
5814 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
5816 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
5824 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
5827 mutex_lock(&tp->control); in rtl8152_suspend()
5830 ret = rtl8152_runtime_suspend(tp); in rtl8152_suspend()
5832 ret = rtl8152_system_suspend(tp); in rtl8152_suspend()
5834 mutex_unlock(&tp->control); in rtl8152_suspend()
5841 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
5844 mutex_lock(&tp->control); in rtl8152_resume()
5846 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
5847 ret = rtl8152_runtime_resume(tp); in rtl8152_resume()
5849 ret = rtl8152_system_resume(tp); in rtl8152_resume()
5851 mutex_unlock(&tp->control); in rtl8152_resume()
5858 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_reset_resume() local
5860 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
5861 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
5862 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
5863 set_ethernet_addr(tp); in rtl8152_reset_resume()
5869 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
5871 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
5874 if (!rtl_can_wakeup(tp)) { in rtl8152_get_wol()
5878 mutex_lock(&tp->control); in rtl8152_get_wol()
5880 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
5881 mutex_unlock(&tp->control); in rtl8152_get_wol()
5884 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
5889 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
5892 if (!rtl_can_wakeup(tp)) in rtl8152_set_wol()
5898 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
5902 mutex_lock(&tp->control); in rtl8152_set_wol()
5904 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
5905 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
5907 mutex_unlock(&tp->control); in rtl8152_set_wol()
5909 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
5917 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
5919 return tp->msg_enable; in rtl8152_get_msglevel()
5924 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
5926 tp->msg_enable = value; in rtl8152_set_msglevel()
5932 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
5936 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
5937 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
5938 strlcpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
5946 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_link_ksettings() local
5949 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
5952 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
5956 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
5958 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
5960 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
5962 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
5971 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_link_ksettings() local
5975 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
6003 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
6005 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
6008 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
6009 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
6010 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
6011 tp->advertising = advertising; in rtl8152_set_link_ksettings()
6014 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
6016 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
6051 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
6054 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
6057 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
6059 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
6085 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
6090 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
6093 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
6096 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
6099 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
6102 eee->advertised = tp->eee_adv; in r8152_get_eee()
6108 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
6112 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
6113 tp->eee_adv = val; in r8152_set_eee()
6115 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
6120 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
6125 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
6128 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
6131 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
6134 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
6137 eee->advertised = tp->eee_adv; in r8153_get_eee()
6146 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
6149 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
6153 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
6155 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
6157 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
6159 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
6168 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
6171 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
6175 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
6177 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
6179 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
6181 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
6183 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
6191 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
6194 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
6198 mutex_lock(&tp->control); in rtl8152_nway_reset()
6200 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
6202 mutex_unlock(&tp->control); in rtl8152_nway_reset()
6204 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
6213 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
6215 switch (tp->version) { in rtl8152_get_coalesce()
6224 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
6232 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
6235 switch (tp->version) { in rtl8152_set_coalesce()
6247 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
6251 mutex_lock(&tp->control); in rtl8152_set_coalesce()
6253 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
6254 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
6258 napi_disable(&tp->napi); in rtl8152_set_coalesce()
6259 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
6260 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
6261 rtl_start_rx(tp); in rtl8152_set_coalesce()
6262 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
6264 napi_enable(&tp->napi); in rtl8152_set_coalesce()
6269 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
6271 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
6279 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_tunable() local
6283 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
6296 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_tunable() local
6303 netif_err(tp, rx_err, netdev, in rtl8152_set_tunable()
6308 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
6310 mutex_lock(&tp->control); in rtl8152_set_tunable()
6311 napi_disable(&tp->napi); in rtl8152_set_tunable()
6312 tp->rx_copybreak = val; in rtl8152_set_tunable()
6313 napi_enable(&tp->napi); in rtl8152_set_tunable()
6314 mutex_unlock(&tp->control); in rtl8152_set_tunable()
6316 tp->rx_copybreak = val; in rtl8152_set_tunable()
6330 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_ringparam() local
6333 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
6339 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_ringparam() local
6344 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
6346 mutex_lock(&tp->control); in rtl8152_set_ringparam()
6347 napi_disable(&tp->napi); in rtl8152_set_ringparam()
6348 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
6349 napi_enable(&tp->napi); in rtl8152_set_ringparam()
6350 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
6352 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
6385 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
6389 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
6392 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
6402 mutex_lock(&tp->control); in rtl8152_ioctl()
6403 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
6404 mutex_unlock(&tp->control); in rtl8152_ioctl()
6412 mutex_lock(&tp->control); in rtl8152_ioctl()
6413 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
6414 mutex_unlock(&tp->control); in rtl8152_ioctl()
6421 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
6429 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
6432 switch (tp->version) { in rtl8152_change_mtu()
6442 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
6446 mutex_lock(&tp->control); in rtl8152_change_mtu()
6453 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rms); in rtl8152_change_mtu()
6456 r8153_set_rx_early_size(tp); in rtl8152_change_mtu()
6459 mutex_unlock(&tp->control); in rtl8152_change_mtu()
6461 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
6480 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
6482 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
6485 if (tp->version != RTL_VER_01) in rtl8152_unload()
6486 r8152_power_cut_en(tp, true); in rtl8152_unload()
6489 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
6491 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
6494 r8153_power_cut_en(tp, false); in rtl8153_unload()
6497 static void rtl8153b_unload(struct r8152 *tp) in rtl8153b_unload() argument
6499 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_unload()
6502 r8153b_power_cut_en(tp, false); in rtl8153b_unload()
6505 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
6507 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
6510 switch (tp->version) { in rtl_ops_init()
6525 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
6526 tp->eee_en = true; in rtl_ops_init()
6527 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
6545 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
6546 tp->eee_en = true; in rtl_ops_init()
6547 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
6563 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
6564 tp->eee_en = true; in rtl_ops_init()
6565 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
6570 netif_err(tp, probe, tp->netdev, "Unknown Device\n"); in rtl_ops_init()
6587 static int rtl_fw_init(struct r8152 *tp) in rtl_fw_init() argument
6589 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
6591 switch (tp->version) { in rtl_fw_init()
6682 struct r8152 *tp; in rtl8152_probe() local
6705 tp = netdev_priv(netdev); in rtl8152_probe()
6706 tp->msg_enable = 0x7FFF; in rtl8152_probe()
6708 tp->udev = udev; in rtl8152_probe()
6709 tp->netdev = netdev; in rtl8152_probe()
6710 tp->intf = intf; in rtl8152_probe()
6711 tp->version = version; in rtl8152_probe()
6717 tp->mii.supports_gmii = 0; in rtl8152_probe()
6720 tp->mii.supports_gmii = 1; in rtl8152_probe()
6724 ret = rtl_ops_init(tp); in rtl8152_probe()
6728 rtl_fw_init(tp); in rtl8152_probe()
6730 mutex_init(&tp->control); in rtl8152_probe()
6731 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
6732 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe()
6733 tasklet_init(&tp->tx_tl, bottom_half, (unsigned long)tp); in rtl8152_probe()
6734 tasklet_disable(&tp->tx_tl); in rtl8152_probe()
6751 if (tp->version == RTL_VER_01) { in rtl8152_probe()
6760 set_bit(LENOVO_MACPASSTHRU, &tp->flags); in rtl8152_probe()
6768 set_bit(DELL_TB_RX_AGG_BUG, &tp->flags); in rtl8152_probe()
6776 switch (tp->version) { in rtl8152_probe()
6786 tp->mii.dev = netdev; in rtl8152_probe()
6787 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
6788 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
6789 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
6790 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
6791 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
6793 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe()
6794 tp->speed = SPEED_100; in rtl8152_probe()
6795 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe()
6797 if (tp->mii.supports_gmii) { in rtl8152_probe()
6798 tp->speed = SPEED_1000; in rtl8152_probe()
6799 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe()
6801 tp->duplex = DUPLEX_FULL; in rtl8152_probe()
6803 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe()
6804 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe()
6808 if (!rtl_can_wakeup(tp)) in rtl8152_probe()
6809 __rtl_set_wol(tp, 0); in rtl8152_probe()
6811 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
6813 tp->rtl_ops.init(tp); in rtl8152_probe()
6816 tp->rtl_fw.retry = true; in rtl8152_probe()
6818 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe()
6819 set_ethernet_addr(tp); in rtl8152_probe()
6821 usb_set_intfdata(intf, tp); in rtl8152_probe()
6822 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); in rtl8152_probe()
6826 netif_err(tp, probe, netdev, "couldn't register the device\n"); in rtl8152_probe()
6830 if (tp->saved_wolopts) in rtl8152_probe()
6835 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe()
6840 tasklet_kill(&tp->tx_tl); in rtl8152_probe()
6849 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
6852 if (tp) { in rtl8152_disconnect()
6853 rtl_set_unplug(tp); in rtl8152_disconnect()
6855 unregister_netdev(tp->netdev); in rtl8152_disconnect()
6856 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
6857 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
6858 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
6859 rtl8152_release_firmware(tp); in rtl8152_disconnect()
6860 free_netdev(tp->netdev); in rtl8152_disconnect()