Lines Matching refs:tp

880 		void (*init)(struct r8152 *tp);
881 int (*enable)(struct r8152 *tp);
882 void (*disable)(struct r8152 *tp);
883 void (*up)(struct r8152 *tp);
884 void (*down)(struct r8152 *tp);
885 void (*unload)(struct r8152 *tp);
886 int (*eee_get)(struct r8152 *tp, struct ethtool_eee *eee);
887 int (*eee_set)(struct r8152 *tp, struct ethtool_eee *eee);
888 bool (*in_nway)(struct r8152 *tp);
889 void (*hw_phy_cfg)(struct r8152 *tp);
890 void (*autosuspend_en)(struct r8152 *tp, bool enable);
891 void (*change_mtu)(struct r8152 *tp);
919 int (*pre_fw)(struct r8152 *tp);
920 int (*post_fw)(struct r8152 *tp);
1199 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in get_registers() argument
1208 ret = usb_control_msg(tp->udev, tp->pipe_ctrl_in, in get_registers()
1222 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
1231 ret = usb_control_msg(tp->udev, tp->pipe_ctrl_out, in set_registers()
1240 static void rtl_set_unplug(struct r8152 *tp) in rtl_set_unplug() argument
1242 if (tp->udev->state == USB_STATE_NOTATTACHED) { in rtl_set_unplug()
1243 set_bit(RTL8152_UNPLUG, &tp->flags); in rtl_set_unplug()
1248 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
1254 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_read()
1266 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
1274 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
1286 rtl_set_unplug(tp); in generic_ocp_read()
1291 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
1298 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in generic_ocp_write()
1312 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1325 ret = set_registers(tp, index, in generic_ocp_write()
1335 ret = set_registers(tp, index, in generic_ocp_write()
1349 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1356 rtl_set_unplug(tp); in generic_ocp_write()
1362 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
1364 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
1368 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
1370 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
1374 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
1376 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
1379 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
1383 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
1388 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
1392 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
1395 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
1405 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen); in ocp_read_word()
1414 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
1432 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
1435 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
1443 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
1452 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
1470 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
1473 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
1478 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1479 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
1480 tp->ocp_base = ocp_base; in ocp_reg_read()
1484 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
1487 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
1492 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1493 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
1494 tp->ocp_base = ocp_base; in ocp_reg_write()
1498 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
1501 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
1503 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
1506 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
1508 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
1511 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
1513 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
1514 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
1517 static u16 sram_read(struct r8152 *tp, u16 addr) in sram_read() argument
1519 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_read()
1520 return ocp_reg_read(tp, OCP_SRAM_DATA); in sram_read()
1525 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
1528 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_mii_word()
1534 ret = r8152_mdio_read(tp, reg); in read_mii_word()
1542 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
1544 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_mii_word()
1550 r8152_mdio_write(tp, reg, val); in write_mii_word()
1554 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1557 rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
1563 struct r8152 *tp = netdev_priv(netdev); in __rtl8152_set_mac_address() local
1571 ret = usb_autopm_get_interface(tp->intf); in __rtl8152_set_mac_address()
1576 mutex_lock(&tp->control); in __rtl8152_set_mac_address()
1580 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl8152_set_mac_address()
1581 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in __rtl8152_set_mac_address()
1582 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl8152_set_mac_address()
1584 mutex_unlock(&tp->control); in __rtl8152_set_mac_address()
1587 usb_autopm_put_interface(tp->intf); in __rtl8152_set_mac_address()
1601 static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) in vendor_mac_passthru_addr_read() argument
1613 if (tp->lenovo_macpassthru) { in vendor_mac_passthru_addr_read()
1619 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in vendor_mac_passthru_addr_read()
1622 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE); in vendor_mac_passthru_addr_read()
1624 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1630 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in vendor_mac_passthru_addr_read()
1632 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1649 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1657 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1663 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1670 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1678 static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa) in determine_ethernet_addr() argument
1680 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1685 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data); in determine_ethernet_addr()
1687 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1688 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1693 ret = vendor_mac_passthru_addr_read(tp, sa); in determine_ethernet_addr()
1695 ret = pla_ocp_read(tp, PLA_BACKUP, 8, in determine_ethernet_addr()
1701 netif_err(tp, probe, dev, "Get ether addr fail\n"); in determine_ethernet_addr()
1703 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in determine_ethernet_addr()
1707 netif_info(tp, probe, dev, "Random ether addr %pM\n", in determine_ethernet_addr()
1715 static int set_ethernet_addr(struct r8152 *tp, bool in_resume) in set_ethernet_addr() argument
1717 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1721 ret = determine_ethernet_addr(tp, &sa); in set_ethernet_addr()
1725 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1738 struct r8152 *tp; in read_bulk_callback() local
1745 tp = agg->context; in read_bulk_callback()
1746 if (!tp) in read_bulk_callback()
1749 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in read_bulk_callback()
1752 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1755 netdev = tp->netdev; in read_bulk_callback()
1762 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1769 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1770 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1771 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1772 napi_schedule(&tp->napi); in read_bulk_callback()
1775 rtl_set_unplug(tp); in read_bulk_callback()
1776 netif_device_detach(tp->netdev); in read_bulk_callback()
1780 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1781 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1782 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1783 set_bit(RX_EPROTO, &tp->flags); in read_bulk_callback()
1784 schedule_delayed_work(&tp->schedule, 1); in read_bulk_callback()
1798 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1806 struct r8152 *tp; in write_bulk_callback() local
1814 tp = agg->context; in write_bulk_callback()
1815 if (!tp) in write_bulk_callback()
1818 netdev = tp->netdev; in write_bulk_callback()
1829 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1830 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1831 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1833 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1838 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1841 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in write_bulk_callback()
1844 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1845 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1850 struct r8152 *tp; in intr_callback() local
1855 tp = urb->context; in intr_callback()
1856 if (!tp) in intr_callback()
1859 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1862 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in intr_callback()
1870 netif_device_detach(tp->netdev); in intr_callback()
1874 netif_info(tp, intr, tp->netdev, in intr_callback()
1879 netif_info(tp, intr, tp->netdev, in intr_callback()
1884 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1890 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1891 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1892 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1895 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
1896 netif_stop_queue(tp->netdev); in intr_callback()
1897 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1898 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
1905 rtl_set_unplug(tp); in intr_callback()
1906 netif_device_detach(tp->netdev); in intr_callback()
1908 netif_err(tp, intr, tp->netdev, in intr_callback()
1923 static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg) in free_rx_agg() argument
1931 atomic_dec(&tp->rx_count); in free_rx_agg()
1934 static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags) in alloc_rx_agg() argument
1936 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
1938 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
1956 rx_agg->context = tp; in alloc_rx_agg()
1960 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
1961 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
1962 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
1964 atomic_inc(&tp->rx_count); in alloc_rx_agg()
1975 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
1981 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
1983 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
1984 free_rx_agg(tp, agg); in free_all_mem()
1986 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
1988 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
1991 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
1992 tp->tx_info[i].urb = NULL; in free_all_mem()
1994 kfree(tp->tx_info[i].buffer); in free_all_mem()
1995 tp->tx_info[i].buffer = NULL; in free_all_mem()
1996 tp->tx_info[i].head = NULL; in free_all_mem()
1999 usb_free_urb(tp->intr_urb); in free_all_mem()
2000 tp->intr_urb = NULL; in free_all_mem()
2002 kfree(tp->intr_buff); in free_all_mem()
2003 tp->intr_buff = NULL; in free_all_mem()
2006 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
2008 struct net_device *netdev = tp->netdev; in alloc_all_mem()
2009 struct usb_interface *intf = tp->intf; in alloc_all_mem()
2016 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
2017 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
2018 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
2019 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
2020 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
2021 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
2022 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
2023 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
2026 if (!alloc_rx_agg(tp, GFP_KERNEL)) in alloc_all_mem()
2052 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
2053 tp->tx_info[i].context = tp; in alloc_all_mem()
2054 tp->tx_info[i].urb = urb; in alloc_all_mem()
2055 tp->tx_info[i].buffer = buf; in alloc_all_mem()
2056 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
2058 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
2061 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
2062 if (!tp->intr_urb) in alloc_all_mem()
2065 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
2066 if (!tp->intr_buff) in alloc_all_mem()
2069 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
2070 usb_fill_int_urb(tp->intr_urb, tp->udev, tp->pipe_intr, in alloc_all_mem()
2071 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
2072 tp, tp->intr_interval); in alloc_all_mem()
2077 free_all_mem(tp); in alloc_all_mem()
2081 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
2086 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
2089 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
2090 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
2093 cursor = tp->tx_free.next; in r8152_get_tx_agg()
2097 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
2106 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
2110 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
2137 stats = &tp->netdev->stats; in r8152_csum_workaround()
2162 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
2177 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2210 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2250 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
2252 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2285 if (r8152_tx_csum(tp, tx_desc, skb, skb->len)) { in r8152_tx_agg_fill()
2286 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
2296 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2312 if (tp->dell_tb_rx_agg_bug) in r8152_tx_agg_fill()
2322 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2324 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2325 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2326 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2328 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2330 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2334 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_out, in r8152_tx_agg_fill()
2340 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2346 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
2351 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2375 static inline bool rx_count_exceed(struct r8152 *tp) in rx_count_exceed() argument
2377 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2385 static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags) in rtl_get_free_rx() argument
2390 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2392 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2399 if (rx_count_exceed(tp)) { in rtl_get_free_rx()
2401 free_rx_agg(tp, agg); in rtl_get_free_rx()
2407 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2409 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2410 agg_free = alloc_rx_agg(tp, mflags); in rtl_get_free_rx()
2415 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
2420 struct napi_struct *napi = &tp->napi; in rx_bottom()
2422 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2424 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2425 struct net_device *netdev = tp->netdev; in rx_bottom()
2440 if (list_empty(&tp->rx_done)) in rx_bottom()
2443 clear_bit(RX_EPROTO, &tp->flags); in rx_bottom()
2445 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2446 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2447 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2463 agg_free = rtl_get_free_rx(tp, GFP_ATOMIC); in rx_bottom()
2470 struct net_device *netdev = tp->netdev; in rx_bottom()
2476 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000)) in rx_bottom()
2490 if (!agg_free || tp->rx_copybreak > pkt_len) in rx_bottom()
2493 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2501 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2522 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2535 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2537 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2539 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2543 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2548 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
2556 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2557 list_splice_tail(&rx_queue, &tp->rx_done); in rx_bottom()
2558 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2565 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
2570 struct net_device *netdev = tp->netdev; in tx_bottom()
2573 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2576 agg = r8152_get_tx_agg(tp); in tx_bottom()
2580 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
2585 rtl_set_unplug(tp); in tx_bottom()
2591 netif_warn(tp, tx_err, netdev, in tx_bottom()
2595 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2596 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2597 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2604 struct r8152 *tp = from_tasklet(tp, t, tx_tl); in bottom_half() local
2606 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in bottom_half()
2609 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2614 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2617 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2619 tx_bottom(tp); in bottom_half()
2624 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
2627 work_done = rx_bottom(tp, budget); in r8152_poll()
2632 if (!list_empty(&tp->rx_done)) in r8152_poll()
2641 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
2646 if (test_bit(RTL8152_UNPLUG, &tp->flags) || in r8152_submit_rx()
2647 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2650 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_in, in r8152_submit_rx()
2651 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2656 rtl_set_unplug(tp); in r8152_submit_rx()
2657 netif_device_detach(tp->netdev); in r8152_submit_rx()
2663 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2664 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2665 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2667 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2670 napi_schedule(&tp->napi); in r8152_submit_rx()
2676 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
2678 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2679 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2698 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
2700 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
2702 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2707 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
2710 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2711 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2717 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
2723 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
2729 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
2759 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
2760 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
2783 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
2787 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2789 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2790 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2791 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2792 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2794 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2795 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2797 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2804 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2808 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2810 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2812 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2815 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2820 switch (tp->version) { in rtl8152_nic_reset()
2824 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl8152_nic_reset()
2826 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl8152_nic_reset()
2828 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl8152_nic_reset()
2830 ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl8152_nic_reset()
2832 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in rtl8152_nic_reset()
2834 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in rtl8152_nic_reset()
2836 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl8152_nic_reset()
2838 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl8152_nic_reset()
2840 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl8152_nic_reset()
2842 ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl8152_nic_reset()
2844 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in rtl8152_nic_reset()
2846 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in rtl8152_nic_reset()
2850 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2853 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2861 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2863 tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc)); in set_tx_qlen()
2866 static inline u16 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2868 return ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2871 static void rtl_eee_plus_en(struct r8152 *tp, bool enable) in rtl_eee_plus_en() argument
2875 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_eee_plus_en()
2880 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_eee_plus_en()
2883 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
2885 if (rtl8152_get_speed(tp) & _10bps) in rtl_set_eee_plus()
2886 rtl_eee_plus_en(tp, true); in rtl_set_eee_plus()
2888 rtl_eee_plus_en(tp, false); in rtl_set_eee_plus()
2891 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
2895 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
2900 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
2903 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
2912 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2914 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
2915 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
2917 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
2919 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2926 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2927 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
2928 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2930 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2931 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
2932 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2934 ret = r8152_submit_rx(tp, agg, GFP_KERNEL); in rtl_start_rx()
2938 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
2939 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
2940 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
2941 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
2946 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
2960 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2961 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
2962 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2969 free_rx_agg(tp, agg); in rtl_stop_rx()
2975 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
2976 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
2977 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
2978 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
2980 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
2981 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
2986 static void rtl_set_ifg(struct r8152 *tp, u16 speed) in rtl_set_ifg() argument
2990 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR1); in rtl_set_ifg()
2994 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR1, ocp_data); in rtl_set_ifg()
2996 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl_set_ifg()
2998 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl_set_ifg()
3001 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR1, ocp_data); in rtl_set_ifg()
3003 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl_set_ifg()
3005 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl_set_ifg()
3009 static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp) in r8153b_rx_agg_chg_indicate() argument
3011 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN, in r8153b_rx_agg_chg_indicate()
3015 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
3019 r8152b_reset_packet_filter(tp); in rtl_enable()
3021 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
3023 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
3025 switch (tp->version) { in rtl_enable()
3029 r8153b_rx_agg_chg_indicate(tp); in rtl_enable()
3035 rxdy_gated_en(tp, false); in rtl_enable()
3040 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
3042 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_enable()
3045 set_tx_qlen(tp); in rtl8152_enable()
3046 rtl_set_eee_plus(tp); in rtl8152_enable()
3048 return rtl_enable(tp); in rtl8152_enable()
3051 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
3053 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
3055 switch (tp->version) { in r8153_set_rx_early_timeout()
3060 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
3070 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
3072 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
3081 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
3083 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
3085 r8153b_rx_agg_chg_indicate(tp); in r8153_set_rx_early_timeout()
3093 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
3095 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
3097 switch (tp->version) { in r8153_set_rx_early_size()
3102 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
3108 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
3117 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
3119 r8153b_rx_agg_chg_indicate(tp); in r8153_set_rx_early_size()
3127 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
3131 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_enable()
3134 set_tx_qlen(tp); in rtl8153_enable()
3135 rtl_set_eee_plus(tp); in rtl8153_enable()
3136 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
3137 r8153_set_rx_early_size(tp); in rtl8153_enable()
3139 rtl_set_ifg(tp, rtl8152_get_speed(tp)); in rtl8153_enable()
3141 switch (tp->version) { in rtl8153_enable()
3144 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in rtl8153_enable()
3146 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
3149 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
3155 return rtl_enable(tp); in rtl8153_enable()
3158 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
3163 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl_disable()
3164 rtl_drop_queued_tx(tp); in rtl_disable()
3168 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
3170 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
3172 rtl_drop_queued_tx(tp); in rtl_disable()
3175 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
3177 rxdy_gated_en(tp, true); in rtl_disable()
3180 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
3187 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
3192 rtl_stop_rx(tp); in rtl_disable()
3194 rtl8152_nic_reset(tp); in rtl_disable()
3197 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
3201 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
3206 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
3208 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
3210 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
3213 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
3217 switch (tp->version) { in rtl_rx_vlan_en()
3228 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
3233 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
3243 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RCR1); in rtl_rx_vlan_en()
3248 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RCR1, ocp_data); in rtl_rx_vlan_en()
3257 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
3260 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
3264 mutex_lock(&tp->control); in rtl8152_set_features()
3268 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
3270 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
3273 mutex_unlock(&tp->control); in rtl8152_set_features()
3275 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
3283 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
3288 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
3292 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
3300 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
3307 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
3311 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
3313 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
3317 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
3319 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
3327 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
3329 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
3331 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
3335 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
3338 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3340 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3343 static void r8153_mac_clk_speed_down(struct r8152 *tp, bool enable) in r8153_mac_clk_speed_down() argument
3345 u32 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8153_mac_clk_speed_down()
3353 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8153_mac_clk_speed_down()
3356 static void r8156_mac_clk_spd(struct r8152 *tp, bool enable) in r8156_mac_clk_spd() argument
3363 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, in r8156_mac_clk_spd()
3366 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8156_mac_clk_spd()
3369 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8156_mac_clk_spd()
3371 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8156_mac_clk_spd()
3373 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8156_mac_clk_spd()
3377 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
3386 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
3389 static void r8153b_u1u2en(struct r8152 *tp, bool enable) in r8153b_u1u2en() argument
3393 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG); in r8153b_u1u2en()
3399 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data); in r8153b_u1u2en()
3402 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
3406 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
3411 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
3414 static void r8153b_ups_flags(struct r8152 *tp) in r8153b_ups_flags() argument
3418 if (tp->ups_info.green) in r8153b_ups_flags()
3421 if (tp->ups_info.aldps) in r8153b_ups_flags()
3424 if (tp->ups_info.eee) in r8153b_ups_flags()
3427 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3430 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3433 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3436 if (tp->ups_info.r_tune) in r8153b_ups_flags()
3439 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3442 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3445 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3448 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3451 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3454 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3486 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags); in r8153b_ups_flags()
3489 static void r8156_ups_flags(struct r8152 *tp) in r8156_ups_flags() argument
3493 if (tp->ups_info.green) in r8156_ups_flags()
3496 if (tp->ups_info.aldps) in r8156_ups_flags()
3499 if (tp->ups_info.eee) in r8156_ups_flags()
3502 if (tp->ups_info.flow_control) in r8156_ups_flags()
3505 if (tp->ups_info.eee_ckdiv) in r8156_ups_flags()
3508 if (tp->ups_info._10m_ckdiv) in r8156_ups_flags()
3511 if (tp->ups_info.eee_plloff_100) in r8156_ups_flags()
3514 if (tp->ups_info.eee_plloff_giga) in r8156_ups_flags()
3517 if (tp->ups_info._250m_ckdiv) in r8156_ups_flags()
3520 switch (tp->ups_info.speed_duplex) { in r8156_ups_flags()
3555 switch (tp->ups_info.lite_mode) { in r8156_ups_flags()
3568 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags); in r8156_ups_flags()
3571 static void rtl_green_en(struct r8152 *tp, bool enable) in rtl_green_en() argument
3575 data = sram_read(tp, SRAM_GREEN_CFG); in rtl_green_en()
3580 sram_write(tp, SRAM_GREEN_CFG, data); in rtl_green_en()
3582 tp->ups_info.green = enable; in rtl_green_en()
3585 static void r8153b_green_en(struct r8152 *tp, bool enable) in r8153b_green_en() argument
3588 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */ in r8153b_green_en()
3589 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3590 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3592 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */ in r8153b_green_en()
3593 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3594 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3597 rtl_green_en(tp, true); in r8153b_green_en()
3600 static u16 r8153_phy_status(struct r8152 *tp, u16 desired) in r8153_phy_status() argument
3606 data = ocp_reg_read(tp, OCP_PHY_STATUS); in r8153_phy_status()
3617 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_phy_status()
3624 static void r8153b_ups_en(struct r8152 *tp, bool enable) in r8153b_ups_en() argument
3626 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_ups_en()
3629 r8153b_ups_flags(tp); in r8153b_ups_en()
3632 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3634 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153b_ups_en()
3636 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153b_ups_en()
3639 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3641 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153b_ups_en()
3643 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153b_ups_en()
3645 if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) { in r8153b_ups_en()
3649 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_ups_en()
3655 tp->rtl_ops.hw_phy_cfg(tp); in r8153b_ups_en()
3657 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153b_ups_en()
3658 tp->duplex, tp->advertising); in r8153b_ups_en()
3663 static void r8153c_ups_en(struct r8152 *tp, bool enable) in r8153c_ups_en() argument
3665 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153c_ups_en()
3668 r8153b_ups_flags(tp); in r8153c_ups_en()
3671 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153c_ups_en()
3673 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153c_ups_en()
3676 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153c_ups_en()
3679 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153c_ups_en()
3681 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153c_ups_en()
3683 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153c_ups_en()
3685 if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) { in r8153c_ups_en()
3689 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153c_ups_en()
3695 tp->rtl_ops.hw_phy_cfg(tp); in r8153c_ups_en()
3697 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153c_ups_en()
3698 tp->duplex, tp->advertising); in r8153c_ups_en()
3701 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in r8153c_ups_en()
3703 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in r8153c_ups_en()
3705 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in r8153c_ups_en()
3707 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8153c_ups_en()
3711 static void r8156_ups_en(struct r8152 *tp, bool enable) in r8156_ups_en() argument
3713 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8156_ups_en()
3716 r8156_ups_flags(tp); in r8156_ups_en()
3719 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8156_ups_en()
3721 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8156_ups_en()
3723 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8156_ups_en()
3725 switch (tp->version) { in r8156_ups_en()
3728 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPHY_XTAL); in r8156_ups_en()
3730 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPHY_XTAL, ocp_data); in r8156_ups_en()
3737 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8156_ups_en()
3739 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8156_ups_en()
3741 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8156_ups_en()
3743 if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) { in r8156_ups_en()
3744 tp->rtl_ops.hw_phy_cfg(tp); in r8156_ups_en()
3746 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8156_ups_en()
3747 tp->duplex, tp->advertising); in r8156_ups_en()
3752 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
3756 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
3761 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
3763 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
3765 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
3768 static void r8153b_power_cut_en(struct r8152 *tp, bool enable) in r8153b_power_cut_en() argument
3772 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_power_cut_en()
3777 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_power_cut_en()
3779 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_power_cut_en()
3781 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_power_cut_en()
3784 static void r8153_queue_wake(struct r8152 *tp, bool enable) in r8153_queue_wake() argument
3788 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG); in r8153_queue_wake()
3793 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data); in r8153_queue_wake()
3795 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG); in r8153_queue_wake()
3797 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data); in r8153_queue_wake()
3799 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_queue_wake()
3801 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_queue_wake()
3804 static bool rtl_can_wakeup(struct r8152 *tp) in rtl_can_wakeup() argument
3806 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3811 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
3816 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
3818 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3820 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3822 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3824 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3828 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
3830 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3832 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3834 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3836 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3840 static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) in rtl8153_runtime_enable() argument
3843 r8153_u1u2en(tp, false); in rtl8153_runtime_enable()
3844 r8153_u2p3en(tp, false); in rtl8153_runtime_enable()
3845 rtl_runtime_suspend_enable(tp, true); in rtl8153_runtime_enable()
3847 rtl_runtime_suspend_enable(tp, false); in rtl8153_runtime_enable()
3849 switch (tp->version) { in rtl8153_runtime_enable()
3856 r8153_u2p3en(tp, true); in rtl8153_runtime_enable()
3860 r8153_u1u2en(tp, true); in rtl8153_runtime_enable()
3864 static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable) in rtl8153b_runtime_enable() argument
3867 r8153_queue_wake(tp, true); in rtl8153b_runtime_enable()
3868 r8153b_u1u2en(tp, false); in rtl8153b_runtime_enable()
3869 r8153_u2p3en(tp, false); in rtl8153b_runtime_enable()
3870 rtl_runtime_suspend_enable(tp, true); in rtl8153b_runtime_enable()
3871 r8153b_ups_en(tp, true); in rtl8153b_runtime_enable()
3873 r8153b_ups_en(tp, false); in rtl8153b_runtime_enable()
3874 r8153_queue_wake(tp, false); in rtl8153b_runtime_enable()
3875 rtl_runtime_suspend_enable(tp, false); in rtl8153b_runtime_enable()
3876 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_runtime_enable()
3877 r8153b_u1u2en(tp, true); in rtl8153b_runtime_enable()
3881 static void rtl8153c_runtime_enable(struct r8152 *tp, bool enable) in rtl8153c_runtime_enable() argument
3884 r8153_queue_wake(tp, true); in rtl8153c_runtime_enable()
3885 r8153b_u1u2en(tp, false); in rtl8153c_runtime_enable()
3886 r8153_u2p3en(tp, false); in rtl8153c_runtime_enable()
3887 rtl_runtime_suspend_enable(tp, true); in rtl8153c_runtime_enable()
3888 r8153c_ups_en(tp, true); in rtl8153c_runtime_enable()
3890 r8153c_ups_en(tp, false); in rtl8153c_runtime_enable()
3891 r8153_queue_wake(tp, false); in rtl8153c_runtime_enable()
3892 rtl_runtime_suspend_enable(tp, false); in rtl8153c_runtime_enable()
3893 r8153b_u1u2en(tp, true); in rtl8153c_runtime_enable()
3897 static void rtl8156_runtime_enable(struct r8152 *tp, bool enable) in rtl8156_runtime_enable() argument
3900 r8153_queue_wake(tp, true); in rtl8156_runtime_enable()
3901 r8153b_u1u2en(tp, false); in rtl8156_runtime_enable()
3902 r8153_u2p3en(tp, false); in rtl8156_runtime_enable()
3903 rtl_runtime_suspend_enable(tp, true); in rtl8156_runtime_enable()
3905 r8153_queue_wake(tp, false); in rtl8156_runtime_enable()
3906 rtl_runtime_suspend_enable(tp, false); in rtl8156_runtime_enable()
3907 r8153_u2p3en(tp, true); in rtl8156_runtime_enable()
3908 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_runtime_enable()
3909 r8153b_u1u2en(tp, true); in rtl8156_runtime_enable()
3913 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
3917 switch (tp->version) { in r8153_teredo_off()
3925 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
3928 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
3944 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff); in r8153_teredo_off()
3948 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
3949 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
3950 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
3953 static void rtl_reset_bmu(struct r8152 *tp) in rtl_reset_bmu() argument
3957 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl_reset_bmu()
3959 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3961 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
3965 static void rtl_clear_bp(struct r8152 *tp, u16 type) in rtl_clear_bp() argument
3967 switch (tp->version) { in rtl_clear_bp()
3976 ocp_write_byte(tp, type, PLA_BP_EN, 0); in rtl_clear_bp()
3979 ocp_write_word(tp, type, USB_BP2_EN, 0); in rtl_clear_bp()
3981 ocp_write_word(tp, type, USB_BP_8, 0); in rtl_clear_bp()
3982 ocp_write_word(tp, type, USB_BP_9, 0); in rtl_clear_bp()
3983 ocp_write_word(tp, type, USB_BP_10, 0); in rtl_clear_bp()
3984 ocp_write_word(tp, type, USB_BP_11, 0); in rtl_clear_bp()
3985 ocp_write_word(tp, type, USB_BP_12, 0); in rtl_clear_bp()
3986 ocp_write_word(tp, type, USB_BP_13, 0); in rtl_clear_bp()
3987 ocp_write_word(tp, type, USB_BP_14, 0); in rtl_clear_bp()
3988 ocp_write_word(tp, type, USB_BP_15, 0); in rtl_clear_bp()
3999 ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0); in rtl_clear_bp()
4001 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_8, 0); in rtl_clear_bp()
4002 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_9, 0); in rtl_clear_bp()
4003 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_10, 0); in rtl_clear_bp()
4004 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_11, 0); in rtl_clear_bp()
4005 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_12, 0); in rtl_clear_bp()
4006 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_13, 0); in rtl_clear_bp()
4007 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_14, 0); in rtl_clear_bp()
4008 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_15, 0); in rtl_clear_bp()
4010 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0); in rtl_clear_bp()
4015 ocp_write_word(tp, type, PLA_BP_0, 0); in rtl_clear_bp()
4016 ocp_write_word(tp, type, PLA_BP_1, 0); in rtl_clear_bp()
4017 ocp_write_word(tp, type, PLA_BP_2, 0); in rtl_clear_bp()
4018 ocp_write_word(tp, type, PLA_BP_3, 0); in rtl_clear_bp()
4019 ocp_write_word(tp, type, PLA_BP_4, 0); in rtl_clear_bp()
4020 ocp_write_word(tp, type, PLA_BP_5, 0); in rtl_clear_bp()
4021 ocp_write_word(tp, type, PLA_BP_6, 0); in rtl_clear_bp()
4022 ocp_write_word(tp, type, PLA_BP_7, 0); in rtl_clear_bp()
4026 ocp_write_word(tp, type, PLA_BP_BA, 0); in rtl_clear_bp()
4029 static inline void rtl_reset_ocp_base(struct r8152 *tp) in rtl_reset_ocp_base() argument
4031 tp->ocp_base = -1; in rtl_reset_ocp_base()
4034 static int rtl_phy_patch_request(struct r8152 *tp, bool request, bool wait) in rtl_phy_patch_request() argument
4039 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD); in rtl_phy_patch_request()
4047 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data); in rtl_phy_patch_request()
4053 ocp_data = ocp_reg_read(tp, OCP_PHY_PATCH_STAT); in rtl_phy_patch_request()
4059 !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) { in rtl_phy_patch_request()
4060 dev_err(&tp->intf->dev, "PHY patch request fail\n"); in rtl_phy_patch_request()
4061 rtl_phy_patch_request(tp, false, false); in rtl_phy_patch_request()
4068 static void rtl_patch_key_set(struct r8152 *tp, u16 key_addr, u16 patch_key) in rtl_patch_key_set() argument
4071 sram_write(tp, key_addr, patch_key); in rtl_patch_key_set()
4072 sram_write(tp, SRAM_PHY_LOCK, PHY_PATCH_LOCK); in rtl_patch_key_set()
4076 sram_write(tp, 0x0000, 0x0000); in rtl_patch_key_set()
4078 data = ocp_reg_read(tp, OCP_PHY_LOCK); in rtl_patch_key_set()
4080 ocp_reg_write(tp, OCP_PHY_LOCK, data); in rtl_patch_key_set()
4082 sram_write(tp, key_addr, 0x0000); in rtl_patch_key_set()
4089 rtl_pre_ram_code(struct r8152 *tp, u16 key_addr, u16 patch_key, bool wait) in rtl_pre_ram_code() argument
4091 if (rtl_phy_patch_request(tp, true, wait)) in rtl_pre_ram_code()
4094 rtl_patch_key_set(tp, key_addr, patch_key); in rtl_pre_ram_code()
4099 static int rtl_post_ram_code(struct r8152 *tp, u16 key_addr, bool wait) in rtl_post_ram_code() argument
4101 rtl_patch_key_set(tp, key_addr, 0); in rtl_post_ram_code()
4103 rtl_phy_patch_request(tp, false, wait); in rtl_post_ram_code()
4108 static bool rtl8152_is_fw_phy_speed_up_ok(struct r8152 *tp, struct fw_phy_speed_up *phy) in rtl8152_is_fw_phy_speed_up_ok() argument
4114 switch (tp->version) { in rtl8152_is_fw_phy_speed_up_ok()
4138 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_speed_up_ok()
4144 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_speed_up_ok()
4149 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_speed_up_ok()
4158 static bool rtl8152_is_fw_phy_ver_ok(struct r8152 *tp, struct fw_phy_ver *ver) in rtl8152_is_fw_phy_ver_ok() argument
4162 switch (tp->version) { in rtl8152_is_fw_phy_ver_ok()
4174 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_ver_ok()
4179 dev_err(&tp->intf->dev, "invalid phy ver addr\n"); in rtl8152_is_fw_phy_ver_ok()
4188 static bool rtl8152_is_fw_phy_fixup_ok(struct r8152 *tp, struct fw_phy_fixup *fix) in rtl8152_is_fw_phy_fixup_ok() argument
4192 switch (tp->version) { in rtl8152_is_fw_phy_fixup_ok()
4204 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_fixup_ok()
4210 dev_err(&tp->intf->dev, "invalid phy fixup\n"); in rtl8152_is_fw_phy_fixup_ok()
4219 static bool rtl8152_is_fw_phy_union_ok(struct r8152 *tp, struct fw_phy_union *phy) in rtl8152_is_fw_phy_union_ok() argument
4225 switch (tp->version) { in rtl8152_is_fw_phy_union_ok()
4239 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_union_ok()
4245 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_union_ok()
4250 dev_err(&tp->intf->dev, "invalid pre_num %d\n", phy->pre_num); in rtl8152_is_fw_phy_union_ok()
4255 dev_err(&tp->intf->dev, "invalid bp_num %d\n", phy->bp_num); in rtl8152_is_fw_phy_union_ok()
4264 static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_is_fw_phy_nc_ok() argument
4270 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
4286 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
4292 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
4298 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
4303 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
4308 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
4313 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4319 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4325 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4331 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
4340 static bool rtl8152_is_fw_mac_ok(struct r8152 *tp, struct fw_mac *mac) in rtl8152_is_fw_mac_ok() argument
4349 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4386 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4422 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
4428 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
4434 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
4439 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
4444 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
4449 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
4454 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
4460 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
4466 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
4480 static long rtl8152_fw_verify_checksum(struct r8152 *tp, in rtl8152_fw_verify_checksum() argument
4497 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n", in rtl8152_fw_verify_checksum()
4517 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
4527 static long rtl8152_check_firmware(struct r8152 *tp, struct rtl_fw *rtl_fw) in rtl8152_check_firmware() argument
4536 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
4540 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
4561 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4566 if (!rtl8152_is_fw_mac_ok(tp, (struct fw_mac *)block)) { in rtl8152_check_firmware()
4567 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4575 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4580 if (!rtl8152_is_fw_mac_ok(tp, (struct fw_mac *)block)) { in rtl8152_check_firmware()
4581 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4595 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4601 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4610 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4616 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4625 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4631 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4636 if (!rtl8152_is_fw_phy_nc_ok(tp, (struct fw_phy_nc *)block)) { in rtl8152_check_firmware()
4637 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4650 dev_err(&tp->intf->dev, "PHY_UNION_NC out of order\n"); in rtl8152_check_firmware()
4655 dev_err(&tp->intf->dev, "multiple PHY_UNION_NC encountered\n"); in rtl8152_check_firmware()
4659 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4660 dev_err(&tp->intf->dev, "check PHY_UNION_NC failed\n"); in rtl8152_check_firmware()
4671 dev_err(&tp->intf->dev, "PHY_UNION_NC1 out of order\n"); in rtl8152_check_firmware()
4676 dev_err(&tp->intf->dev, "multiple PHY NC1 encountered\n"); in rtl8152_check_firmware()
4680 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4681 dev_err(&tp->intf->dev, "check PHY_UNION_NC1 failed\n"); in rtl8152_check_firmware()
4691 dev_err(&tp->intf->dev, "PHY_UNION_NC2 out of order\n"); in rtl8152_check_firmware()
4696 dev_err(&tp->intf->dev, "multiple PHY NC2 encountered\n"); in rtl8152_check_firmware()
4700 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4701 dev_err(&tp->intf->dev, "check PHY_UNION_NC2 failed\n"); in rtl8152_check_firmware()
4710 dev_err(&tp->intf->dev, "PHY_UNION_UC2 out of order\n"); in rtl8152_check_firmware()
4715 dev_err(&tp->intf->dev, "multiple PHY UC2 encountered\n"); in rtl8152_check_firmware()
4719 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4720 dev_err(&tp->intf->dev, "check PHY_UNION_UC2 failed\n"); in rtl8152_check_firmware()
4728 dev_err(&tp->intf->dev, "PHY_UNION_UC out of order\n"); in rtl8152_check_firmware()
4733 dev_err(&tp->intf->dev, "multiple PHY UC encountered\n"); in rtl8152_check_firmware()
4737 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4738 dev_err(&tp->intf->dev, "check PHY_UNION_UC failed\n"); in rtl8152_check_firmware()
4744 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4745 dev_err(&tp->intf->dev, "check RTL_FW_PHY_UNION_MISC failed\n"); in rtl8152_check_firmware()
4750 if (!rtl8152_is_fw_phy_fixup_ok(tp, (struct fw_phy_fixup *)block)) { in rtl8152_check_firmware()
4751 dev_err(&tp->intf->dev, "check PHY fixup failed\n"); in rtl8152_check_firmware()
4757 dev_err(&tp->intf->dev, "multiple PHY firmware encountered"); in rtl8152_check_firmware()
4761 if (!rtl8152_is_fw_phy_speed_up_ok(tp, (struct fw_phy_speed_up *)block)) { in rtl8152_check_firmware()
4762 dev_err(&tp->intf->dev, "check PHY speed up failed\n"); in rtl8152_check_firmware()
4775 dev_err(&tp->intf->dev, "Invalid order to set PHY version\n"); in rtl8152_check_firmware()
4780 dev_err(&tp->intf->dev, "multiple PHY version encountered"); in rtl8152_check_firmware()
4784 if (!rtl8152_is_fw_phy_ver_ok(tp, (struct fw_phy_ver *)block)) { in rtl8152_check_firmware()
4785 dev_err(&tp->intf->dev, "check PHY version failed\n"); in rtl8152_check_firmware()
4791 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
4802 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
4811 static void rtl_ram_code_speed_up(struct r8152 *tp, struct fw_phy_speed_up *phy, bool wait) in rtl_ram_code_speed_up() argument
4816 rtl_reset_ocp_base(tp); in rtl_ram_code_speed_up()
4818 if (sram_read(tp, SRAM_GPHY_FW_VER) >= __le16_to_cpu(phy->version)) { in rtl_ram_code_speed_up()
4819 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl_ram_code_speed_up()
4827 if (rtl_phy_patch_request(tp, true, wait)) in rtl_ram_code_speed_up()
4839 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL); in rtl_ram_code_speed_up()
4841 ocp_write_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL, ocp_data); in rtl_ram_code_speed_up()
4843 generic_ocp_write(tp, __le16_to_cpu(phy->fw_reg), 0xff, size, data, MCU_TYPE_USB); in rtl_ram_code_speed_up()
4848 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL); in rtl_ram_code_speed_up()
4850 ocp_write_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL, ocp_data); in rtl_ram_code_speed_up()
4853 if (!(ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL) & POL_GPHY_PATCH)) in rtl_ram_code_speed_up()
4858 dev_err(&tp->intf->dev, "ram code speedup mode timeout\n"); in rtl_ram_code_speed_up()
4863 rtl_reset_ocp_base(tp); in rtl_ram_code_speed_up()
4865 rtl_phy_patch_request(tp, false, wait); in rtl_ram_code_speed_up()
4867 if (sram_read(tp, SRAM_GPHY_FW_VER) == __le16_to_cpu(phy->version)) in rtl_ram_code_speed_up()
4868 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl_ram_code_speed_up()
4870 dev_err(&tp->intf->dev, "ram code speedup mode fail\n"); in rtl_ram_code_speed_up()
4873 static int rtl8152_fw_phy_ver(struct r8152 *tp, struct fw_phy_ver *phy_ver) in rtl8152_fw_phy_ver() argument
4880 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_ver()
4882 if (sram_read(tp, ver_addr) >= ver) { in rtl8152_fw_phy_ver()
4883 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl8152_fw_phy_ver()
4887 sram_write(tp, ver_addr, ver); in rtl8152_fw_phy_ver()
4889 dev_dbg(&tp->intf->dev, "PHY firmware version %x\n", ver); in rtl8152_fw_phy_ver()
4894 static void rtl8152_fw_phy_fixup(struct r8152 *tp, struct fw_phy_fixup *fix) in rtl8152_fw_phy_fixup() argument
4898 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_fixup()
4901 data = ocp_reg_read(tp, addr); in rtl8152_fw_phy_fixup()
4920 ocp_reg_write(tp, addr, data); in rtl8152_fw_phy_fixup()
4922 dev_dbg(&tp->intf->dev, "applied ocp %x %x\n", addr, data); in rtl8152_fw_phy_fixup()
4925 static void rtl8152_fw_phy_union_apply(struct r8152 *tp, struct fw_phy_union *phy) in rtl8152_fw_phy_union_apply() argument
4931 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_union_apply()
4935 sram_write(tp, __le16_to_cpu(phy->pre_set[i].addr), in rtl8152_fw_phy_union_apply()
4943 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_union_apply()
4945 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i])); in rtl8152_fw_phy_union_apply()
4949 sram_write(tp, __le16_to_cpu(phy->bp[i].addr), __le16_to_cpu(phy->bp[i].data)); in rtl8152_fw_phy_union_apply()
4952 sram_write(tp, __le16_to_cpu(phy->bp_en.addr), __le16_to_cpu(phy->bp_en.data)); in rtl8152_fw_phy_union_apply()
4954 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_union_apply()
4957 static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_fw_phy_nc_apply() argument
4963 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_nc_apply()
4966 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
4967 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
4975 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
4977 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i])); in rtl8152_fw_phy_nc_apply()
4979 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
4985 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
4989 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
4991 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
4994 static void rtl8152_fw_mac_apply(struct r8152 *tp, struct fw_mac *mac) in rtl8152_fw_mac_apply() argument
5013 if (fw_ver_reg && ocp_read_byte(tp, MCU_TYPE_USB, fw_ver_reg) >= mac->fw_ver_data) { in rtl8152_fw_mac_apply()
5014 dev_dbg(&tp->intf->dev, "%s firmware has been the newest\n", type ? "PLA" : "USB"); in rtl8152_fw_mac_apply()
5018 rtl_clear_bp(tp, type); in rtl8152_fw_mac_apply()
5023 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
5024 !(ocp_read_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST) & DEBUG_OE)) { in rtl8152_fw_mac_apply()
5025 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_PRE, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
5026 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
5035 generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data, in rtl8152_fw_mac_apply()
5038 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
5044 ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i])); in rtl8152_fw_mac_apply()
5050 ocp_write_word(tp, type, bp_en_addr, in rtl8152_fw_mac_apply()
5054 ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg, in rtl8152_fw_mac_apply()
5057 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
5060 static void rtl8152_apply_firmware(struct r8152 *tp, bool power_cut) in rtl8152_apply_firmware() argument
5062 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
5076 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
5086 rtl8152_fw_mac_apply(tp, (struct fw_mac *)block); in rtl8152_apply_firmware()
5093 rtl_pre_ram_code(tp, key_addr, __le16_to_cpu(key->key_data), !power_cut); in rtl8152_apply_firmware()
5099 rtl_post_ram_code(tp, key_addr, !power_cut); in rtl8152_apply_firmware()
5102 rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block); in rtl8152_apply_firmware()
5105 patch_phy = rtl8152_fw_phy_ver(tp, (struct fw_phy_ver *)block); in rtl8152_apply_firmware()
5114 rtl8152_fw_phy_union_apply(tp, (struct fw_phy_union *)block); in rtl8152_apply_firmware()
5118 rtl8152_fw_phy_fixup(tp, (struct fw_phy_fixup *)block); in rtl8152_apply_firmware()
5121 rtl_ram_code_speed_up(tp, (struct fw_phy_speed_up *)block, !power_cut); in rtl8152_apply_firmware()
5132 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
5134 rtl_reset_ocp_base(tp); in rtl8152_apply_firmware()
5136 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
5139 static void rtl8152_release_firmware(struct r8152 *tp) in rtl8152_release_firmware() argument
5141 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
5149 static int rtl8152_request_firmware(struct r8152 *tp) in rtl8152_request_firmware() argument
5151 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
5155 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
5160 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
5164 rc = rtl8152_check_firmware(tp, rtl_fw); in rtl8152_request_firmware()
5172 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
5180 static void r8152_aldps_en(struct r8152 *tp, bool enable) in r8152_aldps_en() argument
5183 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152_aldps_en()
5186 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | in r8152_aldps_en()
5192 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
5194 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
5195 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
5196 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
5199 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
5203 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
5204 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
5205 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
5210 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
5212 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
5213 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
5214 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
5217 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
5222 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
5223 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
5224 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
5225 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
5242 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
5243 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
5244 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
5245 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
5248 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
5253 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
5254 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
5264 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
5265 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
5267 tp->ups_info.eee = enable; in r8153_eee_en()
5270 static void r8156_eee_en(struct r8152 *tp, bool enable) in r8156_eee_en() argument
5274 r8153_eee_en(tp, enable); in r8156_eee_en()
5276 config = ocp_reg_read(tp, OCP_EEE_ADV2); in r8156_eee_en()
5283 ocp_reg_write(tp, OCP_EEE_ADV2, config); in r8156_eee_en()
5286 static void rtl_eee_enable(struct r8152 *tp, bool enable) in rtl_eee_enable() argument
5288 switch (tp->version) { in rtl_eee_enable()
5293 r8152_eee_en(tp, true); in rtl_eee_enable()
5294 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, in rtl_eee_enable()
5295 tp->eee_adv); in rtl_eee_enable()
5297 r8152_eee_en(tp, false); in rtl_eee_enable()
5298 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0); in rtl_eee_enable()
5309 r8153_eee_en(tp, true); in rtl_eee_enable()
5310 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5312 r8153_eee_en(tp, false); in rtl_eee_enable()
5313 ocp_reg_write(tp, OCP_EEE_ADV, 0); in rtl_eee_enable()
5322 r8156_eee_en(tp, true); in rtl_eee_enable()
5323 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5325 r8156_eee_en(tp, false); in rtl_eee_enable()
5326 ocp_reg_write(tp, OCP_EEE_ADV, 0); in rtl_eee_enable()
5334 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
5338 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
5340 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
5342 tp->ups_info.flow_control = true; in r8152b_enable_fc()
5345 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
5347 r8152_aldps_en(tp, false); in rtl8152_disable()
5348 rtl_disable(tp); in rtl8152_disable()
5349 r8152_aldps_en(tp, true); in rtl8152_disable()
5352 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
5354 rtl8152_apply_firmware(tp, false); in r8152b_hw_phy_cfg()
5355 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
5356 r8152_aldps_en(tp, true); in r8152b_hw_phy_cfg()
5357 r8152b_enable_fc(tp); in r8152b_hw_phy_cfg()
5359 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
5362 static void wait_oob_link_list_ready(struct r8152 *tp) in wait_oob_link_list_ready() argument
5368 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in wait_oob_link_list_ready()
5375 static void r8156b_wait_loading_flash(struct r8152 *tp) in r8156b_wait_loading_flash() argument
5377 if ((ocp_read_word(tp, MCU_TYPE_PLA, PLA_GPHY_CTRL) & GPHY_FLASH) && in r8156b_wait_loading_flash()
5378 !(ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & BYPASS_FLASH)) { in r8156b_wait_loading_flash()
5382 if (ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & GPHY_PATCH_DONE) in r8156b_wait_loading_flash()
5389 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
5393 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
5395 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
5397 rxdy_gated_en(tp, true); in r8152b_exit_oob()
5398 r8153_teredo_off(tp); in r8152b_exit_oob()
5399 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
5400 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
5402 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
5404 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
5406 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
5408 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
5410 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
5412 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
5414 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
5416 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
5418 rtl8152_nic_reset(tp); in r8152b_exit_oob()
5421 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
5423 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
5424 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
5426 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
5428 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
5432 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
5434 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
5439 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8152b_exit_oob()
5441 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
5442 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
5443 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
5446 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
5448 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
5450 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
5452 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
5455 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
5459 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
5461 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
5463 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
5464 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
5465 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
5467 rtl_disable(tp); in r8152b_enter_oob()
5469 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
5471 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
5473 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
5475 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
5477 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
5479 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
5481 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8152b_enter_oob()
5483 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8152b_enter_oob()
5485 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
5487 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
5489 rxdy_gated_en(tp, false); in r8152b_enter_oob()
5491 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
5493 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
5496 static int r8153_pre_firmware_1(struct r8152 *tp) in r8153_pre_firmware_1() argument
5502 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL); in r8153_pre_firmware_1()
5512 static int r8153_post_firmware_1(struct r8152 *tp) in r8153_post_firmware_1() argument
5515 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) in r8153_post_firmware_1()
5516 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY); in r8153_post_firmware_1()
5519 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_1()
5524 static int r8153_pre_firmware_2(struct r8152 *tp) in r8153_pre_firmware_2() argument
5528 r8153_pre_firmware_1(tp); in r8153_pre_firmware_2()
5530 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_pre_firmware_2()
5532 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_pre_firmware_2()
5537 static int r8153_post_firmware_2(struct r8152 *tp) in r8153_post_firmware_2() argument
5542 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) { in r8153_post_firmware_2()
5543 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153_post_firmware_2()
5545 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153_post_firmware_2()
5549 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_2()
5552 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, U3P3_CHECK_EN | 4); in r8153_post_firmware_2()
5554 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_post_firmware_2()
5556 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_post_firmware_2()
5558 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_2()
5560 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_2()
5565 static int r8153_post_firmware_3(struct r8152 *tp) in r8153_post_firmware_3() argument
5569 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_3()
5571 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_3()
5573 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153_post_firmware_3()
5575 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153_post_firmware_3()
5580 static int r8153b_pre_firmware_1(struct r8152 *tp) in r8153b_pre_firmware_1() argument
5583 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER, in r8153b_pre_firmware_1()
5589 static int r8153b_post_firmware_1(struct r8152 *tp) in r8153b_post_firmware_1() argument
5594 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in r8153b_post_firmware_1()
5596 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153b_post_firmware_1()
5598 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153b_post_firmware_1()
5601 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8153b_post_firmware_1()
5603 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8153b_post_firmware_1()
5605 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8153b_post_firmware_1()
5607 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8153b_post_firmware_1()
5609 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153b_post_firmware_1()
5611 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153b_post_firmware_1()
5616 static int r8153c_post_firmware_1(struct r8152 *tp) in r8153c_post_firmware_1() argument
5620 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8153c_post_firmware_1()
5622 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8153c_post_firmware_1()
5624 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8153c_post_firmware_1()
5626 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8153c_post_firmware_1()
5631 static int r8156a_post_firmware_1(struct r8152 *tp) in r8156a_post_firmware_1() argument
5635 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8156a_post_firmware_1()
5637 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8156a_post_firmware_1()
5640 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4026840e); in r8156a_post_firmware_1()
5641 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4001acc9); in r8156a_post_firmware_1()
5646 static void r8153_aldps_en(struct r8152 *tp, bool enable) in r8153_aldps_en() argument
5650 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_aldps_en()
5653 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
5658 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
5661 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100) in r8153_aldps_en()
5666 tp->ups_info.aldps = enable; in r8153_aldps_en()
5669 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
5675 r8153_aldps_en(tp, false); in r8153_hw_phy_cfg()
5678 rtl_eee_enable(tp, false); in r8153_hw_phy_cfg()
5680 rtl8152_apply_firmware(tp, false); in r8153_hw_phy_cfg()
5682 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
5683 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
5685 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
5688 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
5690 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
5692 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
5694 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
5695 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
5697 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
5698 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
5700 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
5702 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
5705 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
5708 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
5709 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
5711 if (tp->eee_en) in r8153_hw_phy_cfg()
5712 rtl_eee_enable(tp, true); in r8153_hw_phy_cfg()
5714 r8153_aldps_en(tp, true); in r8153_hw_phy_cfg()
5715 r8152b_enable_fc(tp); in r8153_hw_phy_cfg()
5717 switch (tp->version) { in r8153_hw_phy_cfg()
5724 r8153_u2p3en(tp, true); in r8153_hw_phy_cfg()
5728 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
5731 static u32 r8152_efuse_read(struct r8152 *tp, u8 addr) in r8152_efuse_read() argument
5735 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr); in r8152_efuse_read()
5736 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD); in r8152_efuse_read()
5738 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA); in r8152_efuse_read()
5743 static void r8153b_hw_phy_cfg(struct r8152 *tp) in r8153b_hw_phy_cfg() argument
5748 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_hw_phy_cfg()
5751 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_hw_phy_cfg()
5755 r8153_aldps_en(tp, false); in r8153b_hw_phy_cfg()
5758 rtl_eee_enable(tp, false); in r8153b_hw_phy_cfg()
5761 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8153b_hw_phy_cfg()
5763 data = r8153_phy_status(tp, 0); in r8153b_hw_phy_cfg()
5768 rtl8152_apply_firmware(tp, true); in r8153b_hw_phy_cfg()
5770 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_hw_phy_cfg()
5772 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_hw_phy_cfg()
5776 rtl8152_apply_firmware(tp, false); in r8153b_hw_phy_cfg()
5780 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
5782 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_hw_phy_cfg()
5784 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_hw_phy_cfg()
5785 data = ocp_reg_read(tp, OCP_NCTL_CFG); in r8153b_hw_phy_cfg()
5787 ocp_reg_write(tp, OCP_NCTL_CFG, data); in r8153b_hw_phy_cfg()
5794 ocp_data = r8152_efuse_read(tp, 0x7d); in r8153b_hw_phy_cfg()
5797 ocp_reg_write(tp, OCP_ADC_IOFFSET, data); in r8153b_hw_phy_cfg()
5803 ocp_data = ocp_reg_read(tp, 0xc426); in r8153b_hw_phy_cfg()
5809 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG); in r8153b_hw_phy_cfg()
5811 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data); in r8153b_hw_phy_cfg()
5814 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_hw_phy_cfg()
5816 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_hw_phy_cfg()
5819 if (!rtl_phy_patch_request(tp, true, true)) { in r8153b_hw_phy_cfg()
5820 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153b_hw_phy_cfg()
5822 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153b_hw_phy_cfg()
5823 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
5825 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153b_hw_phy_cfg()
5827 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153b_hw_phy_cfg()
5828 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
5829 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
5830 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
5832 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8153b_hw_phy_cfg()
5833 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
5834 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
5836 rtl_phy_patch_request(tp, false, true); in r8153b_hw_phy_cfg()
5839 if (tp->eee_en) in r8153b_hw_phy_cfg()
5840 rtl_eee_enable(tp, true); in r8153b_hw_phy_cfg()
5842 r8153_aldps_en(tp, true); in r8153b_hw_phy_cfg()
5843 r8152b_enable_fc(tp); in r8153b_hw_phy_cfg()
5845 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
5848 static void r8153c_hw_phy_cfg(struct r8152 *tp) in r8153c_hw_phy_cfg() argument
5850 r8153b_hw_phy_cfg(tp); in r8153c_hw_phy_cfg()
5852 tp->ups_info.r_tune = true; in r8153c_hw_phy_cfg()
5855 static void rtl8153_change_mtu(struct r8152 *tp) in rtl8153_change_mtu() argument
5857 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153_change_mtu()
5858 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in rtl8153_change_mtu()
5861 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
5865 rxdy_gated_en(tp, true); in r8153_first_init()
5866 r8153_teredo_off(tp); in r8153_first_init()
5868 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
5870 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
5872 rtl8152_nic_reset(tp); in r8153_first_init()
5873 rtl_reset_bmu(tp); in r8153_first_init()
5875 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
5877 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
5879 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
5881 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
5883 wait_oob_link_list_ready(tp); in r8153_first_init()
5885 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
5887 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
5889 wait_oob_link_list_ready(tp); in r8153_first_init()
5891 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
5893 rtl8153_change_mtu(tp); in r8153_first_init()
5895 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
5897 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
5899 rtl8152_nic_reset(tp); in r8153_first_init()
5902 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
5903 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
5904 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
5906 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
5909 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
5913 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
5915 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
5918 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8153_enter_oob()
5919 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8153_enter_oob()
5920 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8153_enter_oob()
5922 rtl_disable(tp); in r8153_enter_oob()
5923 rtl_reset_bmu(tp); in r8153_enter_oob()
5925 wait_oob_link_list_ready(tp); in r8153_enter_oob()
5927 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
5929 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
5931 wait_oob_link_list_ready(tp); in r8153_enter_oob()
5933 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, 1522); in r8153_enter_oob()
5934 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_DEFAULT); in r8153_enter_oob()
5936 switch (tp->version) { in r8153_enter_oob()
5941 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
5943 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
5953 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in r8153_enter_oob()
5960 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
5962 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8153_enter_oob()
5964 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8153_enter_oob()
5966 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
5968 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
5970 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
5972 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
5974 rxdy_gated_en(tp, false); in r8153_enter_oob()
5976 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
5978 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
5981 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
5983 r8153_aldps_en(tp, false); in rtl8153_disable()
5984 rtl_disable(tp); in rtl8153_disable()
5985 rtl_reset_bmu(tp); in rtl8153_disable()
5986 r8153_aldps_en(tp, true); in rtl8153_disable()
5989 static int rtl8156_enable(struct r8152 *tp) in rtl8156_enable() argument
5994 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8156_enable()
5997 set_tx_qlen(tp); in rtl8156_enable()
5998 rtl_set_eee_plus(tp); in rtl8156_enable()
5999 r8153_set_rx_early_timeout(tp); in rtl8156_enable()
6000 r8153_set_rx_early_size(tp); in rtl8156_enable()
6002 speed = rtl8152_get_speed(tp); in rtl8156_enable()
6003 rtl_set_ifg(tp, speed); in rtl8156_enable()
6005 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl8156_enable()
6010 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl8156_enable()
6013 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS, 0x11); in rtl8156_enable()
6015 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS, 0x3d); in rtl8156_enable()
6017 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156_enable()
6019 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_L1_CTRL); in rtl8156_enable()
6025 ocp_write_word(tp, MCU_TYPE_USB, USB_L1_CTRL, ocp_data); in rtl8156_enable()
6028 return rtl_enable(tp); in rtl8156_enable()
6031 static int rtl8156b_enable(struct r8152 *tp) in rtl8156b_enable() argument
6036 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8156b_enable()
6039 set_tx_qlen(tp); in rtl8156b_enable()
6040 rtl_set_eee_plus(tp); in rtl8156b_enable()
6042 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_RX_AGGR_NUM); in rtl8156b_enable()
6044 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_AGGR_NUM, ocp_data); in rtl8156b_enable()
6046 r8153_set_rx_early_timeout(tp); in rtl8156b_enable()
6047 r8153_set_rx_early_size(tp); in rtl8156b_enable()
6049 speed = rtl8152_get_speed(tp); in rtl8156b_enable()
6050 rtl_set_ifg(tp, speed); in rtl8156b_enable()
6052 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl8156b_enable()
6057 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl8156b_enable()
6059 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156b_enable()
6060 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_L1_CTRL); in rtl8156b_enable()
6066 ocp_write_word(tp, MCU_TYPE_USB, USB_L1_CTRL, ocp_data); in rtl8156b_enable()
6069 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in rtl8156b_enable()
6071 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8156b_enable()
6074 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8156b_enable()
6076 return rtl_enable(tp); in rtl8156b_enable()
6079 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex, in rtl8152_set_speed() argument
6094 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
6096 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
6103 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
6105 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
6109 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6111 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6121 tp->mii.full_duplex = 1; in rtl8152_set_speed()
6123 tp->mii.full_duplex = 0; in rtl8152_set_speed()
6125 tp->mii.force_media = 1; in rtl8152_set_speed()
6133 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6136 if (tp->support_2500full) in rtl8152_set_speed()
6143 orig = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
6148 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
6152 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
6157 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
6161 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
6165 r8152_mdio_write(tp, MII_ADVERTISE, new1); in rtl8152_set_speed()
6166 tp->mii.advertising = new1; in rtl8152_set_speed()
6169 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6170 orig = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
6176 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6180 r8152_mdio_write(tp, MII_CTRL1000, new1); in rtl8152_set_speed()
6183 if (tp->support_2500full) { in rtl8152_set_speed()
6184 orig = ocp_reg_read(tp, OCP_10GBT_CTRL); in rtl8152_set_speed()
6189 tp->ups_info.speed_duplex = NWAY_2500M_FULL; in rtl8152_set_speed()
6193 ocp_reg_write(tp, OCP_10GBT_CTRL, new1); in rtl8152_set_speed()
6198 tp->mii.force_media = 0; in rtl8152_set_speed()
6201 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
6204 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
6211 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
6220 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
6222 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_up()
6225 r8152_aldps_en(tp, false); in rtl8152_up()
6226 r8152b_exit_oob(tp); in rtl8152_up()
6227 r8152_aldps_en(tp, true); in rtl8152_up()
6230 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
6232 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_down()
6233 rtl_drop_queued_tx(tp); in rtl8152_down()
6237 r8152_power_cut_en(tp, false); in rtl8152_down()
6238 r8152_aldps_en(tp, false); in rtl8152_down()
6239 r8152b_enter_oob(tp); in rtl8152_down()
6240 r8152_aldps_en(tp, true); in rtl8152_down()
6243 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
6247 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_up()
6250 r8153_u1u2en(tp, false); in rtl8153_up()
6251 r8153_u2p3en(tp, false); in rtl8153_up()
6252 r8153_aldps_en(tp, false); in rtl8153_up()
6253 r8153_first_init(tp); in rtl8153_up()
6255 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_up()
6257 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_up()
6259 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in rtl8153_up()
6261 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in rtl8153_up()
6263 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1); in rtl8153_up()
6265 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1, ocp_data); in rtl8153_up()
6267 r8153_aldps_en(tp, true); in rtl8153_up()
6269 switch (tp->version) { in rtl8153_up()
6276 r8153_u2p3en(tp, true); in rtl8153_up()
6280 r8153_u1u2en(tp, true); in rtl8153_up()
6283 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
6287 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153_down()
6288 rtl_drop_queued_tx(tp); in rtl8153_down()
6292 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_down()
6294 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_down()
6296 r8153_u1u2en(tp, false); in rtl8153_down()
6297 r8153_u2p3en(tp, false); in rtl8153_down()
6298 r8153_power_cut_en(tp, false); in rtl8153_down()
6299 r8153_aldps_en(tp, false); in rtl8153_down()
6300 r8153_enter_oob(tp); in rtl8153_down()
6301 r8153_aldps_en(tp, true); in rtl8153_down()
6304 static void rtl8153b_up(struct r8152 *tp) in rtl8153b_up() argument
6308 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_up()
6311 r8153b_u1u2en(tp, false); in rtl8153b_up()
6312 r8153_u2p3en(tp, false); in rtl8153b_up()
6313 r8153_aldps_en(tp, false); in rtl8153b_up()
6315 r8153_first_init(tp); in rtl8153b_up()
6316 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153b_up()
6318 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_up()
6320 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_up()
6322 r8153_aldps_en(tp, true); in rtl8153b_up()
6324 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_up()
6325 r8153b_u1u2en(tp, true); in rtl8153b_up()
6328 static void rtl8153b_down(struct r8152 *tp) in rtl8153b_down() argument
6332 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8153b_down()
6333 rtl_drop_queued_tx(tp); in rtl8153b_down()
6337 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_down()
6339 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_down()
6341 r8153b_u1u2en(tp, false); in rtl8153b_down()
6342 r8153_u2p3en(tp, false); in rtl8153b_down()
6343 r8153b_power_cut_en(tp, false); in rtl8153b_down()
6344 r8153_aldps_en(tp, false); in rtl8153b_down()
6345 r8153_enter_oob(tp); in rtl8153b_down()
6346 r8153_aldps_en(tp, true); in rtl8153b_down()
6349 static void rtl8153c_change_mtu(struct r8152 *tp) in rtl8153c_change_mtu() argument
6351 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153c_change_mtu()
6352 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, 10 * 1024 / 64); in rtl8153c_change_mtu()
6354 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, 512 / 64); in rtl8153c_change_mtu()
6359 if (tp->netdev->mtu < 8000) in rtl8153c_change_mtu()
6360 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, 2048 / 8); in rtl8153c_change_mtu()
6362 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, 900 / 8); in rtl8153c_change_mtu()
6365 static void rtl8153c_up(struct r8152 *tp) in rtl8153c_up() argument
6369 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153c_up()
6372 r8153b_u1u2en(tp, false); in rtl8153c_up()
6373 r8153_u2p3en(tp, false); in rtl8153c_up()
6374 r8153_aldps_en(tp, false); in rtl8153c_up()
6376 rxdy_gated_en(tp, true); in rtl8153c_up()
6377 r8153_teredo_off(tp); in rtl8153c_up()
6379 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8153c_up()
6381 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8153c_up()
6383 rtl8152_nic_reset(tp); in rtl8153c_up()
6384 rtl_reset_bmu(tp); in rtl8153c_up()
6386 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8153c_up()
6388 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8153c_up()
6390 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8153c_up()
6392 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8153c_up()
6394 wait_oob_link_list_ready(tp); in rtl8153c_up()
6396 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8153c_up()
6398 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8153c_up()
6400 wait_oob_link_list_ready(tp); in rtl8153c_up()
6402 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8153c_up()
6404 rtl8153c_change_mtu(tp); in rtl8153c_up()
6406 rtl8152_nic_reset(tp); in rtl8153c_up()
6409 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, 0x02); in rtl8153c_up()
6410 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, 0x08); in rtl8153c_up()
6411 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in rtl8153c_up()
6412 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in rtl8153c_up()
6414 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153c_up()
6416 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8153c_up()
6418 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl8153c_up()
6420 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl8153c_up()
6422 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8153c_up()
6424 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153c_up()
6426 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153c_up()
6428 r8153_aldps_en(tp, true); in rtl8153c_up()
6429 r8153b_u1u2en(tp, true); in rtl8153c_up()
6432 static inline u32 fc_pause_on_auto(struct r8152 *tp) in fc_pause_on_auto() argument
6434 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 6 * 1024); in fc_pause_on_auto()
6437 static inline u32 fc_pause_off_auto(struct r8152 *tp) in fc_pause_off_auto() argument
6439 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 14 * 1024); in fc_pause_off_auto()
6442 static void r8156_fc_parameter(struct r8152 *tp) in r8156_fc_parameter() argument
6444 u32 pause_on = tp->fc_pause_on ? tp->fc_pause_on : fc_pause_on_auto(tp); in r8156_fc_parameter()
6445 u32 pause_off = tp->fc_pause_off ? tp->fc_pause_off : fc_pause_off_auto(tp); in r8156_fc_parameter()
6447 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_FULL, pause_on / 16); in r8156_fc_parameter()
6448 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_EMPTY, pause_off / 16); in r8156_fc_parameter()
6451 static void rtl8156_change_mtu(struct r8152 *tp) in rtl8156_change_mtu() argument
6453 u32 rx_max_size = mtu_to_size(tp->netdev->mtu); in rtl8156_change_mtu()
6455 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rx_max_size); in rtl8156_change_mtu()
6456 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in rtl8156_change_mtu()
6457 r8156_fc_parameter(tp); in rtl8156_change_mtu()
6460 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, 512 / 64); in rtl8156_change_mtu()
6461 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, in rtl8156_change_mtu()
6465 static void rtl8156_up(struct r8152 *tp) in rtl8156_up() argument
6469 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8156_up()
6472 r8153b_u1u2en(tp, false); in rtl8156_up()
6473 r8153_u2p3en(tp, false); in rtl8156_up()
6474 r8153_aldps_en(tp, false); in rtl8156_up()
6476 rxdy_gated_en(tp, true); in rtl8156_up()
6477 r8153_teredo_off(tp); in rtl8156_up()
6479 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8156_up()
6481 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8156_up()
6483 rtl8152_nic_reset(tp); in rtl8156_up()
6484 rtl_reset_bmu(tp); in rtl8156_up()
6486 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8156_up()
6488 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8156_up()
6490 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8156_up()
6492 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8156_up()
6494 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8156_up()
6496 rtl8156_change_mtu(tp); in rtl8156_up()
6498 switch (tp->version) { in rtl8156_up()
6502 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG); in rtl8156_up()
6504 ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data); in rtl8156_up()
6511 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL); in rtl8156_up()
6514 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, ocp_data); in rtl8156_up()
6516 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8156_up()
6518 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8156_up()
6520 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION); in rtl8156_up()
6522 ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, ocp_data); in rtl8156_up()
6524 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, 0x00600400); in rtl8156_up()
6526 if (tp->saved_wolopts != __rtl_get_wol(tp)) { in rtl8156_up()
6527 netif_warn(tp, ifup, tp->netdev, "wol setting is changed\n"); in rtl8156_up()
6528 __rtl_set_wol(tp, tp->saved_wolopts); in rtl8156_up()
6531 r8153_aldps_en(tp, true); in rtl8156_up()
6532 r8153_u2p3en(tp, true); in rtl8156_up()
6534 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_up()
6535 r8153b_u1u2en(tp, true); in rtl8156_up()
6538 static void rtl8156_down(struct r8152 *tp) in rtl8156_down() argument
6542 if (test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8156_down()
6543 rtl_drop_queued_tx(tp); in rtl8156_down()
6547 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8156_down()
6549 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8156_down()
6551 r8153b_u1u2en(tp, false); in rtl8156_down()
6552 r8153_u2p3en(tp, false); in rtl8156_down()
6553 r8153b_power_cut_en(tp, false); in rtl8156_down()
6554 r8153_aldps_en(tp, false); in rtl8156_down()
6556 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8156_down()
6558 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8156_down()
6561 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, 64 / 16); in rtl8156_down()
6562 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_FULL, 1024 / 16); in rtl8156_down()
6563 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_EMPTY, 4096 / 16); in rtl8156_down()
6565 rtl_disable(tp); in rtl8156_down()
6566 rtl_reset_bmu(tp); in rtl8156_down()
6568 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, 1522); in rtl8156_down()
6569 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_DEFAULT); in rtl8156_down()
6575 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in rtl8156_down()
6577 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8156_down()
6579 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8156_down()
6581 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8156_down()
6583 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8156_down()
6585 rtl_rx_vlan_en(tp, true); in rtl8156_down()
6586 rxdy_gated_en(tp, false); in rtl8156_down()
6588 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8156_down()
6590 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8156_down()
6592 r8153_aldps_en(tp, true); in rtl8156_down()
6595 static bool rtl8152_in_nway(struct r8152 *tp) in rtl8152_in_nway() argument
6599 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000); in rtl8152_in_nway()
6600 tp->ocp_base = 0x2000; in rtl8152_in_nway()
6601 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */ in rtl8152_in_nway()
6602 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a); in rtl8152_in_nway()
6611 static bool rtl8153_in_nway(struct r8152 *tp) in rtl8153_in_nway() argument
6613 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff; in rtl8153_in_nway()
6621 static void r8156_mdio_force_mode(struct r8152 *tp) in r8156_mdio_force_mode() argument
6629 data = ocp_reg_read(tp, 0xa5b4); in r8156_mdio_force_mode()
6632 ocp_reg_write(tp, 0xa5b4, data); in r8156_mdio_force_mode()
6636 static void set_carrier(struct r8152 *tp) in set_carrier() argument
6638 struct net_device *netdev = tp->netdev; in set_carrier()
6639 struct napi_struct *napi = &tp->napi; in set_carrier()
6642 speed = rtl8152_get_speed(tp); in set_carrier()
6646 tp->rtl_ops.enable(tp); in set_carrier()
6650 rtl_start_rx(tp); in set_carrier()
6651 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
6655 netif_info(tp, link, netdev, "carrier on\n"); in set_carrier()
6657 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
6663 tasklet_disable(&tp->tx_tl); in set_carrier()
6665 tp->rtl_ops.disable(tp); in set_carrier()
6667 tasklet_enable(&tp->tx_tl); in set_carrier()
6668 netif_info(tp, link, netdev, "carrier off\n"); in set_carrier()
6675 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
6680 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
6683 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
6686 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
6689 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
6690 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
6694 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
6695 set_carrier(tp); in rtl_work_func_t()
6697 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
6698 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
6701 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
6702 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
6703 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
6705 if (test_and_clear_bit(RX_EPROTO, &tp->flags) && in rtl_work_func_t()
6706 !list_empty(&tp->rx_done)) in rtl_work_func_t()
6707 napi_schedule(&tp->napi); in rtl_work_func_t()
6709 mutex_unlock(&tp->control); in rtl_work_func_t()
6712 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
6717 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work); in rtl_hw_phy_work_func_t() local
6719 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl_hw_phy_work_func_t()
6722 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
6725 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
6727 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
6728 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
6729 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
6733 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
6737 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
6739 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
6740 tp->advertising); in rtl_hw_phy_work_func_t()
6743 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
6745 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
6752 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier); in rtl_notifier() local
6757 usb_autopm_get_interface(tp->intf); in rtl_notifier()
6762 usb_autopm_put_interface(tp->intf); in rtl_notifier()
6777 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
6780 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
6781 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
6782 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
6785 res = alloc_all_mem(tp); in rtl8152_open()
6789 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
6793 mutex_lock(&tp->control); in rtl8152_open()
6795 tp->rtl_ops.up(tp); in rtl8152_open()
6799 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
6801 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
6804 netif_device_detach(tp->netdev); in rtl8152_open()
6805 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
6809 napi_enable(&tp->napi); in rtl8152_open()
6810 tasklet_enable(&tp->tx_tl); in rtl8152_open()
6812 mutex_unlock(&tp->control); in rtl8152_open()
6814 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6816 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
6817 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
6822 mutex_unlock(&tp->control); in rtl8152_open()
6823 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6825 free_all_mem(tp); in rtl8152_open()
6832 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
6836 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
6838 tasklet_disable(&tp->tx_tl); in rtl8152_close()
6839 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
6840 usb_kill_urb(tp->intr_urb); in rtl8152_close()
6841 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
6842 napi_disable(&tp->napi); in rtl8152_close()
6845 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
6846 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) { in rtl8152_close()
6847 rtl_drop_queued_tx(tp); in rtl8152_close()
6848 rtl_stop_rx(tp); in rtl8152_close()
6850 mutex_lock(&tp->control); in rtl8152_close()
6852 tp->rtl_ops.down(tp); in rtl8152_close()
6854 mutex_unlock(&tp->control); in rtl8152_close()
6858 usb_autopm_put_interface(tp->intf); in rtl8152_close()
6860 free_all_mem(tp); in rtl8152_close()
6865 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
6869 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
6871 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
6874 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
6879 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8152b_init()
6882 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_init()
6885 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_init()
6888 r8152_aldps_en(tp, false); in r8152b_init()
6890 if (tp->version == RTL_VER_01) { in r8152b_init()
6891 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
6893 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
6896 r8152_power_cut_en(tp, false); in r8152b_init()
6898 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
6900 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
6901 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
6904 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
6907 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
6909 rtl_tally_reset(tp); in r8152b_init()
6912 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
6914 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
6917 static void r8153_init(struct r8152 *tp) in r8153_init() argument
6923 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
6926 r8153_u1u2en(tp, false); in r8153_init()
6929 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
6934 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153_init()
6938 data = r8153_phy_status(tp, 0); in r8153_init()
6940 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
6941 tp->version == RTL_VER_05) in r8153_init()
6942 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_init()
6944 data = r8152_mdio_read(tp, MII_BMCR); in r8153_init()
6947 r8152_mdio_write(tp, MII_BMCR, data); in r8153_init()
6950 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153_init()
6952 r8153_u2p3en(tp, false); in r8153_init()
6954 if (tp->version == RTL_VER_04) { in r8153_init()
6955 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
6958 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
6960 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
6962 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
6963 } else if (tp->version == RTL_VER_05) { in r8153_init()
6964 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
6966 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
6968 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
6969 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
6973 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
6974 } else if (tp->version == RTL_VER_06) { in r8153_init()
6975 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
6976 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
6980 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
6982 r8153_queue_wake(tp, false); in r8153_init()
6984 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_init()
6985 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153_init()
6990 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_init()
6993 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
6995 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
6997 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
6999 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
7001 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
7003 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
7006 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
7010 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
7012 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
7015 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
7017 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
7019 r8153_power_cut_en(tp, false); in r8153_init()
7020 rtl_runtime_suspend_enable(tp, false); in r8153_init()
7021 r8153_mac_clk_speed_down(tp, false); in r8153_init()
7022 r8153_u1u2en(tp, true); in r8153_init()
7023 usb_enable_lpm(tp->udev); in r8153_init()
7025 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in r8153_init()
7027 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in r8153_init()
7029 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in r8153_init()
7031 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in r8153_init()
7034 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_init()
7036 if (tp->dell_tb_rx_agg_bug) in r8153_init()
7039 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_init()
7041 rtl_tally_reset(tp); in r8153_init()
7043 switch (tp->udev->speed) { in r8153_init()
7046 tp->coalesce = COALESCE_SUPER; in r8153_init()
7049 tp->coalesce = COALESCE_HIGH; in r8153_init()
7052 tp->coalesce = COALESCE_SLOW; in r8153_init()
7057 static void r8153b_init(struct r8152 *tp) in r8153b_init() argument
7063 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
7066 r8153b_u1u2en(tp, false); in r8153b_init()
7069 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_init()
7074 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153b_init()
7078 data = r8153_phy_status(tp, 0); in r8153b_init()
7080 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_init()
7083 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_init()
7086 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_init()
7088 r8153_u2p3en(tp, false); in r8153b_init()
7091 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153b_init()
7093 r8153b_power_cut_en(tp, false); in r8153b_init()
7094 r8153b_ups_en(tp, false); in r8153b_init()
7095 r8153_queue_wake(tp, false); in r8153b_init()
7096 rtl_runtime_suspend_enable(tp, false); in r8153b_init()
7098 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153b_init()
7099 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153b_init()
7104 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153b_init()
7106 if (tp->udev->speed >= USB_SPEED_SUPER) in r8153b_init()
7107 r8153b_u1u2en(tp, true); in r8153b_init()
7109 usb_enable_lpm(tp->udev); in r8153b_init()
7112 r8153_mac_clk_speed_down(tp, true); in r8153b_init()
7114 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8153b_init()
7116 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8153b_init()
7118 if (tp->version == RTL_VER_09) { in r8153b_init()
7120 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) { in r8153b_init()
7121 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_init()
7123 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_init()
7127 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
7130 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153b_init()
7132 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153b_init()
7134 rtl_tally_reset(tp); in r8153b_init()
7136 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
7139 static void r8153c_init(struct r8152 *tp) in r8153c_init() argument
7145 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153c_init()
7148 r8153b_u1u2en(tp, false); in r8153c_init()
7151 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in r8153c_init()
7152 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in r8153c_init()
7154 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in r8153c_init()
7155 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcbf0); in r8153c_init()
7157 ocp_write_word(tp, MCU_TYPE_USB, 0xcbf0, ocp_data); in r8153c_init()
7160 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153c_init()
7165 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8153c_init()
7169 data = r8153_phy_status(tp, 0); in r8153c_init()
7171 data = r8152_mdio_read(tp, MII_BMCR); in r8153c_init()
7174 r8152_mdio_write(tp, MII_BMCR, data); in r8153c_init()
7177 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153c_init()
7179 r8153_u2p3en(tp, false); in r8153c_init()
7182 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153c_init()
7184 r8153b_power_cut_en(tp, false); in r8153c_init()
7185 r8153c_ups_en(tp, false); in r8153c_init()
7186 r8153_queue_wake(tp, false); in r8153c_init()
7187 rtl_runtime_suspend_enable(tp, false); in r8153c_init()
7189 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153c_init()
7190 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153c_init()
7196 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153c_init()
7198 r8153b_u1u2en(tp, true); in r8153c_init()
7200 usb_enable_lpm(tp->udev); in r8153c_init()
7203 r8153_mac_clk_speed_down(tp, true); in r8153c_init()
7205 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153c_init()
7207 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153c_init()
7209 set_bit(GREEN_ETHERNET, &tp->flags); in r8153c_init()
7212 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153c_init()
7214 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153c_init()
7216 rtl_tally_reset(tp); in r8153c_init()
7218 tp->coalesce = 15000; /* 15 us */ in r8153c_init()
7221 static void r8156_hw_phy_cfg(struct r8152 *tp) in r8156_hw_phy_cfg() argument
7226 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8156_hw_phy_cfg()
7229 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8156_hw_phy_cfg()
7232 data = r8153_phy_status(tp, 0); in r8156_hw_phy_cfg()
7235 rtl8152_apply_firmware(tp, true); in r8156_hw_phy_cfg()
7237 data = ocp_reg_read(tp, 0xa468); in r8156_hw_phy_cfg()
7239 ocp_reg_write(tp, 0xa468, data); in r8156_hw_phy_cfg()
7244 rtl8152_apply_firmware(tp, false); in r8156_hw_phy_cfg()
7249 r8153_aldps_en(tp, false); in r8156_hw_phy_cfg()
7252 rtl_eee_enable(tp, false); in r8156_hw_phy_cfg()
7254 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156_hw_phy_cfg()
7257 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8156_hw_phy_cfg()
7259 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8156_hw_phy_cfg()
7261 switch (tp->version) { in r8156_hw_phy_cfg()
7263 data = ocp_reg_read(tp, 0xad40); in r8156_hw_phy_cfg()
7266 ocp_reg_write(tp, 0xad40, data); in r8156_hw_phy_cfg()
7268 data = ocp_reg_read(tp, 0xad4e); in r8156_hw_phy_cfg()
7270 ocp_reg_write(tp, 0xad4e, data); in r8156_hw_phy_cfg()
7271 data = ocp_reg_read(tp, 0xad16); in r8156_hw_phy_cfg()
7274 ocp_reg_write(tp, 0xad16, data); in r8156_hw_phy_cfg()
7275 data = ocp_reg_read(tp, 0xad32); in r8156_hw_phy_cfg()
7278 ocp_reg_write(tp, 0xad32, data); in r8156_hw_phy_cfg()
7279 data = ocp_reg_read(tp, 0xac08); in r8156_hw_phy_cfg()
7281 ocp_reg_write(tp, 0xac08, data); in r8156_hw_phy_cfg()
7282 data = ocp_reg_read(tp, 0xac8a); in r8156_hw_phy_cfg()
7285 ocp_reg_write(tp, 0xac8a, data); in r8156_hw_phy_cfg()
7286 data = ocp_reg_read(tp, 0xad18); in r8156_hw_phy_cfg()
7288 ocp_reg_write(tp, 0xad18, data); in r8156_hw_phy_cfg()
7289 data = ocp_reg_read(tp, 0xad1a); in r8156_hw_phy_cfg()
7291 ocp_reg_write(tp, 0xad1a, data); in r8156_hw_phy_cfg()
7292 data = ocp_reg_read(tp, 0xad1c); in r8156_hw_phy_cfg()
7294 ocp_reg_write(tp, 0xad1c, data); in r8156_hw_phy_cfg()
7296 data = sram_read(tp, 0x80ea); in r8156_hw_phy_cfg()
7299 sram_write(tp, 0x80ea, data); in r8156_hw_phy_cfg()
7300 data = sram_read(tp, 0x80eb); in r8156_hw_phy_cfg()
7303 sram_write(tp, 0x80eb, data); in r8156_hw_phy_cfg()
7304 data = sram_read(tp, 0x80f8); in r8156_hw_phy_cfg()
7307 sram_write(tp, 0x80f8, data); in r8156_hw_phy_cfg()
7308 data = sram_read(tp, 0x80f1); in r8156_hw_phy_cfg()
7311 sram_write(tp, 0x80f1, data); in r8156_hw_phy_cfg()
7313 data = sram_read(tp, 0x80fe); in r8156_hw_phy_cfg()
7316 sram_write(tp, 0x80fe, data); in r8156_hw_phy_cfg()
7317 data = sram_read(tp, 0x8102); in r8156_hw_phy_cfg()
7320 sram_write(tp, 0x8102, data); in r8156_hw_phy_cfg()
7321 data = sram_read(tp, 0x8015); in r8156_hw_phy_cfg()
7324 sram_write(tp, 0x8015, data); in r8156_hw_phy_cfg()
7325 data = sram_read(tp, 0x8100); in r8156_hw_phy_cfg()
7328 sram_write(tp, 0x8100, data); in r8156_hw_phy_cfg()
7329 data = sram_read(tp, 0x8014); in r8156_hw_phy_cfg()
7332 sram_write(tp, 0x8014, data); in r8156_hw_phy_cfg()
7333 data = sram_read(tp, 0x8016); in r8156_hw_phy_cfg()
7336 sram_write(tp, 0x8016, data); in r8156_hw_phy_cfg()
7337 data = sram_read(tp, 0x80dc); in r8156_hw_phy_cfg()
7340 sram_write(tp, 0x80dc, data); in r8156_hw_phy_cfg()
7341 data = sram_read(tp, 0x80df); in r8156_hw_phy_cfg()
7343 sram_write(tp, 0x80df, data); in r8156_hw_phy_cfg()
7344 data = sram_read(tp, 0x80e1); in r8156_hw_phy_cfg()
7346 sram_write(tp, 0x80e1, data); in r8156_hw_phy_cfg()
7348 data = ocp_reg_read(tp, 0xbf06); in r8156_hw_phy_cfg()
7351 ocp_reg_write(tp, 0xbf06, data); in r8156_hw_phy_cfg()
7353 sram_write(tp, 0x819f, 0xddb6); in r8156_hw_phy_cfg()
7355 ocp_reg_write(tp, 0xbc34, 0x5555); in r8156_hw_phy_cfg()
7356 data = ocp_reg_read(tp, 0xbf0a); in r8156_hw_phy_cfg()
7359 ocp_reg_write(tp, 0xbf0a, data); in r8156_hw_phy_cfg()
7361 data = ocp_reg_read(tp, 0xbd2c); in r8156_hw_phy_cfg()
7363 ocp_reg_write(tp, 0xbd2c, data); in r8156_hw_phy_cfg()
7366 data = ocp_reg_read(tp, 0xad16); in r8156_hw_phy_cfg()
7368 ocp_reg_write(tp, 0xad16, data); in r8156_hw_phy_cfg()
7369 data = ocp_reg_read(tp, 0xad32); in r8156_hw_phy_cfg()
7372 ocp_reg_write(tp, 0xad32, data); in r8156_hw_phy_cfg()
7373 data = ocp_reg_read(tp, 0xac08); in r8156_hw_phy_cfg()
7375 ocp_reg_write(tp, 0xac08, data); in r8156_hw_phy_cfg()
7376 data = ocp_reg_read(tp, 0xacc0); in r8156_hw_phy_cfg()
7379 ocp_reg_write(tp, 0xacc0, data); in r8156_hw_phy_cfg()
7380 data = ocp_reg_read(tp, 0xad40); in r8156_hw_phy_cfg()
7383 ocp_reg_write(tp, 0xad40, data); in r8156_hw_phy_cfg()
7384 data = ocp_reg_read(tp, 0xac14); in r8156_hw_phy_cfg()
7386 ocp_reg_write(tp, 0xac14, data); in r8156_hw_phy_cfg()
7387 data = ocp_reg_read(tp, 0xac80); in r8156_hw_phy_cfg()
7389 ocp_reg_write(tp, 0xac80, data); in r8156_hw_phy_cfg()
7390 data = ocp_reg_read(tp, 0xac5e); in r8156_hw_phy_cfg()
7393 ocp_reg_write(tp, 0xac5e, data); in r8156_hw_phy_cfg()
7394 ocp_reg_write(tp, 0xad4c, 0x00a8); in r8156_hw_phy_cfg()
7395 ocp_reg_write(tp, 0xac5c, 0x01ff); in r8156_hw_phy_cfg()
7396 data = ocp_reg_read(tp, 0xac8a); in r8156_hw_phy_cfg()
7399 ocp_reg_write(tp, 0xac8a, data); in r8156_hw_phy_cfg()
7400 ocp_reg_write(tp, 0xb87c, 0x8157); in r8156_hw_phy_cfg()
7401 data = ocp_reg_read(tp, 0xb87e); in r8156_hw_phy_cfg()
7404 ocp_reg_write(tp, 0xb87e, data); in r8156_hw_phy_cfg()
7405 ocp_reg_write(tp, 0xb87c, 0x8159); in r8156_hw_phy_cfg()
7406 data = ocp_reg_read(tp, 0xb87e); in r8156_hw_phy_cfg()
7409 ocp_reg_write(tp, 0xb87e, data); in r8156_hw_phy_cfg()
7412 ocp_reg_write(tp, 0xb87c, 0x80a2); in r8156_hw_phy_cfg()
7413 ocp_reg_write(tp, 0xb87e, 0x0153); in r8156_hw_phy_cfg()
7414 ocp_reg_write(tp, 0xb87c, 0x809c); in r8156_hw_phy_cfg()
7415 ocp_reg_write(tp, 0xb87e, 0x0153); in r8156_hw_phy_cfg()
7418 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS_2P5G, 0x0056); in r8156_hw_phy_cfg()
7420 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_USB_CFG); in r8156_hw_phy_cfg()
7422 ocp_write_word(tp, MCU_TYPE_PLA, PLA_USB_CFG, ocp_data); in r8156_hw_phy_cfg()
7424 sram_write(tp, 0x8257, 0x020f); /* XG PLL */ in r8156_hw_phy_cfg()
7425 sram_write(tp, 0x80ea, 0x7843); /* GIGA Master */ in r8156_hw_phy_cfg()
7427 if (rtl_phy_patch_request(tp, true, true)) in r8156_hw_phy_cfg()
7431 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in r8156_hw_phy_cfg()
7433 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in r8156_hw_phy_cfg()
7435 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8156_hw_phy_cfg()
7438 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8156_hw_phy_cfg()
7439 tp->ups_info._10m_ckdiv = true; in r8156_hw_phy_cfg()
7440 tp->ups_info.eee_plloff_100 = false; in r8156_hw_phy_cfg()
7441 tp->ups_info.eee_plloff_giga = false; in r8156_hw_phy_cfg()
7443 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8156_hw_phy_cfg()
7445 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8156_hw_phy_cfg()
7446 tp->ups_info.eee_ckdiv = false; in r8156_hw_phy_cfg()
7448 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8156_hw_phy_cfg()
7449 ocp_reg_write(tp, OCP_SYSCLK_CFG, sysclk_div_expo(5)); in r8156_hw_phy_cfg()
7450 tp->ups_info._250m_ckdiv = false; in r8156_hw_phy_cfg()
7452 rtl_phy_patch_request(tp, false, true); in r8156_hw_phy_cfg()
7455 data = ocp_reg_read(tp, 0xd068); in r8156_hw_phy_cfg()
7457 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7460 data = sram_read(tp, 0x81a2); in r8156_hw_phy_cfg()
7462 sram_write(tp, 0x81a2, data); in r8156_hw_phy_cfg()
7463 data = ocp_reg_read(tp, 0xb54c); in r8156_hw_phy_cfg()
7466 ocp_reg_write(tp, 0xb54c, data); in r8156_hw_phy_cfg()
7469 data = ocp_reg_read(tp, 0xa454); in r8156_hw_phy_cfg()
7471 ocp_reg_write(tp, 0xa454, data); in r8156_hw_phy_cfg()
7474 data = ocp_reg_read(tp, OCP_10GBT_CTRL); in r8156_hw_phy_cfg()
7476 ocp_reg_write(tp, OCP_10GBT_CTRL, data); in r8156_hw_phy_cfg()
7477 data = ocp_reg_read(tp, 0xad4e); in r8156_hw_phy_cfg()
7479 ocp_reg_write(tp, 0xad4e, data); in r8156_hw_phy_cfg()
7480 data = ocp_reg_read(tp, 0xa86a); in r8156_hw_phy_cfg()
7482 ocp_reg_write(tp, 0xa86a, data); in r8156_hw_phy_cfg()
7485 if ((ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG) & MID_REVERSE) && in r8156_hw_phy_cfg()
7486 (ocp_reg_read(tp, 0xd068) & BIT(1))) { in r8156_hw_phy_cfg()
7489 data = ocp_reg_read(tp, 0xd068); in r8156_hw_phy_cfg()
7492 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7493 swap_a = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7496 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7497 swap_b = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7499 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7500 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7503 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7504 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7508 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7509 swap_a = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7512 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7513 swap_b = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7516 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7517 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7521 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7522 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7524 swap_a = ocp_reg_read(tp, 0xbd5a); in r8156_hw_phy_cfg()
7525 swap_b = ocp_reg_read(tp, 0xbd5c); in r8156_hw_phy_cfg()
7526 ocp_reg_write(tp, 0xbd5a, (swap_a & ~0x1f1f) | in r8156_hw_phy_cfg()
7529 ocp_reg_write(tp, 0xbd5c, (swap_b & ~0x1f1f) | in r8156_hw_phy_cfg()
7532 swap_a = ocp_reg_read(tp, 0xbc18); in r8156_hw_phy_cfg()
7533 swap_b = ocp_reg_read(tp, 0xbc1a); in r8156_hw_phy_cfg()
7534 ocp_reg_write(tp, 0xbc18, (swap_a & ~0x1f1f) | in r8156_hw_phy_cfg()
7537 ocp_reg_write(tp, 0xbc1a, (swap_b & ~0x1f1f) | in r8156_hw_phy_cfg()
7546 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156_hw_phy_cfg()
7548 data = ocp_reg_read(tp, 0xa428); in r8156_hw_phy_cfg()
7550 ocp_reg_write(tp, 0xa428, data); in r8156_hw_phy_cfg()
7551 data = ocp_reg_read(tp, 0xa5ea); in r8156_hw_phy_cfg()
7553 ocp_reg_write(tp, 0xa5ea, data); in r8156_hw_phy_cfg()
7554 tp->ups_info.lite_mode = 0; in r8156_hw_phy_cfg()
7556 if (tp->eee_en) in r8156_hw_phy_cfg()
7557 rtl_eee_enable(tp, true); in r8156_hw_phy_cfg()
7559 r8153_aldps_en(tp, true); in r8156_hw_phy_cfg()
7560 r8152b_enable_fc(tp); in r8156_hw_phy_cfg()
7561 r8153_u2p3en(tp, true); in r8156_hw_phy_cfg()
7563 set_bit(PHY_RESET, &tp->flags); in r8156_hw_phy_cfg()
7566 static void r8156b_hw_phy_cfg(struct r8152 *tp) in r8156b_hw_phy_cfg() argument
7571 switch (tp->version) { in r8156b_hw_phy_cfg()
7573 ocp_reg_write(tp, 0xbf86, 0x9000); in r8156b_hw_phy_cfg()
7574 data = ocp_reg_read(tp, 0xc402); in r8156b_hw_phy_cfg()
7576 ocp_reg_write(tp, 0xc402, data); in r8156b_hw_phy_cfg()
7578 ocp_reg_write(tp, 0xc402, data); in r8156b_hw_phy_cfg()
7579 ocp_reg_write(tp, 0xbd86, 0x1010); in r8156b_hw_phy_cfg()
7580 ocp_reg_write(tp, 0xbd88, 0x1010); in r8156b_hw_phy_cfg()
7581 data = ocp_reg_read(tp, 0xbd4e); in r8156b_hw_phy_cfg()
7584 ocp_reg_write(tp, 0xbd4e, data); in r8156b_hw_phy_cfg()
7585 data = ocp_reg_read(tp, 0xbf46); in r8156b_hw_phy_cfg()
7588 ocp_reg_write(tp, 0xbf46, data); in r8156b_hw_phy_cfg()
7592 r8156b_wait_loading_flash(tp); in r8156b_hw_phy_cfg()
7598 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8156b_hw_phy_cfg()
7601 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8156b_hw_phy_cfg()
7604 data = r8153_phy_status(tp, 0); in r8156b_hw_phy_cfg()
7607 rtl8152_apply_firmware(tp, true); in r8156b_hw_phy_cfg()
7609 data = ocp_reg_read(tp, 0xa466); in r8156b_hw_phy_cfg()
7611 ocp_reg_write(tp, 0xa466, data); in r8156b_hw_phy_cfg()
7613 data = ocp_reg_read(tp, 0xa468); in r8156b_hw_phy_cfg()
7615 ocp_reg_write(tp, 0xa468, data); in r8156b_hw_phy_cfg()
7620 rtl8152_apply_firmware(tp, false); in r8156b_hw_phy_cfg()
7624 data = r8152_mdio_read(tp, MII_BMCR); in r8156b_hw_phy_cfg()
7627 r8152_mdio_write(tp, MII_BMCR, data); in r8156b_hw_phy_cfg()
7631 r8153_aldps_en(tp, false); in r8156b_hw_phy_cfg()
7634 rtl_eee_enable(tp, false); in r8156b_hw_phy_cfg()
7636 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156b_hw_phy_cfg()
7639 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8156b_hw_phy_cfg()
7641 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8156b_hw_phy_cfg()
7643 switch (tp->version) { in r8156b_hw_phy_cfg()
7645 data = ocp_reg_read(tp, 0xbc08); in r8156b_hw_phy_cfg()
7647 ocp_reg_write(tp, 0xbc08, data); in r8156b_hw_phy_cfg()
7649 data = sram_read(tp, 0x8fff); in r8156b_hw_phy_cfg()
7652 sram_write(tp, 0x8fff, data); in r8156b_hw_phy_cfg()
7654 data = ocp_reg_read(tp, 0xacda); in r8156b_hw_phy_cfg()
7656 ocp_reg_write(tp, 0xacda, data); in r8156b_hw_phy_cfg()
7657 data = ocp_reg_read(tp, 0xacde); in r8156b_hw_phy_cfg()
7659 ocp_reg_write(tp, 0xacde, data); in r8156b_hw_phy_cfg()
7660 ocp_reg_write(tp, 0xac8c, 0x0ffc); in r8156b_hw_phy_cfg()
7661 ocp_reg_write(tp, 0xac46, 0xb7b4); in r8156b_hw_phy_cfg()
7662 ocp_reg_write(tp, 0xac50, 0x0fbc); in r8156b_hw_phy_cfg()
7663 ocp_reg_write(tp, 0xac3c, 0x9240); in r8156b_hw_phy_cfg()
7664 ocp_reg_write(tp, 0xac4e, 0x0db4); in r8156b_hw_phy_cfg()
7665 ocp_reg_write(tp, 0xacc6, 0x0707); in r8156b_hw_phy_cfg()
7666 ocp_reg_write(tp, 0xacc8, 0xa0d3); in r8156b_hw_phy_cfg()
7667 ocp_reg_write(tp, 0xad08, 0x0007); in r8156b_hw_phy_cfg()
7669 ocp_reg_write(tp, 0xb87c, 0x8560); in r8156b_hw_phy_cfg()
7670 ocp_reg_write(tp, 0xb87e, 0x19cc); in r8156b_hw_phy_cfg()
7671 ocp_reg_write(tp, 0xb87c, 0x8562); in r8156b_hw_phy_cfg()
7672 ocp_reg_write(tp, 0xb87e, 0x19cc); in r8156b_hw_phy_cfg()
7673 ocp_reg_write(tp, 0xb87c, 0x8564); in r8156b_hw_phy_cfg()
7674 ocp_reg_write(tp, 0xb87e, 0x19cc); in r8156b_hw_phy_cfg()
7675 ocp_reg_write(tp, 0xb87c, 0x8566); in r8156b_hw_phy_cfg()
7676 ocp_reg_write(tp, 0xb87e, 0x147d); in r8156b_hw_phy_cfg()
7677 ocp_reg_write(tp, 0xb87c, 0x8568); in r8156b_hw_phy_cfg()
7678 ocp_reg_write(tp, 0xb87e, 0x147d); in r8156b_hw_phy_cfg()
7679 ocp_reg_write(tp, 0xb87c, 0x856a); in r8156b_hw_phy_cfg()
7680 ocp_reg_write(tp, 0xb87e, 0x147d); in r8156b_hw_phy_cfg()
7681 ocp_reg_write(tp, 0xb87c, 0x8ffe); in r8156b_hw_phy_cfg()
7682 ocp_reg_write(tp, 0xb87e, 0x0907); in r8156b_hw_phy_cfg()
7683 ocp_reg_write(tp, 0xb87c, 0x80d6); in r8156b_hw_phy_cfg()
7684 ocp_reg_write(tp, 0xb87e, 0x2801); in r8156b_hw_phy_cfg()
7685 ocp_reg_write(tp, 0xb87c, 0x80f2); in r8156b_hw_phy_cfg()
7686 ocp_reg_write(tp, 0xb87e, 0x2801); in r8156b_hw_phy_cfg()
7687 ocp_reg_write(tp, 0xb87c, 0x80f4); in r8156b_hw_phy_cfg()
7688 ocp_reg_write(tp, 0xb87e, 0x6077); in r8156b_hw_phy_cfg()
7689 ocp_reg_write(tp, 0xb506, 0x01e7); in r8156b_hw_phy_cfg()
7691 ocp_reg_write(tp, 0xb87c, 0x8013); in r8156b_hw_phy_cfg()
7692 ocp_reg_write(tp, 0xb87e, 0x0700); in r8156b_hw_phy_cfg()
7693 ocp_reg_write(tp, 0xb87c, 0x8fb9); in r8156b_hw_phy_cfg()
7694 ocp_reg_write(tp, 0xb87e, 0x2801); in r8156b_hw_phy_cfg()
7695 ocp_reg_write(tp, 0xb87c, 0x8fba); in r8156b_hw_phy_cfg()
7696 ocp_reg_write(tp, 0xb87e, 0x0100); in r8156b_hw_phy_cfg()
7697 ocp_reg_write(tp, 0xb87c, 0x8fbc); in r8156b_hw_phy_cfg()
7698 ocp_reg_write(tp, 0xb87e, 0x1900); in r8156b_hw_phy_cfg()
7699 ocp_reg_write(tp, 0xb87c, 0x8fbe); in r8156b_hw_phy_cfg()
7700 ocp_reg_write(tp, 0xb87e, 0xe100); in r8156b_hw_phy_cfg()
7701 ocp_reg_write(tp, 0xb87c, 0x8fc0); in r8156b_hw_phy_cfg()
7702 ocp_reg_write(tp, 0xb87e, 0x0800); in r8156b_hw_phy_cfg()
7703 ocp_reg_write(tp, 0xb87c, 0x8fc2); in r8156b_hw_phy_cfg()
7704 ocp_reg_write(tp, 0xb87e, 0xe500); in r8156b_hw_phy_cfg()
7705 ocp_reg_write(tp, 0xb87c, 0x8fc4); in r8156b_hw_phy_cfg()
7706 ocp_reg_write(tp, 0xb87e, 0x0f00); in r8156b_hw_phy_cfg()
7707 ocp_reg_write(tp, 0xb87c, 0x8fc6); in r8156b_hw_phy_cfg()
7708 ocp_reg_write(tp, 0xb87e, 0xf100); in r8156b_hw_phy_cfg()
7709 ocp_reg_write(tp, 0xb87c, 0x8fc8); in r8156b_hw_phy_cfg()
7710 ocp_reg_write(tp, 0xb87e, 0x0400); in r8156b_hw_phy_cfg()
7711 ocp_reg_write(tp, 0xb87c, 0x8fca); in r8156b_hw_phy_cfg()
7712 ocp_reg_write(tp, 0xb87e, 0xf300); in r8156b_hw_phy_cfg()
7713 ocp_reg_write(tp, 0xb87c, 0x8fcc); in r8156b_hw_phy_cfg()
7714 ocp_reg_write(tp, 0xb87e, 0xfd00); in r8156b_hw_phy_cfg()
7715 ocp_reg_write(tp, 0xb87c, 0x8fce); in r8156b_hw_phy_cfg()
7716 ocp_reg_write(tp, 0xb87e, 0xff00); in r8156b_hw_phy_cfg()
7717 ocp_reg_write(tp, 0xb87c, 0x8fd0); in r8156b_hw_phy_cfg()
7718 ocp_reg_write(tp, 0xb87e, 0xfb00); in r8156b_hw_phy_cfg()
7719 ocp_reg_write(tp, 0xb87c, 0x8fd2); in r8156b_hw_phy_cfg()
7720 ocp_reg_write(tp, 0xb87e, 0x0100); in r8156b_hw_phy_cfg()
7721 ocp_reg_write(tp, 0xb87c, 0x8fd4); in r8156b_hw_phy_cfg()
7722 ocp_reg_write(tp, 0xb87e, 0xf400); in r8156b_hw_phy_cfg()
7723 ocp_reg_write(tp, 0xb87c, 0x8fd6); in r8156b_hw_phy_cfg()
7724 ocp_reg_write(tp, 0xb87e, 0xff00); in r8156b_hw_phy_cfg()
7725 ocp_reg_write(tp, 0xb87c, 0x8fd8); in r8156b_hw_phy_cfg()
7726 ocp_reg_write(tp, 0xb87e, 0xf600); in r8156b_hw_phy_cfg()
7728 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_USB_CFG); in r8156b_hw_phy_cfg()
7730 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_USB_CFG, ocp_data); in r8156b_hw_phy_cfg()
7731 ocp_reg_write(tp, 0xb87c, 0x813d); in r8156b_hw_phy_cfg()
7732 ocp_reg_write(tp, 0xb87e, 0x390e); in r8156b_hw_phy_cfg()
7733 ocp_reg_write(tp, 0xb87c, 0x814f); in r8156b_hw_phy_cfg()
7734 ocp_reg_write(tp, 0xb87e, 0x790e); in r8156b_hw_phy_cfg()
7735 ocp_reg_write(tp, 0xb87c, 0x80b0); in r8156b_hw_phy_cfg()
7736 ocp_reg_write(tp, 0xb87e, 0x0f31); in r8156b_hw_phy_cfg()
7737 data = ocp_reg_read(tp, 0xbf4c); in r8156b_hw_phy_cfg()
7739 ocp_reg_write(tp, 0xbf4c, data); in r8156b_hw_phy_cfg()
7740 data = ocp_reg_read(tp, 0xbcca); in r8156b_hw_phy_cfg()
7742 ocp_reg_write(tp, 0xbcca, data); in r8156b_hw_phy_cfg()
7743 ocp_reg_write(tp, 0xb87c, 0x8141); in r8156b_hw_phy_cfg()
7744 ocp_reg_write(tp, 0xb87e, 0x320e); in r8156b_hw_phy_cfg()
7745 ocp_reg_write(tp, 0xb87c, 0x8153); in r8156b_hw_phy_cfg()
7746 ocp_reg_write(tp, 0xb87e, 0x720e); in r8156b_hw_phy_cfg()
7747 ocp_reg_write(tp, 0xb87c, 0x8529); in r8156b_hw_phy_cfg()
7748 ocp_reg_write(tp, 0xb87e, 0x050e); in r8156b_hw_phy_cfg()
7749 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8156b_hw_phy_cfg()
7751 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8156b_hw_phy_cfg()
7753 sram_write(tp, 0x816c, 0xc4a0); in r8156b_hw_phy_cfg()
7754 sram_write(tp, 0x8170, 0xc4a0); in r8156b_hw_phy_cfg()
7755 sram_write(tp, 0x8174, 0x04a0); in r8156b_hw_phy_cfg()
7756 sram_write(tp, 0x8178, 0x04a0); in r8156b_hw_phy_cfg()
7757 sram_write(tp, 0x817c, 0x0719); in r8156b_hw_phy_cfg()
7758 sram_write(tp, 0x8ff4, 0x0400); in r8156b_hw_phy_cfg()
7759 sram_write(tp, 0x8ff1, 0x0404); in r8156b_hw_phy_cfg()
7761 ocp_reg_write(tp, 0xbf4a, 0x001b); in r8156b_hw_phy_cfg()
7762 ocp_reg_write(tp, 0xb87c, 0x8033); in r8156b_hw_phy_cfg()
7763 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7764 ocp_reg_write(tp, 0xb87c, 0x8037); in r8156b_hw_phy_cfg()
7765 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7766 ocp_reg_write(tp, 0xb87c, 0x803b); in r8156b_hw_phy_cfg()
7767 ocp_reg_write(tp, 0xb87e, 0xfc32); in r8156b_hw_phy_cfg()
7768 ocp_reg_write(tp, 0xb87c, 0x803f); in r8156b_hw_phy_cfg()
7769 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7770 ocp_reg_write(tp, 0xb87c, 0x8043); in r8156b_hw_phy_cfg()
7771 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7772 ocp_reg_write(tp, 0xb87c, 0x8047); in r8156b_hw_phy_cfg()
7773 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7775 ocp_reg_write(tp, 0xb87c, 0x8145); in r8156b_hw_phy_cfg()
7776 ocp_reg_write(tp, 0xb87e, 0x370e); in r8156b_hw_phy_cfg()
7777 ocp_reg_write(tp, 0xb87c, 0x8157); in r8156b_hw_phy_cfg()
7778 ocp_reg_write(tp, 0xb87e, 0x770e); in r8156b_hw_phy_cfg()
7779 ocp_reg_write(tp, 0xb87c, 0x8169); in r8156b_hw_phy_cfg()
7780 ocp_reg_write(tp, 0xb87e, 0x0d0a); in r8156b_hw_phy_cfg()
7781 ocp_reg_write(tp, 0xb87c, 0x817b); in r8156b_hw_phy_cfg()
7782 ocp_reg_write(tp, 0xb87e, 0x1d0a); in r8156b_hw_phy_cfg()
7784 data = sram_read(tp, 0x8217); in r8156b_hw_phy_cfg()
7787 sram_write(tp, 0x8217, data); in r8156b_hw_phy_cfg()
7788 data = sram_read(tp, 0x821a); in r8156b_hw_phy_cfg()
7791 sram_write(tp, 0x821a, data); in r8156b_hw_phy_cfg()
7792 sram_write(tp, 0x80da, 0x0403); in r8156b_hw_phy_cfg()
7793 data = sram_read(tp, 0x80dc); in r8156b_hw_phy_cfg()
7796 sram_write(tp, 0x80dc, data); in r8156b_hw_phy_cfg()
7797 sram_write(tp, 0x80b3, 0x0384); in r8156b_hw_phy_cfg()
7798 sram_write(tp, 0x80b7, 0x2007); in r8156b_hw_phy_cfg()
7799 data = sram_read(tp, 0x80ba); in r8156b_hw_phy_cfg()
7802 sram_write(tp, 0x80ba, data); in r8156b_hw_phy_cfg()
7803 sram_write(tp, 0x80b5, 0xf009); in r8156b_hw_phy_cfg()
7804 data = sram_read(tp, 0x80bd); in r8156b_hw_phy_cfg()
7807 sram_write(tp, 0x80bd, data); in r8156b_hw_phy_cfg()
7808 sram_write(tp, 0x80c7, 0xf083); in r8156b_hw_phy_cfg()
7809 sram_write(tp, 0x80dd, 0x03f0); in r8156b_hw_phy_cfg()
7810 data = sram_read(tp, 0x80df); in r8156b_hw_phy_cfg()
7813 sram_write(tp, 0x80df, data); in r8156b_hw_phy_cfg()
7814 sram_write(tp, 0x80cb, 0x2007); in r8156b_hw_phy_cfg()
7815 data = sram_read(tp, 0x80ce); in r8156b_hw_phy_cfg()
7818 sram_write(tp, 0x80ce, data); in r8156b_hw_phy_cfg()
7819 sram_write(tp, 0x80c9, 0x8009); in r8156b_hw_phy_cfg()
7820 data = sram_read(tp, 0x80d1); in r8156b_hw_phy_cfg()
7823 sram_write(tp, 0x80d1, data); in r8156b_hw_phy_cfg()
7824 sram_write(tp, 0x80a3, 0x200a); in r8156b_hw_phy_cfg()
7825 sram_write(tp, 0x80a5, 0xf0ad); in r8156b_hw_phy_cfg()
7826 sram_write(tp, 0x809f, 0x6073); in r8156b_hw_phy_cfg()
7827 sram_write(tp, 0x80a1, 0x000b); in r8156b_hw_phy_cfg()
7828 data = sram_read(tp, 0x80a9); in r8156b_hw_phy_cfg()
7831 sram_write(tp, 0x80a9, data); in r8156b_hw_phy_cfg()
7833 if (rtl_phy_patch_request(tp, true, true)) in r8156b_hw_phy_cfg()
7836 data = ocp_reg_read(tp, 0xb896); in r8156b_hw_phy_cfg()
7838 ocp_reg_write(tp, 0xb896, data); in r8156b_hw_phy_cfg()
7839 data = ocp_reg_read(tp, 0xb892); in r8156b_hw_phy_cfg()
7841 ocp_reg_write(tp, 0xb892, data); in r8156b_hw_phy_cfg()
7842 ocp_reg_write(tp, 0xb88e, 0xc23e); in r8156b_hw_phy_cfg()
7843 ocp_reg_write(tp, 0xb890, 0x0000); in r8156b_hw_phy_cfg()
7844 ocp_reg_write(tp, 0xb88e, 0xc240); in r8156b_hw_phy_cfg()
7845 ocp_reg_write(tp, 0xb890, 0x0103); in r8156b_hw_phy_cfg()
7846 ocp_reg_write(tp, 0xb88e, 0xc242); in r8156b_hw_phy_cfg()
7847 ocp_reg_write(tp, 0xb890, 0x0507); in r8156b_hw_phy_cfg()
7848 ocp_reg_write(tp, 0xb88e, 0xc244); in r8156b_hw_phy_cfg()
7849 ocp_reg_write(tp, 0xb890, 0x090b); in r8156b_hw_phy_cfg()
7850 ocp_reg_write(tp, 0xb88e, 0xc246); in r8156b_hw_phy_cfg()
7851 ocp_reg_write(tp, 0xb890, 0x0c0e); in r8156b_hw_phy_cfg()
7852 ocp_reg_write(tp, 0xb88e, 0xc248); in r8156b_hw_phy_cfg()
7853 ocp_reg_write(tp, 0xb890, 0x1012); in r8156b_hw_phy_cfg()
7854 ocp_reg_write(tp, 0xb88e, 0xc24a); in r8156b_hw_phy_cfg()
7855 ocp_reg_write(tp, 0xb890, 0x1416); in r8156b_hw_phy_cfg()
7856 data = ocp_reg_read(tp, 0xb896); in r8156b_hw_phy_cfg()
7858 ocp_reg_write(tp, 0xb896, data); in r8156b_hw_phy_cfg()
7860 rtl_phy_patch_request(tp, false, true); in r8156b_hw_phy_cfg()
7862 data = ocp_reg_read(tp, 0xa86a); in r8156b_hw_phy_cfg()
7864 ocp_reg_write(tp, 0xa86a, data); in r8156b_hw_phy_cfg()
7865 data = ocp_reg_read(tp, 0xa6f0); in r8156b_hw_phy_cfg()
7867 ocp_reg_write(tp, 0xa6f0, data); in r8156b_hw_phy_cfg()
7869 ocp_reg_write(tp, 0xbfa0, 0xd70d); in r8156b_hw_phy_cfg()
7870 ocp_reg_write(tp, 0xbfa2, 0x4100); in r8156b_hw_phy_cfg()
7871 ocp_reg_write(tp, 0xbfa4, 0xe868); in r8156b_hw_phy_cfg()
7872 ocp_reg_write(tp, 0xbfa6, 0xdc59); in r8156b_hw_phy_cfg()
7873 ocp_reg_write(tp, 0xb54c, 0x3c18); in r8156b_hw_phy_cfg()
7874 data = ocp_reg_read(tp, 0xbfa4); in r8156b_hw_phy_cfg()
7876 ocp_reg_write(tp, 0xbfa4, data); in r8156b_hw_phy_cfg()
7877 data = sram_read(tp, 0x817d); in r8156b_hw_phy_cfg()
7879 sram_write(tp, 0x817d, data); in r8156b_hw_phy_cfg()
7883 data = ocp_reg_read(tp, 0xac46); in r8156b_hw_phy_cfg()
7886 ocp_reg_write(tp, 0xac46, data); in r8156b_hw_phy_cfg()
7887 data = ocp_reg_read(tp, 0xad30); in r8156b_hw_phy_cfg()
7890 ocp_reg_write(tp, 0xad30, data); in r8156b_hw_phy_cfg()
7894 ocp_reg_write(tp, 0xb87c, 0x80f5); in r8156b_hw_phy_cfg()
7895 ocp_reg_write(tp, 0xb87e, 0x760e); in r8156b_hw_phy_cfg()
7896 ocp_reg_write(tp, 0xb87c, 0x8107); in r8156b_hw_phy_cfg()
7897 ocp_reg_write(tp, 0xb87e, 0x360e); in r8156b_hw_phy_cfg()
7898 ocp_reg_write(tp, 0xb87c, 0x8551); in r8156b_hw_phy_cfg()
7899 data = ocp_reg_read(tp, 0xb87e); in r8156b_hw_phy_cfg()
7902 ocp_reg_write(tp, 0xb87e, data); in r8156b_hw_phy_cfg()
7905 data = ocp_reg_read(tp, 0xbf00); in r8156b_hw_phy_cfg()
7908 ocp_reg_write(tp, 0xbf00, data); in r8156b_hw_phy_cfg()
7909 data = ocp_reg_read(tp, 0xbf46); in r8156b_hw_phy_cfg()
7912 ocp_reg_write(tp, 0xbf46, data); in r8156b_hw_phy_cfg()
7915 sram_write(tp, 0x8044, 0x2417); in r8156b_hw_phy_cfg()
7916 sram_write(tp, 0x804a, 0x2417); in r8156b_hw_phy_cfg()
7917 sram_write(tp, 0x8050, 0x2417); in r8156b_hw_phy_cfg()
7918 sram_write(tp, 0x8056, 0x2417); in r8156b_hw_phy_cfg()
7919 sram_write(tp, 0x805c, 0x2417); in r8156b_hw_phy_cfg()
7920 sram_write(tp, 0x8062, 0x2417); in r8156b_hw_phy_cfg()
7921 sram_write(tp, 0x8068, 0x2417); in r8156b_hw_phy_cfg()
7922 sram_write(tp, 0x806e, 0x2417); in r8156b_hw_phy_cfg()
7923 sram_write(tp, 0x8074, 0x2417); in r8156b_hw_phy_cfg()
7924 sram_write(tp, 0x807a, 0x2417); in r8156b_hw_phy_cfg()
7927 data = ocp_reg_read(tp, 0xbf84); in r8156b_hw_phy_cfg()
7930 ocp_reg_write(tp, 0xbf84, data); in r8156b_hw_phy_cfg()
7936 if (rtl_phy_patch_request(tp, true, true)) in r8156b_hw_phy_cfg()
7939 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in r8156b_hw_phy_cfg()
7941 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in r8156b_hw_phy_cfg()
7943 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8156b_hw_phy_cfg()
7946 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8156b_hw_phy_cfg()
7947 tp->ups_info._10m_ckdiv = true; in r8156b_hw_phy_cfg()
7948 tp->ups_info.eee_plloff_100 = false; in r8156b_hw_phy_cfg()
7949 tp->ups_info.eee_plloff_giga = false; in r8156b_hw_phy_cfg()
7951 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8156b_hw_phy_cfg()
7953 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8156b_hw_phy_cfg()
7954 tp->ups_info.eee_ckdiv = false; in r8156b_hw_phy_cfg()
7956 rtl_phy_patch_request(tp, false, true); in r8156b_hw_phy_cfg()
7958 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156b_hw_phy_cfg()
7960 data = ocp_reg_read(tp, 0xa428); in r8156b_hw_phy_cfg()
7962 ocp_reg_write(tp, 0xa428, data); in r8156b_hw_phy_cfg()
7963 data = ocp_reg_read(tp, 0xa5ea); in r8156b_hw_phy_cfg()
7965 ocp_reg_write(tp, 0xa5ea, data); in r8156b_hw_phy_cfg()
7966 tp->ups_info.lite_mode = 0; in r8156b_hw_phy_cfg()
7968 if (tp->eee_en) in r8156b_hw_phy_cfg()
7969 rtl_eee_enable(tp, true); in r8156b_hw_phy_cfg()
7971 r8153_aldps_en(tp, true); in r8156b_hw_phy_cfg()
7972 r8152b_enable_fc(tp); in r8156b_hw_phy_cfg()
7973 r8153_u2p3en(tp, true); in r8156b_hw_phy_cfg()
7975 set_bit(PHY_RESET, &tp->flags); in r8156b_hw_phy_cfg()
7978 static void r8156_init(struct r8152 *tp) in r8156_init() argument
7984 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156_init()
7987 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_ECM_OP); in r8156_init()
7989 ocp_write_byte(tp, MCU_TYPE_USB, USB_ECM_OP, ocp_data); in r8156_init()
7991 ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0); in r8156_init()
7993 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_ECM_OPTION); in r8156_init()
7995 ocp_write_word(tp, MCU_TYPE_USB, USB_ECM_OPTION, ocp_data); in r8156_init()
7997 r8153b_u1u2en(tp, false); in r8156_init()
8000 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8156_init()
8005 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156_init()
8009 data = r8153_phy_status(tp, 0); in r8156_init()
8011 data = ocp_reg_read(tp, 0xa468); in r8156_init()
8013 ocp_reg_write(tp, 0xa468, data); in r8156_init()
8016 data = r8152_mdio_read(tp, MII_BMCR); in r8156_init()
8019 r8152_mdio_write(tp, MII_BMCR, data); in r8156_init()
8022 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156_init()
8025 r8153_u2p3en(tp, false); in r8156_init()
8028 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8156_init()
8031 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8156_init()
8033 r8153b_power_cut_en(tp, false); in r8156_init()
8034 r8156_ups_en(tp, false); in r8156_init()
8035 r8153_queue_wake(tp, false); in r8156_init()
8036 rtl_runtime_suspend_enable(tp, false); in r8156_init()
8038 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156_init()
8039 r8153b_u1u2en(tp, true); in r8156_init()
8041 usb_enable_lpm(tp->udev); in r8156_init()
8043 r8156_mac_clk_spd(tp, true); in r8156_init()
8045 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8156_init()
8047 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8156_init()
8049 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8156_init()
8050 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8156_init()
8055 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8156_init()
8057 set_bit(GREEN_ETHERNET, &tp->flags); in r8156_init()
8060 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8156_init()
8062 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8156_init()
8064 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_CONFIG); in r8156_init()
8066 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data); in r8156_init()
8068 r8156_mdio_force_mode(tp); in r8156_init()
8069 rtl_tally_reset(tp); in r8156_init()
8071 tp->coalesce = 15000; /* 15 us */ in r8156_init()
8074 static void r8156b_init(struct r8152 *tp) in r8156b_init() argument
8080 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156b_init()
8083 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_ECM_OP); in r8156b_init()
8085 ocp_write_byte(tp, MCU_TYPE_USB, USB_ECM_OP, ocp_data); in r8156b_init()
8087 ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0); in r8156b_init()
8089 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_ECM_OPTION); in r8156b_init()
8091 ocp_write_word(tp, MCU_TYPE_USB, USB_ECM_OPTION, ocp_data); in r8156b_init()
8093 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8156b_init()
8095 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8156b_init()
8097 r8153b_u1u2en(tp, false); in r8156b_init()
8099 switch (tp->version) { in r8156b_init()
8102 r8156b_wait_loading_flash(tp); in r8156b_init()
8109 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8156b_init()
8114 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in r8156b_init()
8118 data = r8153_phy_status(tp, 0); in r8156b_init()
8120 data = ocp_reg_read(tp, 0xa468); in r8156b_init()
8122 ocp_reg_write(tp, 0xa468, data); in r8156b_init()
8124 data = ocp_reg_read(tp, 0xa466); in r8156b_init()
8126 ocp_reg_write(tp, 0xa466, data); in r8156b_init()
8129 data = r8152_mdio_read(tp, MII_BMCR); in r8156b_init()
8132 r8152_mdio_write(tp, MII_BMCR, data); in r8156b_init()
8135 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156b_init()
8137 r8153_u2p3en(tp, false); in r8156b_init()
8140 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8156b_init()
8143 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8156b_init()
8145 r8153b_power_cut_en(tp, false); in r8156b_init()
8146 r8156_ups_en(tp, false); in r8156b_init()
8147 r8153_queue_wake(tp, false); in r8156b_init()
8148 rtl_runtime_suspend_enable(tp, false); in r8156b_init()
8150 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156b_init()
8151 r8153b_u1u2en(tp, true); in r8156b_init()
8153 usb_enable_lpm(tp->udev); in r8156b_init()
8155 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RCR); in r8156b_init()
8157 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8156b_init()
8159 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in r8156b_init()
8161 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in r8156b_init()
8164 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER, in r8156b_init()
8167 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8156b_init()
8168 if (!(ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL) & DACK_DET_EN)) in r8156b_init()
8171 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8156b_init()
8173 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8156b_init()
8175 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8156b_init()
8177 r8156_mac_clk_spd(tp, true); in r8156b_init()
8179 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8156b_init()
8181 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8156b_init()
8183 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8156b_init()
8184 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8156b_init()
8189 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8156b_init()
8191 set_bit(GREEN_ETHERNET, &tp->flags); in r8156b_init()
8194 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8156b_init()
8196 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8156b_init()
8198 r8156_mdio_force_mode(tp); in r8156b_init()
8199 rtl_tally_reset(tp); in r8156b_init()
8201 tp->coalesce = 15000; /* 15 us */ in r8156b_init()
8274 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_pre_reset() local
8277 if (!tp) in rtl8152_pre_reset()
8280 netdev = tp->netdev; in rtl8152_pre_reset()
8285 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
8286 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
8287 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
8288 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
8289 napi_disable(&tp->napi); in rtl8152_pre_reset()
8291 mutex_lock(&tp->control); in rtl8152_pre_reset()
8292 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
8293 mutex_unlock(&tp->control); in rtl8152_pre_reset()
8301 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_post_reset() local
8305 if (!tp) in rtl8152_post_reset()
8309 if (determine_ethernet_addr(tp, &sa) >= 0) { in rtl8152_post_reset()
8311 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
8315 netdev = tp->netdev; in rtl8152_post_reset()
8319 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
8321 mutex_lock(&tp->control); in rtl8152_post_reset()
8322 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
8323 rtl_start_rx(tp); in rtl8152_post_reset()
8325 mutex_unlock(&tp->control); in rtl8152_post_reset()
8328 napi_enable(&tp->napi); in rtl8152_post_reset()
8329 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
8331 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
8333 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
8334 napi_schedule(&tp->napi); in rtl8152_post_reset()
8339 static bool delay_autosuspend(struct r8152 *tp) in delay_autosuspend() argument
8341 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
8342 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS); in delay_autosuspend()
8348 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
8354 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
8356 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
8362 static int rtl8152_runtime_resume(struct r8152 *tp) in rtl8152_runtime_resume() argument
8364 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
8367 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
8369 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8371 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
8374 if (rtl8152_get_speed(tp) & LINK_STATUS) { in rtl8152_runtime_resume()
8375 rtl_start_rx(tp); in rtl8152_runtime_resume()
8378 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
8379 netif_info(tp, link, netdev, "linking down\n"); in rtl8152_runtime_resume()
8384 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8387 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
8388 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
8390 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
8393 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8395 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8401 static int rtl8152_system_resume(struct r8152 *tp) in rtl8152_system_resume() argument
8403 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
8408 tp->rtl_ops.up(tp); in rtl8152_system_resume()
8410 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
8411 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
8417 static int rtl8152_runtime_suspend(struct r8152 *tp) in rtl8152_runtime_suspend() argument
8419 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
8422 if (!tp->rtl_ops.autosuspend_en) in rtl8152_runtime_suspend()
8425 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8428 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
8434 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8152_runtime_suspend()
8436 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8152_runtime_suspend()
8437 rxdy_gated_en(tp, true); in rtl8152_runtime_suspend()
8438 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, in rtl8152_runtime_suspend()
8441 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
8442 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
8443 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8450 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
8451 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
8453 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
8456 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
8459 rtl_stop_rx(tp); in rtl8152_runtime_suspend()
8460 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
8461 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
8465 if (delay_autosuspend(tp)) { in rtl8152_runtime_suspend()
8466 rtl8152_runtime_resume(tp); in rtl8152_runtime_suspend()
8475 static int rtl8152_system_suspend(struct r8152 *tp) in rtl8152_system_suspend() argument
8477 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
8481 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
8482 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
8484 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
8485 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
8486 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
8488 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
8489 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
8491 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
8499 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
8502 mutex_lock(&tp->control); in rtl8152_suspend()
8505 ret = rtl8152_runtime_suspend(tp); in rtl8152_suspend()
8507 ret = rtl8152_system_suspend(tp); in rtl8152_suspend()
8509 mutex_unlock(&tp->control); in rtl8152_suspend()
8516 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
8519 mutex_lock(&tp->control); in rtl8152_resume()
8521 rtl_reset_ocp_base(tp); in rtl8152_resume()
8523 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
8524 ret = rtl8152_runtime_resume(tp); in rtl8152_resume()
8526 ret = rtl8152_system_resume(tp); in rtl8152_resume()
8528 mutex_unlock(&tp->control); in rtl8152_resume()
8535 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_reset_resume() local
8537 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
8538 rtl_reset_ocp_base(tp); in rtl8152_reset_resume()
8539 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
8540 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
8541 set_ethernet_addr(tp, true); in rtl8152_reset_resume()
8547 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
8549 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
8552 if (!rtl_can_wakeup(tp)) { in rtl8152_get_wol()
8556 mutex_lock(&tp->control); in rtl8152_get_wol()
8558 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
8559 mutex_unlock(&tp->control); in rtl8152_get_wol()
8562 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
8567 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
8570 if (!rtl_can_wakeup(tp)) in rtl8152_set_wol()
8576 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
8580 mutex_lock(&tp->control); in rtl8152_set_wol()
8582 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
8583 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
8585 mutex_unlock(&tp->control); in rtl8152_set_wol()
8587 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
8595 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
8597 return tp->msg_enable; in rtl8152_get_msglevel()
8602 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
8604 tp->msg_enable = value; in rtl8152_set_msglevel()
8610 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
8614 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
8615 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
8616 strscpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
8624 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_link_ksettings() local
8627 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
8630 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
8634 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
8636 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
8639 cmd->link_modes.supported, tp->support_2500full); in rtl8152_get_link_ksettings()
8641 if (tp->support_2500full) { in rtl8152_get_link_ksettings()
8644 ocp_reg_read(tp, OCP_10GBT_CTRL) & MDIO_AN_10GBT_CTRL_ADV2_5G); in rtl8152_get_link_ksettings()
8648 ocp_reg_read(tp, OCP_10GBT_STAT) & MDIO_AN_10GBT_STAT_LP2_5G); in rtl8152_get_link_ksettings()
8650 if (is_speed_2500(rtl8152_get_speed(tp))) in rtl8152_get_link_ksettings()
8654 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
8656 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
8665 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_link_ksettings() local
8669 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
8701 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
8703 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
8706 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
8707 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
8708 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
8709 tp->advertising = advertising; in rtl8152_set_link_ksettings()
8712 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
8714 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
8749 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
8752 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
8755 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
8757 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
8783 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
8788 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
8791 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
8794 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
8797 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
8800 eee->advertised = tp->eee_adv; in r8152_get_eee()
8806 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
8810 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
8811 tp->eee_adv = val; in r8152_set_eee()
8813 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
8818 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
8823 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
8826 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
8829 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
8832 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
8835 eee->advertised = tp->eee_adv; in r8153_get_eee()
8844 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
8847 if (!tp->rtl_ops.eee_get) { in rtl_ethtool_get_eee()
8852 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
8856 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
8858 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
8860 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
8862 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
8871 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
8874 if (!tp->rtl_ops.eee_set) { in rtl_ethtool_set_eee()
8879 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
8883 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
8885 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
8887 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
8889 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
8891 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
8899 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
8902 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
8906 mutex_lock(&tp->control); in rtl8152_nway_reset()
8908 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
8910 mutex_unlock(&tp->control); in rtl8152_nway_reset()
8912 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
8923 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
8925 switch (tp->version) { in rtl8152_get_coalesce()
8934 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
8944 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
8947 switch (tp->version) { in rtl8152_set_coalesce()
8959 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
8963 mutex_lock(&tp->control); in rtl8152_set_coalesce()
8965 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
8966 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
8970 napi_disable(&tp->napi); in rtl8152_set_coalesce()
8971 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
8972 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
8973 rtl_start_rx(tp); in rtl8152_set_coalesce()
8974 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
8976 napi_enable(&tp->napi); in rtl8152_set_coalesce()
8981 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
8983 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
8991 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_tunable() local
8995 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
9008 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_tunable() local
9015 netif_err(tp, rx_err, netdev, in rtl8152_set_tunable()
9020 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
9022 mutex_lock(&tp->control); in rtl8152_set_tunable()
9023 napi_disable(&tp->napi); in rtl8152_set_tunable()
9024 tp->rx_copybreak = val; in rtl8152_set_tunable()
9025 napi_enable(&tp->napi); in rtl8152_set_tunable()
9026 mutex_unlock(&tp->control); in rtl8152_set_tunable()
9028 tp->rx_copybreak = val; in rtl8152_set_tunable()
9044 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_ringparam() local
9047 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
9055 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_ringparam() local
9060 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
9062 mutex_lock(&tp->control); in rtl8152_set_ringparam()
9063 napi_disable(&tp->napi); in rtl8152_set_ringparam()
9064 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9065 napi_enable(&tp->napi); in rtl8152_set_ringparam()
9066 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
9068 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9077 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_pauseparam() local
9081 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_pauseparam()
9084 mutex_lock(&tp->control); in rtl8152_get_pauseparam()
9086 bmcr = r8152_mdio_read(tp, MII_BMCR); in rtl8152_get_pauseparam()
9087 lcladv = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_get_pauseparam()
9088 rmtadv = r8152_mdio_read(tp, MII_LPA); in rtl8152_get_pauseparam()
9090 mutex_unlock(&tp->control); in rtl8152_get_pauseparam()
9092 usb_autopm_put_interface(tp->intf); in rtl8152_get_pauseparam()
9114 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_pauseparam() local
9119 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_pauseparam()
9123 mutex_lock(&tp->control); in rtl8152_set_pauseparam()
9125 if (pause->autoneg && !(r8152_mdio_read(tp, MII_BMCR) & BMCR_ANENABLE)) { in rtl8152_set_pauseparam()
9136 old = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_pauseparam()
9139 r8152_mdio_write(tp, MII_ADVERTISE, new1); in rtl8152_set_pauseparam()
9142 mutex_unlock(&tp->control); in rtl8152_set_pauseparam()
9143 usb_autopm_put_interface(tp->intf); in rtl8152_set_pauseparam()
9176 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
9180 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_ioctl()
9183 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
9193 mutex_lock(&tp->control); in rtl8152_ioctl()
9194 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
9195 mutex_unlock(&tp->control); in rtl8152_ioctl()
9203 mutex_lock(&tp->control); in rtl8152_ioctl()
9204 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
9205 mutex_unlock(&tp->control); in rtl8152_ioctl()
9212 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
9220 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
9223 switch (tp->version) { in rtl8152_change_mtu()
9233 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
9237 mutex_lock(&tp->control); in rtl8152_change_mtu()
9242 if (tp->rtl_ops.change_mtu) in rtl8152_change_mtu()
9243 tp->rtl_ops.change_mtu(tp); in rtl8152_change_mtu()
9247 napi_disable(&tp->napi); in rtl8152_change_mtu()
9248 tasklet_disable(&tp->tx_tl); in rtl8152_change_mtu()
9249 tp->rtl_ops.disable(tp); in rtl8152_change_mtu()
9250 tp->rtl_ops.enable(tp); in rtl8152_change_mtu()
9251 rtl_start_rx(tp); in rtl8152_change_mtu()
9252 tasklet_enable(&tp->tx_tl); in rtl8152_change_mtu()
9253 napi_enable(&tp->napi); in rtl8152_change_mtu()
9259 mutex_unlock(&tp->control); in rtl8152_change_mtu()
9261 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
9280 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
9282 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8152_unload()
9285 if (tp->version != RTL_VER_01) in rtl8152_unload()
9286 r8152_power_cut_en(tp, true); in rtl8152_unload()
9289 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
9291 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153_unload()
9294 r8153_power_cut_en(tp, false); in rtl8153_unload()
9297 static void rtl8153b_unload(struct r8152 *tp) in rtl8153b_unload() argument
9299 if (test_bit(RTL8152_UNPLUG, &tp->flags)) in rtl8153b_unload()
9302 r8153b_power_cut_en(tp, false); in rtl8153b_unload()
9305 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
9307 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
9310 switch (tp->version) { in rtl_ops_init()
9325 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9326 tp->eee_en = true; in rtl_ops_init()
9327 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
9346 if (tp->udev->speed < USB_SPEED_SUPER) in rtl_ops_init()
9347 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9349 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9350 tp->eee_en = true; in rtl_ops_init()
9351 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9368 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9369 tp->eee_en = true; in rtl_ops_init()
9370 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9374 tp->eee_en = true; in rtl_ops_init()
9375 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9390 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9391 tp->support_2500full = 1; in rtl_ops_init()
9396 tp->support_2500full = 1; in rtl_ops_init()
9399 tp->eee_en = true; in rtl_ops_init()
9400 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9413 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9429 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9430 tp->eee_en = true; in rtl_ops_init()
9431 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9436 dev_err(&tp->intf->dev, "Unknown Device\n"); in rtl_ops_init()
9459 static int rtl_fw_init(struct r8152 *tp) in rtl_fw_init() argument
9461 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
9463 switch (tp->version) { in rtl_fw_init()
9614 struct r8152 *tp; in rtl8152_probe() local
9632 tp = netdev_priv(netdev); in rtl8152_probe()
9633 tp->msg_enable = 0x7FFF; in rtl8152_probe()
9635 tp->udev = udev; in rtl8152_probe()
9636 tp->netdev = netdev; in rtl8152_probe()
9637 tp->intf = intf; in rtl8152_probe()
9638 tp->version = version; in rtl8152_probe()
9640 tp->pipe_ctrl_in = usb_rcvctrlpipe(udev, 0); in rtl8152_probe()
9641 tp->pipe_ctrl_out = usb_sndctrlpipe(udev, 0); in rtl8152_probe()
9642 tp->pipe_in = usb_rcvbulkpipe(udev, 1); in rtl8152_probe()
9643 tp->pipe_out = usb_sndbulkpipe(udev, 2); in rtl8152_probe()
9644 tp->pipe_intr = usb_rcvintpipe(udev, 3); in rtl8152_probe()
9650 tp->mii.supports_gmii = 0; in rtl8152_probe()
9653 tp->mii.supports_gmii = 1; in rtl8152_probe()
9657 ret = rtl_ops_init(tp); in rtl8152_probe()
9661 rtl_fw_init(tp); in rtl8152_probe()
9663 mutex_init(&tp->control); in rtl8152_probe()
9664 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe()
9665 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe()
9666 tasklet_setup(&tp->tx_tl, bottom_half); in rtl8152_probe()
9667 tasklet_disable(&tp->tx_tl); in rtl8152_probe()
9684 if (tp->version == RTL_VER_01) { in rtl8152_probe()
9689 tp->lenovo_macpassthru = rtl8152_supports_lenovo_macpassthru(udev); in rtl8152_probe()
9695 tp->dell_tb_rx_agg_bug = 1; in rtl8152_probe()
9703 switch (tp->version) { in rtl8152_probe()
9730 tp->mii.dev = netdev; in rtl8152_probe()
9731 tp->mii.mdio_read = read_mii_word; in rtl8152_probe()
9732 tp->mii.mdio_write = write_mii_word; in rtl8152_probe()
9733 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe()
9734 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe()
9735 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe()
9737 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe()
9738 tp->speed = SPEED_100; in rtl8152_probe()
9739 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe()
9741 if (tp->mii.supports_gmii) { in rtl8152_probe()
9742 if (tp->support_2500full && in rtl8152_probe()
9743 tp->udev->speed >= USB_SPEED_SUPER) { in rtl8152_probe()
9744 tp->speed = SPEED_2500; in rtl8152_probe()
9745 tp->advertising |= RTL_ADVERTISED_2500_FULL; in rtl8152_probe()
9747 tp->speed = SPEED_1000; in rtl8152_probe()
9749 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe()
9751 tp->duplex = DUPLEX_FULL; in rtl8152_probe()
9753 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe()
9754 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe()
9758 if (!rtl_can_wakeup(tp)) in rtl8152_probe()
9759 __rtl_set_wol(tp, 0); in rtl8152_probe()
9761 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe()
9763 tp->rtl_ops.init(tp); in rtl8152_probe()
9766 tp->rtl_fw.retry = true; in rtl8152_probe()
9768 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe()
9769 set_ethernet_addr(tp, false); in rtl8152_probe()
9771 usb_set_intfdata(intf, tp); in rtl8152_probe()
9773 netif_napi_add_weight(netdev, &tp->napi, r8152_poll, in rtl8152_probe()
9774 tp->support_2500full ? 256 : 64); in rtl8152_probe()
9782 if (tp->saved_wolopts) in rtl8152_probe()
9787 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe()
9792 tasklet_kill(&tp->tx_tl); in rtl8152_probe()
9801 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
9804 if (tp) { in rtl8152_disconnect()
9805 rtl_set_unplug(tp); in rtl8152_disconnect()
9807 unregister_netdev(tp->netdev); in rtl8152_disconnect()
9808 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
9809 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
9810 if (tp->rtl_ops.unload) in rtl8152_disconnect()
9811 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
9812 rtl8152_release_firmware(tp); in rtl8152_disconnect()
9813 free_netdev(tp->netdev); in rtl8152_disconnect()