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)
1043 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0),
1057 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
1066 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0),
1075 static void rtl_set_unplug(struct r8152 *tp)
1077 if (tp->udev->state == USB_STATE_NOTATTACHED) {
1078 set_bit(RTL8152_UNPLUG, &tp->flags);
1083 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
1089 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1101 ret = get_registers(tp, index, type, limit, data);
1109 ret = get_registers(tp, index, type, size, data);
1121 rtl_set_unplug(tp);
1126 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen,
1133 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1147 ret = set_registers(tp, index, type | byen, 4, data);
1160 ret = set_registers(tp, index,
1170 ret = set_registers(tp, index,
1184 ret = set_registers(tp, index, type | byen, 4, data);
1191 rtl_set_unplug(tp);
1197 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data)
1199 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA);
1203 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data)
1205 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA);
1209 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data)
1211 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB);
1214 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index)
1218 generic_ocp_read(tp, index, sizeof(data), &data, type);
1223 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data)
1227 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type);
1230 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index)
1240 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen);
1249 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data)
1267 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
1270 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index)
1278 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type);
1287 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data)
1305 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
1308 static u16 ocp_reg_read(struct r8152 *tp, u16 addr)
1313 if (ocp_base != tp->ocp_base) {
1314 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base);
1315 tp->ocp_base = ocp_base;
1319 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index);
1322 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data)
1327 if (ocp_base != tp->ocp_base) {
1328 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base);
1329 tp->ocp_base = ocp_base;
1333 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data);
1336 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value)
1338 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value);
1341 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr)
1343 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2);
1346 static void sram_write(struct r8152 *tp, u16 addr, u16 data)
1348 ocp_reg_write(tp, OCP_SRAM_ADDR, addr);
1349 ocp_reg_write(tp, OCP_SRAM_DATA, data);
1352 static u16 sram_read(struct r8152 *tp, u16 addr)
1354 ocp_reg_write(tp, OCP_SRAM_ADDR, addr);
1355 return ocp_reg_read(tp, OCP_SRAM_DATA);
1360 struct r8152 *tp = netdev_priv(netdev);
1363 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1369 ret = r8152_mdio_read(tp, reg);
1377 struct r8152 *tp = netdev_priv(netdev);
1379 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1385 r8152_mdio_write(tp, reg, val);
1389 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1393 struct r8152 *tp = netdev_priv(netdev);
1400 ret = usb_autopm_get_interface(tp->intf);
1404 mutex_lock(&tp->control);
1408 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
1409 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data);
1410 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
1412 mutex_unlock(&tp->control);
1414 usb_autopm_put_interface(tp->intf);
1423 static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa)
1435 if (test_bit(LENOVO_MACPASSTHRU, &tp->flags)) {
1441 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
1444 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE);
1446 netif_dbg(tp, probe, tp->netdev,
1452 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
1454 netif_dbg(tp, probe, tp->netdev,
1471 netif_warn(tp, probe, tp->netdev,
1479 netif_warn(tp, probe, tp->netdev,
1485 netif_warn(tp, probe, tp->netdev,
1492 netif_info(tp, probe, tp->netdev,
1500 static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
1502 struct net_device *dev = tp->netdev;
1507 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data);
1509 if (tp->version == RTL_VER_01) {
1510 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data);
1515 ret = vendor_mac_passthru_addr_read(tp, sa);
1517 ret = pla_ocp_read(tp, PLA_BACKUP, 8,
1523 netif_err(tp, probe, dev, "Get ether addr fail\n");
1525 netif_err(tp, probe, dev, "Invalid ether addr %pM\n",
1529 netif_info(tp, probe, dev, "Random ether addr %pM\n",
1537 static int set_ethernet_addr(struct r8152 *tp)
1539 struct net_device *dev = tp->netdev;
1543 ret = determine_ethernet_addr(tp, &sa);
1547 if (tp->version == RTL_VER_01)
1560 struct r8152 *tp;
1567 tp = agg->context;
1568 if (!tp)
1571 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1574 if (!test_bit(WORK_ENABLE, &tp->flags))
1577 netdev = tp->netdev;
1584 usb_mark_last_busy(tp->udev);
1591 spin_lock_irqsave(&tp->rx_lock, flags);
1592 list_add_tail(&agg->list, &tp->rx_done);
1593 spin_unlock_irqrestore(&tp->rx_lock, flags);
1594 napi_schedule(&tp->napi);
1597 rtl_set_unplug(tp);
1598 netif_device_detach(tp->netdev);
1612 r8152_submit_rx(tp, agg, GFP_ATOMIC);
1620 struct r8152 *tp;
1628 tp = agg->context;
1629 if (!tp)
1632 netdev = tp->netdev;
1643 spin_lock_irqsave(&tp->tx_lock, flags);
1644 list_add_tail(&agg->list, &tp->tx_free);
1645 spin_unlock_irqrestore(&tp->tx_lock, flags);
1647 usb_autopm_put_interface_async(tp->intf);
1652 if (!test_bit(WORK_ENABLE, &tp->flags))
1655 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1658 if (!skb_queue_empty(&tp->tx_queue))
1659 tasklet_schedule(&tp->tx_tl);
1664 struct r8152 *tp;
1669 tp = urb->context;
1670 if (!tp)
1673 if (!test_bit(WORK_ENABLE, &tp->flags))
1676 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1684 netif_device_detach(tp->netdev);
1688 netif_info(tp, intr, tp->netdev,
1693 netif_info(tp, intr, tp->netdev,
1698 netif_info(tp, intr, tp->netdev, "intr status %d\n", status);
1704 if (!netif_carrier_ok(tp->netdev)) {
1705 set_bit(RTL8152_LINK_CHG, &tp->flags);
1706 schedule_delayed_work(&tp->schedule, 0);
1709 if (netif_carrier_ok(tp->netdev)) {
1710 netif_stop_queue(tp->netdev);
1711 set_bit(RTL8152_LINK_CHG, &tp->flags);
1712 schedule_delayed_work(&tp->schedule, 0);
1719 rtl_set_unplug(tp);
1720 netif_device_detach(tp->netdev);
1722 netif_err(tp, intr, tp->netdev,
1737 static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg)
1745 atomic_dec(&tp->rx_count);
1748 static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags)
1750 struct net_device *netdev = tp->netdev;
1752 unsigned int order = get_order(tp->rx_buf_sz);
1770 rx_agg->context = tp;
1774 spin_lock_irqsave(&tp->rx_lock, flags);
1775 list_add_tail(&rx_agg->info_list, &tp->rx_info);
1776 spin_unlock_irqrestore(&tp->rx_lock, flags);
1778 atomic_inc(&tp->rx_count);
1789 static void free_all_mem(struct r8152 *tp)
1795 spin_lock_irqsave(&tp->rx_lock, flags);
1797 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list)
1798 free_rx_agg(tp, agg);
1800 spin_unlock_irqrestore(&tp->rx_lock, flags);
1802 WARN_ON(atomic_read(&tp->rx_count));
1805 usb_free_urb(tp->tx_info[i].urb);
1806 tp->tx_info[i].urb = NULL;
1808 kfree(tp->tx_info[i].buffer);
1809 tp->tx_info[i].buffer = NULL;
1810 tp->tx_info[i].head = NULL;
1813 usb_free_urb(tp->intr_urb);
1814 tp->intr_urb = NULL;
1816 kfree(tp->intr_buff);
1817 tp->intr_buff = NULL;
1820 static int alloc_all_mem(struct r8152 *tp)
1822 struct net_device *netdev = tp->netdev;
1823 struct usb_interface *intf = tp->intf;
1830 spin_lock_init(&tp->rx_lock);
1831 spin_lock_init(&tp->tx_lock);
1832 INIT_LIST_HEAD(&tp->rx_info);
1833 INIT_LIST_HEAD(&tp->tx_free);
1834 INIT_LIST_HEAD(&tp->rx_done);
1835 skb_queue_head_init(&tp->tx_queue);
1836 skb_queue_head_init(&tp->rx_queue);
1837 atomic_set(&tp->rx_count, 0);
1840 if (!alloc_rx_agg(tp, GFP_KERNEL))
1866 INIT_LIST_HEAD(&tp->tx_info[i].list);
1867 tp->tx_info[i].context = tp;
1868 tp->tx_info[i].urb = urb;
1869 tp->tx_info[i].buffer = buf;
1870 tp->tx_info[i].head = tx_agg_align(buf);
1872 list_add_tail(&tp->tx_info[i].list, &tp->tx_free);
1875 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL);
1876 if (!tp->intr_urb)
1879 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL);
1880 if (!tp->intr_buff)
1883 tp->intr_interval = (int)ep_intr->desc.bInterval;
1884 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3),
1885 tp->intr_buff, INTBUFSIZE, intr_callback,
1886 tp, tp->intr_interval);
1891 free_all_mem(tp);
1895 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp)
1900 if (list_empty(&tp->tx_free))
1903 spin_lock_irqsave(&tp->tx_lock, flags);
1904 if (!list_empty(&tp->tx_free)) {
1907 cursor = tp->tx_free.next;
1911 spin_unlock_irqrestore(&tp->tx_lock, flags);
1920 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb,
1924 netdev_features_t features = tp->netdev->features;
1951 stats = &tp->netdev->stats;
1976 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc,
1989 netif_warn(tp, tx_err, tp->netdev,
2021 netif_warn(tp, tx_err, tp->netdev,
2061 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg)
2063 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue;
2099 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) {
2100 r8152_csum_workaround(tp, skb, &skb_head);
2110 struct net_device_stats *stats = &tp->netdev->stats;
2126 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags))
2136 netif_tx_lock(tp->netdev);
2138 if (netif_queue_stopped(tp->netdev) &&
2139 skb_queue_len(&tp->tx_queue) < tp->tx_qlen)
2140 netif_wake_queue(tp->netdev);
2142 netif_tx_unlock(tp->netdev);
2144 ret = usb_autopm_get_interface_async(tp->intf);
2148 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2),
2154 usb_autopm_put_interface_async(tp->intf);
2160 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc)
2165 if (!(tp->netdev->features & NETIF_F_RXCSUM))
2189 static inline bool rx_count_exceed(struct r8152 *tp)
2191 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX;
2199 static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags)
2204 spin_lock_irqsave(&tp->rx_lock, flags);
2206 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) {
2213 if (rx_count_exceed(tp)) {
2215 free_rx_agg(tp, agg);
2221 spin_unlock_irqrestore(&tp->rx_lock, flags);
2223 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending)
2224 agg_free = alloc_rx_agg(tp, mflags);
2229 static int rx_bottom(struct r8152 *tp, int budget)
2234 struct napi_struct *napi = &tp->napi;
2236 if (!skb_queue_empty(&tp->rx_queue)) {
2238 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue);
2239 struct net_device *netdev = tp->netdev;
2254 if (list_empty(&tp->rx_done))
2258 spin_lock_irqsave(&tp->rx_lock, flags);
2259 list_splice_init(&tp->rx_done, &rx_queue);
2260 spin_unlock_irqrestore(&tp->rx_lock, flags);
2276 agg_free = rtl_get_free_rx(tp, GFP_ATOMIC);
2283 struct net_device *netdev = tp->netdev;
2289 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000))
2303 if (!agg_free || tp->rx_copybreak > pkt_len)
2306 rx_frag_head_sz = tp->rx_copybreak;
2314 skb->ip_summed = r8152_rx_csum(tp, rx_desc);
2335 __skb_queue_tail(&tp->rx_queue, skb);
2348 spin_lock_irqsave(&tp->rx_lock, flags);
2350 list_add(&agg_free->list, &tp->rx_used);
2352 list_add_tail(&agg->list, &tp->rx_used);
2356 spin_unlock_irqrestore(&tp->rx_lock, flags);
2361 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC);
2369 spin_lock_irqsave(&tp->rx_lock, flags);
2370 list_splice_tail(&rx_queue, &tp->rx_done);
2371 spin_unlock_irqrestore(&tp->rx_lock, flags);
2378 static void tx_bottom(struct r8152 *tp)
2383 struct net_device *netdev = tp->netdev;
2386 if (skb_queue_empty(&tp->tx_queue))
2389 agg = r8152_get_tx_agg(tp);
2393 res = r8152_tx_agg_fill(tp, agg);
2398 rtl_set_unplug(tp);
2404 netif_warn(tp, tx_err, netdev,
2408 spin_lock_irqsave(&tp->tx_lock, flags);
2409 list_add_tail(&agg->list, &tp->tx_free);
2410 spin_unlock_irqrestore(&tp->tx_lock, flags);
2417 struct r8152 *tp;
2419 tp = (struct r8152 *)data;
2421 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2424 if (!test_bit(WORK_ENABLE, &tp->flags))
2429 if (!netif_carrier_ok(tp->netdev))
2432 clear_bit(SCHEDULE_TASKLET, &tp->flags);
2434 tx_bottom(tp);
2439 struct r8152 *tp = container_of(napi, struct r8152, napi);
2445 work_done = rx_bottom(tp, budget);
2450 if (!list_empty(&tp->rx_done))
2459 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags)
2464 if (test_bit(RTL8152_UNPLUG, &tp->flags) ||
2465 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev))
2468 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1),
2469 agg->buffer, tp->rx_buf_sz,
2474 rtl_set_unplug(tp);
2475 netif_device_detach(tp->netdev);
2481 spin_lock_irqsave(&tp->rx_lock, flags);
2482 list_add_tail(&agg->list, &tp->rx_done);
2483 spin_unlock_irqrestore(&tp->rx_lock, flags);
2485 netif_err(tp, rx_err, tp->netdev,
2488 napi_schedule(&tp->napi);
2494 static void rtl_drop_queued_tx(struct r8152 *tp)
2496 struct net_device_stats *stats = &tp->netdev->stats;
2497 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue;
2516 struct r8152 *tp = netdev_priv(netdev);
2518 netif_warn(tp, tx_err, netdev, "Tx timeout\n");
2520 usb_queue_reset_device(tp->intf);
2525 struct r8152 *tp = netdev_priv(netdev);
2528 set_bit(RTL8152_SET_RX_MODE, &tp->flags);
2529 schedule_delayed_work(&tp->schedule, 0);
2535 struct r8152 *tp = netdev_priv(netdev);
2541 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
2547 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n");
2573 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp);
2574 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
2597 struct r8152 *tp = netdev_priv(netdev);
2601 skb_queue_tail(&tp->tx_queue, skb);
2603 if (!list_empty(&tp->tx_free)) {
2604 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
2605 set_bit(SCHEDULE_TASKLET, &tp->flags);
2606 schedule_delayed_work(&tp->schedule, 0);
2608 usb_mark_last_busy(tp->udev);
2609 tasklet_schedule(&tp->tx_tl);
2611 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) {
2618 static void r8152b_reset_packet_filter(struct r8152 *tp)
2622 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC);
2624 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data);
2626 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data);
2629 static void rtl8152_nic_reset(struct r8152 *tp)
2633 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST);
2636 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST))
2642 static void set_tx_qlen(struct r8152 *tp)
2644 struct net_device *netdev = tp->netdev;
2646 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN +
2650 static inline u8 rtl8152_get_speed(struct r8152 *tp)
2652 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS);
2655 static void rtl_set_eee_plus(struct r8152 *tp)
2660 speed = rtl8152_get_speed(tp);
2662 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR);
2664 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data);
2666 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR);
2668 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data);
2672 static void rxdy_gated_en(struct r8152 *tp, bool enable)
2676 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1);
2681 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
2684 static int rtl_start_rx(struct r8152 *tp)
2693 spin_lock_irqsave(&tp->rx_lock, flags);
2695 INIT_LIST_HEAD(&tp->rx_done);
2696 INIT_LIST_HEAD(&tp->rx_used);
2698 list_splice_init(&tp->rx_info, &tmp_list);
2700 spin_unlock_irqrestore(&tp->rx_lock, flags);
2707 spin_lock_irqsave(&tp->rx_lock, flags);
2708 list_add_tail(&agg->list, &tp->rx_used);
2709 spin_unlock_irqrestore(&tp->rx_lock, flags);
2711 spin_lock_irqsave(&tp->rx_lock, flags);
2712 list_add_tail(&agg->list, &tp->rx_done);
2713 spin_unlock_irqrestore(&tp->rx_lock, flags);
2715 ret = r8152_submit_rx(tp, agg, GFP_KERNEL);
2719 spin_lock_irqsave(&tp->rx_lock, flags);
2720 WARN_ON(!list_empty(&tp->rx_info));
2721 list_splice(&tmp_list, &tp->rx_info);
2722 spin_unlock_irqrestore(&tp->rx_lock, flags);
2727 static int rtl_stop_rx(struct r8152 *tp)
2741 spin_lock_irqsave(&tp->rx_lock, flags);
2742 list_splice_init(&tp->rx_info, &tmp_list);
2743 spin_unlock_irqrestore(&tp->rx_lock, flags);
2750 free_rx_agg(tp, agg);
2756 spin_lock_irqsave(&tp->rx_lock, flags);
2757 WARN_ON(!list_empty(&tp->rx_info));
2758 list_splice(&tmp_list, &tp->rx_info);
2759 spin_unlock_irqrestore(&tp->rx_lock, flags);
2761 while (!skb_queue_empty(&tp->rx_queue))
2762 dev_kfree_skb(__skb_dequeue(&tp->rx_queue));
2767 static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp)
2769 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN,
2773 static int rtl_enable(struct r8152 *tp)
2777 r8152b_reset_packet_filter(tp);
2779 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR);
2781 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data);
2783 switch (tp->version) {
2786 r8153b_rx_agg_chg_indicate(tp);
2792 rxdy_gated_en(tp, false);
2797 static int rtl8152_enable(struct r8152 *tp)
2799 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2802 set_tx_qlen(tp);
2803 rtl_set_eee_plus(tp);
2805 return rtl_enable(tp);
2808 static void r8153_set_rx_early_timeout(struct r8152 *tp)
2810 u32 ocp_data = tp->coalesce / 8;
2812 switch (tp->version) {
2817 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
2826 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
2828 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR,
2837 static void r8153_set_rx_early_size(struct r8152 *tp)
2839 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu);
2841 switch (tp->version) {
2846 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
2851 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
2860 static int rtl8153_enable(struct r8152 *tp)
2862 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2865 set_tx_qlen(tp);
2866 rtl_set_eee_plus(tp);
2867 r8153_set_rx_early_timeout(tp);
2868 r8153_set_rx_early_size(tp);
2870 if (tp->version == RTL_VER_09) {
2873 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
2875 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
2878 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
2881 return rtl_enable(tp);
2884 static void rtl_disable(struct r8152 *tp)
2889 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
2890 rtl_drop_queued_tx(tp);
2894 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
2896 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
2898 rtl_drop_queued_tx(tp);
2901 usb_kill_urb(tp->tx_info[i].urb);
2903 rxdy_gated_en(tp, true);
2906 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
2913 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY)
2918 rtl_stop_rx(tp);
2920 rtl8152_nic_reset(tp);
2923 static void r8152_power_cut_en(struct r8152 *tp, bool enable)
2927 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL);
2932 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data);
2934 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS);
2936 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data);
2939 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable)
2943 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR);
2948 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data);
2955 struct r8152 *tp = netdev_priv(dev);
2958 ret = usb_autopm_get_interface(tp->intf);
2962 mutex_lock(&tp->control);
2966 rtl_rx_vlan_en(tp, true);
2968 rtl_rx_vlan_en(tp, false);
2971 mutex_unlock(&tp->control);
2973 usb_autopm_put_interface(tp->intf);
2981 static u32 __rtl_get_wol(struct r8152 *tp)
2986 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
2990 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5);
2998 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL);
3005 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts)
3009 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
3011 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
3015 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
3017 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5);
3025 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data);
3027 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
3029 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL);
3033 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data);
3036 device_set_wakeup_enable(&tp->udev->dev, true);
3038 device_set_wakeup_enable(&tp->udev->dev, false);
3041 static void r8153_u1u2en(struct r8152 *tp, bool enable)
3050 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2);
3053 static void r8153b_u1u2en(struct r8152 *tp, bool enable)
3057 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG);
3063 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data);
3066 static void r8153_u2p3en(struct r8152 *tp, bool enable)
3070 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL);
3075 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data);
3078 static void r8153b_ups_flags(struct r8152 *tp)
3082 if (tp->ups_info.green)
3085 if (tp->ups_info.aldps)
3088 if (tp->ups_info.eee)
3091 if (tp->ups_info.flow_control)
3094 if (tp->ups_info.eee_ckdiv)
3097 if (tp->ups_info.eee_cmod_lv)
3100 if (tp->ups_info._10m_ckdiv)
3103 if (tp->ups_info.eee_plloff_100)
3106 if (tp->ups_info.eee_plloff_giga)
3109 if (tp->ups_info._250m_ckdiv)
3112 if (tp->ups_info.ctap_short_off)
3115 switch (tp->ups_info.speed_duplex) {
3147 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
3150 static void r8153b_green_en(struct r8152 *tp, bool enable)
3155 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */
3156 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */
3157 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */
3159 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */
3160 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */
3161 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */
3164 data = sram_read(tp, SRAM_GREEN_CFG);
3166 sram_write(tp, SRAM_GREEN_CFG, data);
3168 tp->ups_info.green = enable;
3171 static u16 r8153_phy_status(struct r8152 *tp, u16 desired)
3177 data = ocp_reg_read(tp, OCP_PHY_STATUS);
3188 if (test_bit(RTL8152_UNPLUG, &tp->flags))
3195 static void r8153b_ups_en(struct r8152 *tp, bool enable)
3197 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT);
3200 r8153b_ups_flags(tp);
3203 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3205 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff);
3207 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
3212 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3214 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff);
3216 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
3218 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
3220 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
3222 data = r8153_phy_status(tp, 0);
3227 r8153b_green_en(tp,
3228 test_bit(GREEN_ETHERNET, &tp->flags));
3230 data = r8152_mdio_read(tp, MII_BMCR);
3233 r8152_mdio_write(tp, MII_BMCR, data);
3235 data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
3240 netif_warn(tp, link, tp->netdev,
3247 static void r8153_power_cut_en(struct r8152 *tp, bool enable)
3251 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT);
3256 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3258 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
3260 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
3263 static void r8153b_power_cut_en(struct r8152 *tp, bool enable)
3267 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT);
3272 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3274 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
3276 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
3279 static void r8153_queue_wake(struct r8152 *tp, bool enable)
3283 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG);
3288 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data);
3290 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG);
3292 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data);
3294 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
3296 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
3299 static bool rtl_can_wakeup(struct r8152 *tp)
3301 struct usb_device *udev = tp->udev;
3306 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable)
3311 __rtl_set_wol(tp, WAKE_ANY);
3313 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
3315 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
3317 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
3319 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
3323 __rtl_set_wol(tp, tp->saved_wolopts);
3325 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
3327 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
3329 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
3331 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
3335 static void rtl8153_runtime_enable(struct r8152 *tp, bool enable)
3338 r8153_u1u2en(tp, false);
3339 r8153_u2p3en(tp, false);
3340 rtl_runtime_suspend_enable(tp, true);
3342 rtl_runtime_suspend_enable(tp, false);
3344 switch (tp->version) {
3351 r8153_u2p3en(tp, true);
3355 r8153_u1u2en(tp, true);
3359 static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable)
3362 r8153_queue_wake(tp, true);
3363 r8153b_u1u2en(tp, false);
3364 r8153_u2p3en(tp, false);
3365 rtl_runtime_suspend_enable(tp, true);
3366 r8153b_ups_en(tp, true);
3368 r8153b_ups_en(tp, false);
3369 r8153_queue_wake(tp, false);
3370 rtl_runtime_suspend_enable(tp, false);
3371 if (tp->udev->speed != USB_SPEED_HIGH)
3372 r8153b_u1u2en(tp, true);
3376 static void r8153_teredo_off(struct r8152 *tp)
3380 switch (tp->version) {
3388 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG);
3391 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data);
3399 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff);
3406 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE);
3407 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0);
3408 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0);
3411 static void rtl_reset_bmu(struct r8152 *tp)
3415 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET);
3417 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
3419 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
3423 static void rtl_clear_bp(struct r8152 *tp, u16 type)
3425 switch (tp->version) {
3434 ocp_write_byte(tp, type, PLA_BP_EN, 0);
3440 ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
3442 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_8, 0);
3443 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_9, 0);
3444 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_10, 0);
3445 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_11, 0);
3446 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_12, 0);
3447 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_13, 0);
3448 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_14, 0);
3449 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_15, 0);
3451 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
3456 ocp_write_word(tp, type, PLA_BP_0, 0);
3457 ocp_write_word(tp, type, PLA_BP_1, 0);
3458 ocp_write_word(tp, type, PLA_BP_2, 0);
3459 ocp_write_word(tp, type, PLA_BP_3, 0);
3460 ocp_write_word(tp, type, PLA_BP_4, 0);
3461 ocp_write_word(tp, type, PLA_BP_5, 0);
3462 ocp_write_word(tp, type, PLA_BP_6, 0);
3463 ocp_write_word(tp, type, PLA_BP_7, 0);
3467 ocp_write_word(tp, type, PLA_BP_BA, 0);
3470 static int r8153_patch_request(struct r8152 *tp, bool request)
3475 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD);
3480 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data);
3484 if (ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)
3488 if (request && !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) {
3489 netif_err(tp, drv, tp->netdev, "patch request fail\n");
3490 r8153_patch_request(tp, false);
3497 static int r8153_pre_ram_code(struct r8152 *tp, u16 key_addr, u16 patch_key)
3499 if (r8153_patch_request(tp, true)) {
3500 dev_err(&tp->intf->dev, "patch request fail\n");
3504 sram_write(tp, key_addr, patch_key);
3505 sram_write(tp, SRAM_PHY_LOCK, PHY_PATCH_LOCK);
3510 static int r8153_post_ram_code(struct r8152 *tp, u16 key_addr)
3514 sram_write(tp, 0x0000, 0x0000);
3516 data = ocp_reg_read(tp, OCP_PHY_LOCK);
3518 ocp_reg_write(tp, OCP_PHY_LOCK, data);
3520 sram_write(tp, key_addr, 0x0000);
3522 r8153_patch_request(tp, false);
3524 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
3529 static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy)
3535 switch (tp->version) {
3551 dev_err(&tp->intf->dev, "fw_offset too small\n");
3557 dev_err(&tp->intf->dev, "invalid fw_offset\n");
3563 dev_err(&tp->intf->dev, "invalid block length\n");
3568 dev_err(&tp->intf->dev, "invalid register to load firmware\n");
3573 dev_err(&tp->intf->dev, "invalid base address register\n");
3578 dev_err(&tp->intf->dev,
3584 dev_err(&tp->intf->dev,
3590 dev_err(&tp->intf->dev,
3596 dev_err(&tp->intf->dev, "invalid break point number\n");
3605 static bool rtl8152_is_fw_mac_ok(struct r8152 *tp, struct fw_mac *mac)
3614 switch (tp->version) {
3640 switch (tp->version) {
3671 dev_err(&tp->intf->dev, "fw_offset too small\n");
3677 dev_err(&tp->intf->dev, "invalid fw_offset\n");
3683 dev_err(&tp->intf->dev, "invalid block length\n");
3688 dev_err(&tp->intf->dev, "invalid register to load firmware\n");
3693 dev_err(&tp->intf->dev, "invalid base address register\n");
3698 dev_err(&tp->intf->dev, "invalid enabled mask register\n");
3703 dev_err(&tp->intf->dev,
3709 dev_err(&tp->intf->dev, "invalid break point number\n");
3715 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i);
3729 static long rtl8152_fw_verify_checksum(struct r8152 *tp,
3746 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n",
3766 dev_err(&tp->intf->dev, "checksum fail\n");
3776 static long rtl8152_check_firmware(struct r8152 *tp, struct rtl_fw *rtl_fw)
3788 dev_err(&tp->intf->dev, "file too small\n");
3792 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size);
3813 dev_err(&tp->intf->dev,
3819 if (!rtl8152_is_fw_mac_ok(tp, pla)) {
3820 dev_err(&tp->intf->dev,
3827 dev_err(&tp->intf->dev,
3833 if (!rtl8152_is_fw_mac_ok(tp, usb)) {
3834 dev_err(&tp->intf->dev,
3841 dev_err(&tp->intf->dev,
3847 dev_err(&tp->intf->dev,
3856 dev_err(&tp->intf->dev,
3862 dev_err(&tp->intf->dev,
3871 dev_err(&tp->intf->dev,
3877 dev_err(&tp->intf->dev,
3883 if (!rtl8152_is_fw_phy_nc_ok(tp, phy_nc)) {
3884 dev_err(&tp->intf->dev,
3891 dev_warn(&tp->intf->dev, "Unknown type %u is found\n",
3902 dev_err(&tp->intf->dev, "without PHY_STOP\n");
3911 static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy)
3918 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre));
3919 sram_write(tp, __le16_to_cpu(phy->ba_reg),
3927 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg));
3929 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i]));
3931 sram_write(tp, __le16_to_cpu(phy->patch_en_addr),
3937 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i]));
3941 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post));
3943 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info);
3946 static void rtl8152_fw_mac_apply(struct r8152 *tp, struct fw_mac *mac)
3964 rtl_clear_bp(tp, type);
3969 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA &&
3970 !(ocp_read_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST) & DEBUG_OE)) {
3971 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_PRE, DEBUG_LTSSM);
3972 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST, DEBUG_LTSSM);
3981 generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data,
3984 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr),
3990 ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i]));
3996 ocp_write_word(tp, type, bp_en_addr,
4001 ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg,
4004 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info);
4007 static void rtl8152_apply_firmware(struct r8152 *tp)
4009 struct rtl_fw *rtl_fw = &tp->rtl_fw;
4023 rtl_fw->pre_fw(tp);
4033 rtl8152_fw_mac_apply(tp, (struct fw_mac *)block);
4038 r8153_pre_ram_code(tp, key_addr,
4043 r8153_post_ram_code(tp, key_addr);
4046 rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block);
4057 rtl_fw->post_fw(tp);
4060 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version);
4063 static void rtl8152_release_firmware(struct r8152 *tp)
4065 struct rtl_fw *rtl_fw = &tp->rtl_fw;
4073 static int rtl8152_request_firmware(struct r8152 *tp)
4075 struct rtl_fw *rtl_fw = &tp->rtl_fw;
4079 dev_info(&tp->intf->dev, "skip request firmware\n");
4084 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev);
4088 rc = rtl8152_check_firmware(tp, rtl_fw);
4096 dev_warn(&tp->intf->dev,
4104 static void r8152_aldps_en(struct r8152 *tp, bool enable)
4107 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS |
4110 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA |
4116 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg)
4118 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev);
4119 ocp_reg_write(tp, OCP_EEE_DATA, reg);
4120 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev);
4123 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg)
4127 r8152_mmd_indirect(tp, dev, reg);
4128 data = ocp_reg_read(tp, OCP_EEE_DATA);
4129 ocp_reg_write(tp, OCP_EEE_AR, 0x0000);
4134 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data)
4136 r8152_mmd_indirect(tp, dev, reg);
4137 ocp_reg_write(tp, OCP_EEE_DATA, data);
4138 ocp_reg_write(tp, OCP_EEE_AR, 0x0000);
4141 static void r8152_eee_en(struct r8152 *tp, bool enable)
4146 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR);
4147 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask;
4148 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2);
4149 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask;
4166 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data);
4167 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1);
4168 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2);
4169 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3);
4172 static void r8153_eee_en(struct r8152 *tp, bool enable)
4177 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR);
4178 config = ocp_reg_read(tp, OCP_EEE_CFG);
4188 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data);
4189 ocp_reg_write(tp, OCP_EEE_CFG, config);
4191 tp->ups_info.eee = enable;
4194 static void rtl_eee_enable(struct r8152 *tp, bool enable)
4196 switch (tp->version) {
4201 r8152_eee_en(tp, true);
4202 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV,
4203 tp->eee_adv);
4205 r8152_eee_en(tp, false);
4206 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0);
4216 r8153_eee_en(tp, true);
4217 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv);
4219 r8153_eee_en(tp, false);
4220 ocp_reg_write(tp, OCP_EEE_ADV, 0);
4228 static void r8152b_enable_fc(struct r8152 *tp)
4232 anar = r8152_mdio_read(tp, MII_ADVERTISE);
4234 r8152_mdio_write(tp, MII_ADVERTISE, anar);
4236 tp->ups_info.flow_control = true;
4239 static void rtl8152_disable(struct r8152 *tp)
4241 r8152_aldps_en(tp, false);
4242 rtl_disable(tp);
4243 r8152_aldps_en(tp, true);
4246 static void r8152b_hw_phy_cfg(struct r8152 *tp)
4248 rtl8152_apply_firmware(tp);
4249 rtl_eee_enable(tp, tp->eee_en);
4250 r8152_aldps_en(tp, true);
4251 r8152b_enable_fc(tp);
4253 set_bit(PHY_RESET, &tp->flags);
4256 static void wait_oob_link_list_ready(struct r8152 *tp)
4262 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4269 static void r8152b_exit_oob(struct r8152 *tp)
4273 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4275 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4277 rxdy_gated_en(tp, true);
4278 r8153_teredo_off(tp);
4279 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
4280 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00);
4282 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4284 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4286 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4288 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4290 wait_oob_link_list_ready(tp);
4292 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4294 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4296 wait_oob_link_list_ready(tp);
4298 rtl8152_nic_reset(tp);
4301 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL);
4303 if (tp->udev->speed == USB_SPEED_FULL ||
4304 tp->udev->speed == USB_SPEED_LOW) {
4306 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1,
4308 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2,
4312 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1,
4314 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2,
4319 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL);
4321 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD);
4322 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH);
4323 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA,
4326 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
4328 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
4330 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
4332 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data);
4335 static void r8152b_enter_oob(struct r8152 *tp)
4339 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4341 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4343 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB);
4344 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB);
4345 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB);
4347 rtl_disable(tp);
4349 wait_oob_link_list_ready(tp);
4351 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4353 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4355 wait_oob_link_list_ready(tp);
4357 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
4359 rtl_rx_vlan_en(tp, true);
4361 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR);
4363 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data);
4365 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4367 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4369 rxdy_gated_en(tp, false);
4371 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4373 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4376 static int r8153_pre_firmware_1(struct r8152 *tp)
4382 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL);
4392 static int r8153_post_firmware_1(struct r8152 *tp)
4395 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER)
4396 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY);
4399 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16);
4404 static int r8153_pre_firmware_2(struct r8152 *tp)
4408 r8153_pre_firmware_1(tp);
4410 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0);
4412 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data);
4417 static int r8153_post_firmware_2(struct r8152 *tp)
4422 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) {
4423 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN);
4425 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data);
4429 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16);
4432 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, U3P3_CHECK_EN | 4);
4434 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0);
4436 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data);
4438 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
4440 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
4445 static int r8153_post_firmware_3(struct r8152 *tp)
4449 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
4451 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
4453 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
4455 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
4460 static int r8153b_pre_firmware_1(struct r8152 *tp)
4463 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER,
4469 static int r8153b_post_firmware_1(struct r8152 *tp)
4474 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
4476 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN);
4478 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data);
4481 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL);
4483 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data);
4485 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
4487 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
4489 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
4491 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
4496 static void r8153_aldps_en(struct r8152 *tp, bool enable)
4500 data = ocp_reg_read(tp, OCP_POWER_CFG);
4503 ocp_reg_write(tp, OCP_POWER_CFG, data);
4508 ocp_reg_write(tp, OCP_POWER_CFG, data);
4511 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100)
4516 tp->ups_info.aldps = enable;
4519 static void r8153_hw_phy_cfg(struct r8152 *tp)
4525 r8153_aldps_en(tp, false);
4528 rtl_eee_enable(tp, false);
4530 rtl8152_apply_firmware(tp);
4532 if (tp->version == RTL_VER_03) {
4533 data = ocp_reg_read(tp, OCP_EEE_CFG);
4535 ocp_reg_write(tp, OCP_EEE_CFG, data);
4538 data = ocp_reg_read(tp, OCP_POWER_CFG);
4540 ocp_reg_write(tp, OCP_POWER_CFG, data);
4542 data = ocp_reg_read(tp, OCP_DOWN_SPEED);
4544 ocp_reg_write(tp, OCP_DOWN_SPEED, data);
4545 data = ocp_reg_read(tp, OCP_POWER_CFG);
4547 ocp_reg_write(tp, OCP_POWER_CFG, data);
4548 sram_write(tp, SRAM_IMPEDANCE, 0x0b13);
4550 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
4552 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
4555 sram_write(tp, SRAM_LPF_CFG, 0xf70f);
4558 sram_write(tp, SRAM_10M_AMP1, 0x00af);
4559 sram_write(tp, SRAM_10M_AMP2, 0x0208);
4561 if (tp->eee_en)
4562 rtl_eee_enable(tp, true);
4564 r8153_aldps_en(tp, true);
4565 r8152b_enable_fc(tp);
4567 switch (tp->version) {
4574 r8153_u2p3en(tp, true);
4578 set_bit(PHY_RESET, &tp->flags);
4581 static u32 r8152_efuse_read(struct r8152 *tp, u8 addr)
4585 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr);
4586 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD);
4588 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA);
4593 static void r8153b_hw_phy_cfg(struct r8152 *tp)
4599 r8153_aldps_en(tp, false);
4602 rtl_eee_enable(tp, false);
4604 rtl8152_apply_firmware(tp);
4606 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
4608 data = sram_read(tp, SRAM_GREEN_CFG);
4610 sram_write(tp, SRAM_GREEN_CFG, data);
4611 data = ocp_reg_read(tp, OCP_NCTL_CFG);
4613 ocp_reg_write(tp, OCP_NCTL_CFG, data);
4620 ocp_data = r8152_efuse_read(tp, 0x7d);
4623 ocp_reg_write(tp, OCP_ADC_IOFFSET, data);
4629 ocp_data = ocp_reg_read(tp, 0xc426);
4635 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG);
4637 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data);
4640 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
4642 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
4645 if (!r8153_patch_request(tp, true)) {
4646 data = ocp_reg_read(tp, OCP_POWER_CFG);
4648 ocp_reg_write(tp, OCP_POWER_CFG, data);
4649 tp->ups_info.eee_ckdiv = true;
4651 data = ocp_reg_read(tp, OCP_DOWN_SPEED);
4653 ocp_reg_write(tp, OCP_DOWN_SPEED, data);
4654 tp->ups_info.eee_cmod_lv = true;
4655 tp->ups_info._10m_ckdiv = true;
4656 tp->ups_info.eee_plloff_giga = true;
4658 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0);
4659 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5));
4660 tp->ups_info._250m_ckdiv = true;
4662 r8153_patch_request(tp, false);
4665 if (tp->eee_en)
4666 rtl_eee_enable(tp, true);
4668 r8153_aldps_en(tp, true);
4669 r8152b_enable_fc(tp);
4671 set_bit(PHY_RESET, &tp->flags);
4674 static void r8153_first_init(struct r8152 *tp)
4678 rxdy_gated_en(tp, true);
4679 r8153_teredo_off(tp);
4681 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4683 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4685 rtl8152_nic_reset(tp);
4686 rtl_reset_bmu(tp);
4688 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4690 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4692 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4694 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4696 wait_oob_link_list_ready(tp);
4698 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4700 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4702 wait_oob_link_list_ready(tp);
4704 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
4706 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
4707 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);
4708 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO);
4710 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
4712 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data);
4714 rtl8152_nic_reset(tp);
4717 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL);
4718 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL);
4719 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL);
4721 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2);
4724 static void r8153_enter_oob(struct r8152 *tp)
4728 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4730 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4732 rtl_disable(tp);
4733 rtl_reset_bmu(tp);
4735 wait_oob_link_list_ready(tp);
4737 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4739 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4741 wait_oob_link_list_ready(tp);
4743 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
4744 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);
4746 switch (tp->version) {
4751 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG);
4753 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data);
4762 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff);
4769 rtl_rx_vlan_en(tp, true);
4771 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR);
4773 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data);
4775 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4777 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4779 rxdy_gated_en(tp, false);
4781 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4783 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4786 static void rtl8153_disable(struct r8152 *tp)
4788 r8153_aldps_en(tp, false);
4789 rtl_disable(tp);
4790 rtl_reset_bmu(tp);
4791 r8153_aldps_en(tp, true);
4794 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
4809 tp->ups_info.speed_duplex = FORCE_10M_FULL;
4811 tp->ups_info.speed_duplex = FORCE_10M_HALF;
4818 tp->ups_info.speed_duplex = FORCE_100M_FULL;
4820 tp->ups_info.speed_duplex = FORCE_100M_HALF;
4824 if (tp->mii.supports_gmii) {
4826 tp->ups_info.speed_duplex = NWAY_1000M_FULL;
4836 tp->mii.full_duplex = 1;
4838 tp->mii.full_duplex = 0;
4840 tp->mii.force_media = 1;
4848 if (tp->mii.supports_gmii)
4854 anar = r8152_mdio_read(tp, MII_ADVERTISE);
4859 tp->ups_info.speed_duplex = NWAY_10M_HALF;
4863 tp->ups_info.speed_duplex = NWAY_10M_FULL;
4868 tp->ups_info.speed_duplex = NWAY_100M_HALF;
4872 tp->ups_info.speed_duplex = NWAY_100M_FULL;
4876 r8152_mdio_write(tp, MII_ADVERTISE, tmp1);
4877 tp->mii.advertising = tmp1;
4880 if (tp->mii.supports_gmii) {
4883 gbcr = r8152_mdio_read(tp, MII_CTRL1000);
4889 tp->ups_info.speed_duplex = NWAY_1000M_FULL;
4893 r8152_mdio_write(tp, MII_CTRL1000, tmp1);
4898 tp->mii.force_media = 0;
4901 if (test_and_clear_bit(PHY_RESET, &tp->flags))
4904 r8152_mdio_write(tp, MII_BMCR, bmcr);
4911 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0)
4920 static void rtl8152_up(struct r8152 *tp)
4922 if (test_bit(RTL8152_UNPLUG, &tp->flags))
4925 r8152_aldps_en(tp, false);
4926 r8152b_exit_oob(tp);
4927 r8152_aldps_en(tp, true);
4930 static void rtl8152_down(struct r8152 *tp)
4932 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
4933 rtl_drop_queued_tx(tp);
4937 r8152_power_cut_en(tp, false);
4938 r8152_aldps_en(tp, false);
4939 r8152b_enter_oob(tp);
4940 r8152_aldps_en(tp, true);
4943 static void rtl8153_up(struct r8152 *tp)
4947 if (test_bit(RTL8152_UNPLUG, &tp->flags))
4950 r8153_u1u2en(tp, false);
4951 r8153_u2p3en(tp, false);
4952 r8153_aldps_en(tp, false);
4953 r8153_first_init(tp);
4955 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
4957 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
4959 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG);
4961 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data);
4963 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1);
4965 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1, ocp_data);
4967 r8153_aldps_en(tp, true);
4969 switch (tp->version) {
4976 r8153_u2p3en(tp, true);
4980 r8153_u1u2en(tp, true);
4983 static void rtl8153_down(struct r8152 *tp)
4987 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
4988 rtl_drop_queued_tx(tp);
4992 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
4994 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
4996 r8153_u1u2en(tp, false);
4997 r8153_u2p3en(tp, false);
4998 r8153_power_cut_en(tp, false);
4999 r8153_aldps_en(tp, false);
5000 r8153_enter_oob(tp);
5001 r8153_aldps_en(tp, true);
5004 static void rtl8153b_up(struct r8152 *tp)
5008 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5011 r8153b_u1u2en(tp, false);
5012 r8153_u2p3en(tp, false);
5013 r8153_aldps_en(tp, false);
5015 r8153_first_init(tp);
5016 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B);
5018 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
5020 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
5022 r8153_aldps_en(tp, true);
5024 if (tp->udev->speed != USB_SPEED_HIGH)
5025 r8153b_u1u2en(tp, true);
5028 static void rtl8153b_down(struct r8152 *tp)
5032 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
5033 rtl_drop_queued_tx(tp);
5037 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
5039 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
5041 r8153b_u1u2en(tp, false);
5042 r8153_u2p3en(tp, false);
5043 r8153b_power_cut_en(tp, false);
5044 r8153_aldps_en(tp, false);
5045 r8153_enter_oob(tp);
5046 r8153_aldps_en(tp, true);
5049 static bool rtl8152_in_nway(struct r8152 *tp)
5053 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
5054 tp->ocp_base = 0x2000;
5055 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */
5056 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a);
5065 static bool rtl8153_in_nway(struct r8152 *tp)
5067 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff;
5075 static void set_carrier(struct r8152 *tp)
5077 struct net_device *netdev = tp->netdev;
5078 struct napi_struct *napi = &tp->napi;
5081 speed = rtl8152_get_speed(tp);
5085 tp->rtl_ops.enable(tp);
5089 rtl_start_rx(tp);
5090 clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
5092 napi_enable(&tp->napi);
5094 netif_info(tp, link, netdev, "carrier on\n");
5096 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) {
5102 tasklet_disable(&tp->tx_tl);
5104 tp->rtl_ops.disable(tp);
5106 tasklet_enable(&tp->tx_tl);
5107 netif_info(tp, link, netdev, "carrier off\n");
5114 struct r8152 *tp = container_of(work, struct r8152, schedule.work);
5119 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev))
5122 if (usb_autopm_get_interface(tp->intf) < 0)
5125 if (!test_bit(WORK_ENABLE, &tp->flags))
5128 if (!mutex_trylock(&tp->control)) {
5129 schedule_delayed_work(&tp->schedule, 0);
5133 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags))
5134 set_carrier(tp);
5136 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags))
5137 _rtl8152_set_rx_mode(tp->netdev);
5140 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) &&
5141 netif_carrier_ok(tp->netdev))
5142 tasklet_schedule(&tp->tx_tl);
5144 mutex_unlock(&tp->control);
5147 usb_autopm_put_interface(tp->intf);
5152 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work);
5154 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5157 if (usb_autopm_get_interface(tp->intf) < 0)
5160 mutex_lock(&tp->control);
5162 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) {
5163 tp->rtl_fw.retry = false;
5164 tp->rtl_fw.fw = NULL;
5168 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10);
5172 tp->rtl_ops.hw_phy_cfg(tp);
5174 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex,
5175 tp->advertising);
5178 mutex_unlock(&tp->control);
5180 usb_autopm_put_interface(tp->intf);
5187 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier);
5192 usb_autopm_get_interface(tp->intf);
5197 usb_autopm_put_interface(tp->intf);
5212 struct r8152 *tp = netdev_priv(netdev);
5215 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) {
5216 cancel_delayed_work_sync(&tp->hw_phy_work);
5217 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work);
5220 res = alloc_all_mem(tp);
5224 res = usb_autopm_get_interface(tp->intf);
5228 mutex_lock(&tp->control);
5230 tp->rtl_ops.up(tp);
5234 set_bit(WORK_ENABLE, &tp->flags);
5236 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL);
5239 netif_device_detach(tp->netdev);
5240 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n",
5244 napi_enable(&tp->napi);
5245 tasklet_enable(&tp->tx_tl);
5247 mutex_unlock(&tp->control);
5249 usb_autopm_put_interface(tp->intf);
5251 tp->pm_notifier.notifier_call = rtl_notifier;
5252 register_pm_notifier(&tp->pm_notifier);
5257 mutex_unlock(&tp->control);
5258 usb_autopm_put_interface(tp->intf);
5260 free_all_mem(tp);
5267 struct r8152 *tp = netdev_priv(netdev);
5271 unregister_pm_notifier(&tp->pm_notifier);
5273 tasklet_disable(&tp->tx_tl);
5274 clear_bit(WORK_ENABLE, &tp->flags);
5275 usb_kill_urb(tp->intr_urb);
5276 cancel_delayed_work_sync(&tp->schedule);
5277 napi_disable(&tp->napi);
5280 res = usb_autopm_get_interface(tp->intf);
5281 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) {
5282 rtl_drop_queued_tx(tp);
5283 rtl_stop_rx(tp);
5285 mutex_lock(&tp->control);
5287 tp->rtl_ops.down(tp);
5289 mutex_unlock(&tp->control);
5293 usb_autopm_put_interface(tp->intf);
5295 free_all_mem(tp);
5300 static void rtl_tally_reset(struct r8152 *tp)
5304 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY);
5306 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
5309 static void r8152b_init(struct r8152 *tp)
5314 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5317 data = r8152_mdio_read(tp, MII_BMCR);
5320 r8152_mdio_write(tp, MII_BMCR, data);
5323 r8152_aldps_en(tp, false);
5325 if (tp->version == RTL_VER_01) {
5326 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
5328 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data);
5331 r8152_power_cut_en(tp, false);
5333 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
5335 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
5336 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL);
5339 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data);
5342 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data);
5344 rtl_tally_reset(tp);
5347 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
5349 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
5352 static void r8153_init(struct r8152 *tp)
5358 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5361 r8153_u1u2en(tp, false);
5364 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
5369 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5373 data = r8153_phy_status(tp, 0);
5375 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 ||
5376 tp->version == RTL_VER_05)
5377 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L);
5379 data = r8152_mdio_read(tp, MII_BMCR);
5382 r8152_mdio_write(tp, MII_BMCR, data);
5385 data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
5387 r8153_u2p3en(tp, false);
5389 if (tp->version == RTL_VER_04) {
5390 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2);
5393 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data);
5395 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
5397 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
5398 } else if (tp->version == RTL_VER_05) {
5399 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0);
5401 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data);
5403 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1);
5404 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
5408 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data);
5409 } else if (tp->version == RTL_VER_06) {
5410 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1);
5411 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
5415 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data);
5417 r8153_queue_wake(tp, false);
5419 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
5420 if (rtl8152_get_speed(tp) & LINK_STATUS)
5425 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
5428 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2);
5430 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data);
5432 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL);
5434 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data);
5436 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
5438 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data);
5441 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER)
5445 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data);
5447 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2);
5450 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data);
5452 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001);
5455 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, 0);
5456 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, 0);
5457 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, 0);
5458 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, 0);
5460 r8153_power_cut_en(tp, false);
5461 rtl_runtime_suspend_enable(tp, false);
5462 r8153_u1u2en(tp, true);
5463 usb_enable_lpm(tp->udev);
5465 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
5467 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
5469 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG);
5471 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data);
5474 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
5476 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags))
5479 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
5481 rtl_tally_reset(tp);
5483 switch (tp->udev->speed) {
5486 tp->coalesce = COALESCE_SUPER;
5489 tp->coalesce = COALESCE_HIGH;
5492 tp->coalesce = COALESCE_SLOW;
5497 static void r8153b_init(struct r8152 *tp)
5503 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5506 r8153b_u1u2en(tp, false);
5509 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
5514 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5518 data = r8153_phy_status(tp, 0);
5520 data = r8152_mdio_read(tp, MII_BMCR);
5523 r8152_mdio_write(tp, MII_BMCR, data);
5526 data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
5528 r8153_u2p3en(tp, false);
5531 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
5534 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500);
5536 r8153b_power_cut_en(tp, false);
5537 r8153b_ups_en(tp, false);
5538 r8153_queue_wake(tp, false);
5539 rtl_runtime_suspend_enable(tp, false);
5541 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
5542 if (rtl8152_get_speed(tp) & LINK_STATUS)
5547 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
5549 if (tp->udev->speed != USB_SPEED_HIGH)
5550 r8153b_u1u2en(tp, true);
5551 usb_enable_lpm(tp->udev);
5554 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2);
5556 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data);
5558 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
5560 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
5562 if (tp->version == RTL_VER_09) {
5564 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) {
5565 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
5567 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
5571 set_bit(GREEN_ETHERNET, &tp->flags);
5574 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
5576 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
5578 rtl_tally_reset(tp);
5580 tp->coalesce = 15000; /* 15 us */
5585 struct r8152 *tp = usb_get_intfdata(intf);
5588 if (!tp)
5591 netdev = tp->netdev;
5596 tasklet_disable(&tp->tx_tl);
5597 clear_bit(WORK_ENABLE, &tp->flags);
5598 usb_kill_urb(tp->intr_urb);
5599 cancel_delayed_work_sync(&tp->schedule);
5600 napi_disable(&tp->napi);
5602 mutex_lock(&tp->control);
5603 tp->rtl_ops.disable(tp);
5604 mutex_unlock(&tp->control);
5612 struct r8152 *tp = usb_get_intfdata(intf);
5616 if (!tp)
5620 if (determine_ethernet_addr(tp, &sa) >= 0) {
5622 dev_set_mac_address (tp->netdev, &sa, NULL);
5626 netdev = tp->netdev;
5630 set_bit(WORK_ENABLE, &tp->flags);
5632 mutex_lock(&tp->control);
5633 tp->rtl_ops.enable(tp);
5634 rtl_start_rx(tp);
5636 mutex_unlock(&tp->control);
5639 napi_enable(&tp->napi);
5640 tasklet_enable(&tp->tx_tl);
5642 usb_submit_urb(tp->intr_urb, GFP_KERNEL);
5644 if (!list_empty(&tp->rx_done))
5645 napi_schedule(&tp->napi);
5650 static bool delay_autosuspend(struct r8152 *tp)
5652 bool sw_linking = !!netif_carrier_ok(tp->netdev);
5653 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS);
5659 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking)
5665 if (!sw_linking && tp->rtl_ops.in_nway(tp))
5667 else if (!skb_queue_empty(&tp->tx_queue))
5673 static int rtl8152_runtime_resume(struct r8152 *tp)
5675 struct net_device *netdev = tp->netdev;
5678 struct napi_struct *napi = &tp->napi;
5680 tp->rtl_ops.autosuspend_en(tp, false);
5682 set_bit(WORK_ENABLE, &tp->flags);
5685 if (rtl8152_get_speed(tp) & LINK_STATUS) {
5686 rtl_start_rx(tp);
5689 tp->rtl_ops.disable(tp);
5690 netif_info(tp, link, netdev, "linking down\n");
5695 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5698 if (!list_empty(&tp->rx_done))
5699 napi_schedule(&tp->napi);
5701 usb_submit_urb(tp->intr_urb, GFP_NOIO);
5704 tp->rtl_ops.autosuspend_en(tp, false);
5706 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5712 static int rtl8152_system_resume(struct r8152 *tp)
5714 struct net_device *netdev = tp->netdev;
5719 tp->rtl_ops.up(tp);
5721 set_bit(WORK_ENABLE, &tp->flags);
5722 usb_submit_urb(tp->intr_urb, GFP_NOIO);
5728 static int rtl8152_runtime_suspend(struct r8152 *tp)
5730 struct net_device *netdev = tp->netdev;
5733 set_bit(SELECTIVE_SUSPEND, &tp->flags);
5736 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) {
5742 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
5744 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
5745 rxdy_gated_en(tp, true);
5746 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA,
5749 rxdy_gated_en(tp, false);
5750 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr);
5751 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5758 clear_bit(WORK_ENABLE, &tp->flags);
5759 usb_kill_urb(tp->intr_urb);
5761 tp->rtl_ops.autosuspend_en(tp, true);
5764 struct napi_struct *napi = &tp->napi;
5767 rtl_stop_rx(tp);
5768 rxdy_gated_en(tp, false);
5769 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr);
5773 if (delay_autosuspend(tp)) {
5774 rtl8152_runtime_resume(tp);
5783 static int rtl8152_system_suspend(struct r8152 *tp)
5785 struct net_device *netdev = tp->netdev;
5789 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) {
5790 struct napi_struct *napi = &tp->napi;
5792 clear_bit(WORK_ENABLE, &tp->flags);
5793 usb_kill_urb(tp->intr_urb);
5794 tasklet_disable(&tp->tx_tl);
5796 cancel_delayed_work_sync(&tp->schedule);
5797 tp->rtl_ops.down(tp);
5799 tasklet_enable(&tp->tx_tl);
5807 struct r8152 *tp = usb_get_intfdata(intf);
5810 mutex_lock(&tp->control);
5813 ret = rtl8152_runtime_suspend(tp);
5815 ret = rtl8152_system_suspend(tp);
5817 mutex_unlock(&tp->control);
5824 struct r8152 *tp = usb_get_intfdata(intf);
5827 mutex_lock(&tp->control);
5829 if (test_bit(SELECTIVE_SUSPEND, &tp->flags))
5830 ret = rtl8152_runtime_resume(tp);
5832 ret = rtl8152_system_resume(tp);
5834 mutex_unlock(&tp->control);
5841 struct r8152 *tp = usb_get_intfdata(intf);
5843 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5844 tp->rtl_ops.init(tp);
5845 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0);
5846 set_ethernet_addr(tp);
5852 struct r8152 *tp = netdev_priv(dev);
5854 if (usb_autopm_get_interface(tp->intf) < 0)
5857 if (!rtl_can_wakeup(tp)) {
5861 mutex_lock(&tp->control);
5863 wol->wolopts = __rtl_get_wol(tp);
5864 mutex_unlock(&tp->control);
5867 usb_autopm_put_interface(tp->intf);
5872 struct r8152 *tp = netdev_priv(dev);
5875 if (!rtl_can_wakeup(tp))
5881 ret = usb_autopm_get_interface(tp->intf);
5885 mutex_lock(&tp->control);
5887 __rtl_set_wol(tp, wol->wolopts);
5888 tp->saved_wolopts = wol->wolopts & WAKE_ANY;
5890 mutex_unlock(&tp->control);
5892 usb_autopm_put_interface(tp->intf);
5900 struct r8152 *tp = netdev_priv(dev);
5902 return tp->msg_enable;
5907 struct r8152 *tp = netdev_priv(dev);
5909 tp->msg_enable = value;
5915 struct r8152 *tp = netdev_priv(netdev);
5919 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info));
5920 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw))
5921 strlcpy(info->fw_version, tp->rtl_fw.version,
5929 struct r8152 *tp = netdev_priv(netdev);
5932 if (!tp->mii.mdio_read)
5935 ret = usb_autopm_get_interface(tp->intf);
5939 mutex_lock(&tp->control);
5941 mii_ethtool_get_link_ksettings(&tp->mii, cmd);
5943 mutex_unlock(&tp->control);
5945 usb_autopm_put_interface(tp->intf);
5954 struct r8152 *tp = netdev_priv(dev);
5958 ret = usb_autopm_get_interface(tp->intf);
5986 mutex_lock(&tp->control);
5988 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed,
5991 tp->autoneg = cmd->base.autoneg;
5992 tp->speed = cmd->base.speed;
5993 tp->duplex = cmd->base.duplex;
5994 tp->advertising = advertising;
5997 mutex_unlock(&tp->control);
5999 usb_autopm_put_interface(tp->intf);
6034 struct r8152 *tp = netdev_priv(dev);
6037 if (usb_autopm_get_interface(tp->intf) < 0)
6040 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA);
6042 usb_autopm_put_interface(tp->intf);
6068 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee)
6073 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
6076 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV);
6079 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE);
6082 eee->eee_enabled = tp->eee_en;
6085 eee->advertised = tp->eee_adv;
6091 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee)
6095 tp->eee_en = eee->eee_enabled;
6096 tp->eee_adv = val;
6098 rtl_eee_enable(tp, tp->eee_en);
6103 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee)
6108 val = ocp_reg_read(tp, OCP_EEE_ABLE);
6111 val = ocp_reg_read(tp, OCP_EEE_ADV);
6114 val = ocp_reg_read(tp, OCP_EEE_LPABLE);
6117 eee->eee_enabled = tp->eee_en;
6120 eee->advertised = tp->eee_adv;
6129 struct r8152 *tp = netdev_priv(net);
6132 ret = usb_autopm_get_interface(tp->intf);
6136 mutex_lock(&tp->control);
6138 ret = tp->rtl_ops.eee_get(tp, edata);
6140 mutex_unlock(&tp->control);
6142 usb_autopm_put_interface(tp->intf);
6151 struct r8152 *tp = netdev_priv(net);
6154 ret = usb_autopm_get_interface(tp->intf);
6158 mutex_lock(&tp->control);
6160 ret = tp->rtl_ops.eee_set(tp, edata);
6162 ret = mii_nway_restart(&tp->mii);
6164 mutex_unlock(&tp->control);
6166 usb_autopm_put_interface(tp->intf);
6174 struct r8152 *tp = netdev_priv(dev);
6177 ret = usb_autopm_get_interface(tp->intf);
6181 mutex_lock(&tp->control);
6183 ret = mii_nway_restart(&tp->mii);
6185 mutex_unlock(&tp->control);
6187 usb_autopm_put_interface(tp->intf);
6196 struct r8152 *tp = netdev_priv(netdev);
6198 switch (tp->version) {
6207 coalesce->rx_coalesce_usecs = tp->coalesce;
6215 struct r8152 *tp = netdev_priv(netdev);
6218 switch (tp->version) {
6230 ret = usb_autopm_get_interface(tp->intf);
6234 mutex_lock(&tp->control);
6236 if (tp->coalesce != coalesce->rx_coalesce_usecs) {
6237 tp->coalesce = coalesce->rx_coalesce_usecs;
6241 napi_disable(&tp->napi);
6242 tp->rtl_ops.disable(tp);
6243 tp->rtl_ops.enable(tp);
6244 rtl_start_rx(tp);
6245 clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
6247 napi_enable(&tp->napi);
6252 mutex_unlock(&tp->control);
6254 usb_autopm_put_interface(tp->intf);
6262 struct r8152 *tp = netdev_priv(netdev);
6266 *(u32 *)d = tp->rx_copybreak;
6279 struct r8152 *tp = netdev_priv(netdev);
6286 netif_err(tp, rx_err, netdev,
6291 if (tp->rx_copybreak != val) {
6293 mutex_lock(&tp->control);
6294 napi_disable(&tp->napi);
6295 tp->rx_copybreak = val;
6296 napi_enable(&tp->napi);
6297 mutex_unlock(&tp->control);
6299 tp->rx_copybreak = val;
6313 struct r8152 *tp = netdev_priv(netdev);
6316 ring->rx_pending = tp->rx_pending;
6322 struct r8152 *tp = netdev_priv(netdev);
6327 if (tp->rx_pending != ring->rx_pending) {
6329 mutex_lock(&tp->control);
6330 napi_disable(&tp->napi);
6331 tp->rx_pending = ring->rx_pending;
6332 napi_enable(&tp->napi);
6333 mutex_unlock(&tp->control);
6335 tp->rx_pending = ring->rx_pending;
6368 struct r8152 *tp = netdev_priv(netdev);
6372 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6375 res = usb_autopm_get_interface(tp->intf);
6385 mutex_lock(&tp->control);
6386 data->val_out = r8152_mdio_read(tp, data->reg_num);
6387 mutex_unlock(&tp->control);
6395 mutex_lock(&tp->control);
6396 r8152_mdio_write(tp, data->reg_num, data->val_in);
6397 mutex_unlock(&tp->control);
6404 usb_autopm_put_interface(tp->intf);
6412 struct r8152 *tp = netdev_priv(dev);
6415 switch (tp->version) {
6425 ret = usb_autopm_get_interface(tp->intf);
6429 mutex_lock(&tp->control);
6436 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rms);
6439 r8153_set_rx_early_size(tp);
6442 mutex_unlock(&tp->control);
6444 usb_autopm_put_interface(tp->intf);
6463 static void rtl8152_unload(struct r8152 *tp)
6465 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6468 if (tp->version != RTL_VER_01)
6469 r8152_power_cut_en(tp, true);
6472 static void rtl8153_unload(struct r8152 *tp)
6474 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6477 r8153_power_cut_en(tp, false);
6480 static void rtl8153b_unload(struct r8152 *tp)
6482 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6485 r8153b_power_cut_en(tp, false);
6488 static int rtl_ops_init(struct r8152 *tp)
6490 struct rtl_ops *ops = &tp->rtl_ops;
6493 switch (tp->version) {
6508 tp->rx_buf_sz = 16 * 1024;
6509 tp->eee_en = true;
6510 tp->eee_adv = MDIO_EEE_100TX;
6528 if (tp->udev->speed < USB_SPEED_SUPER)
6529 tp->rx_buf_sz = 16 * 1024;
6531 tp->rx_buf_sz = 32 * 1024;
6532 tp->eee_en = true;
6533 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
6549 tp->rx_buf_sz = 32 * 1024;
6550 tp->eee_en = true;
6551 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
6556 netif_err(tp, probe, tp->netdev, "Unknown Device\n");
6573 static int rtl_fw_init(struct r8152 *tp)
6575 struct rtl_fw *rtl_fw = &tp->rtl_fw;
6577 switch (tp->version) {
6669 struct r8152 *tp;
6692 tp = netdev_priv(netdev);
6693 tp->msg_enable = 0x7FFF;
6695 tp->udev = udev;
6696 tp->netdev = netdev;
6697 tp->intf = intf;
6698 tp->version = version;
6704 tp->mii.supports_gmii = 0;
6707 tp->mii.supports_gmii = 1;
6711 ret = rtl_ops_init(tp);
6715 rtl_fw_init(tp);
6717 mutex_init(&tp->control);
6718 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t);
6719 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t);
6720 tasklet_init(&tp->tx_tl, bottom_half, (unsigned long)tp);
6721 tasklet_disable(&tp->tx_tl);
6738 if (tp->version == RTL_VER_01) {
6747 set_bit(LENOVO_MACPASSTHRU, &tp->flags);
6755 set_bit(DELL_TB_RX_AGG_BUG, &tp->flags);
6763 switch (tp->version) {
6773 tp->mii.dev = netdev;
6774 tp->mii.mdio_read = read_mii_word;
6775 tp->mii.mdio_write = write_mii_word;
6776 tp->mii.phy_id_mask = 0x3f;
6777 tp->mii.reg_num_mask = 0x1f;
6778 tp->mii.phy_id = R8152_PHY_ID;
6780 tp->autoneg = AUTONEG_ENABLE;
6781 tp->speed = SPEED_100;
6782 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL |
6784 if (tp->mii.supports_gmii) {
6785 tp->speed = SPEED_1000;
6786 tp->advertising |= RTL_ADVERTISED_1000_FULL;
6788 tp->duplex = DUPLEX_FULL;
6790 tp->rx_copybreak = RTL8152_RXFG_HEADSZ;
6791 tp->rx_pending = 10 * RTL8152_MAX_RX;
6795 if (!rtl_can_wakeup(tp))
6796 __rtl_set_wol(tp, 0);
6798 tp->saved_wolopts = __rtl_get_wol(tp);
6800 tp->rtl_ops.init(tp);
6803 tp->rtl_fw.retry = true;
6805 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0);
6806 set_ethernet_addr(tp);
6808 usb_set_intfdata(intf, tp);
6809 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT);
6813 netif_err(tp, probe, netdev, "couldn't register the device\n");
6817 if (tp->saved_wolopts)
6822 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION);
6827 tasklet_kill(&tp->tx_tl);
6828 cancel_delayed_work_sync(&tp->hw_phy_work);
6829 if (tp->rtl_ops.unload)
6830 tp->rtl_ops.unload(tp);
6831 rtl8152_release_firmware(tp);
6840 struct r8152 *tp = usb_get_intfdata(intf);
6843 if (tp) {
6844 rtl_set_unplug(tp);
6846 unregister_netdev(tp->netdev);
6847 tasklet_kill(&tp->tx_tl);
6848 cancel_delayed_work_sync(&tp->hw_phy_work);
6849 tp->rtl_ops.unload(tp);
6850 rtl8152_release_firmware(tp);
6851 free_netdev(tp->netdev);