Lines Matching refs:tp

888 		void (*init)(struct r8152 *tp);
889 int (*enable)(struct r8152 *tp);
890 void (*disable)(struct r8152 *tp);
891 void (*up)(struct r8152 *tp);
892 void (*down)(struct r8152 *tp);
893 void (*unload)(struct r8152 *tp);
894 int (*eee_get)(struct r8152 *tp, struct ethtool_eee *eee);
895 int (*eee_set)(struct r8152 *tp, struct ethtool_eee *eee);
896 bool (*in_nway)(struct r8152 *tp);
897 void (*hw_phy_cfg)(struct r8152 *tp);
898 void (*autosuspend_en)(struct r8152 *tp, bool enable);
899 void (*change_mtu)(struct r8152 *tp);
927 int (*pre_fw)(struct r8152 *tp);
928 int (*post_fw)(struct r8152 *tp);
1214 static void rtl_set_inaccessible(struct r8152 *tp) in rtl_set_inaccessible() argument
1216 set_bit(RTL8152_INACCESSIBLE, &tp->flags); in rtl_set_inaccessible()
1220 static void rtl_set_accessible(struct r8152 *tp) in rtl_set_accessible() argument
1222 clear_bit(RTL8152_INACCESSIBLE, &tp->flags); in rtl_set_accessible()
1227 int r8152_control_msg(struct r8152 *tp, unsigned int pipe, __u8 request, in r8152_control_msg() argument
1231 struct usb_device *udev = tp->udev; in r8152_control_msg()
1234 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8152_control_msg()
1249 tp->reg_access_reset_count = 0; in r8152_control_msg()
1263 rtl_set_inaccessible(tp); in r8152_control_msg()
1270 if (!test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) { in r8152_control_msg()
1271 set_bit(PROBE_SHOULD_RETRY, &tp->flags); in r8152_control_msg()
1283 if (test_bit(IN_PRE_RESET, &tp->flags)) in r8152_control_msg()
1286 if (tp->reg_access_reset_count < REGISTER_ACCESS_MAX_RESETS) { in r8152_control_msg()
1287 usb_queue_reset_device(tp->intf); in r8152_control_msg()
1288 tp->reg_access_reset_count++; in r8152_control_msg()
1289 } else if (tp->reg_access_reset_count == REGISTER_ACCESS_MAX_RESETS) { in r8152_control_msg()
1299 int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in get_registers() argument
1308 ret = r8152_control_msg(tp, tp->pipe_ctrl_in, in get_registers()
1323 int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) in set_registers() argument
1332 ret = r8152_control_msg(tp, tp->pipe_ctrl_out, in set_registers()
1341 static void rtl_set_unplug(struct r8152 *tp) in rtl_set_unplug() argument
1343 if (tp->udev->state == USB_STATE_NOTATTACHED) in rtl_set_unplug()
1344 rtl_set_inaccessible(tp); in rtl_set_unplug()
1347 static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, in generic_ocp_read() argument
1353 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in generic_ocp_read()
1365 ret = get_registers(tp, index, type, limit, data); in generic_ocp_read()
1373 ret = get_registers(tp, index, type, size, data); in generic_ocp_read()
1385 rtl_set_unplug(tp); in generic_ocp_read()
1390 static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, in generic_ocp_write() argument
1397 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in generic_ocp_write()
1414 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1432 ret = set_registers(tp, index, in generic_ocp_write()
1442 ret = set_registers(tp, index, in generic_ocp_write()
1457 ret = set_registers(tp, index, type | byen, 4, data); in generic_ocp_write()
1462 rtl_set_unplug(tp); in generic_ocp_write()
1468 int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data) in pla_ocp_read() argument
1470 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA); in pla_ocp_read()
1474 int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in pla_ocp_write() argument
1476 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA); in pla_ocp_write()
1480 int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data) in usb_ocp_write() argument
1482 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB); in usb_ocp_write()
1485 static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index) in ocp_read_dword() argument
1489 generic_ocp_read(tp, index, sizeof(data), &data, type); in ocp_read_dword()
1494 static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_dword() argument
1498 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type); in ocp_write_dword()
1501 static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index) in ocp_read_word() argument
1511 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen); in ocp_read_word()
1520 static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_word() argument
1538 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_word()
1541 static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index) in ocp_read_byte() argument
1549 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type); in ocp_read_byte()
1558 static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data) in ocp_write_byte() argument
1576 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type); in ocp_write_byte()
1579 static u16 ocp_reg_read(struct r8152 *tp, u16 addr) in ocp_reg_read() argument
1584 if (ocp_base != tp->ocp_base) { in ocp_reg_read()
1585 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_read()
1586 tp->ocp_base = ocp_base; in ocp_reg_read()
1590 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index); in ocp_reg_read()
1593 static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data) in ocp_reg_write() argument
1598 if (ocp_base != tp->ocp_base) { in ocp_reg_write()
1599 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base); in ocp_reg_write()
1600 tp->ocp_base = ocp_base; in ocp_reg_write()
1604 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data); in ocp_reg_write()
1607 static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value) in r8152_mdio_write() argument
1609 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value); in r8152_mdio_write()
1612 static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr) in r8152_mdio_read() argument
1614 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2); in r8152_mdio_read()
1617 static void sram_write(struct r8152 *tp, u16 addr, u16 data) in sram_write() argument
1619 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_write()
1620 ocp_reg_write(tp, OCP_SRAM_DATA, data); in sram_write()
1623 static u16 sram_read(struct r8152 *tp, u16 addr) in sram_read() argument
1625 ocp_reg_write(tp, OCP_SRAM_ADDR, addr); in sram_read()
1626 return ocp_reg_read(tp, OCP_SRAM_DATA); in sram_read()
1631 struct r8152 *tp = netdev_priv(netdev); in read_mii_word() local
1634 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in read_mii_word()
1640 ret = r8152_mdio_read(tp, reg); in read_mii_word()
1648 struct r8152 *tp = netdev_priv(netdev); in write_mii_word() local
1650 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in write_mii_word()
1656 r8152_mdio_write(tp, reg, val); in write_mii_word()
1660 r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1663 rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
1669 struct r8152 *tp = netdev_priv(netdev); in __rtl8152_set_mac_address() local
1677 ret = usb_autopm_get_interface(tp->intf); in __rtl8152_set_mac_address()
1682 mutex_lock(&tp->control); in __rtl8152_set_mac_address()
1686 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl8152_set_mac_address()
1687 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); in __rtl8152_set_mac_address()
1688 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl8152_set_mac_address()
1690 mutex_unlock(&tp->control); in __rtl8152_set_mac_address()
1693 usb_autopm_put_interface(tp->intf); in __rtl8152_set_mac_address()
1707 static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa) in vendor_mac_passthru_addr_read() argument
1719 if (tp->lenovo_macpassthru) { in vendor_mac_passthru_addr_read()
1725 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in vendor_mac_passthru_addr_read()
1728 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE); in vendor_mac_passthru_addr_read()
1730 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1736 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in vendor_mac_passthru_addr_read()
1738 netif_dbg(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1755 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1763 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1769 netif_warn(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1776 netif_info(tp, probe, tp->netdev, in vendor_mac_passthru_addr_read()
1784 static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa) in determine_ethernet_addr() argument
1786 struct net_device *dev = tp->netdev; in determine_ethernet_addr()
1791 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data); in determine_ethernet_addr()
1793 if (tp->version == RTL_VER_01) { in determine_ethernet_addr()
1794 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data); in determine_ethernet_addr()
1799 ret = vendor_mac_passthru_addr_read(tp, sa); in determine_ethernet_addr()
1801 ret = pla_ocp_read(tp, PLA_BACKUP, 8, in determine_ethernet_addr()
1807 netif_err(tp, probe, dev, "Get ether addr fail\n"); in determine_ethernet_addr()
1809 netif_err(tp, probe, dev, "Invalid ether addr %pM\n", in determine_ethernet_addr()
1813 netif_info(tp, probe, dev, "Random ether addr %pM\n", in determine_ethernet_addr()
1821 static int set_ethernet_addr(struct r8152 *tp, bool in_resume) in set_ethernet_addr() argument
1823 struct net_device *dev = tp->netdev; in set_ethernet_addr()
1827 ret = determine_ethernet_addr(tp, &sa); in set_ethernet_addr()
1831 if (tp->version == RTL_VER_01) in set_ethernet_addr()
1844 struct r8152 *tp; in read_bulk_callback() local
1851 tp = agg->context; in read_bulk_callback()
1852 if (!tp) in read_bulk_callback()
1855 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in read_bulk_callback()
1858 if (!test_bit(WORK_ENABLE, &tp->flags)) in read_bulk_callback()
1861 netdev = tp->netdev; in read_bulk_callback()
1868 usb_mark_last_busy(tp->udev); in read_bulk_callback()
1875 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1876 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1877 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1878 napi_schedule(&tp->napi); in read_bulk_callback()
1881 rtl_set_unplug(tp); in read_bulk_callback()
1882 netif_device_detach(tp->netdev); in read_bulk_callback()
1886 spin_lock_irqsave(&tp->rx_lock, flags); in read_bulk_callback()
1887 list_add_tail(&agg->list, &tp->rx_done); in read_bulk_callback()
1888 spin_unlock_irqrestore(&tp->rx_lock, flags); in read_bulk_callback()
1889 set_bit(RX_EPROTO, &tp->flags); in read_bulk_callback()
1890 schedule_delayed_work(&tp->schedule, 1); in read_bulk_callback()
1904 r8152_submit_rx(tp, agg, GFP_ATOMIC); in read_bulk_callback()
1912 struct r8152 *tp; in write_bulk_callback() local
1920 tp = agg->context; in write_bulk_callback()
1921 if (!tp) in write_bulk_callback()
1924 netdev = tp->netdev; in write_bulk_callback()
1935 spin_lock_irqsave(&tp->tx_lock, flags); in write_bulk_callback()
1936 list_add_tail(&agg->list, &tp->tx_free); in write_bulk_callback()
1937 spin_unlock_irqrestore(&tp->tx_lock, flags); in write_bulk_callback()
1939 usb_autopm_put_interface_async(tp->intf); in write_bulk_callback()
1944 if (!test_bit(WORK_ENABLE, &tp->flags)) in write_bulk_callback()
1947 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in write_bulk_callback()
1950 if (!skb_queue_empty(&tp->tx_queue)) in write_bulk_callback()
1951 tasklet_schedule(&tp->tx_tl); in write_bulk_callback()
1956 struct r8152 *tp; in intr_callback() local
1961 tp = urb->context; in intr_callback()
1962 if (!tp) in intr_callback()
1965 if (!test_bit(WORK_ENABLE, &tp->flags)) in intr_callback()
1968 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in intr_callback()
1976 netif_device_detach(tp->netdev); in intr_callback()
1980 netif_info(tp, intr, tp->netdev, in intr_callback()
1985 netif_info(tp, intr, tp->netdev, in intr_callback()
1990 netif_info(tp, intr, tp->netdev, "intr status %d\n", status); in intr_callback()
1996 if (!netif_carrier_ok(tp->netdev)) { in intr_callback()
1997 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
1998 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
2001 if (netif_carrier_ok(tp->netdev)) { in intr_callback()
2002 netif_stop_queue(tp->netdev); in intr_callback()
2003 set_bit(RTL8152_LINK_CHG, &tp->flags); in intr_callback()
2004 schedule_delayed_work(&tp->schedule, 0); in intr_callback()
2011 rtl_set_unplug(tp); in intr_callback()
2012 netif_device_detach(tp->netdev); in intr_callback()
2014 netif_err(tp, intr, tp->netdev, in intr_callback()
2029 static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg) in free_rx_agg() argument
2037 atomic_dec(&tp->rx_count); in free_rx_agg()
2040 static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags) in alloc_rx_agg() argument
2042 struct net_device *netdev = tp->netdev; in alloc_rx_agg()
2044 unsigned int order = get_order(tp->rx_buf_sz); in alloc_rx_agg()
2062 rx_agg->context = tp; in alloc_rx_agg()
2066 spin_lock_irqsave(&tp->rx_lock, flags); in alloc_rx_agg()
2067 list_add_tail(&rx_agg->info_list, &tp->rx_info); in alloc_rx_agg()
2068 spin_unlock_irqrestore(&tp->rx_lock, flags); in alloc_rx_agg()
2070 atomic_inc(&tp->rx_count); in alloc_rx_agg()
2081 static void free_all_mem(struct r8152 *tp) in free_all_mem() argument
2087 spin_lock_irqsave(&tp->rx_lock, flags); in free_all_mem()
2089 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list) in free_all_mem()
2090 free_rx_agg(tp, agg); in free_all_mem()
2092 spin_unlock_irqrestore(&tp->rx_lock, flags); in free_all_mem()
2094 WARN_ON(atomic_read(&tp->rx_count)); in free_all_mem()
2097 usb_free_urb(tp->tx_info[i].urb); in free_all_mem()
2098 tp->tx_info[i].urb = NULL; in free_all_mem()
2100 kfree(tp->tx_info[i].buffer); in free_all_mem()
2101 tp->tx_info[i].buffer = NULL; in free_all_mem()
2102 tp->tx_info[i].head = NULL; in free_all_mem()
2105 usb_free_urb(tp->intr_urb); in free_all_mem()
2106 tp->intr_urb = NULL; in free_all_mem()
2108 kfree(tp->intr_buff); in free_all_mem()
2109 tp->intr_buff = NULL; in free_all_mem()
2112 static int alloc_all_mem(struct r8152 *tp) in alloc_all_mem() argument
2114 struct net_device *netdev = tp->netdev; in alloc_all_mem()
2115 struct usb_interface *intf = tp->intf; in alloc_all_mem()
2122 spin_lock_init(&tp->rx_lock); in alloc_all_mem()
2123 spin_lock_init(&tp->tx_lock); in alloc_all_mem()
2124 INIT_LIST_HEAD(&tp->rx_info); in alloc_all_mem()
2125 INIT_LIST_HEAD(&tp->tx_free); in alloc_all_mem()
2126 INIT_LIST_HEAD(&tp->rx_done); in alloc_all_mem()
2127 skb_queue_head_init(&tp->tx_queue); in alloc_all_mem()
2128 skb_queue_head_init(&tp->rx_queue); in alloc_all_mem()
2129 atomic_set(&tp->rx_count, 0); in alloc_all_mem()
2132 if (!alloc_rx_agg(tp, GFP_KERNEL)) in alloc_all_mem()
2158 INIT_LIST_HEAD(&tp->tx_info[i].list); in alloc_all_mem()
2159 tp->tx_info[i].context = tp; in alloc_all_mem()
2160 tp->tx_info[i].urb = urb; in alloc_all_mem()
2161 tp->tx_info[i].buffer = buf; in alloc_all_mem()
2162 tp->tx_info[i].head = tx_agg_align(buf); in alloc_all_mem()
2164 list_add_tail(&tp->tx_info[i].list, &tp->tx_free); in alloc_all_mem()
2167 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in alloc_all_mem()
2168 if (!tp->intr_urb) in alloc_all_mem()
2171 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL); in alloc_all_mem()
2172 if (!tp->intr_buff) in alloc_all_mem()
2175 tp->intr_interval = (int)ep_intr->desc.bInterval; in alloc_all_mem()
2176 usb_fill_int_urb(tp->intr_urb, tp->udev, tp->pipe_intr, in alloc_all_mem()
2177 tp->intr_buff, INTBUFSIZE, intr_callback, in alloc_all_mem()
2178 tp, tp->intr_interval); in alloc_all_mem()
2183 free_all_mem(tp); in alloc_all_mem()
2187 static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp) in r8152_get_tx_agg() argument
2192 if (list_empty(&tp->tx_free)) in r8152_get_tx_agg()
2195 spin_lock_irqsave(&tp->tx_lock, flags); in r8152_get_tx_agg()
2196 if (!list_empty(&tp->tx_free)) { in r8152_get_tx_agg()
2199 cursor = tp->tx_free.next; in r8152_get_tx_agg()
2203 spin_unlock_irqrestore(&tp->tx_lock, flags); in r8152_get_tx_agg()
2212 static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, in r8152_csum_workaround() argument
2216 netdev_features_t features = tp->netdev->features; in r8152_csum_workaround()
2243 stats = &tp->netdev->stats; in r8152_csum_workaround()
2268 static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, in r8152_tx_csum() argument
2283 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2316 netif_warn(tp, tx_err, tp->netdev, in r8152_tx_csum()
2356 static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) in r8152_tx_agg_fill() argument
2358 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in r8152_tx_agg_fill()
2391 if (r8152_tx_csum(tp, tx_desc, skb, skb->len)) { in r8152_tx_agg_fill()
2392 r8152_csum_workaround(tp, skb, &skb_head); in r8152_tx_agg_fill()
2402 struct net_device_stats *stats = &tp->netdev->stats; in r8152_tx_agg_fill()
2418 if (tp->dell_tb_rx_agg_bug) in r8152_tx_agg_fill()
2428 netif_tx_lock(tp->netdev); in r8152_tx_agg_fill()
2430 if (netif_queue_stopped(tp->netdev) && in r8152_tx_agg_fill()
2431 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) in r8152_tx_agg_fill()
2432 netif_wake_queue(tp->netdev); in r8152_tx_agg_fill()
2434 netif_tx_unlock(tp->netdev); in r8152_tx_agg_fill()
2436 ret = usb_autopm_get_interface_async(tp->intf); in r8152_tx_agg_fill()
2440 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_out, in r8152_tx_agg_fill()
2446 usb_autopm_put_interface_async(tp->intf); in r8152_tx_agg_fill()
2452 static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) in r8152_rx_csum() argument
2457 if (!(tp->netdev->features & NETIF_F_RXCSUM)) in r8152_rx_csum()
2481 static inline bool rx_count_exceed(struct r8152 *tp) in rx_count_exceed() argument
2483 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX; in rx_count_exceed()
2491 static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags) in rtl_get_free_rx() argument
2496 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_get_free_rx()
2498 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) { in rtl_get_free_rx()
2505 if (rx_count_exceed(tp)) { in rtl_get_free_rx()
2507 free_rx_agg(tp, agg); in rtl_get_free_rx()
2513 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_get_free_rx()
2515 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending) in rtl_get_free_rx()
2516 agg_free = alloc_rx_agg(tp, mflags); in rtl_get_free_rx()
2521 static int rx_bottom(struct r8152 *tp, int budget) in rx_bottom() argument
2526 struct napi_struct *napi = &tp->napi; in rx_bottom()
2528 if (!skb_queue_empty(&tp->rx_queue)) { in rx_bottom()
2530 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue); in rx_bottom()
2531 struct net_device *netdev = tp->netdev; in rx_bottom()
2546 if (list_empty(&tp->rx_done) || work_done >= budget) in rx_bottom()
2549 clear_bit(RX_EPROTO, &tp->flags); in rx_bottom()
2551 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2552 list_splice_init(&tp->rx_done, &rx_queue); in rx_bottom()
2553 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2578 agg_free = rtl_get_free_rx(tp, GFP_ATOMIC); in rx_bottom()
2585 struct net_device *netdev = tp->netdev; in rx_bottom()
2590 WARN_ON_ONCE(skb_queue_len(&tp->rx_queue) >= 1000); in rx_bottom()
2603 if (!agg_free || tp->rx_copybreak > pkt_len) in rx_bottom()
2606 rx_frag_head_sz = tp->rx_copybreak; in rx_bottom()
2614 skb->ip_summed = r8152_rx_csum(tp, rx_desc); in rx_bottom()
2635 __skb_queue_tail(&tp->rx_queue, skb); in rx_bottom()
2648 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2650 list_add(&agg_free->list, &tp->rx_used); in rx_bottom()
2652 list_add_tail(&agg->list, &tp->rx_used); in rx_bottom()
2656 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2661 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); in rx_bottom()
2670 spin_lock_irqsave(&tp->rx_lock, flags); in rx_bottom()
2671 list_splice(&rx_queue, &tp->rx_done); in rx_bottom()
2672 spin_unlock_irqrestore(&tp->rx_lock, flags); in rx_bottom()
2679 static void tx_bottom(struct r8152 *tp) in tx_bottom() argument
2684 struct net_device *netdev = tp->netdev; in tx_bottom()
2687 if (skb_queue_empty(&tp->tx_queue)) in tx_bottom()
2690 agg = r8152_get_tx_agg(tp); in tx_bottom()
2694 res = r8152_tx_agg_fill(tp, agg); in tx_bottom()
2699 rtl_set_unplug(tp); in tx_bottom()
2705 netif_warn(tp, tx_err, netdev, in tx_bottom()
2709 spin_lock_irqsave(&tp->tx_lock, flags); in tx_bottom()
2710 list_add_tail(&agg->list, &tp->tx_free); in tx_bottom()
2711 spin_unlock_irqrestore(&tp->tx_lock, flags); in tx_bottom()
2718 struct r8152 *tp = from_tasklet(tp, t, tx_tl); in bottom_half() local
2720 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in bottom_half()
2723 if (!test_bit(WORK_ENABLE, &tp->flags)) in bottom_half()
2728 if (!netif_carrier_ok(tp->netdev)) in bottom_half()
2731 clear_bit(SCHEDULE_TASKLET, &tp->flags); in bottom_half()
2733 tx_bottom(tp); in bottom_half()
2738 struct r8152 *tp = container_of(napi, struct r8152, napi); in r8152_poll() local
2744 work_done = rx_bottom(tp, budget); in r8152_poll()
2749 if (!list_empty(&tp->rx_done)) in r8152_poll()
2758 int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) in r8152_submit_rx() argument
2763 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags) || in r8152_submit_rx()
2764 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev)) in r8152_submit_rx()
2767 usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_in, in r8152_submit_rx()
2768 agg->buffer, tp->rx_buf_sz, in r8152_submit_rx()
2773 rtl_set_unplug(tp); in r8152_submit_rx()
2774 netif_device_detach(tp->netdev); in r8152_submit_rx()
2780 spin_lock_irqsave(&tp->rx_lock, flags); in r8152_submit_rx()
2781 list_add_tail(&agg->list, &tp->rx_done); in r8152_submit_rx()
2782 spin_unlock_irqrestore(&tp->rx_lock, flags); in r8152_submit_rx()
2784 netif_err(tp, rx_err, tp->netdev, in r8152_submit_rx()
2787 napi_schedule(&tp->napi); in r8152_submit_rx()
2793 static void rtl_drop_queued_tx(struct r8152 *tp) in rtl_drop_queued_tx() argument
2795 struct net_device_stats *stats = &tp->netdev->stats; in rtl_drop_queued_tx()
2796 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; in rtl_drop_queued_tx()
2815 struct r8152 *tp = netdev_priv(netdev); in rtl8152_tx_timeout() local
2817 netif_warn(tp, tx_err, netdev, "Tx timeout\n"); in rtl8152_tx_timeout()
2819 usb_queue_reset_device(tp->intf); in rtl8152_tx_timeout()
2824 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_rx_mode() local
2827 set_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_rx_mode()
2828 schedule_delayed_work(&tp->schedule, 0); in rtl8152_set_rx_mode()
2834 struct r8152 *tp = netdev_priv(netdev); in _rtl8152_set_rx_mode() local
2840 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in _rtl8152_set_rx_mode()
2846 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); in _rtl8152_set_rx_mode()
2876 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp); in _rtl8152_set_rx_mode()
2877 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in _rtl8152_set_rx_mode()
2900 struct r8152 *tp = netdev_priv(netdev); in rtl8152_start_xmit() local
2904 skb_queue_tail(&tp->tx_queue, skb); in rtl8152_start_xmit()
2906 if (!list_empty(&tp->tx_free)) { in rtl8152_start_xmit()
2907 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { in rtl8152_start_xmit()
2908 set_bit(SCHEDULE_TASKLET, &tp->flags); in rtl8152_start_xmit()
2909 schedule_delayed_work(&tp->schedule, 0); in rtl8152_start_xmit()
2911 usb_mark_last_busy(tp->udev); in rtl8152_start_xmit()
2912 tasklet_schedule(&tp->tx_tl); in rtl8152_start_xmit()
2914 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { in rtl8152_start_xmit()
2921 static void r8152b_reset_packet_filter(struct r8152 *tp) in r8152b_reset_packet_filter() argument
2925 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC); in r8152b_reset_packet_filter()
2927 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2929 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data); in r8152b_reset_packet_filter()
2932 static void rtl8152_nic_reset(struct r8152 *tp) in rtl8152_nic_reset() argument
2937 switch (tp->version) { in rtl8152_nic_reset()
2941 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl8152_nic_reset()
2943 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl8152_nic_reset()
2945 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl8152_nic_reset()
2947 ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl8152_nic_reset()
2949 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in rtl8152_nic_reset()
2951 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in rtl8152_nic_reset()
2953 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl8152_nic_reset()
2955 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl8152_nic_reset()
2957 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl8152_nic_reset()
2959 ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl8152_nic_reset()
2961 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in rtl8152_nic_reset()
2963 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in rtl8152_nic_reset()
2967 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST); in rtl8152_nic_reset()
2970 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_nic_reset()
2972 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) in rtl8152_nic_reset()
2980 static void set_tx_qlen(struct r8152 *tp) in set_tx_qlen() argument
2982 tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc)); in set_tx_qlen()
2985 static inline u16 rtl8152_get_speed(struct r8152 *tp) in rtl8152_get_speed() argument
2987 return ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHYSTATUS); in rtl8152_get_speed()
2990 static void rtl_eee_plus_en(struct r8152 *tp, bool enable) in rtl_eee_plus_en() argument
2994 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR); in rtl_eee_plus_en()
2999 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data); in rtl_eee_plus_en()
3002 static void rtl_set_eee_plus(struct r8152 *tp) in rtl_set_eee_plus() argument
3004 if (rtl8152_get_speed(tp) & _10bps) in rtl_set_eee_plus()
3005 rtl_eee_plus_en(tp, true); in rtl_set_eee_plus()
3007 rtl_eee_plus_en(tp, false); in rtl_set_eee_plus()
3010 static void rxdy_gated_en(struct r8152 *tp, bool enable) in rxdy_gated_en() argument
3014 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); in rxdy_gated_en()
3019 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); in rxdy_gated_en()
3022 static int rtl_start_rx(struct r8152 *tp) in rtl_start_rx() argument
3031 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3033 INIT_LIST_HEAD(&tp->rx_done); in rtl_start_rx()
3034 INIT_LIST_HEAD(&tp->rx_used); in rtl_start_rx()
3036 list_splice_init(&tp->rx_info, &tmp_list); in rtl_start_rx()
3038 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3045 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3046 list_add_tail(&agg->list, &tp->rx_used); in rtl_start_rx()
3047 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3049 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3050 list_add_tail(&agg->list, &tp->rx_done); in rtl_start_rx()
3051 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3053 ret = r8152_submit_rx(tp, agg, GFP_KERNEL); in rtl_start_rx()
3057 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_start_rx()
3058 WARN_ON(!list_empty(&tp->rx_info)); in rtl_start_rx()
3059 list_splice(&tmp_list, &tp->rx_info); in rtl_start_rx()
3060 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_start_rx()
3065 static int rtl_stop_rx(struct r8152 *tp) in rtl_stop_rx() argument
3079 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
3080 list_splice_init(&tp->rx_info, &tmp_list); in rtl_stop_rx()
3081 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
3088 free_rx_agg(tp, agg); in rtl_stop_rx()
3094 spin_lock_irqsave(&tp->rx_lock, flags); in rtl_stop_rx()
3095 WARN_ON(!list_empty(&tp->rx_info)); in rtl_stop_rx()
3096 list_splice(&tmp_list, &tp->rx_info); in rtl_stop_rx()
3097 spin_unlock_irqrestore(&tp->rx_lock, flags); in rtl_stop_rx()
3099 while (!skb_queue_empty(&tp->rx_queue)) in rtl_stop_rx()
3100 dev_kfree_skb(__skb_dequeue(&tp->rx_queue)); in rtl_stop_rx()
3105 static void rtl_set_ifg(struct r8152 *tp, u16 speed) in rtl_set_ifg() argument
3109 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR1); in rtl_set_ifg()
3113 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR1, ocp_data); in rtl_set_ifg()
3115 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl_set_ifg()
3117 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl_set_ifg()
3120 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR1, ocp_data); in rtl_set_ifg()
3122 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl_set_ifg()
3124 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl_set_ifg()
3128 static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp) in r8153b_rx_agg_chg_indicate() argument
3130 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN, in r8153b_rx_agg_chg_indicate()
3134 static int rtl_enable(struct r8152 *tp) in rtl_enable() argument
3138 r8152b_reset_packet_filter(tp); in rtl_enable()
3140 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); in rtl_enable()
3142 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); in rtl_enable()
3144 switch (tp->version) { in rtl_enable()
3154 r8153b_rx_agg_chg_indicate(tp); in rtl_enable()
3158 rxdy_gated_en(tp, false); in rtl_enable()
3163 static int rtl8152_enable(struct r8152 *tp) in rtl8152_enable() argument
3165 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_enable()
3168 set_tx_qlen(tp); in rtl8152_enable()
3169 rtl_set_eee_plus(tp); in rtl8152_enable()
3171 return rtl_enable(tp); in rtl8152_enable()
3174 static void r8153_set_rx_early_timeout(struct r8152 *tp) in r8153_set_rx_early_timeout() argument
3176 u32 ocp_data = tp->coalesce / 8; in r8153_set_rx_early_timeout()
3178 switch (tp->version) { in r8153_set_rx_early_timeout()
3183 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
3193 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
3195 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
3204 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT, in r8153_set_rx_early_timeout()
3206 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR, in r8153_set_rx_early_timeout()
3215 static void r8153_set_rx_early_size(struct r8152 *tp) in r8153_set_rx_early_size() argument
3217 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu); in r8153_set_rx_early_size()
3219 switch (tp->version) { in r8153_set_rx_early_size()
3224 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
3230 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
3239 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE, in r8153_set_rx_early_size()
3248 static int rtl8153_enable(struct r8152 *tp) in rtl8153_enable() argument
3252 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_enable()
3255 set_tx_qlen(tp); in rtl8153_enable()
3256 rtl_set_eee_plus(tp); in rtl8153_enable()
3257 r8153_set_rx_early_timeout(tp); in rtl8153_enable()
3258 r8153_set_rx_early_size(tp); in rtl8153_enable()
3260 rtl_set_ifg(tp, rtl8152_get_speed(tp)); in rtl8153_enable()
3262 switch (tp->version) { in rtl8153_enable()
3265 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in rtl8153_enable()
3267 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
3270 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8153_enable()
3276 return rtl_enable(tp); in rtl8153_enable()
3279 static void rtl_disable(struct r8152 *tp) in rtl_disable() argument
3284 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl_disable()
3285 rtl_drop_queued_tx(tp); in rtl_disable()
3289 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl_disable()
3291 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl_disable()
3293 rtl_drop_queued_tx(tp); in rtl_disable()
3296 usb_kill_urb(tp->tx_info[i].urb); in rtl_disable()
3298 rxdy_gated_en(tp, true); in rtl_disable()
3301 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_disable()
3303 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl_disable()
3310 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_disable()
3312 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) in rtl_disable()
3317 rtl_stop_rx(tp); in rtl_disable()
3319 rtl8152_nic_reset(tp); in rtl_disable()
3322 static void r8152_power_cut_en(struct r8152 *tp, bool enable) in r8152_power_cut_en() argument
3326 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); in r8152_power_cut_en()
3331 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); in r8152_power_cut_en()
3333 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); in r8152_power_cut_en()
3335 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); in r8152_power_cut_en()
3338 static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) in rtl_rx_vlan_en() argument
3342 switch (tp->version) { in rtl_rx_vlan_en()
3353 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in rtl_rx_vlan_en()
3358 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in rtl_rx_vlan_en()
3368 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RCR1); in rtl_rx_vlan_en()
3373 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RCR1, ocp_data); in rtl_rx_vlan_en()
3382 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_features() local
3385 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_features()
3389 mutex_lock(&tp->control); in rtl8152_set_features()
3393 rtl_rx_vlan_en(tp, true); in rtl8152_set_features()
3395 rtl_rx_vlan_en(tp, false); in rtl8152_set_features()
3398 mutex_unlock(&tp->control); in rtl8152_set_features()
3400 usb_autopm_put_interface(tp->intf); in rtl8152_set_features()
3408 static u32 __rtl_get_wol(struct r8152 *tp) in __rtl_get_wol() argument
3413 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_get_wol()
3417 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_get_wol()
3425 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_get_wol()
3432 static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) in __rtl_set_wol() argument
3436 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in __rtl_set_wol()
3438 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in __rtl_set_wol()
3442 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in __rtl_set_wol()
3444 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in __rtl_set_wol()
3452 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in __rtl_set_wol()
3454 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in __rtl_set_wol()
3456 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); in __rtl_set_wol()
3460 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); in __rtl_set_wol()
3463 device_set_wakeup_enable(&tp->udev->dev, true); in __rtl_set_wol()
3465 device_set_wakeup_enable(&tp->udev->dev, false); in __rtl_set_wol()
3468 static void r8153_mac_clk_speed_down(struct r8152 *tp, bool enable) in r8153_mac_clk_speed_down() argument
3470 u32 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8153_mac_clk_speed_down()
3478 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8153_mac_clk_speed_down()
3481 static void r8156_mac_clk_spd(struct r8152 *tp, bool enable) in r8156_mac_clk_spd() argument
3488 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, in r8156_mac_clk_spd()
3491 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8156_mac_clk_spd()
3494 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8156_mac_clk_spd()
3496 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2); in r8156_mac_clk_spd()
3498 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data); in r8156_mac_clk_spd()
3502 static void r8153_u1u2en(struct r8152 *tp, bool enable) in r8153_u1u2en() argument
3511 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); in r8153_u1u2en()
3514 static void r8153b_u1u2en(struct r8152 *tp, bool enable) in r8153b_u1u2en() argument
3518 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG); in r8153b_u1u2en()
3524 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data); in r8153b_u1u2en()
3527 static void r8153_u2p3en(struct r8152 *tp, bool enable) in r8153_u2p3en() argument
3531 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8153_u2p3en()
3536 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8153_u2p3en()
3539 static void r8153b_ups_flags(struct r8152 *tp) in r8153b_ups_flags() argument
3543 if (tp->ups_info.green) in r8153b_ups_flags()
3546 if (tp->ups_info.aldps) in r8153b_ups_flags()
3549 if (tp->ups_info.eee) in r8153b_ups_flags()
3552 if (tp->ups_info.flow_control) in r8153b_ups_flags()
3555 if (tp->ups_info.eee_ckdiv) in r8153b_ups_flags()
3558 if (tp->ups_info.eee_cmod_lv) in r8153b_ups_flags()
3561 if (tp->ups_info.r_tune) in r8153b_ups_flags()
3564 if (tp->ups_info._10m_ckdiv) in r8153b_ups_flags()
3567 if (tp->ups_info.eee_plloff_100) in r8153b_ups_flags()
3570 if (tp->ups_info.eee_plloff_giga) in r8153b_ups_flags()
3573 if (tp->ups_info._250m_ckdiv) in r8153b_ups_flags()
3576 if (tp->ups_info.ctap_short_off) in r8153b_ups_flags()
3579 switch (tp->ups_info.speed_duplex) { in r8153b_ups_flags()
3611 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags); in r8153b_ups_flags()
3614 static void r8156_ups_flags(struct r8152 *tp) in r8156_ups_flags() argument
3618 if (tp->ups_info.green) in r8156_ups_flags()
3621 if (tp->ups_info.aldps) in r8156_ups_flags()
3624 if (tp->ups_info.eee) in r8156_ups_flags()
3627 if (tp->ups_info.flow_control) in r8156_ups_flags()
3630 if (tp->ups_info.eee_ckdiv) in r8156_ups_flags()
3633 if (tp->ups_info._10m_ckdiv) in r8156_ups_flags()
3636 if (tp->ups_info.eee_plloff_100) in r8156_ups_flags()
3639 if (tp->ups_info.eee_plloff_giga) in r8156_ups_flags()
3642 if (tp->ups_info._250m_ckdiv) in r8156_ups_flags()
3645 switch (tp->ups_info.speed_duplex) { in r8156_ups_flags()
3680 switch (tp->ups_info.lite_mode) { in r8156_ups_flags()
3693 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags); in r8156_ups_flags()
3696 static void rtl_green_en(struct r8152 *tp, bool enable) in rtl_green_en() argument
3700 data = sram_read(tp, SRAM_GREEN_CFG); in rtl_green_en()
3705 sram_write(tp, SRAM_GREEN_CFG, data); in rtl_green_en()
3707 tp->ups_info.green = enable; in rtl_green_en()
3710 static void r8153b_green_en(struct r8152 *tp, bool enable) in r8153b_green_en() argument
3713 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */ in r8153b_green_en()
3714 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3715 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3717 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */ in r8153b_green_en()
3718 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */ in r8153b_green_en()
3719 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */ in r8153b_green_en()
3722 rtl_green_en(tp, true); in r8153b_green_en()
3725 static u16 r8153_phy_status(struct r8152 *tp, u16 desired) in r8153_phy_status() argument
3731 data = ocp_reg_read(tp, OCP_PHY_STATUS); in r8153_phy_status()
3742 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_phy_status()
3749 static void r8153b_ups_en(struct r8152 *tp, bool enable) in r8153b_ups_en() argument
3751 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_ups_en()
3754 r8153b_ups_flags(tp); in r8153b_ups_en()
3757 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3759 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153b_ups_en()
3761 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153b_ups_en()
3764 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_ups_en()
3766 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153b_ups_en()
3768 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153b_ups_en()
3770 if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) { in r8153b_ups_en()
3774 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_ups_en()
3776 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_ups_en()
3782 tp->rtl_ops.hw_phy_cfg(tp); in r8153b_ups_en()
3784 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153b_ups_en()
3785 tp->duplex, tp->advertising); in r8153b_ups_en()
3790 static void r8153c_ups_en(struct r8152 *tp, bool enable) in r8153c_ups_en() argument
3792 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153c_ups_en()
3795 r8153b_ups_flags(tp); in r8153c_ups_en()
3798 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153c_ups_en()
3800 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153c_ups_en()
3803 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153c_ups_en()
3806 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153c_ups_en()
3808 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153c_ups_en()
3810 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153c_ups_en()
3812 if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) { in r8153c_ups_en()
3816 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_ups_en()
3818 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153c_ups_en()
3824 tp->rtl_ops.hw_phy_cfg(tp); in r8153c_ups_en()
3826 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8153c_ups_en()
3827 tp->duplex, tp->advertising); in r8153c_ups_en()
3830 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in r8153c_ups_en()
3832 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in r8153c_ups_en()
3834 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in r8153c_ups_en()
3836 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8153c_ups_en()
3840 static void r8156_ups_en(struct r8152 *tp, bool enable) in r8156_ups_en() argument
3842 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8156_ups_en()
3845 r8156_ups_flags(tp); in r8156_ups_en()
3848 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8156_ups_en()
3850 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8156_ups_en()
3852 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8156_ups_en()
3854 switch (tp->version) { in r8156_ups_en()
3857 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPHY_XTAL); in r8156_ups_en()
3859 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPHY_XTAL, ocp_data); in r8156_ups_en()
3866 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8156_ups_en()
3868 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8156_ups_en()
3870 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8156_ups_en()
3872 if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) { in r8156_ups_en()
3873 tp->rtl_ops.hw_phy_cfg(tp); in r8156_ups_en()
3875 rtl8152_set_speed(tp, tp->autoneg, tp->speed, in r8156_ups_en()
3876 tp->duplex, tp->advertising); in r8156_ups_en()
3881 static void r8153_power_cut_en(struct r8152 *tp, bool enable) in r8153_power_cut_en() argument
3885 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153_power_cut_en()
3890 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153_power_cut_en()
3892 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153_power_cut_en()
3894 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153_power_cut_en()
3897 static void r8153b_power_cut_en(struct r8152 *tp, bool enable) in r8153b_power_cut_en() argument
3901 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT); in r8153b_power_cut_en()
3906 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data); in r8153b_power_cut_en()
3908 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_power_cut_en()
3910 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_power_cut_en()
3913 static void r8153_queue_wake(struct r8152 *tp, bool enable) in r8153_queue_wake() argument
3917 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG); in r8153_queue_wake()
3922 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data); in r8153_queue_wake()
3924 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG); in r8153_queue_wake()
3926 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data); in r8153_queue_wake()
3928 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_queue_wake()
3930 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_queue_wake()
3933 static bool rtl_can_wakeup(struct r8152 *tp) in rtl_can_wakeup() argument
3935 struct usb_device *udev = tp->udev; in rtl_can_wakeup()
3940 static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) in rtl_runtime_suspend_enable() argument
3945 __rtl_set_wol(tp, WAKE_ANY); in rtl_runtime_suspend_enable()
3947 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3949 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3951 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3953 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3957 __rtl_set_wol(tp, tp->saved_wolopts); in rtl_runtime_suspend_enable()
3959 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl_runtime_suspend_enable()
3961 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl_runtime_suspend_enable()
3963 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl_runtime_suspend_enable()
3965 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl_runtime_suspend_enable()
3969 static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) in rtl8153_runtime_enable() argument
3972 r8153_u1u2en(tp, false); in rtl8153_runtime_enable()
3973 r8153_u2p3en(tp, false); in rtl8153_runtime_enable()
3974 rtl_runtime_suspend_enable(tp, true); in rtl8153_runtime_enable()
3976 rtl_runtime_suspend_enable(tp, false); in rtl8153_runtime_enable()
3978 switch (tp->version) { in rtl8153_runtime_enable()
3985 r8153_u2p3en(tp, true); in rtl8153_runtime_enable()
3989 r8153_u1u2en(tp, true); in rtl8153_runtime_enable()
3993 static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable) in rtl8153b_runtime_enable() argument
3996 r8153_queue_wake(tp, true); in rtl8153b_runtime_enable()
3997 r8153b_u1u2en(tp, false); in rtl8153b_runtime_enable()
3998 r8153_u2p3en(tp, false); in rtl8153b_runtime_enable()
3999 rtl_runtime_suspend_enable(tp, true); in rtl8153b_runtime_enable()
4000 r8153b_ups_en(tp, true); in rtl8153b_runtime_enable()
4002 r8153b_ups_en(tp, false); in rtl8153b_runtime_enable()
4003 r8153_queue_wake(tp, false); in rtl8153b_runtime_enable()
4004 rtl_runtime_suspend_enable(tp, false); in rtl8153b_runtime_enable()
4005 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_runtime_enable()
4006 r8153b_u1u2en(tp, true); in rtl8153b_runtime_enable()
4010 static void rtl8153c_runtime_enable(struct r8152 *tp, bool enable) in rtl8153c_runtime_enable() argument
4013 r8153_queue_wake(tp, true); in rtl8153c_runtime_enable()
4014 r8153b_u1u2en(tp, false); in rtl8153c_runtime_enable()
4015 r8153_u2p3en(tp, false); in rtl8153c_runtime_enable()
4016 rtl_runtime_suspend_enable(tp, true); in rtl8153c_runtime_enable()
4017 r8153c_ups_en(tp, true); in rtl8153c_runtime_enable()
4019 r8153c_ups_en(tp, false); in rtl8153c_runtime_enable()
4020 r8153_queue_wake(tp, false); in rtl8153c_runtime_enable()
4021 rtl_runtime_suspend_enable(tp, false); in rtl8153c_runtime_enable()
4022 r8153b_u1u2en(tp, true); in rtl8153c_runtime_enable()
4026 static void rtl8156_runtime_enable(struct r8152 *tp, bool enable) in rtl8156_runtime_enable() argument
4029 r8153_queue_wake(tp, true); in rtl8156_runtime_enable()
4030 r8153b_u1u2en(tp, false); in rtl8156_runtime_enable()
4031 r8153_u2p3en(tp, false); in rtl8156_runtime_enable()
4032 rtl_runtime_suspend_enable(tp, true); in rtl8156_runtime_enable()
4034 r8153_queue_wake(tp, false); in rtl8156_runtime_enable()
4035 rtl_runtime_suspend_enable(tp, false); in rtl8156_runtime_enable()
4036 r8153_u2p3en(tp, true); in rtl8156_runtime_enable()
4037 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_runtime_enable()
4038 r8153b_u1u2en(tp, true); in rtl8156_runtime_enable()
4042 static void r8153_teredo_off(struct r8152 *tp) in r8153_teredo_off() argument
4046 switch (tp->version) { in r8153_teredo_off()
4054 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_teredo_off()
4057 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_teredo_off()
4073 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff); in r8153_teredo_off()
4077 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); in r8153_teredo_off()
4078 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); in r8153_teredo_off()
4079 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); in r8153_teredo_off()
4082 static void rtl_reset_bmu(struct r8152 *tp) in rtl_reset_bmu() argument
4086 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET); in rtl_reset_bmu()
4088 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
4090 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data); in rtl_reset_bmu()
4094 static void rtl_clear_bp(struct r8152 *tp, u16 type) in rtl_clear_bp() argument
4099 switch (tp->version) { in rtl_clear_bp()
4108 ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0); in rtl_clear_bp()
4117 ocp_write_byte(tp, type, PLA_BP_EN, 0); in rtl_clear_bp()
4126 ocp_write_word(tp, type, USB_BP2_EN, 0); in rtl_clear_bp()
4131 generic_ocp_write(tp, PLA_BP_0, BYTE_EN_DWORD, bp_num << 1, bp, type); in rtl_clear_bp()
4135 ocp_write_word(tp, type, PLA_BP_BA, 0); in rtl_clear_bp()
4138 static inline void rtl_reset_ocp_base(struct r8152 *tp) in rtl_reset_ocp_base() argument
4140 tp->ocp_base = -1; in rtl_reset_ocp_base()
4143 static int rtl_phy_patch_request(struct r8152 *tp, bool request, bool wait) in rtl_phy_patch_request() argument
4148 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD); in rtl_phy_patch_request()
4156 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data); in rtl_phy_patch_request()
4161 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_phy_patch_request()
4165 ocp_data = ocp_reg_read(tp, OCP_PHY_PATCH_STAT); in rtl_phy_patch_request()
4171 !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) { in rtl_phy_patch_request()
4172 dev_err(&tp->intf->dev, "PHY patch request fail\n"); in rtl_phy_patch_request()
4173 rtl_phy_patch_request(tp, false, false); in rtl_phy_patch_request()
4180 static void rtl_patch_key_set(struct r8152 *tp, u16 key_addr, u16 patch_key) in rtl_patch_key_set() argument
4183 sram_write(tp, key_addr, patch_key); in rtl_patch_key_set()
4184 sram_write(tp, SRAM_PHY_LOCK, PHY_PATCH_LOCK); in rtl_patch_key_set()
4188 sram_write(tp, 0x0000, 0x0000); in rtl_patch_key_set()
4190 data = ocp_reg_read(tp, OCP_PHY_LOCK); in rtl_patch_key_set()
4192 ocp_reg_write(tp, OCP_PHY_LOCK, data); in rtl_patch_key_set()
4194 sram_write(tp, key_addr, 0x0000); in rtl_patch_key_set()
4201 rtl_pre_ram_code(struct r8152 *tp, u16 key_addr, u16 patch_key, bool wait) in rtl_pre_ram_code() argument
4203 if (rtl_phy_patch_request(tp, true, wait)) in rtl_pre_ram_code()
4206 rtl_patch_key_set(tp, key_addr, patch_key); in rtl_pre_ram_code()
4211 static int rtl_post_ram_code(struct r8152 *tp, u16 key_addr, bool wait) in rtl_post_ram_code() argument
4213 rtl_patch_key_set(tp, key_addr, 0); in rtl_post_ram_code()
4215 rtl_phy_patch_request(tp, false, wait); in rtl_post_ram_code()
4220 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
4226 switch (tp->version) { in rtl8152_is_fw_phy_speed_up_ok()
4250 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_speed_up_ok()
4256 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_speed_up_ok()
4261 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_speed_up_ok()
4270 static bool rtl8152_is_fw_phy_ver_ok(struct r8152 *tp, struct fw_phy_ver *ver) in rtl8152_is_fw_phy_ver_ok() argument
4274 switch (tp->version) { in rtl8152_is_fw_phy_ver_ok()
4286 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_ver_ok()
4291 dev_err(&tp->intf->dev, "invalid phy ver addr\n"); in rtl8152_is_fw_phy_ver_ok()
4300 static bool rtl8152_is_fw_phy_fixup_ok(struct r8152 *tp, struct fw_phy_fixup *fix) in rtl8152_is_fw_phy_fixup_ok() argument
4304 switch (tp->version) { in rtl8152_is_fw_phy_fixup_ok()
4316 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_fixup_ok()
4322 dev_err(&tp->intf->dev, "invalid phy fixup\n"); in rtl8152_is_fw_phy_fixup_ok()
4331 static bool rtl8152_is_fw_phy_union_ok(struct r8152 *tp, struct fw_phy_union *phy) in rtl8152_is_fw_phy_union_ok() argument
4337 switch (tp->version) { in rtl8152_is_fw_phy_union_ok()
4351 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_union_ok()
4357 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_union_ok()
4362 dev_err(&tp->intf->dev, "invalid pre_num %d\n", phy->pre_num); in rtl8152_is_fw_phy_union_ok()
4367 dev_err(&tp->intf->dev, "invalid bp_num %d\n", phy->bp_num); in rtl8152_is_fw_phy_union_ok()
4376 static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_is_fw_phy_nc_ok() argument
4382 switch (tp->version) { in rtl8152_is_fw_phy_nc_ok()
4398 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_phy_nc_ok()
4404 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_phy_nc_ok()
4410 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_phy_nc_ok()
4415 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_phy_nc_ok()
4420 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_phy_nc_ok()
4425 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4431 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4437 dev_err(&tp->intf->dev, in rtl8152_is_fw_phy_nc_ok()
4443 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_phy_nc_ok()
4452 static bool rtl8152_is_fw_mac_ok(struct r8152 *tp, struct fw_mac *mac) in rtl8152_is_fw_mac_ok() argument
4461 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4498 switch (tp->version) { in rtl8152_is_fw_mac_ok()
4534 dev_err(&tp->intf->dev, "fw_offset too small\n"); in rtl8152_is_fw_mac_ok()
4540 dev_err(&tp->intf->dev, "invalid fw_offset\n"); in rtl8152_is_fw_mac_ok()
4546 dev_err(&tp->intf->dev, "invalid block length\n"); in rtl8152_is_fw_mac_ok()
4551 dev_err(&tp->intf->dev, "invalid register to load firmware\n"); in rtl8152_is_fw_mac_ok()
4556 dev_err(&tp->intf->dev, "invalid base address register\n"); in rtl8152_is_fw_mac_ok()
4561 dev_err(&tp->intf->dev, "invalid enabled mask register\n"); in rtl8152_is_fw_mac_ok()
4566 dev_err(&tp->intf->dev, in rtl8152_is_fw_mac_ok()
4572 dev_err(&tp->intf->dev, "invalid break point number\n"); in rtl8152_is_fw_mac_ok()
4578 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i); in rtl8152_is_fw_mac_ok()
4592 static long rtl8152_fw_verify_checksum(struct r8152 *tp, in rtl8152_fw_verify_checksum() argument
4609 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n", in rtl8152_fw_verify_checksum()
4629 dev_err(&tp->intf->dev, "checksum fail\n"); in rtl8152_fw_verify_checksum()
4639 static long rtl8152_check_firmware(struct r8152 *tp, struct rtl_fw *rtl_fw) in rtl8152_check_firmware() argument
4648 dev_err(&tp->intf->dev, "file too small\n"); in rtl8152_check_firmware()
4652 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size); in rtl8152_check_firmware()
4673 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4678 if (!rtl8152_is_fw_mac_ok(tp, (struct fw_mac *)block)) { in rtl8152_check_firmware()
4679 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4687 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4692 if (!rtl8152_is_fw_mac_ok(tp, (struct fw_mac *)block)) { in rtl8152_check_firmware()
4693 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4707 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4713 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4722 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4728 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4737 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4743 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4748 if (!rtl8152_is_fw_phy_nc_ok(tp, (struct fw_phy_nc *)block)) { in rtl8152_check_firmware()
4749 dev_err(&tp->intf->dev, in rtl8152_check_firmware()
4762 dev_err(&tp->intf->dev, "PHY_UNION_NC out of order\n"); in rtl8152_check_firmware()
4767 dev_err(&tp->intf->dev, "multiple PHY_UNION_NC encountered\n"); in rtl8152_check_firmware()
4771 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4772 dev_err(&tp->intf->dev, "check PHY_UNION_NC failed\n"); in rtl8152_check_firmware()
4783 dev_err(&tp->intf->dev, "PHY_UNION_NC1 out of order\n"); in rtl8152_check_firmware()
4788 dev_err(&tp->intf->dev, "multiple PHY NC1 encountered\n"); in rtl8152_check_firmware()
4792 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4793 dev_err(&tp->intf->dev, "check PHY_UNION_NC1 failed\n"); in rtl8152_check_firmware()
4803 dev_err(&tp->intf->dev, "PHY_UNION_NC2 out of order\n"); in rtl8152_check_firmware()
4808 dev_err(&tp->intf->dev, "multiple PHY NC2 encountered\n"); in rtl8152_check_firmware()
4812 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4813 dev_err(&tp->intf->dev, "check PHY_UNION_NC2 failed\n"); in rtl8152_check_firmware()
4822 dev_err(&tp->intf->dev, "PHY_UNION_UC2 out of order\n"); in rtl8152_check_firmware()
4827 dev_err(&tp->intf->dev, "multiple PHY UC2 encountered\n"); in rtl8152_check_firmware()
4831 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4832 dev_err(&tp->intf->dev, "check PHY_UNION_UC2 failed\n"); in rtl8152_check_firmware()
4840 dev_err(&tp->intf->dev, "PHY_UNION_UC out of order\n"); in rtl8152_check_firmware()
4845 dev_err(&tp->intf->dev, "multiple PHY UC encountered\n"); in rtl8152_check_firmware()
4849 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4850 dev_err(&tp->intf->dev, "check PHY_UNION_UC failed\n"); in rtl8152_check_firmware()
4856 if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) { in rtl8152_check_firmware()
4857 dev_err(&tp->intf->dev, "check RTL_FW_PHY_UNION_MISC failed\n"); in rtl8152_check_firmware()
4862 if (!rtl8152_is_fw_phy_fixup_ok(tp, (struct fw_phy_fixup *)block)) { in rtl8152_check_firmware()
4863 dev_err(&tp->intf->dev, "check PHY fixup failed\n"); in rtl8152_check_firmware()
4869 dev_err(&tp->intf->dev, "multiple PHY firmware encountered"); in rtl8152_check_firmware()
4873 if (!rtl8152_is_fw_phy_speed_up_ok(tp, (struct fw_phy_speed_up *)block)) { in rtl8152_check_firmware()
4874 dev_err(&tp->intf->dev, "check PHY speed up failed\n"); in rtl8152_check_firmware()
4887 dev_err(&tp->intf->dev, "Invalid order to set PHY version\n"); in rtl8152_check_firmware()
4892 dev_err(&tp->intf->dev, "multiple PHY version encountered"); in rtl8152_check_firmware()
4896 if (!rtl8152_is_fw_phy_ver_ok(tp, (struct fw_phy_ver *)block)) { in rtl8152_check_firmware()
4897 dev_err(&tp->intf->dev, "check PHY version failed\n"); in rtl8152_check_firmware()
4903 dev_warn(&tp->intf->dev, "Unknown type %u is found\n", in rtl8152_check_firmware()
4914 dev_err(&tp->intf->dev, "without PHY_STOP\n"); in rtl8152_check_firmware()
4923 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
4928 rtl_reset_ocp_base(tp); in rtl_ram_code_speed_up()
4930 if (sram_read(tp, SRAM_GPHY_FW_VER) >= __le16_to_cpu(phy->version)) { in rtl_ram_code_speed_up()
4931 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl_ram_code_speed_up()
4939 if (rtl_phy_patch_request(tp, true, wait)) in rtl_ram_code_speed_up()
4951 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL); in rtl_ram_code_speed_up()
4953 ocp_write_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL, ocp_data); in rtl_ram_code_speed_up()
4955 generic_ocp_write(tp, __le16_to_cpu(phy->fw_reg), 0xff, size, data, MCU_TYPE_USB); in rtl_ram_code_speed_up()
4960 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL); in rtl_ram_code_speed_up()
4962 ocp_write_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL, ocp_data); in rtl_ram_code_speed_up()
4965 if (!(ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL) & POL_GPHY_PATCH)) in rtl_ram_code_speed_up()
4970 dev_err(&tp->intf->dev, "ram code speedup mode timeout\n"); in rtl_ram_code_speed_up()
4975 rtl_reset_ocp_base(tp); in rtl_ram_code_speed_up()
4977 rtl_phy_patch_request(tp, false, wait); in rtl_ram_code_speed_up()
4979 if (sram_read(tp, SRAM_GPHY_FW_VER) == __le16_to_cpu(phy->version)) in rtl_ram_code_speed_up()
4980 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl_ram_code_speed_up()
4982 dev_err(&tp->intf->dev, "ram code speedup mode fail\n"); in rtl_ram_code_speed_up()
4985 static int rtl8152_fw_phy_ver(struct r8152 *tp, struct fw_phy_ver *phy_ver) in rtl8152_fw_phy_ver() argument
4992 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_ver()
4994 if (sram_read(tp, ver_addr) >= ver) { in rtl8152_fw_phy_ver()
4995 dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n"); in rtl8152_fw_phy_ver()
4999 sram_write(tp, ver_addr, ver); in rtl8152_fw_phy_ver()
5001 dev_dbg(&tp->intf->dev, "PHY firmware version %x\n", ver); in rtl8152_fw_phy_ver()
5006 static void rtl8152_fw_phy_fixup(struct r8152 *tp, struct fw_phy_fixup *fix) in rtl8152_fw_phy_fixup() argument
5010 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_fixup()
5013 data = ocp_reg_read(tp, addr); in rtl8152_fw_phy_fixup()
5032 ocp_reg_write(tp, addr, data); in rtl8152_fw_phy_fixup()
5034 dev_dbg(&tp->intf->dev, "applied ocp %x %x\n", addr, data); in rtl8152_fw_phy_fixup()
5037 static void rtl8152_fw_phy_union_apply(struct r8152 *tp, struct fw_phy_union *phy) in rtl8152_fw_phy_union_apply() argument
5043 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_union_apply()
5047 sram_write(tp, __le16_to_cpu(phy->pre_set[i].addr), in rtl8152_fw_phy_union_apply()
5055 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_union_apply()
5057 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i])); in rtl8152_fw_phy_union_apply()
5061 sram_write(tp, __le16_to_cpu(phy->bp[i].addr), __le16_to_cpu(phy->bp[i].data)); in rtl8152_fw_phy_union_apply()
5064 sram_write(tp, __le16_to_cpu(phy->bp_en.addr), __le16_to_cpu(phy->bp_en.data)); in rtl8152_fw_phy_union_apply()
5066 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_union_apply()
5069 static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy) in rtl8152_fw_phy_nc_apply() argument
5075 rtl_reset_ocp_base(tp); in rtl8152_fw_phy_nc_apply()
5078 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre)); in rtl8152_fw_phy_nc_apply()
5079 sram_write(tp, __le16_to_cpu(phy->ba_reg), in rtl8152_fw_phy_nc_apply()
5087 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg)); in rtl8152_fw_phy_nc_apply()
5089 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i])); in rtl8152_fw_phy_nc_apply()
5091 sram_write(tp, __le16_to_cpu(phy->patch_en_addr), in rtl8152_fw_phy_nc_apply()
5097 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i])); in rtl8152_fw_phy_nc_apply()
5101 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post)); in rtl8152_fw_phy_nc_apply()
5103 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info); in rtl8152_fw_phy_nc_apply()
5106 static void rtl8152_fw_mac_apply(struct r8152 *tp, struct fw_mac *mac) in rtl8152_fw_mac_apply() argument
5124 if (fw_ver_reg && ocp_read_byte(tp, MCU_TYPE_USB, fw_ver_reg) >= mac->fw_ver_data) { in rtl8152_fw_mac_apply()
5125 dev_dbg(&tp->intf->dev, "%s firmware has been the newest\n", type ? "PLA" : "USB"); in rtl8152_fw_mac_apply()
5129 rtl_clear_bp(tp, type); in rtl8152_fw_mac_apply()
5134 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA && in rtl8152_fw_mac_apply()
5135 !(ocp_read_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST) & DEBUG_OE)) { in rtl8152_fw_mac_apply()
5136 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_PRE, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
5137 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST, DEBUG_LTSSM); in rtl8152_fw_mac_apply()
5146 if (generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, in rtl8152_fw_mac_apply()
5148 dev_err(&tp->intf->dev, "Write %s fw fail\n", in rtl8152_fw_mac_apply()
5153 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr), in rtl8152_fw_mac_apply()
5156 if (generic_ocp_write(tp, __le16_to_cpu(mac->bp_start), BYTE_EN_DWORD, in rtl8152_fw_mac_apply()
5159 dev_err(&tp->intf->dev, "Write %s bp fail\n", in rtl8152_fw_mac_apply()
5166 ocp_write_word(tp, type, bp_en_addr, in rtl8152_fw_mac_apply()
5170 ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg, in rtl8152_fw_mac_apply()
5173 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info); in rtl8152_fw_mac_apply()
5176 static void rtl8152_apply_firmware(struct r8152 *tp, bool power_cut) in rtl8152_apply_firmware() argument
5178 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_apply_firmware()
5192 rtl_fw->pre_fw(tp); in rtl8152_apply_firmware()
5202 rtl8152_fw_mac_apply(tp, (struct fw_mac *)block); in rtl8152_apply_firmware()
5209 rtl_pre_ram_code(tp, key_addr, __le16_to_cpu(key->key_data), !power_cut); in rtl8152_apply_firmware()
5215 rtl_post_ram_code(tp, key_addr, !power_cut); in rtl8152_apply_firmware()
5218 rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block); in rtl8152_apply_firmware()
5221 patch_phy = rtl8152_fw_phy_ver(tp, (struct fw_phy_ver *)block); in rtl8152_apply_firmware()
5230 rtl8152_fw_phy_union_apply(tp, (struct fw_phy_union *)block); in rtl8152_apply_firmware()
5234 rtl8152_fw_phy_fixup(tp, (struct fw_phy_fixup *)block); in rtl8152_apply_firmware()
5237 rtl_ram_code_speed_up(tp, (struct fw_phy_speed_up *)block, !power_cut); in rtl8152_apply_firmware()
5248 rtl_fw->post_fw(tp); in rtl8152_apply_firmware()
5250 rtl_reset_ocp_base(tp); in rtl8152_apply_firmware()
5252 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version); in rtl8152_apply_firmware()
5255 static void rtl8152_release_firmware(struct r8152 *tp) in rtl8152_release_firmware() argument
5257 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_release_firmware()
5265 static int rtl8152_request_firmware(struct r8152 *tp) in rtl8152_request_firmware() argument
5267 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl8152_request_firmware()
5271 dev_info(&tp->intf->dev, "skip request firmware\n"); in rtl8152_request_firmware()
5276 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev); in rtl8152_request_firmware()
5280 rc = rtl8152_check_firmware(tp, rtl_fw); in rtl8152_request_firmware()
5288 dev_warn(&tp->intf->dev, in rtl8152_request_firmware()
5296 static void r8152_aldps_en(struct r8152 *tp, bool enable) in r8152_aldps_en() argument
5299 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | in r8152_aldps_en()
5302 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | in r8152_aldps_en()
5308 static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_indirect() argument
5310 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); in r8152_mmd_indirect()
5311 ocp_reg_write(tp, OCP_EEE_DATA, reg); in r8152_mmd_indirect()
5312 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); in r8152_mmd_indirect()
5315 static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) in r8152_mmd_read() argument
5319 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_read()
5320 data = ocp_reg_read(tp, OCP_EEE_DATA); in r8152_mmd_read()
5321 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_read()
5326 static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) in r8152_mmd_write() argument
5328 r8152_mmd_indirect(tp, dev, reg); in r8152_mmd_write()
5329 ocp_reg_write(tp, OCP_EEE_DATA, data); in r8152_mmd_write()
5330 ocp_reg_write(tp, OCP_EEE_AR, 0x0000); in r8152_mmd_write()
5333 static void r8152_eee_en(struct r8152 *tp, bool enable) in r8152_eee_en() argument
5338 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8152_eee_en()
5339 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; in r8152_eee_en()
5340 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); in r8152_eee_en()
5341 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; in r8152_eee_en()
5358 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8152_eee_en()
5359 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); in r8152_eee_en()
5360 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); in r8152_eee_en()
5361 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); in r8152_eee_en()
5364 static void r8153_eee_en(struct r8152 *tp, bool enable) in r8153_eee_en() argument
5369 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); in r8153_eee_en()
5370 config = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_eee_en()
5380 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); in r8153_eee_en()
5381 ocp_reg_write(tp, OCP_EEE_CFG, config); in r8153_eee_en()
5383 tp->ups_info.eee = enable; in r8153_eee_en()
5386 static void r8156_eee_en(struct r8152 *tp, bool enable) in r8156_eee_en() argument
5390 r8153_eee_en(tp, enable); in r8156_eee_en()
5392 config = ocp_reg_read(tp, OCP_EEE_ADV2); in r8156_eee_en()
5399 ocp_reg_write(tp, OCP_EEE_ADV2, config); in r8156_eee_en()
5402 static void rtl_eee_enable(struct r8152 *tp, bool enable) in rtl_eee_enable() argument
5404 switch (tp->version) { in rtl_eee_enable()
5409 r8152_eee_en(tp, true); in rtl_eee_enable()
5410 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, in rtl_eee_enable()
5411 tp->eee_adv); in rtl_eee_enable()
5413 r8152_eee_en(tp, false); in rtl_eee_enable()
5414 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0); in rtl_eee_enable()
5425 r8153_eee_en(tp, true); in rtl_eee_enable()
5426 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5428 r8153_eee_en(tp, false); in rtl_eee_enable()
5429 ocp_reg_write(tp, OCP_EEE_ADV, 0); in rtl_eee_enable()
5438 r8156_eee_en(tp, true); in rtl_eee_enable()
5439 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv); in rtl_eee_enable()
5441 r8156_eee_en(tp, false); in rtl_eee_enable()
5442 ocp_reg_write(tp, OCP_EEE_ADV, 0); in rtl_eee_enable()
5450 static void r8152b_enable_fc(struct r8152 *tp) in r8152b_enable_fc() argument
5454 anar = r8152_mdio_read(tp, MII_ADVERTISE); in r8152b_enable_fc()
5456 r8152_mdio_write(tp, MII_ADVERTISE, anar); in r8152b_enable_fc()
5458 tp->ups_info.flow_control = true; in r8152b_enable_fc()
5461 static void rtl8152_disable(struct r8152 *tp) in rtl8152_disable() argument
5463 r8152_aldps_en(tp, false); in rtl8152_disable()
5464 rtl_disable(tp); in rtl8152_disable()
5465 r8152_aldps_en(tp, true); in rtl8152_disable()
5468 static void r8152b_hw_phy_cfg(struct r8152 *tp) in r8152b_hw_phy_cfg() argument
5470 rtl8152_apply_firmware(tp, false); in r8152b_hw_phy_cfg()
5471 rtl_eee_enable(tp, tp->eee_en); in r8152b_hw_phy_cfg()
5472 r8152_aldps_en(tp, true); in r8152b_hw_phy_cfg()
5473 r8152b_enable_fc(tp); in r8152b_hw_phy_cfg()
5475 set_bit(PHY_RESET, &tp->flags); in r8152b_hw_phy_cfg()
5478 static void wait_oob_link_list_ready(struct r8152 *tp) in wait_oob_link_list_ready() argument
5484 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in wait_oob_link_list_ready()
5486 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in wait_oob_link_list_ready()
5493 static void r8156b_wait_loading_flash(struct r8152 *tp) in r8156b_wait_loading_flash() argument
5495 if ((ocp_read_word(tp, MCU_TYPE_PLA, PLA_GPHY_CTRL) & GPHY_FLASH) && in r8156b_wait_loading_flash()
5496 !(ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & BYPASS_FLASH)) { in r8156b_wait_loading_flash()
5500 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_wait_loading_flash()
5502 if (ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & GPHY_PATCH_DONE) in r8156b_wait_loading_flash()
5509 static void r8152b_exit_oob(struct r8152 *tp) in r8152b_exit_oob() argument
5513 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_exit_oob()
5515 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_exit_oob()
5517 rxdy_gated_en(tp, true); in r8152b_exit_oob()
5518 r8153_teredo_off(tp); in r8152b_exit_oob()
5519 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in r8152b_exit_oob()
5520 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); in r8152b_exit_oob()
5522 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_exit_oob()
5524 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_exit_oob()
5526 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
5528 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
5530 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
5532 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_exit_oob()
5534 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_exit_oob()
5536 wait_oob_link_list_ready(tp); in r8152b_exit_oob()
5538 rtl8152_nic_reset(tp); in r8152b_exit_oob()
5541 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8152b_exit_oob()
5543 if (tp->udev->speed == USB_SPEED_FULL || in r8152b_exit_oob()
5544 tp->udev->speed == USB_SPEED_LOW) { in r8152b_exit_oob()
5546 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
5548 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
5552 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, in r8152b_exit_oob()
5554 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, in r8152b_exit_oob()
5559 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8152b_exit_oob()
5561 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD); in r8152b_exit_oob()
5562 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH); in r8152b_exit_oob()
5563 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, in r8152b_exit_oob()
5566 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8152b_exit_oob()
5568 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_exit_oob()
5570 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8152b_exit_oob()
5572 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8152b_exit_oob()
5575 static void r8152b_enter_oob(struct r8152 *tp) in r8152b_enter_oob() argument
5579 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
5581 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
5583 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8152b_enter_oob()
5584 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8152b_enter_oob()
5585 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8152b_enter_oob()
5587 rtl_disable(tp); in r8152b_enter_oob()
5589 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
5591 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8152b_enter_oob()
5593 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8152b_enter_oob()
5595 wait_oob_link_list_ready(tp); in r8152b_enter_oob()
5597 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); in r8152b_enter_oob()
5599 rtl_rx_vlan_en(tp, true); in r8152b_enter_oob()
5601 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8152b_enter_oob()
5603 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8152b_enter_oob()
5605 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8152b_enter_oob()
5607 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8152b_enter_oob()
5609 rxdy_gated_en(tp, false); in r8152b_enter_oob()
5611 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8152b_enter_oob()
5613 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8152b_enter_oob()
5616 static int r8153_pre_firmware_1(struct r8152 *tp) in r8153_pre_firmware_1() argument
5622 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL); in r8153_pre_firmware_1()
5624 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_pre_firmware_1()
5634 static int r8153_post_firmware_1(struct r8152 *tp) in r8153_post_firmware_1() argument
5637 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) in r8153_post_firmware_1()
5638 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY); in r8153_post_firmware_1()
5641 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_1()
5646 static int r8153_pre_firmware_2(struct r8152 *tp) in r8153_pre_firmware_2() argument
5650 r8153_pre_firmware_1(tp); in r8153_pre_firmware_2()
5652 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_pre_firmware_2()
5654 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_pre_firmware_2()
5659 static int r8153_post_firmware_2(struct r8152 *tp) in r8153_post_firmware_2() argument
5664 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) { in r8153_post_firmware_2()
5665 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153_post_firmware_2()
5667 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153_post_firmware_2()
5671 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16); in r8153_post_firmware_2()
5674 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, U3P3_CHECK_EN | 4); in r8153_post_firmware_2()
5676 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0); in r8153_post_firmware_2()
5678 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data); in r8153_post_firmware_2()
5680 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_2()
5682 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_2()
5687 static int r8153_post_firmware_3(struct r8152 *tp) in r8153_post_firmware_3() argument
5691 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_post_firmware_3()
5693 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_post_firmware_3()
5695 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153_post_firmware_3()
5697 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153_post_firmware_3()
5702 static int r8153b_pre_firmware_1(struct r8152 *tp) in r8153b_pre_firmware_1() argument
5705 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER, in r8153b_pre_firmware_1()
5711 static int r8153b_post_firmware_1(struct r8152 *tp) in r8153b_post_firmware_1() argument
5716 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1); in r8153b_post_firmware_1()
5718 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN); in r8153b_post_firmware_1()
5720 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data); in r8153b_post_firmware_1()
5723 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8153b_post_firmware_1()
5725 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8153b_post_firmware_1()
5727 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8153b_post_firmware_1()
5729 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8153b_post_firmware_1()
5731 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8153b_post_firmware_1()
5733 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8153b_post_firmware_1()
5738 static int r8153c_post_firmware_1(struct r8152 *tp) in r8153c_post_firmware_1() argument
5742 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8153c_post_firmware_1()
5744 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8153c_post_firmware_1()
5746 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8153c_post_firmware_1()
5748 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8153c_post_firmware_1()
5753 static int r8156a_post_firmware_1(struct r8152 *tp) in r8156a_post_firmware_1() argument
5757 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1); in r8156a_post_firmware_1()
5759 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data); in r8156a_post_firmware_1()
5762 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4026840e); in r8156a_post_firmware_1()
5763 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4001acc9); in r8156a_post_firmware_1()
5768 static void r8153_aldps_en(struct r8152 *tp, bool enable) in r8153_aldps_en() argument
5772 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_aldps_en()
5775 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
5780 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_aldps_en()
5782 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_aldps_en()
5785 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100) in r8153_aldps_en()
5790 tp->ups_info.aldps = enable; in r8153_aldps_en()
5793 static void r8153_hw_phy_cfg(struct r8152 *tp) in r8153_hw_phy_cfg() argument
5799 r8153_aldps_en(tp, false); in r8153_hw_phy_cfg()
5802 rtl_eee_enable(tp, false); in r8153_hw_phy_cfg()
5804 rtl8152_apply_firmware(tp, false); in r8153_hw_phy_cfg()
5806 if (tp->version == RTL_VER_03) { in r8153_hw_phy_cfg()
5807 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8153_hw_phy_cfg()
5809 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8153_hw_phy_cfg()
5812 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
5814 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
5816 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153_hw_phy_cfg()
5818 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153_hw_phy_cfg()
5819 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153_hw_phy_cfg()
5821 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153_hw_phy_cfg()
5822 sram_write(tp, SRAM_IMPEDANCE, 0x0b13); in r8153_hw_phy_cfg()
5824 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153_hw_phy_cfg()
5826 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153_hw_phy_cfg()
5829 sram_write(tp, SRAM_LPF_CFG, 0xf70f); in r8153_hw_phy_cfg()
5832 sram_write(tp, SRAM_10M_AMP1, 0x00af); in r8153_hw_phy_cfg()
5833 sram_write(tp, SRAM_10M_AMP2, 0x0208); in r8153_hw_phy_cfg()
5835 if (tp->eee_en) in r8153_hw_phy_cfg()
5836 rtl_eee_enable(tp, true); in r8153_hw_phy_cfg()
5838 r8153_aldps_en(tp, true); in r8153_hw_phy_cfg()
5839 r8152b_enable_fc(tp); in r8153_hw_phy_cfg()
5841 switch (tp->version) { in r8153_hw_phy_cfg()
5848 r8153_u2p3en(tp, true); in r8153_hw_phy_cfg()
5852 set_bit(PHY_RESET, &tp->flags); in r8153_hw_phy_cfg()
5855 static u32 r8152_efuse_read(struct r8152 *tp, u8 addr) in r8152_efuse_read() argument
5859 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr); in r8152_efuse_read()
5860 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD); in r8152_efuse_read()
5862 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA); in r8152_efuse_read()
5867 static void r8153b_hw_phy_cfg(struct r8152 *tp) in r8153b_hw_phy_cfg() argument
5872 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8153b_hw_phy_cfg()
5875 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8153b_hw_phy_cfg()
5879 r8153_aldps_en(tp, false); in r8153b_hw_phy_cfg()
5882 rtl_eee_enable(tp, false); in r8153b_hw_phy_cfg()
5885 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8153b_hw_phy_cfg()
5887 data = r8153_phy_status(tp, 0); in r8153b_hw_phy_cfg()
5892 rtl8152_apply_firmware(tp, true); in r8153b_hw_phy_cfg()
5894 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_hw_phy_cfg()
5896 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_hw_phy_cfg()
5900 rtl8152_apply_firmware(tp, false); in r8153b_hw_phy_cfg()
5904 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8153b_hw_phy_cfg()
5906 data = sram_read(tp, SRAM_GREEN_CFG); in r8153b_hw_phy_cfg()
5908 sram_write(tp, SRAM_GREEN_CFG, data); in r8153b_hw_phy_cfg()
5909 data = ocp_reg_read(tp, OCP_NCTL_CFG); in r8153b_hw_phy_cfg()
5911 ocp_reg_write(tp, OCP_NCTL_CFG, data); in r8153b_hw_phy_cfg()
5918 ocp_data = r8152_efuse_read(tp, 0x7d); in r8153b_hw_phy_cfg()
5921 ocp_reg_write(tp, OCP_ADC_IOFFSET, data); in r8153b_hw_phy_cfg()
5927 ocp_data = ocp_reg_read(tp, 0xc426); in r8153b_hw_phy_cfg()
5933 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG); in r8153b_hw_phy_cfg()
5935 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data); in r8153b_hw_phy_cfg()
5938 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_hw_phy_cfg()
5940 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_hw_phy_cfg()
5943 if (!rtl_phy_patch_request(tp, true, true)) { in r8153b_hw_phy_cfg()
5944 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8153b_hw_phy_cfg()
5946 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8153b_hw_phy_cfg()
5947 tp->ups_info.eee_ckdiv = true; in r8153b_hw_phy_cfg()
5949 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8153b_hw_phy_cfg()
5951 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8153b_hw_phy_cfg()
5952 tp->ups_info.eee_cmod_lv = true; in r8153b_hw_phy_cfg()
5953 tp->ups_info._10m_ckdiv = true; in r8153b_hw_phy_cfg()
5954 tp->ups_info.eee_plloff_giga = true; in r8153b_hw_phy_cfg()
5956 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8153b_hw_phy_cfg()
5957 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5)); in r8153b_hw_phy_cfg()
5958 tp->ups_info._250m_ckdiv = true; in r8153b_hw_phy_cfg()
5960 rtl_phy_patch_request(tp, false, true); in r8153b_hw_phy_cfg()
5963 if (tp->eee_en) in r8153b_hw_phy_cfg()
5964 rtl_eee_enable(tp, true); in r8153b_hw_phy_cfg()
5966 r8153_aldps_en(tp, true); in r8153b_hw_phy_cfg()
5967 r8152b_enable_fc(tp); in r8153b_hw_phy_cfg()
5969 set_bit(PHY_RESET, &tp->flags); in r8153b_hw_phy_cfg()
5972 static void r8153c_hw_phy_cfg(struct r8152 *tp) in r8153c_hw_phy_cfg() argument
5974 r8153b_hw_phy_cfg(tp); in r8153c_hw_phy_cfg()
5976 tp->ups_info.r_tune = true; in r8153c_hw_phy_cfg()
5979 static void rtl8153_change_mtu(struct r8152 *tp) in rtl8153_change_mtu() argument
5981 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153_change_mtu()
5982 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in rtl8153_change_mtu()
5985 static void r8153_first_init(struct r8152 *tp) in r8153_first_init() argument
5989 rxdy_gated_en(tp, true); in r8153_first_init()
5990 r8153_teredo_off(tp); in r8153_first_init()
5992 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_first_init()
5994 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_first_init()
5996 rtl8152_nic_reset(tp); in r8153_first_init()
5997 rtl_reset_bmu(tp); in r8153_first_init()
5999 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_first_init()
6001 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_first_init()
6003 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
6005 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
6007 wait_oob_link_list_ready(tp); in r8153_first_init()
6009 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_first_init()
6011 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_first_init()
6013 wait_oob_link_list_ready(tp); in r8153_first_init()
6015 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in r8153_first_init()
6017 rtl8153_change_mtu(tp); in r8153_first_init()
6019 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); in r8153_first_init()
6021 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data); in r8153_first_init()
6023 rtl8152_nic_reset(tp); in r8153_first_init()
6026 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); in r8153_first_init()
6027 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in r8153_first_init()
6028 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in r8153_first_init()
6030 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2); in r8153_first_init()
6033 static void r8153_enter_oob(struct r8152 *tp) in r8153_enter_oob() argument
6037 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
6039 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
6042 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB); in r8153_enter_oob()
6043 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); in r8153_enter_oob()
6044 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); in r8153_enter_oob()
6046 rtl_disable(tp); in r8153_enter_oob()
6047 rtl_reset_bmu(tp); in r8153_enter_oob()
6049 wait_oob_link_list_ready(tp); in r8153_enter_oob()
6051 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
6053 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
6055 wait_oob_link_list_ready(tp); in r8153_enter_oob()
6057 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, 1522); in r8153_enter_oob()
6058 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_DEFAULT); in r8153_enter_oob()
6060 switch (tp->version) { in r8153_enter_oob()
6065 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); in r8153_enter_oob()
6067 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); in r8153_enter_oob()
6077 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in r8153_enter_oob()
6084 rtl_rx_vlan_en(tp, true); in r8153_enter_oob()
6086 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR); in r8153_enter_oob()
6088 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data); in r8153_enter_oob()
6090 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in r8153_enter_oob()
6092 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in r8153_enter_oob()
6094 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in r8153_enter_oob()
6096 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in r8153_enter_oob()
6098 rxdy_gated_en(tp, false); in r8153_enter_oob()
6100 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in r8153_enter_oob()
6102 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8153_enter_oob()
6105 static void rtl8153_disable(struct r8152 *tp) in rtl8153_disable() argument
6107 r8153_aldps_en(tp, false); in rtl8153_disable()
6108 rtl_disable(tp); in rtl8153_disable()
6109 rtl_reset_bmu(tp); in rtl8153_disable()
6110 r8153_aldps_en(tp, true); in rtl8153_disable()
6113 static u32 fc_pause_on_auto(struct r8152 *tp) in fc_pause_on_auto() argument
6115 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 6 * 1024); in fc_pause_on_auto()
6118 static u32 fc_pause_off_auto(struct r8152 *tp) in fc_pause_off_auto() argument
6120 return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 14 * 1024); in fc_pause_off_auto()
6123 static void r8156_fc_parameter(struct r8152 *tp) in r8156_fc_parameter() argument
6125 u32 pause_on = tp->fc_pause_on ? tp->fc_pause_on : fc_pause_on_auto(tp); in r8156_fc_parameter()
6126 u32 pause_off = tp->fc_pause_off ? tp->fc_pause_off : fc_pause_off_auto(tp); in r8156_fc_parameter()
6128 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_FULL, pause_on / 16); in r8156_fc_parameter()
6129 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_EMPTY, pause_off / 16); in r8156_fc_parameter()
6132 static int rtl8156_enable(struct r8152 *tp) in rtl8156_enable() argument
6137 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156_enable()
6140 r8156_fc_parameter(tp); in rtl8156_enable()
6141 set_tx_qlen(tp); in rtl8156_enable()
6142 rtl_set_eee_plus(tp); in rtl8156_enable()
6143 r8153_set_rx_early_timeout(tp); in rtl8156_enable()
6144 r8153_set_rx_early_size(tp); in rtl8156_enable()
6146 speed = rtl8152_get_speed(tp); in rtl8156_enable()
6147 rtl_set_ifg(tp, speed); in rtl8156_enable()
6149 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl8156_enable()
6154 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl8156_enable()
6157 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS, 0x11); in rtl8156_enable()
6159 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS, 0x3d); in rtl8156_enable()
6161 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156_enable()
6163 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_L1_CTRL); in rtl8156_enable()
6169 ocp_write_word(tp, MCU_TYPE_USB, USB_L1_CTRL, ocp_data); in rtl8156_enable()
6172 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in rtl8156_enable()
6174 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8156_enable()
6177 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8156_enable()
6179 return rtl_enable(tp); in rtl8156_enable()
6182 static void rtl8156_disable(struct r8152 *tp) in rtl8156_disable() argument
6184 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_FULL, 0); in rtl8156_disable()
6185 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_EMPTY, 0); in rtl8156_disable()
6187 rtl8153_disable(tp); in rtl8156_disable()
6190 static int rtl8156b_enable(struct r8152 *tp) in rtl8156b_enable() argument
6195 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156b_enable()
6198 set_tx_qlen(tp); in rtl8156b_enable()
6199 rtl_set_eee_plus(tp); in rtl8156b_enable()
6201 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_RX_AGGR_NUM); in rtl8156b_enable()
6203 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_AGGR_NUM, ocp_data); in rtl8156b_enable()
6205 r8153_set_rx_early_timeout(tp); in rtl8156b_enable()
6206 r8153_set_rx_early_size(tp); in rtl8156b_enable()
6208 speed = rtl8152_get_speed(tp); in rtl8156b_enable()
6209 rtl_set_ifg(tp, speed); in rtl8156b_enable()
6211 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in rtl8156b_enable()
6216 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in rtl8156b_enable()
6218 if (tp->udev->speed == USB_SPEED_HIGH) { in rtl8156b_enable()
6219 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_L1_CTRL); in rtl8156b_enable()
6225 ocp_write_word(tp, MCU_TYPE_USB, USB_L1_CTRL, ocp_data); in rtl8156b_enable()
6228 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in rtl8156b_enable()
6230 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8156b_enable()
6233 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in rtl8156b_enable()
6235 return rtl_enable(tp); in rtl8156b_enable()
6238 static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex, in rtl8152_set_speed() argument
6253 tp->ups_info.speed_duplex = FORCE_10M_FULL; in rtl8152_set_speed()
6255 tp->ups_info.speed_duplex = FORCE_10M_HALF; in rtl8152_set_speed()
6262 tp->ups_info.speed_duplex = FORCE_100M_FULL; in rtl8152_set_speed()
6264 tp->ups_info.speed_duplex = FORCE_100M_HALF; in rtl8152_set_speed()
6268 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6270 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6280 tp->mii.full_duplex = 1; in rtl8152_set_speed()
6282 tp->mii.full_duplex = 0; in rtl8152_set_speed()
6284 tp->mii.force_media = 1; in rtl8152_set_speed()
6292 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6295 if (tp->support_2500full) in rtl8152_set_speed()
6302 orig = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_speed()
6307 tp->ups_info.speed_duplex = NWAY_10M_HALF; in rtl8152_set_speed()
6311 tp->ups_info.speed_duplex = NWAY_10M_FULL; in rtl8152_set_speed()
6316 tp->ups_info.speed_duplex = NWAY_100M_HALF; in rtl8152_set_speed()
6320 tp->ups_info.speed_duplex = NWAY_100M_FULL; in rtl8152_set_speed()
6324 r8152_mdio_write(tp, MII_ADVERTISE, new1); in rtl8152_set_speed()
6325 tp->mii.advertising = new1; in rtl8152_set_speed()
6328 if (tp->mii.supports_gmii) { in rtl8152_set_speed()
6329 orig = r8152_mdio_read(tp, MII_CTRL1000); in rtl8152_set_speed()
6335 tp->ups_info.speed_duplex = NWAY_1000M_FULL; in rtl8152_set_speed()
6339 r8152_mdio_write(tp, MII_CTRL1000, new1); in rtl8152_set_speed()
6342 if (tp->support_2500full) { in rtl8152_set_speed()
6343 orig = ocp_reg_read(tp, OCP_10GBT_CTRL); in rtl8152_set_speed()
6348 tp->ups_info.speed_duplex = NWAY_2500M_FULL; in rtl8152_set_speed()
6352 ocp_reg_write(tp, OCP_10GBT_CTRL, new1); in rtl8152_set_speed()
6357 tp->mii.force_media = 0; in rtl8152_set_speed()
6360 if (test_and_clear_bit(PHY_RESET, &tp->flags)) in rtl8152_set_speed()
6363 r8152_mdio_write(tp, MII_BMCR, bmcr); in rtl8152_set_speed()
6370 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) in rtl8152_set_speed()
6379 static void rtl8152_up(struct r8152 *tp) in rtl8152_up() argument
6381 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_up()
6384 r8152_aldps_en(tp, false); in rtl8152_up()
6385 r8152b_exit_oob(tp); in rtl8152_up()
6386 r8152_aldps_en(tp, true); in rtl8152_up()
6389 static void rtl8152_down(struct r8152 *tp) in rtl8152_down() argument
6391 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8152_down()
6392 rtl_drop_queued_tx(tp); in rtl8152_down()
6396 r8152_power_cut_en(tp, false); in rtl8152_down()
6397 r8152_aldps_en(tp, false); in rtl8152_down()
6398 r8152b_enter_oob(tp); in rtl8152_down()
6399 r8152_aldps_en(tp, true); in rtl8152_down()
6402 static void rtl8153_up(struct r8152 *tp) in rtl8153_up() argument
6406 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_up()
6409 r8153_u1u2en(tp, false); in rtl8153_up()
6410 r8153_u2p3en(tp, false); in rtl8153_up()
6411 r8153_aldps_en(tp, false); in rtl8153_up()
6412 r8153_first_init(tp); in rtl8153_up()
6414 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_up()
6416 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_up()
6418 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in rtl8153_up()
6420 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in rtl8153_up()
6422 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1); in rtl8153_up()
6424 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1, ocp_data); in rtl8153_up()
6426 r8153_aldps_en(tp, true); in rtl8153_up()
6428 switch (tp->version) { in rtl8153_up()
6435 r8153_u2p3en(tp, true); in rtl8153_up()
6439 r8153_u1u2en(tp, true); in rtl8153_up()
6442 static void rtl8153_down(struct r8152 *tp) in rtl8153_down() argument
6446 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8153_down()
6447 rtl_drop_queued_tx(tp); in rtl8153_down()
6451 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in rtl8153_down()
6453 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in rtl8153_down()
6455 r8153_u1u2en(tp, false); in rtl8153_down()
6456 r8153_u2p3en(tp, false); in rtl8153_down()
6457 r8153_power_cut_en(tp, false); in rtl8153_down()
6458 r8153_aldps_en(tp, false); in rtl8153_down()
6459 r8153_enter_oob(tp); in rtl8153_down()
6460 r8153_aldps_en(tp, true); in rtl8153_down()
6463 static void rtl8153b_up(struct r8152 *tp) in rtl8153b_up() argument
6467 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153b_up()
6470 r8153b_u1u2en(tp, false); in rtl8153b_up()
6471 r8153_u2p3en(tp, false); in rtl8153b_up()
6472 r8153_aldps_en(tp, false); in rtl8153b_up()
6474 r8153_first_init(tp); in rtl8153b_up()
6475 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153b_up()
6477 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_up()
6479 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_up()
6481 r8153_aldps_en(tp, true); in rtl8153b_up()
6483 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8153b_up()
6484 r8153b_u1u2en(tp, true); in rtl8153b_up()
6487 static void rtl8153b_down(struct r8152 *tp) in rtl8153b_down() argument
6491 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8153b_down()
6492 rtl_drop_queued_tx(tp); in rtl8153b_down()
6496 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153b_down()
6498 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153b_down()
6500 r8153b_u1u2en(tp, false); in rtl8153b_down()
6501 r8153_u2p3en(tp, false); in rtl8153b_down()
6502 r8153b_power_cut_en(tp, false); in rtl8153b_down()
6503 r8153_aldps_en(tp, false); in rtl8153b_down()
6504 r8153_enter_oob(tp); in rtl8153b_down()
6505 r8153_aldps_en(tp, true); in rtl8153b_down()
6508 static void rtl8153c_change_mtu(struct r8152 *tp) in rtl8153c_change_mtu() argument
6510 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu)); in rtl8153c_change_mtu()
6511 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, 10 * 1024 / 64); in rtl8153c_change_mtu()
6513 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, 512 / 64); in rtl8153c_change_mtu()
6518 if (tp->netdev->mtu < 8000) in rtl8153c_change_mtu()
6519 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, 2048 / 8); in rtl8153c_change_mtu()
6521 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, 900 / 8); in rtl8153c_change_mtu()
6524 static void rtl8153c_up(struct r8152 *tp) in rtl8153c_up() argument
6528 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153c_up()
6531 r8153b_u1u2en(tp, false); in rtl8153c_up()
6532 r8153_u2p3en(tp, false); in rtl8153c_up()
6533 r8153_aldps_en(tp, false); in rtl8153c_up()
6535 rxdy_gated_en(tp, true); in rtl8153c_up()
6536 r8153_teredo_off(tp); in rtl8153c_up()
6538 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8153c_up()
6540 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8153c_up()
6542 rtl8152_nic_reset(tp); in rtl8153c_up()
6543 rtl_reset_bmu(tp); in rtl8153c_up()
6545 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8153c_up()
6547 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8153c_up()
6549 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8153c_up()
6551 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8153c_up()
6553 wait_oob_link_list_ready(tp); in rtl8153c_up()
6555 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8153c_up()
6557 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8153c_up()
6559 wait_oob_link_list_ready(tp); in rtl8153c_up()
6561 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8153c_up()
6563 rtl8153c_change_mtu(tp); in rtl8153c_up()
6565 rtl8152_nic_reset(tp); in rtl8153c_up()
6568 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, 0x02); in rtl8153c_up()
6569 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, 0x08); in rtl8153c_up()
6570 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL); in rtl8153c_up()
6571 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL); in rtl8153c_up()
6573 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B); in rtl8153c_up()
6575 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in rtl8153c_up()
6577 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); in rtl8153c_up()
6579 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); in rtl8153c_up()
6581 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); in rtl8153c_up()
6583 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8153c_up()
6585 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8153c_up()
6587 r8153_aldps_en(tp, true); in rtl8153c_up()
6588 r8153b_u1u2en(tp, true); in rtl8153c_up()
6591 static void rtl8156_change_mtu(struct r8152 *tp) in rtl8156_change_mtu() argument
6593 u32 rx_max_size = mtu_to_size(tp->netdev->mtu); in rtl8156_change_mtu()
6595 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rx_max_size); in rtl8156_change_mtu()
6596 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); in rtl8156_change_mtu()
6597 r8156_fc_parameter(tp); in rtl8156_change_mtu()
6600 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, 512 / 64); in rtl8156_change_mtu()
6601 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, in rtl8156_change_mtu()
6605 static void rtl8156_up(struct r8152 *tp) in rtl8156_up() argument
6609 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8156_up()
6612 r8153b_u1u2en(tp, false); in rtl8156_up()
6613 r8153_u2p3en(tp, false); in rtl8156_up()
6614 r8153_aldps_en(tp, false); in rtl8156_up()
6616 rxdy_gated_en(tp, true); in rtl8156_up()
6617 r8153_teredo_off(tp); in rtl8156_up()
6619 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8156_up()
6621 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8156_up()
6623 rtl8152_nic_reset(tp); in rtl8156_up()
6624 rtl_reset_bmu(tp); in rtl8156_up()
6626 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8156_up()
6628 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8156_up()
6630 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8156_up()
6632 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8156_up()
6634 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); in rtl8156_up()
6636 rtl8156_change_mtu(tp); in rtl8156_up()
6638 switch (tp->version) { in rtl8156_up()
6642 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG); in rtl8156_up()
6644 ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data); in rtl8156_up()
6651 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL); in rtl8156_up()
6654 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, ocp_data); in rtl8156_up()
6656 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8156_up()
6658 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8156_up()
6660 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION); in rtl8156_up()
6662 ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, ocp_data); in rtl8156_up()
6664 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, 0x00600400); in rtl8156_up()
6666 if (tp->saved_wolopts != __rtl_get_wol(tp)) { in rtl8156_up()
6667 netif_warn(tp, ifup, tp->netdev, "wol setting is changed\n"); in rtl8156_up()
6668 __rtl_set_wol(tp, tp->saved_wolopts); in rtl8156_up()
6671 r8153_aldps_en(tp, true); in rtl8156_up()
6672 r8153_u2p3en(tp, true); in rtl8156_up()
6674 if (tp->udev->speed >= USB_SPEED_SUPER) in rtl8156_up()
6675 r8153b_u1u2en(tp, true); in rtl8156_up()
6678 static void rtl8156_down(struct r8152 *tp) in rtl8156_down() argument
6682 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8156_down()
6683 rtl_drop_queued_tx(tp); in rtl8156_down()
6687 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in rtl8156_down()
6689 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in rtl8156_down()
6691 r8153b_u1u2en(tp, false); in rtl8156_down()
6692 r8153_u2p3en(tp, false); in rtl8156_down()
6693 r8153b_power_cut_en(tp, false); in rtl8156_down()
6694 r8153_aldps_en(tp, false); in rtl8156_down()
6696 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8156_down()
6698 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8156_down()
6701 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, 64 / 16); in rtl8156_down()
6702 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_FULL, 1024 / 16); in rtl8156_down()
6703 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_EMPTY, 4096 / 16); in rtl8156_down()
6705 rtl_disable(tp); in rtl8156_down()
6706 rtl_reset_bmu(tp); in rtl8156_down()
6708 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, 1522); in rtl8156_down()
6709 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_DEFAULT); in rtl8156_down()
6715 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff); in rtl8156_down()
6717 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); in rtl8156_down()
6719 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); in rtl8156_down()
6721 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); in rtl8156_down()
6723 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data); in rtl8156_down()
6725 rtl_rx_vlan_en(tp, true); in rtl8156_down()
6726 rxdy_gated_en(tp, false); in rtl8156_down()
6728 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8156_down()
6730 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8156_down()
6732 r8153_aldps_en(tp, true); in rtl8156_down()
6735 static bool rtl8152_in_nway(struct r8152 *tp) in rtl8152_in_nway() argument
6739 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000); in rtl8152_in_nway()
6740 tp->ocp_base = 0x2000; in rtl8152_in_nway()
6741 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */ in rtl8152_in_nway()
6742 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a); in rtl8152_in_nway()
6751 static bool rtl8153_in_nway(struct r8152 *tp) in rtl8153_in_nway() argument
6753 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff; in rtl8153_in_nway()
6761 static void r8156_mdio_force_mode(struct r8152 *tp) in r8156_mdio_force_mode() argument
6769 data = ocp_reg_read(tp, 0xa5b4); in r8156_mdio_force_mode()
6772 ocp_reg_write(tp, 0xa5b4, data); in r8156_mdio_force_mode()
6776 static void set_carrier(struct r8152 *tp) in set_carrier() argument
6778 struct net_device *netdev = tp->netdev; in set_carrier()
6779 struct napi_struct *napi = &tp->napi; in set_carrier()
6782 speed = rtl8152_get_speed(tp); in set_carrier()
6786 tp->rtl_ops.enable(tp); in set_carrier()
6790 rtl_start_rx(tp); in set_carrier()
6791 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in set_carrier()
6795 netif_info(tp, link, netdev, "carrier on\n"); in set_carrier()
6797 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) { in set_carrier()
6803 tasklet_disable(&tp->tx_tl); in set_carrier()
6805 tp->rtl_ops.disable(tp); in set_carrier()
6807 tasklet_enable(&tp->tx_tl); in set_carrier()
6808 netif_info(tp, link, netdev, "carrier off\n"); in set_carrier()
6815 struct r8152 *tp = container_of(work, struct r8152, schedule.work); in rtl_work_func_t() local
6820 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags) || !netif_running(tp->netdev)) in rtl_work_func_t()
6823 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_work_func_t()
6826 if (!test_bit(WORK_ENABLE, &tp->flags)) in rtl_work_func_t()
6829 if (!mutex_trylock(&tp->control)) { in rtl_work_func_t()
6830 schedule_delayed_work(&tp->schedule, 0); in rtl_work_func_t()
6834 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags)) in rtl_work_func_t()
6835 set_carrier(tp); in rtl_work_func_t()
6837 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags)) in rtl_work_func_t()
6838 _rtl8152_set_rx_mode(tp->netdev); in rtl_work_func_t()
6841 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) && in rtl_work_func_t()
6842 netif_carrier_ok(tp->netdev)) in rtl_work_func_t()
6843 tasklet_schedule(&tp->tx_tl); in rtl_work_func_t()
6845 if (test_and_clear_bit(RX_EPROTO, &tp->flags) && in rtl_work_func_t()
6846 !list_empty(&tp->rx_done)) in rtl_work_func_t()
6847 napi_schedule(&tp->napi); in rtl_work_func_t()
6849 mutex_unlock(&tp->control); in rtl_work_func_t()
6852 usb_autopm_put_interface(tp->intf); in rtl_work_func_t()
6857 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work); in rtl_hw_phy_work_func_t() local
6859 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl_hw_phy_work_func_t()
6862 if (usb_autopm_get_interface(tp->intf) < 0) in rtl_hw_phy_work_func_t()
6865 mutex_lock(&tp->control); in rtl_hw_phy_work_func_t()
6867 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) { in rtl_hw_phy_work_func_t()
6868 tp->rtl_fw.retry = false; in rtl_hw_phy_work_func_t()
6869 tp->rtl_fw.fw = NULL; in rtl_hw_phy_work_func_t()
6873 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10); in rtl_hw_phy_work_func_t()
6877 tp->rtl_ops.hw_phy_cfg(tp); in rtl_hw_phy_work_func_t()
6879 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex, in rtl_hw_phy_work_func_t()
6880 tp->advertising); in rtl_hw_phy_work_func_t()
6883 mutex_unlock(&tp->control); in rtl_hw_phy_work_func_t()
6885 usb_autopm_put_interface(tp->intf); in rtl_hw_phy_work_func_t()
6892 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier); in rtl_notifier() local
6897 usb_autopm_get_interface(tp->intf); in rtl_notifier()
6902 usb_autopm_put_interface(tp->intf); in rtl_notifier()
6917 struct r8152 *tp = netdev_priv(netdev); in rtl8152_open() local
6920 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) { in rtl8152_open()
6921 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_open()
6922 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work); in rtl8152_open()
6925 res = alloc_all_mem(tp); in rtl8152_open()
6929 res = usb_autopm_get_interface(tp->intf); in rtl8152_open()
6933 mutex_lock(&tp->control); in rtl8152_open()
6935 tp->rtl_ops.up(tp); in rtl8152_open()
6939 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_open()
6941 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_open()
6944 netif_device_detach(tp->netdev); in rtl8152_open()
6945 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", in rtl8152_open()
6949 napi_enable(&tp->napi); in rtl8152_open()
6950 tasklet_enable(&tp->tx_tl); in rtl8152_open()
6952 mutex_unlock(&tp->control); in rtl8152_open()
6954 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6956 tp->pm_notifier.notifier_call = rtl_notifier; in rtl8152_open()
6957 register_pm_notifier(&tp->pm_notifier); in rtl8152_open()
6962 mutex_unlock(&tp->control); in rtl8152_open()
6963 usb_autopm_put_interface(tp->intf); in rtl8152_open()
6965 free_all_mem(tp); in rtl8152_open()
6972 struct r8152 *tp = netdev_priv(netdev); in rtl8152_close() local
6976 unregister_pm_notifier(&tp->pm_notifier); in rtl8152_close()
6978 tasklet_disable(&tp->tx_tl); in rtl8152_close()
6979 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_close()
6980 usb_kill_urb(tp->intr_urb); in rtl8152_close()
6981 cancel_delayed_work_sync(&tp->schedule); in rtl8152_close()
6982 napi_disable(&tp->napi); in rtl8152_close()
6985 res = usb_autopm_get_interface(tp->intf); in rtl8152_close()
6986 if (res < 0 || test_bit(RTL8152_INACCESSIBLE, &tp->flags)) { in rtl8152_close()
6987 rtl_drop_queued_tx(tp); in rtl8152_close()
6988 rtl_stop_rx(tp); in rtl8152_close()
6990 mutex_lock(&tp->control); in rtl8152_close()
6992 tp->rtl_ops.down(tp); in rtl8152_close()
6994 mutex_unlock(&tp->control); in rtl8152_close()
6998 usb_autopm_put_interface(tp->intf); in rtl8152_close()
7000 free_all_mem(tp); in rtl8152_close()
7005 static void rtl_tally_reset(struct r8152 *tp) in rtl_tally_reset() argument
7009 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); in rtl_tally_reset()
7011 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); in rtl_tally_reset()
7014 static void r8152b_init(struct r8152 *tp) in r8152b_init() argument
7019 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8152b_init()
7022 data = r8152_mdio_read(tp, MII_BMCR); in r8152b_init()
7025 r8152_mdio_write(tp, MII_BMCR, data); in r8152b_init()
7028 r8152_aldps_en(tp, false); in r8152b_init()
7030 if (tp->version == RTL_VER_01) { in r8152b_init()
7031 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8152b_init()
7033 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8152b_init()
7036 r8152_power_cut_en(tp, false); in r8152b_init()
7038 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8152b_init()
7040 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8152b_init()
7041 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL); in r8152b_init()
7044 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data); in r8152b_init()
7047 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data); in r8152b_init()
7049 rtl_tally_reset(tp); in r8152b_init()
7052 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8152b_init()
7054 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8152b_init()
7057 static void r8153_init(struct r8152 *tp) in r8153_init() argument
7063 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_init()
7066 r8153_u1u2en(tp, false); in r8153_init()
7069 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153_init()
7074 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153_init()
7078 data = r8153_phy_status(tp, 0); in r8153_init()
7080 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 || in r8153_init()
7081 tp->version == RTL_VER_05) in r8153_init()
7082 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); in r8153_init()
7084 data = r8152_mdio_read(tp, MII_BMCR); in r8153_init()
7087 r8152_mdio_write(tp, MII_BMCR, data); in r8153_init()
7090 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153_init()
7092 r8153_u2p3en(tp, false); in r8153_init()
7094 if (tp->version == RTL_VER_04) { in r8153_init()
7095 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2); in r8153_init()
7098 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data); in r8153_init()
7100 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY); in r8153_init()
7102 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data); in r8153_init()
7103 } else if (tp->version == RTL_VER_05) { in r8153_init()
7104 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0); in r8153_init()
7106 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data); in r8153_init()
7108 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
7109 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
7113 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
7114 } else if (tp->version == RTL_VER_06) { in r8153_init()
7115 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1); in r8153_init()
7116 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0) in r8153_init()
7120 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data); in r8153_init()
7122 r8153_queue_wake(tp, false); in r8153_init()
7124 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153_init()
7125 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153_init()
7130 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153_init()
7133 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2); in r8153_init()
7135 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data); in r8153_init()
7137 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); in r8153_init()
7139 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); in r8153_init()
7141 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); in r8153_init()
7143 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); in r8153_init()
7146 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER) in r8153_init()
7150 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data); in r8153_init()
7152 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2); in r8153_init()
7155 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); in r8153_init()
7157 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001); in r8153_init()
7159 r8153_power_cut_en(tp, false); in r8153_init()
7160 rtl_runtime_suspend_enable(tp, false); in r8153_init()
7161 r8153_mac_clk_speed_down(tp, false); in r8153_init()
7162 r8153_u1u2en(tp, true); in r8153_init()
7163 usb_enable_lpm(tp->udev); in r8153_init()
7165 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6); in r8153_init()
7167 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data); in r8153_init()
7169 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG); in r8153_init()
7171 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data); in r8153_init()
7174 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153_init()
7176 if (tp->dell_tb_rx_agg_bug) in r8153_init()
7179 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153_init()
7181 rtl_tally_reset(tp); in r8153_init()
7183 switch (tp->udev->speed) { in r8153_init()
7186 tp->coalesce = COALESCE_SUPER; in r8153_init()
7189 tp->coalesce = COALESCE_HIGH; in r8153_init()
7192 tp->coalesce = COALESCE_SLOW; in r8153_init()
7197 static void r8153b_init(struct r8152 *tp) in r8153b_init() argument
7203 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_init()
7206 r8153b_u1u2en(tp, false); in r8153b_init()
7209 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153b_init()
7214 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153b_init()
7218 data = r8153_phy_status(tp, 0); in r8153b_init()
7220 data = r8152_mdio_read(tp, MII_BMCR); in r8153b_init()
7223 r8152_mdio_write(tp, MII_BMCR, data); in r8153b_init()
7226 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153b_init()
7228 r8153_u2p3en(tp, false); in r8153b_init()
7231 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153b_init()
7233 r8153b_power_cut_en(tp, false); in r8153b_init()
7234 r8153b_ups_en(tp, false); in r8153b_init()
7235 r8153_queue_wake(tp, false); in r8153b_init()
7236 rtl_runtime_suspend_enable(tp, false); in r8153b_init()
7238 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153b_init()
7239 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153b_init()
7244 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153b_init()
7246 if (tp->udev->speed >= USB_SPEED_SUPER) in r8153b_init()
7247 r8153b_u1u2en(tp, true); in r8153b_init()
7249 usb_enable_lpm(tp->udev); in r8153b_init()
7252 r8153_mac_clk_speed_down(tp, true); in r8153b_init()
7254 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8153b_init()
7256 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8153b_init()
7258 if (tp->version == RTL_VER_09) { in r8153b_init()
7260 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) { in r8153b_init()
7261 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8153b_init()
7263 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8153b_init()
7267 set_bit(GREEN_ETHERNET, &tp->flags); in r8153b_init()
7270 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153b_init()
7272 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153b_init()
7274 rtl_tally_reset(tp); in r8153b_init()
7276 tp->coalesce = 15000; /* 15 us */ in r8153b_init()
7279 static void r8153c_init(struct r8152 *tp) in r8153c_init() argument
7285 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_init()
7288 r8153b_u1u2en(tp, false); in r8153c_init()
7291 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); in r8153c_init()
7292 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); in r8153c_init()
7294 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); in r8153c_init()
7295 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcbf0); in r8153c_init()
7297 ocp_write_word(tp, MCU_TYPE_USB, 0xcbf0, ocp_data); in r8153c_init()
7300 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8153c_init()
7305 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8153c_init()
7309 data = r8153_phy_status(tp, 0); in r8153c_init()
7311 data = r8152_mdio_read(tp, MII_BMCR); in r8153c_init()
7314 r8152_mdio_write(tp, MII_BMCR, data); in r8153c_init()
7317 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8153c_init()
7319 r8153_u2p3en(tp, false); in r8153c_init()
7322 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8153c_init()
7324 r8153b_power_cut_en(tp, false); in r8153c_init()
7325 r8153c_ups_en(tp, false); in r8153c_init()
7326 r8153_queue_wake(tp, false); in r8153c_init()
7327 rtl_runtime_suspend_enable(tp, false); in r8153c_init()
7329 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8153c_init()
7330 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8153c_init()
7336 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8153c_init()
7338 r8153b_u1u2en(tp, true); in r8153c_init()
7340 usb_enable_lpm(tp->udev); in r8153c_init()
7343 r8153_mac_clk_speed_down(tp, true); in r8153c_init()
7345 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2); in r8153c_init()
7347 ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data); in r8153c_init()
7349 set_bit(GREEN_ETHERNET, &tp->flags); in r8153c_init()
7352 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8153c_init()
7354 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8153c_init()
7356 rtl_tally_reset(tp); in r8153c_init()
7358 tp->coalesce = 15000; /* 15 us */ in r8153c_init()
7361 static void r8156_hw_phy_cfg(struct r8152 *tp) in r8156_hw_phy_cfg() argument
7366 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8156_hw_phy_cfg()
7369 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8156_hw_phy_cfg()
7372 data = r8153_phy_status(tp, 0); in r8156_hw_phy_cfg()
7375 rtl8152_apply_firmware(tp, true); in r8156_hw_phy_cfg()
7377 data = ocp_reg_read(tp, 0xa468); in r8156_hw_phy_cfg()
7379 ocp_reg_write(tp, 0xa468, data); in r8156_hw_phy_cfg()
7384 rtl8152_apply_firmware(tp, false); in r8156_hw_phy_cfg()
7389 r8153_aldps_en(tp, false); in r8156_hw_phy_cfg()
7392 rtl_eee_enable(tp, false); in r8156_hw_phy_cfg()
7394 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156_hw_phy_cfg()
7397 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8156_hw_phy_cfg()
7399 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8156_hw_phy_cfg()
7401 switch (tp->version) { in r8156_hw_phy_cfg()
7403 data = ocp_reg_read(tp, 0xad40); in r8156_hw_phy_cfg()
7406 ocp_reg_write(tp, 0xad40, data); in r8156_hw_phy_cfg()
7408 data = ocp_reg_read(tp, 0xad4e); in r8156_hw_phy_cfg()
7410 ocp_reg_write(tp, 0xad4e, data); in r8156_hw_phy_cfg()
7411 data = ocp_reg_read(tp, 0xad16); in r8156_hw_phy_cfg()
7414 ocp_reg_write(tp, 0xad16, data); in r8156_hw_phy_cfg()
7415 data = ocp_reg_read(tp, 0xad32); in r8156_hw_phy_cfg()
7418 ocp_reg_write(tp, 0xad32, data); in r8156_hw_phy_cfg()
7419 data = ocp_reg_read(tp, 0xac08); in r8156_hw_phy_cfg()
7421 ocp_reg_write(tp, 0xac08, data); in r8156_hw_phy_cfg()
7422 data = ocp_reg_read(tp, 0xac8a); in r8156_hw_phy_cfg()
7425 ocp_reg_write(tp, 0xac8a, data); in r8156_hw_phy_cfg()
7426 data = ocp_reg_read(tp, 0xad18); in r8156_hw_phy_cfg()
7428 ocp_reg_write(tp, 0xad18, data); in r8156_hw_phy_cfg()
7429 data = ocp_reg_read(tp, 0xad1a); in r8156_hw_phy_cfg()
7431 ocp_reg_write(tp, 0xad1a, data); in r8156_hw_phy_cfg()
7432 data = ocp_reg_read(tp, 0xad1c); in r8156_hw_phy_cfg()
7434 ocp_reg_write(tp, 0xad1c, data); in r8156_hw_phy_cfg()
7436 data = sram_read(tp, 0x80ea); in r8156_hw_phy_cfg()
7439 sram_write(tp, 0x80ea, data); in r8156_hw_phy_cfg()
7440 data = sram_read(tp, 0x80eb); in r8156_hw_phy_cfg()
7443 sram_write(tp, 0x80eb, data); in r8156_hw_phy_cfg()
7444 data = sram_read(tp, 0x80f8); in r8156_hw_phy_cfg()
7447 sram_write(tp, 0x80f8, data); in r8156_hw_phy_cfg()
7448 data = sram_read(tp, 0x80f1); in r8156_hw_phy_cfg()
7451 sram_write(tp, 0x80f1, data); in r8156_hw_phy_cfg()
7453 data = sram_read(tp, 0x80fe); in r8156_hw_phy_cfg()
7456 sram_write(tp, 0x80fe, data); in r8156_hw_phy_cfg()
7457 data = sram_read(tp, 0x8102); in r8156_hw_phy_cfg()
7460 sram_write(tp, 0x8102, data); in r8156_hw_phy_cfg()
7461 data = sram_read(tp, 0x8015); in r8156_hw_phy_cfg()
7464 sram_write(tp, 0x8015, data); in r8156_hw_phy_cfg()
7465 data = sram_read(tp, 0x8100); in r8156_hw_phy_cfg()
7468 sram_write(tp, 0x8100, data); in r8156_hw_phy_cfg()
7469 data = sram_read(tp, 0x8014); in r8156_hw_phy_cfg()
7472 sram_write(tp, 0x8014, data); in r8156_hw_phy_cfg()
7473 data = sram_read(tp, 0x8016); in r8156_hw_phy_cfg()
7476 sram_write(tp, 0x8016, data); in r8156_hw_phy_cfg()
7477 data = sram_read(tp, 0x80dc); in r8156_hw_phy_cfg()
7480 sram_write(tp, 0x80dc, data); in r8156_hw_phy_cfg()
7481 data = sram_read(tp, 0x80df); in r8156_hw_phy_cfg()
7483 sram_write(tp, 0x80df, data); in r8156_hw_phy_cfg()
7484 data = sram_read(tp, 0x80e1); in r8156_hw_phy_cfg()
7486 sram_write(tp, 0x80e1, data); in r8156_hw_phy_cfg()
7488 data = ocp_reg_read(tp, 0xbf06); in r8156_hw_phy_cfg()
7491 ocp_reg_write(tp, 0xbf06, data); in r8156_hw_phy_cfg()
7493 sram_write(tp, 0x819f, 0xddb6); in r8156_hw_phy_cfg()
7495 ocp_reg_write(tp, 0xbc34, 0x5555); in r8156_hw_phy_cfg()
7496 data = ocp_reg_read(tp, 0xbf0a); in r8156_hw_phy_cfg()
7499 ocp_reg_write(tp, 0xbf0a, data); in r8156_hw_phy_cfg()
7501 data = ocp_reg_read(tp, 0xbd2c); in r8156_hw_phy_cfg()
7503 ocp_reg_write(tp, 0xbd2c, data); in r8156_hw_phy_cfg()
7506 data = ocp_reg_read(tp, 0xad16); in r8156_hw_phy_cfg()
7508 ocp_reg_write(tp, 0xad16, data); in r8156_hw_phy_cfg()
7509 data = ocp_reg_read(tp, 0xad32); in r8156_hw_phy_cfg()
7512 ocp_reg_write(tp, 0xad32, data); in r8156_hw_phy_cfg()
7513 data = ocp_reg_read(tp, 0xac08); in r8156_hw_phy_cfg()
7515 ocp_reg_write(tp, 0xac08, data); in r8156_hw_phy_cfg()
7516 data = ocp_reg_read(tp, 0xacc0); in r8156_hw_phy_cfg()
7519 ocp_reg_write(tp, 0xacc0, data); in r8156_hw_phy_cfg()
7520 data = ocp_reg_read(tp, 0xad40); in r8156_hw_phy_cfg()
7523 ocp_reg_write(tp, 0xad40, data); in r8156_hw_phy_cfg()
7524 data = ocp_reg_read(tp, 0xac14); in r8156_hw_phy_cfg()
7526 ocp_reg_write(tp, 0xac14, data); in r8156_hw_phy_cfg()
7527 data = ocp_reg_read(tp, 0xac80); in r8156_hw_phy_cfg()
7529 ocp_reg_write(tp, 0xac80, data); in r8156_hw_phy_cfg()
7530 data = ocp_reg_read(tp, 0xac5e); in r8156_hw_phy_cfg()
7533 ocp_reg_write(tp, 0xac5e, data); in r8156_hw_phy_cfg()
7534 ocp_reg_write(tp, 0xad4c, 0x00a8); in r8156_hw_phy_cfg()
7535 ocp_reg_write(tp, 0xac5c, 0x01ff); in r8156_hw_phy_cfg()
7536 data = ocp_reg_read(tp, 0xac8a); in r8156_hw_phy_cfg()
7539 ocp_reg_write(tp, 0xac8a, data); in r8156_hw_phy_cfg()
7540 ocp_reg_write(tp, 0xb87c, 0x8157); in r8156_hw_phy_cfg()
7541 data = ocp_reg_read(tp, 0xb87e); in r8156_hw_phy_cfg()
7544 ocp_reg_write(tp, 0xb87e, data); in r8156_hw_phy_cfg()
7545 ocp_reg_write(tp, 0xb87c, 0x8159); in r8156_hw_phy_cfg()
7546 data = ocp_reg_read(tp, 0xb87e); in r8156_hw_phy_cfg()
7549 ocp_reg_write(tp, 0xb87e, data); in r8156_hw_phy_cfg()
7552 ocp_reg_write(tp, 0xb87c, 0x80a2); in r8156_hw_phy_cfg()
7553 ocp_reg_write(tp, 0xb87e, 0x0153); in r8156_hw_phy_cfg()
7554 ocp_reg_write(tp, 0xb87c, 0x809c); in r8156_hw_phy_cfg()
7555 ocp_reg_write(tp, 0xb87e, 0x0153); in r8156_hw_phy_cfg()
7558 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS_2P5G, 0x0056); in r8156_hw_phy_cfg()
7560 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_USB_CFG); in r8156_hw_phy_cfg()
7562 ocp_write_word(tp, MCU_TYPE_PLA, PLA_USB_CFG, ocp_data); in r8156_hw_phy_cfg()
7564 sram_write(tp, 0x8257, 0x020f); /* XG PLL */ in r8156_hw_phy_cfg()
7565 sram_write(tp, 0x80ea, 0x7843); /* GIGA Master */ in r8156_hw_phy_cfg()
7567 if (rtl_phy_patch_request(tp, true, true)) in r8156_hw_phy_cfg()
7571 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in r8156_hw_phy_cfg()
7573 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in r8156_hw_phy_cfg()
7575 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8156_hw_phy_cfg()
7578 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8156_hw_phy_cfg()
7579 tp->ups_info._10m_ckdiv = true; in r8156_hw_phy_cfg()
7580 tp->ups_info.eee_plloff_100 = false; in r8156_hw_phy_cfg()
7581 tp->ups_info.eee_plloff_giga = false; in r8156_hw_phy_cfg()
7583 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8156_hw_phy_cfg()
7585 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8156_hw_phy_cfg()
7586 tp->ups_info.eee_ckdiv = false; in r8156_hw_phy_cfg()
7588 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0); in r8156_hw_phy_cfg()
7589 ocp_reg_write(tp, OCP_SYSCLK_CFG, sysclk_div_expo(5)); in r8156_hw_phy_cfg()
7590 tp->ups_info._250m_ckdiv = false; in r8156_hw_phy_cfg()
7592 rtl_phy_patch_request(tp, false, true); in r8156_hw_phy_cfg()
7595 data = ocp_reg_read(tp, 0xd068); in r8156_hw_phy_cfg()
7597 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7600 data = sram_read(tp, 0x81a2); in r8156_hw_phy_cfg()
7602 sram_write(tp, 0x81a2, data); in r8156_hw_phy_cfg()
7603 data = ocp_reg_read(tp, 0xb54c); in r8156_hw_phy_cfg()
7606 ocp_reg_write(tp, 0xb54c, data); in r8156_hw_phy_cfg()
7609 data = ocp_reg_read(tp, 0xa454); in r8156_hw_phy_cfg()
7611 ocp_reg_write(tp, 0xa454, data); in r8156_hw_phy_cfg()
7614 data = ocp_reg_read(tp, OCP_10GBT_CTRL); in r8156_hw_phy_cfg()
7616 ocp_reg_write(tp, OCP_10GBT_CTRL, data); in r8156_hw_phy_cfg()
7617 data = ocp_reg_read(tp, 0xad4e); in r8156_hw_phy_cfg()
7619 ocp_reg_write(tp, 0xad4e, data); in r8156_hw_phy_cfg()
7620 data = ocp_reg_read(tp, 0xa86a); in r8156_hw_phy_cfg()
7622 ocp_reg_write(tp, 0xa86a, data); in r8156_hw_phy_cfg()
7625 if ((ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG) & MID_REVERSE) && in r8156_hw_phy_cfg()
7626 (ocp_reg_read(tp, 0xd068) & BIT(1))) { in r8156_hw_phy_cfg()
7629 data = ocp_reg_read(tp, 0xd068); in r8156_hw_phy_cfg()
7632 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7633 swap_a = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7636 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7637 swap_b = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7639 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7640 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7643 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7644 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7648 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7649 swap_a = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7652 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7653 swap_b = ocp_reg_read(tp, 0xd06a); in r8156_hw_phy_cfg()
7656 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7657 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7661 ocp_reg_write(tp, 0xd068, data); in r8156_hw_phy_cfg()
7662 ocp_reg_write(tp, 0xd06a, in r8156_hw_phy_cfg()
7664 swap_a = ocp_reg_read(tp, 0xbd5a); in r8156_hw_phy_cfg()
7665 swap_b = ocp_reg_read(tp, 0xbd5c); in r8156_hw_phy_cfg()
7666 ocp_reg_write(tp, 0xbd5a, (swap_a & ~0x1f1f) | in r8156_hw_phy_cfg()
7669 ocp_reg_write(tp, 0xbd5c, (swap_b & ~0x1f1f) | in r8156_hw_phy_cfg()
7672 swap_a = ocp_reg_read(tp, 0xbc18); in r8156_hw_phy_cfg()
7673 swap_b = ocp_reg_read(tp, 0xbc1a); in r8156_hw_phy_cfg()
7674 ocp_reg_write(tp, 0xbc18, (swap_a & ~0x1f1f) | in r8156_hw_phy_cfg()
7677 ocp_reg_write(tp, 0xbc1a, (swap_b & ~0x1f1f) | in r8156_hw_phy_cfg()
7683 data = ocp_reg_read(tp, OCP_INTR_EN); in r8156_hw_phy_cfg()
7685 ocp_reg_write(tp, OCP_INTR_EN, data); in r8156_hw_phy_cfg()
7691 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156_hw_phy_cfg()
7693 data = ocp_reg_read(tp, 0xa428); in r8156_hw_phy_cfg()
7695 ocp_reg_write(tp, 0xa428, data); in r8156_hw_phy_cfg()
7696 data = ocp_reg_read(tp, 0xa5ea); in r8156_hw_phy_cfg()
7698 ocp_reg_write(tp, 0xa5ea, data); in r8156_hw_phy_cfg()
7699 tp->ups_info.lite_mode = 0; in r8156_hw_phy_cfg()
7701 if (tp->eee_en) in r8156_hw_phy_cfg()
7702 rtl_eee_enable(tp, true); in r8156_hw_phy_cfg()
7704 r8153_aldps_en(tp, true); in r8156_hw_phy_cfg()
7705 r8152b_enable_fc(tp); in r8156_hw_phy_cfg()
7706 r8153_u2p3en(tp, true); in r8156_hw_phy_cfg()
7708 set_bit(PHY_RESET, &tp->flags); in r8156_hw_phy_cfg()
7711 static void r8156b_hw_phy_cfg(struct r8152 *tp) in r8156b_hw_phy_cfg() argument
7716 switch (tp->version) { in r8156b_hw_phy_cfg()
7718 ocp_reg_write(tp, 0xbf86, 0x9000); in r8156b_hw_phy_cfg()
7719 data = ocp_reg_read(tp, 0xc402); in r8156b_hw_phy_cfg()
7721 ocp_reg_write(tp, 0xc402, data); in r8156b_hw_phy_cfg()
7723 ocp_reg_write(tp, 0xc402, data); in r8156b_hw_phy_cfg()
7724 ocp_reg_write(tp, 0xbd86, 0x1010); in r8156b_hw_phy_cfg()
7725 ocp_reg_write(tp, 0xbd88, 0x1010); in r8156b_hw_phy_cfg()
7726 data = ocp_reg_read(tp, 0xbd4e); in r8156b_hw_phy_cfg()
7729 ocp_reg_write(tp, 0xbd4e, data); in r8156b_hw_phy_cfg()
7730 data = ocp_reg_read(tp, 0xbf46); in r8156b_hw_phy_cfg()
7733 ocp_reg_write(tp, 0xbf46, data); in r8156b_hw_phy_cfg()
7737 r8156b_wait_loading_flash(tp); in r8156b_hw_phy_cfg()
7743 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0); in r8156b_hw_phy_cfg()
7746 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); in r8156b_hw_phy_cfg()
7749 data = r8153_phy_status(tp, 0); in r8156b_hw_phy_cfg()
7752 rtl8152_apply_firmware(tp, true); in r8156b_hw_phy_cfg()
7754 data = ocp_reg_read(tp, 0xa466); in r8156b_hw_phy_cfg()
7756 ocp_reg_write(tp, 0xa466, data); in r8156b_hw_phy_cfg()
7758 data = ocp_reg_read(tp, 0xa468); in r8156b_hw_phy_cfg()
7760 ocp_reg_write(tp, 0xa468, data); in r8156b_hw_phy_cfg()
7765 rtl8152_apply_firmware(tp, false); in r8156b_hw_phy_cfg()
7769 data = r8152_mdio_read(tp, MII_BMCR); in r8156b_hw_phy_cfg()
7772 r8152_mdio_write(tp, MII_BMCR, data); in r8156b_hw_phy_cfg()
7776 r8153_aldps_en(tp, false); in r8156b_hw_phy_cfg()
7779 rtl_eee_enable(tp, false); in r8156b_hw_phy_cfg()
7781 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156b_hw_phy_cfg()
7784 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); in r8156b_hw_phy_cfg()
7786 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data); in r8156b_hw_phy_cfg()
7788 switch (tp->version) { in r8156b_hw_phy_cfg()
7790 data = ocp_reg_read(tp, 0xbc08); in r8156b_hw_phy_cfg()
7792 ocp_reg_write(tp, 0xbc08, data); in r8156b_hw_phy_cfg()
7794 data = sram_read(tp, 0x8fff); in r8156b_hw_phy_cfg()
7797 sram_write(tp, 0x8fff, data); in r8156b_hw_phy_cfg()
7799 data = ocp_reg_read(tp, 0xacda); in r8156b_hw_phy_cfg()
7801 ocp_reg_write(tp, 0xacda, data); in r8156b_hw_phy_cfg()
7802 data = ocp_reg_read(tp, 0xacde); in r8156b_hw_phy_cfg()
7804 ocp_reg_write(tp, 0xacde, data); in r8156b_hw_phy_cfg()
7805 ocp_reg_write(tp, 0xac8c, 0x0ffc); in r8156b_hw_phy_cfg()
7806 ocp_reg_write(tp, 0xac46, 0xb7b4); in r8156b_hw_phy_cfg()
7807 ocp_reg_write(tp, 0xac50, 0x0fbc); in r8156b_hw_phy_cfg()
7808 ocp_reg_write(tp, 0xac3c, 0x9240); in r8156b_hw_phy_cfg()
7809 ocp_reg_write(tp, 0xac4e, 0x0db4); in r8156b_hw_phy_cfg()
7810 ocp_reg_write(tp, 0xacc6, 0x0707); in r8156b_hw_phy_cfg()
7811 ocp_reg_write(tp, 0xacc8, 0xa0d3); in r8156b_hw_phy_cfg()
7812 ocp_reg_write(tp, 0xad08, 0x0007); in r8156b_hw_phy_cfg()
7814 ocp_reg_write(tp, 0xb87c, 0x8560); in r8156b_hw_phy_cfg()
7815 ocp_reg_write(tp, 0xb87e, 0x19cc); in r8156b_hw_phy_cfg()
7816 ocp_reg_write(tp, 0xb87c, 0x8562); in r8156b_hw_phy_cfg()
7817 ocp_reg_write(tp, 0xb87e, 0x19cc); in r8156b_hw_phy_cfg()
7818 ocp_reg_write(tp, 0xb87c, 0x8564); in r8156b_hw_phy_cfg()
7819 ocp_reg_write(tp, 0xb87e, 0x19cc); in r8156b_hw_phy_cfg()
7820 ocp_reg_write(tp, 0xb87c, 0x8566); in r8156b_hw_phy_cfg()
7821 ocp_reg_write(tp, 0xb87e, 0x147d); in r8156b_hw_phy_cfg()
7822 ocp_reg_write(tp, 0xb87c, 0x8568); in r8156b_hw_phy_cfg()
7823 ocp_reg_write(tp, 0xb87e, 0x147d); in r8156b_hw_phy_cfg()
7824 ocp_reg_write(tp, 0xb87c, 0x856a); in r8156b_hw_phy_cfg()
7825 ocp_reg_write(tp, 0xb87e, 0x147d); in r8156b_hw_phy_cfg()
7826 ocp_reg_write(tp, 0xb87c, 0x8ffe); in r8156b_hw_phy_cfg()
7827 ocp_reg_write(tp, 0xb87e, 0x0907); in r8156b_hw_phy_cfg()
7828 ocp_reg_write(tp, 0xb87c, 0x80d6); in r8156b_hw_phy_cfg()
7829 ocp_reg_write(tp, 0xb87e, 0x2801); in r8156b_hw_phy_cfg()
7830 ocp_reg_write(tp, 0xb87c, 0x80f2); in r8156b_hw_phy_cfg()
7831 ocp_reg_write(tp, 0xb87e, 0x2801); in r8156b_hw_phy_cfg()
7832 ocp_reg_write(tp, 0xb87c, 0x80f4); in r8156b_hw_phy_cfg()
7833 ocp_reg_write(tp, 0xb87e, 0x6077); in r8156b_hw_phy_cfg()
7834 ocp_reg_write(tp, 0xb506, 0x01e7); in r8156b_hw_phy_cfg()
7836 ocp_reg_write(tp, 0xb87c, 0x8013); in r8156b_hw_phy_cfg()
7837 ocp_reg_write(tp, 0xb87e, 0x0700); in r8156b_hw_phy_cfg()
7838 ocp_reg_write(tp, 0xb87c, 0x8fb9); in r8156b_hw_phy_cfg()
7839 ocp_reg_write(tp, 0xb87e, 0x2801); in r8156b_hw_phy_cfg()
7840 ocp_reg_write(tp, 0xb87c, 0x8fba); in r8156b_hw_phy_cfg()
7841 ocp_reg_write(tp, 0xb87e, 0x0100); in r8156b_hw_phy_cfg()
7842 ocp_reg_write(tp, 0xb87c, 0x8fbc); in r8156b_hw_phy_cfg()
7843 ocp_reg_write(tp, 0xb87e, 0x1900); in r8156b_hw_phy_cfg()
7844 ocp_reg_write(tp, 0xb87c, 0x8fbe); in r8156b_hw_phy_cfg()
7845 ocp_reg_write(tp, 0xb87e, 0xe100); in r8156b_hw_phy_cfg()
7846 ocp_reg_write(tp, 0xb87c, 0x8fc0); in r8156b_hw_phy_cfg()
7847 ocp_reg_write(tp, 0xb87e, 0x0800); in r8156b_hw_phy_cfg()
7848 ocp_reg_write(tp, 0xb87c, 0x8fc2); in r8156b_hw_phy_cfg()
7849 ocp_reg_write(tp, 0xb87e, 0xe500); in r8156b_hw_phy_cfg()
7850 ocp_reg_write(tp, 0xb87c, 0x8fc4); in r8156b_hw_phy_cfg()
7851 ocp_reg_write(tp, 0xb87e, 0x0f00); in r8156b_hw_phy_cfg()
7852 ocp_reg_write(tp, 0xb87c, 0x8fc6); in r8156b_hw_phy_cfg()
7853 ocp_reg_write(tp, 0xb87e, 0xf100); in r8156b_hw_phy_cfg()
7854 ocp_reg_write(tp, 0xb87c, 0x8fc8); in r8156b_hw_phy_cfg()
7855 ocp_reg_write(tp, 0xb87e, 0x0400); in r8156b_hw_phy_cfg()
7856 ocp_reg_write(tp, 0xb87c, 0x8fca); in r8156b_hw_phy_cfg()
7857 ocp_reg_write(tp, 0xb87e, 0xf300); in r8156b_hw_phy_cfg()
7858 ocp_reg_write(tp, 0xb87c, 0x8fcc); in r8156b_hw_phy_cfg()
7859 ocp_reg_write(tp, 0xb87e, 0xfd00); in r8156b_hw_phy_cfg()
7860 ocp_reg_write(tp, 0xb87c, 0x8fce); in r8156b_hw_phy_cfg()
7861 ocp_reg_write(tp, 0xb87e, 0xff00); in r8156b_hw_phy_cfg()
7862 ocp_reg_write(tp, 0xb87c, 0x8fd0); in r8156b_hw_phy_cfg()
7863 ocp_reg_write(tp, 0xb87e, 0xfb00); in r8156b_hw_phy_cfg()
7864 ocp_reg_write(tp, 0xb87c, 0x8fd2); in r8156b_hw_phy_cfg()
7865 ocp_reg_write(tp, 0xb87e, 0x0100); in r8156b_hw_phy_cfg()
7866 ocp_reg_write(tp, 0xb87c, 0x8fd4); in r8156b_hw_phy_cfg()
7867 ocp_reg_write(tp, 0xb87e, 0xf400); in r8156b_hw_phy_cfg()
7868 ocp_reg_write(tp, 0xb87c, 0x8fd6); in r8156b_hw_phy_cfg()
7869 ocp_reg_write(tp, 0xb87e, 0xff00); in r8156b_hw_phy_cfg()
7870 ocp_reg_write(tp, 0xb87c, 0x8fd8); in r8156b_hw_phy_cfg()
7871 ocp_reg_write(tp, 0xb87e, 0xf600); in r8156b_hw_phy_cfg()
7873 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_USB_CFG); in r8156b_hw_phy_cfg()
7875 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_USB_CFG, ocp_data); in r8156b_hw_phy_cfg()
7876 ocp_reg_write(tp, 0xb87c, 0x813d); in r8156b_hw_phy_cfg()
7877 ocp_reg_write(tp, 0xb87e, 0x390e); in r8156b_hw_phy_cfg()
7878 ocp_reg_write(tp, 0xb87c, 0x814f); in r8156b_hw_phy_cfg()
7879 ocp_reg_write(tp, 0xb87e, 0x790e); in r8156b_hw_phy_cfg()
7880 ocp_reg_write(tp, 0xb87c, 0x80b0); in r8156b_hw_phy_cfg()
7881 ocp_reg_write(tp, 0xb87e, 0x0f31); in r8156b_hw_phy_cfg()
7882 data = ocp_reg_read(tp, 0xbf4c); in r8156b_hw_phy_cfg()
7884 ocp_reg_write(tp, 0xbf4c, data); in r8156b_hw_phy_cfg()
7885 data = ocp_reg_read(tp, 0xbcca); in r8156b_hw_phy_cfg()
7887 ocp_reg_write(tp, 0xbcca, data); in r8156b_hw_phy_cfg()
7888 ocp_reg_write(tp, 0xb87c, 0x8141); in r8156b_hw_phy_cfg()
7889 ocp_reg_write(tp, 0xb87e, 0x320e); in r8156b_hw_phy_cfg()
7890 ocp_reg_write(tp, 0xb87c, 0x8153); in r8156b_hw_phy_cfg()
7891 ocp_reg_write(tp, 0xb87e, 0x720e); in r8156b_hw_phy_cfg()
7892 ocp_reg_write(tp, 0xb87c, 0x8529); in r8156b_hw_phy_cfg()
7893 ocp_reg_write(tp, 0xb87e, 0x050e); in r8156b_hw_phy_cfg()
7894 data = ocp_reg_read(tp, OCP_EEE_CFG); in r8156b_hw_phy_cfg()
7896 ocp_reg_write(tp, OCP_EEE_CFG, data); in r8156b_hw_phy_cfg()
7898 sram_write(tp, 0x816c, 0xc4a0); in r8156b_hw_phy_cfg()
7899 sram_write(tp, 0x8170, 0xc4a0); in r8156b_hw_phy_cfg()
7900 sram_write(tp, 0x8174, 0x04a0); in r8156b_hw_phy_cfg()
7901 sram_write(tp, 0x8178, 0x04a0); in r8156b_hw_phy_cfg()
7902 sram_write(tp, 0x817c, 0x0719); in r8156b_hw_phy_cfg()
7903 sram_write(tp, 0x8ff4, 0x0400); in r8156b_hw_phy_cfg()
7904 sram_write(tp, 0x8ff1, 0x0404); in r8156b_hw_phy_cfg()
7906 ocp_reg_write(tp, 0xbf4a, 0x001b); in r8156b_hw_phy_cfg()
7907 ocp_reg_write(tp, 0xb87c, 0x8033); in r8156b_hw_phy_cfg()
7908 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7909 ocp_reg_write(tp, 0xb87c, 0x8037); in r8156b_hw_phy_cfg()
7910 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7911 ocp_reg_write(tp, 0xb87c, 0x803b); in r8156b_hw_phy_cfg()
7912 ocp_reg_write(tp, 0xb87e, 0xfc32); in r8156b_hw_phy_cfg()
7913 ocp_reg_write(tp, 0xb87c, 0x803f); in r8156b_hw_phy_cfg()
7914 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7915 ocp_reg_write(tp, 0xb87c, 0x8043); in r8156b_hw_phy_cfg()
7916 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7917 ocp_reg_write(tp, 0xb87c, 0x8047); in r8156b_hw_phy_cfg()
7918 ocp_reg_write(tp, 0xb87e, 0x7c13); in r8156b_hw_phy_cfg()
7920 ocp_reg_write(tp, 0xb87c, 0x8145); in r8156b_hw_phy_cfg()
7921 ocp_reg_write(tp, 0xb87e, 0x370e); in r8156b_hw_phy_cfg()
7922 ocp_reg_write(tp, 0xb87c, 0x8157); in r8156b_hw_phy_cfg()
7923 ocp_reg_write(tp, 0xb87e, 0x770e); in r8156b_hw_phy_cfg()
7924 ocp_reg_write(tp, 0xb87c, 0x8169); in r8156b_hw_phy_cfg()
7925 ocp_reg_write(tp, 0xb87e, 0x0d0a); in r8156b_hw_phy_cfg()
7926 ocp_reg_write(tp, 0xb87c, 0x817b); in r8156b_hw_phy_cfg()
7927 ocp_reg_write(tp, 0xb87e, 0x1d0a); in r8156b_hw_phy_cfg()
7929 data = sram_read(tp, 0x8217); in r8156b_hw_phy_cfg()
7932 sram_write(tp, 0x8217, data); in r8156b_hw_phy_cfg()
7933 data = sram_read(tp, 0x821a); in r8156b_hw_phy_cfg()
7936 sram_write(tp, 0x821a, data); in r8156b_hw_phy_cfg()
7937 sram_write(tp, 0x80da, 0x0403); in r8156b_hw_phy_cfg()
7938 data = sram_read(tp, 0x80dc); in r8156b_hw_phy_cfg()
7941 sram_write(tp, 0x80dc, data); in r8156b_hw_phy_cfg()
7942 sram_write(tp, 0x80b3, 0x0384); in r8156b_hw_phy_cfg()
7943 sram_write(tp, 0x80b7, 0x2007); in r8156b_hw_phy_cfg()
7944 data = sram_read(tp, 0x80ba); in r8156b_hw_phy_cfg()
7947 sram_write(tp, 0x80ba, data); in r8156b_hw_phy_cfg()
7948 sram_write(tp, 0x80b5, 0xf009); in r8156b_hw_phy_cfg()
7949 data = sram_read(tp, 0x80bd); in r8156b_hw_phy_cfg()
7952 sram_write(tp, 0x80bd, data); in r8156b_hw_phy_cfg()
7953 sram_write(tp, 0x80c7, 0xf083); in r8156b_hw_phy_cfg()
7954 sram_write(tp, 0x80dd, 0x03f0); in r8156b_hw_phy_cfg()
7955 data = sram_read(tp, 0x80df); in r8156b_hw_phy_cfg()
7958 sram_write(tp, 0x80df, data); in r8156b_hw_phy_cfg()
7959 sram_write(tp, 0x80cb, 0x2007); in r8156b_hw_phy_cfg()
7960 data = sram_read(tp, 0x80ce); in r8156b_hw_phy_cfg()
7963 sram_write(tp, 0x80ce, data); in r8156b_hw_phy_cfg()
7964 sram_write(tp, 0x80c9, 0x8009); in r8156b_hw_phy_cfg()
7965 data = sram_read(tp, 0x80d1); in r8156b_hw_phy_cfg()
7968 sram_write(tp, 0x80d1, data); in r8156b_hw_phy_cfg()
7969 sram_write(tp, 0x80a3, 0x200a); in r8156b_hw_phy_cfg()
7970 sram_write(tp, 0x80a5, 0xf0ad); in r8156b_hw_phy_cfg()
7971 sram_write(tp, 0x809f, 0x6073); in r8156b_hw_phy_cfg()
7972 sram_write(tp, 0x80a1, 0x000b); in r8156b_hw_phy_cfg()
7973 data = sram_read(tp, 0x80a9); in r8156b_hw_phy_cfg()
7976 sram_write(tp, 0x80a9, data); in r8156b_hw_phy_cfg()
7978 if (rtl_phy_patch_request(tp, true, true)) in r8156b_hw_phy_cfg()
7981 data = ocp_reg_read(tp, 0xb896); in r8156b_hw_phy_cfg()
7983 ocp_reg_write(tp, 0xb896, data); in r8156b_hw_phy_cfg()
7984 data = ocp_reg_read(tp, 0xb892); in r8156b_hw_phy_cfg()
7986 ocp_reg_write(tp, 0xb892, data); in r8156b_hw_phy_cfg()
7987 ocp_reg_write(tp, 0xb88e, 0xc23e); in r8156b_hw_phy_cfg()
7988 ocp_reg_write(tp, 0xb890, 0x0000); in r8156b_hw_phy_cfg()
7989 ocp_reg_write(tp, 0xb88e, 0xc240); in r8156b_hw_phy_cfg()
7990 ocp_reg_write(tp, 0xb890, 0x0103); in r8156b_hw_phy_cfg()
7991 ocp_reg_write(tp, 0xb88e, 0xc242); in r8156b_hw_phy_cfg()
7992 ocp_reg_write(tp, 0xb890, 0x0507); in r8156b_hw_phy_cfg()
7993 ocp_reg_write(tp, 0xb88e, 0xc244); in r8156b_hw_phy_cfg()
7994 ocp_reg_write(tp, 0xb890, 0x090b); in r8156b_hw_phy_cfg()
7995 ocp_reg_write(tp, 0xb88e, 0xc246); in r8156b_hw_phy_cfg()
7996 ocp_reg_write(tp, 0xb890, 0x0c0e); in r8156b_hw_phy_cfg()
7997 ocp_reg_write(tp, 0xb88e, 0xc248); in r8156b_hw_phy_cfg()
7998 ocp_reg_write(tp, 0xb890, 0x1012); in r8156b_hw_phy_cfg()
7999 ocp_reg_write(tp, 0xb88e, 0xc24a); in r8156b_hw_phy_cfg()
8000 ocp_reg_write(tp, 0xb890, 0x1416); in r8156b_hw_phy_cfg()
8001 data = ocp_reg_read(tp, 0xb896); in r8156b_hw_phy_cfg()
8003 ocp_reg_write(tp, 0xb896, data); in r8156b_hw_phy_cfg()
8005 rtl_phy_patch_request(tp, false, true); in r8156b_hw_phy_cfg()
8007 data = ocp_reg_read(tp, 0xa86a); in r8156b_hw_phy_cfg()
8009 ocp_reg_write(tp, 0xa86a, data); in r8156b_hw_phy_cfg()
8010 data = ocp_reg_read(tp, 0xa6f0); in r8156b_hw_phy_cfg()
8012 ocp_reg_write(tp, 0xa6f0, data); in r8156b_hw_phy_cfg()
8014 ocp_reg_write(tp, 0xbfa0, 0xd70d); in r8156b_hw_phy_cfg()
8015 ocp_reg_write(tp, 0xbfa2, 0x4100); in r8156b_hw_phy_cfg()
8016 ocp_reg_write(tp, 0xbfa4, 0xe868); in r8156b_hw_phy_cfg()
8017 ocp_reg_write(tp, 0xbfa6, 0xdc59); in r8156b_hw_phy_cfg()
8018 ocp_reg_write(tp, 0xb54c, 0x3c18); in r8156b_hw_phy_cfg()
8019 data = ocp_reg_read(tp, 0xbfa4); in r8156b_hw_phy_cfg()
8021 ocp_reg_write(tp, 0xbfa4, data); in r8156b_hw_phy_cfg()
8022 data = sram_read(tp, 0x817d); in r8156b_hw_phy_cfg()
8024 sram_write(tp, 0x817d, data); in r8156b_hw_phy_cfg()
8028 data = ocp_reg_read(tp, 0xac46); in r8156b_hw_phy_cfg()
8031 ocp_reg_write(tp, 0xac46, data); in r8156b_hw_phy_cfg()
8032 data = ocp_reg_read(tp, 0xad30); in r8156b_hw_phy_cfg()
8035 ocp_reg_write(tp, 0xad30, data); in r8156b_hw_phy_cfg()
8039 ocp_reg_write(tp, 0xb87c, 0x80f5); in r8156b_hw_phy_cfg()
8040 ocp_reg_write(tp, 0xb87e, 0x760e); in r8156b_hw_phy_cfg()
8041 ocp_reg_write(tp, 0xb87c, 0x8107); in r8156b_hw_phy_cfg()
8042 ocp_reg_write(tp, 0xb87e, 0x360e); in r8156b_hw_phy_cfg()
8043 ocp_reg_write(tp, 0xb87c, 0x8551); in r8156b_hw_phy_cfg()
8044 data = ocp_reg_read(tp, 0xb87e); in r8156b_hw_phy_cfg()
8047 ocp_reg_write(tp, 0xb87e, data); in r8156b_hw_phy_cfg()
8050 data = ocp_reg_read(tp, 0xbf00); in r8156b_hw_phy_cfg()
8053 ocp_reg_write(tp, 0xbf00, data); in r8156b_hw_phy_cfg()
8054 data = ocp_reg_read(tp, 0xbf46); in r8156b_hw_phy_cfg()
8057 ocp_reg_write(tp, 0xbf46, data); in r8156b_hw_phy_cfg()
8060 sram_write(tp, 0x8044, 0x2417); in r8156b_hw_phy_cfg()
8061 sram_write(tp, 0x804a, 0x2417); in r8156b_hw_phy_cfg()
8062 sram_write(tp, 0x8050, 0x2417); in r8156b_hw_phy_cfg()
8063 sram_write(tp, 0x8056, 0x2417); in r8156b_hw_phy_cfg()
8064 sram_write(tp, 0x805c, 0x2417); in r8156b_hw_phy_cfg()
8065 sram_write(tp, 0x8062, 0x2417); in r8156b_hw_phy_cfg()
8066 sram_write(tp, 0x8068, 0x2417); in r8156b_hw_phy_cfg()
8067 sram_write(tp, 0x806e, 0x2417); in r8156b_hw_phy_cfg()
8068 sram_write(tp, 0x8074, 0x2417); in r8156b_hw_phy_cfg()
8069 sram_write(tp, 0x807a, 0x2417); in r8156b_hw_phy_cfg()
8072 data = ocp_reg_read(tp, 0xbf84); in r8156b_hw_phy_cfg()
8075 ocp_reg_write(tp, 0xbf84, data); in r8156b_hw_phy_cfg()
8082 data = ocp_reg_read(tp, OCP_INTR_EN); in r8156b_hw_phy_cfg()
8084 ocp_reg_write(tp, OCP_INTR_EN, data); in r8156b_hw_phy_cfg()
8086 if (rtl_phy_patch_request(tp, true, true)) in r8156b_hw_phy_cfg()
8089 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4); in r8156b_hw_phy_cfg()
8091 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data); in r8156b_hw_phy_cfg()
8093 data = ocp_reg_read(tp, OCP_DOWN_SPEED); in r8156b_hw_phy_cfg()
8096 ocp_reg_write(tp, OCP_DOWN_SPEED, data); in r8156b_hw_phy_cfg()
8097 tp->ups_info._10m_ckdiv = true; in r8156b_hw_phy_cfg()
8098 tp->ups_info.eee_plloff_100 = false; in r8156b_hw_phy_cfg()
8099 tp->ups_info.eee_plloff_giga = false; in r8156b_hw_phy_cfg()
8101 data = ocp_reg_read(tp, OCP_POWER_CFG); in r8156b_hw_phy_cfg()
8103 ocp_reg_write(tp, OCP_POWER_CFG, data); in r8156b_hw_phy_cfg()
8104 tp->ups_info.eee_ckdiv = false; in r8156b_hw_phy_cfg()
8106 rtl_phy_patch_request(tp, false, true); in r8156b_hw_phy_cfg()
8108 rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags)); in r8156b_hw_phy_cfg()
8110 data = ocp_reg_read(tp, 0xa428); in r8156b_hw_phy_cfg()
8112 ocp_reg_write(tp, 0xa428, data); in r8156b_hw_phy_cfg()
8113 data = ocp_reg_read(tp, 0xa5ea); in r8156b_hw_phy_cfg()
8115 ocp_reg_write(tp, 0xa5ea, data); in r8156b_hw_phy_cfg()
8116 tp->ups_info.lite_mode = 0; in r8156b_hw_phy_cfg()
8118 if (tp->eee_en) in r8156b_hw_phy_cfg()
8119 rtl_eee_enable(tp, true); in r8156b_hw_phy_cfg()
8121 r8153_aldps_en(tp, true); in r8156b_hw_phy_cfg()
8122 r8152b_enable_fc(tp); in r8156b_hw_phy_cfg()
8123 r8153_u2p3en(tp, true); in r8156b_hw_phy_cfg()
8125 set_bit(PHY_RESET, &tp->flags); in r8156b_hw_phy_cfg()
8128 static void r8156_init(struct r8152 *tp) in r8156_init() argument
8134 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156_init()
8137 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_ECM_OP); in r8156_init()
8139 ocp_write_byte(tp, MCU_TYPE_USB, USB_ECM_OP, ocp_data); in r8156_init()
8141 ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0); in r8156_init()
8143 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_ECM_OPTION); in r8156_init()
8145 ocp_write_word(tp, MCU_TYPE_USB, USB_ECM_OPTION, ocp_data); in r8156_init()
8147 r8153b_u1u2en(tp, false); in r8156_init()
8150 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8156_init()
8155 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156_init()
8159 data = r8153_phy_status(tp, 0); in r8156_init()
8161 data = ocp_reg_read(tp, 0xa468); in r8156_init()
8163 ocp_reg_write(tp, 0xa468, data); in r8156_init()
8166 data = r8152_mdio_read(tp, MII_BMCR); in r8156_init()
8169 r8152_mdio_write(tp, MII_BMCR, data); in r8156_init()
8172 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156_init()
8175 r8153_u2p3en(tp, false); in r8156_init()
8178 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8156_init()
8181 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8156_init()
8183 r8153b_power_cut_en(tp, false); in r8156_init()
8184 r8156_ups_en(tp, false); in r8156_init()
8185 r8153_queue_wake(tp, false); in r8156_init()
8186 rtl_runtime_suspend_enable(tp, false); in r8156_init()
8188 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156_init()
8189 r8153b_u1u2en(tp, true); in r8156_init()
8191 usb_enable_lpm(tp->udev); in r8156_init()
8193 r8156_mac_clk_spd(tp, true); in r8156_init()
8195 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8156_init()
8197 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8156_init()
8199 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8156_init()
8200 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8156_init()
8205 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8156_init()
8207 set_bit(GREEN_ETHERNET, &tp->flags); in r8156_init()
8210 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8156_init()
8212 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8156_init()
8214 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_CONFIG); in r8156_init()
8216 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data); in r8156_init()
8218 r8156_mdio_force_mode(tp); in r8156_init()
8219 rtl_tally_reset(tp); in r8156_init()
8221 tp->coalesce = 15000; /* 15 us */ in r8156_init()
8224 static void r8156b_init(struct r8152 *tp) in r8156b_init() argument
8230 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_init()
8233 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_ECM_OP); in r8156b_init()
8235 ocp_write_byte(tp, MCU_TYPE_USB, USB_ECM_OP, ocp_data); in r8156b_init()
8237 ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0); in r8156b_init()
8239 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_ECM_OPTION); in r8156b_init()
8241 ocp_write_word(tp, MCU_TYPE_USB, USB_ECM_OPTION, ocp_data); in r8156b_init()
8243 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL); in r8156b_init()
8245 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); in r8156b_init()
8247 r8153b_u1u2en(tp, false); in r8156b_init()
8249 switch (tp->version) { in r8156b_init()
8252 r8156b_wait_loading_flash(tp); in r8156b_init()
8259 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & in r8156b_init()
8264 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in r8156b_init()
8268 data = r8153_phy_status(tp, 0); in r8156b_init()
8270 data = ocp_reg_read(tp, 0xa468); in r8156b_init()
8272 ocp_reg_write(tp, 0xa468, data); in r8156b_init()
8274 data = ocp_reg_read(tp, 0xa466); in r8156b_init()
8276 ocp_reg_write(tp, 0xa466, data); in r8156b_init()
8279 data = r8152_mdio_read(tp, MII_BMCR); in r8156b_init()
8282 r8152_mdio_write(tp, MII_BMCR, data); in r8156b_init()
8285 data = r8153_phy_status(tp, PHY_STAT_LAN_ON); in r8156b_init()
8287 r8153_u2p3en(tp, false); in r8156b_init()
8290 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff); in r8156b_init()
8293 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500); in r8156b_init()
8295 r8153b_power_cut_en(tp, false); in r8156b_init()
8296 r8156_ups_en(tp, false); in r8156b_init()
8297 r8153_queue_wake(tp, false); in r8156b_init()
8298 rtl_runtime_suspend_enable(tp, false); in r8156b_init()
8300 if (tp->udev->speed >= USB_SPEED_SUPER) in r8156b_init()
8301 r8153b_u1u2en(tp, true); in r8156b_init()
8303 usb_enable_lpm(tp->udev); in r8156b_init()
8305 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RCR); in r8156b_init()
8307 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in r8156b_init()
8309 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); in r8156b_init()
8311 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); in r8156b_init()
8314 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER, in r8156b_init()
8317 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL); in r8156b_init()
8318 if (!(ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL) & DACK_DET_EN)) in r8156b_init()
8321 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data); in r8156b_init()
8323 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK); in r8156b_init()
8325 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data); in r8156b_init()
8327 r8156_mac_clk_spd(tp, true); in r8156b_init()
8329 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3); in r8156b_init()
8331 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data); in r8156b_init()
8333 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS); in r8156b_init()
8334 if (rtl8152_get_speed(tp) & LINK_STATUS) in r8156b_init()
8339 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data); in r8156b_init()
8341 set_bit(GREEN_ETHERNET, &tp->flags); in r8156b_init()
8344 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); in r8156b_init()
8346 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data); in r8156b_init()
8348 r8156_mdio_force_mode(tp); in r8156b_init()
8349 rtl_tally_reset(tp); in r8156b_init()
8351 tp->coalesce = 15000; /* 15 us */ in r8156b_init()
8387 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_pre_reset() local
8392 if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) in rtl8152_pre_reset()
8395 netdev = tp->netdev; in rtl8152_pre_reset()
8400 tasklet_disable(&tp->tx_tl); in rtl8152_pre_reset()
8401 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_pre_reset()
8402 usb_kill_urb(tp->intr_urb); in rtl8152_pre_reset()
8403 cancel_delayed_work_sync(&tp->schedule); in rtl8152_pre_reset()
8404 napi_disable(&tp->napi); in rtl8152_pre_reset()
8406 mutex_lock(&tp->control); in rtl8152_pre_reset()
8407 set_bit(IN_PRE_RESET, &tp->flags); in rtl8152_pre_reset()
8408 tp->rtl_ops.disable(tp); in rtl8152_pre_reset()
8409 clear_bit(IN_PRE_RESET, &tp->flags); in rtl8152_pre_reset()
8410 mutex_unlock(&tp->control); in rtl8152_pre_reset()
8418 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_post_reset() local
8422 if (!tp || !test_bit(PROBED_WITH_NO_ERRORS, &tp->flags)) in rtl8152_post_reset()
8425 rtl_set_accessible(tp); in rtl8152_post_reset()
8428 if (determine_ethernet_addr(tp, &sa) >= 0) in rtl8152_post_reset()
8429 dev_set_mac_address (tp->netdev, &sa, NULL); in rtl8152_post_reset()
8431 netdev = tp->netdev; in rtl8152_post_reset()
8435 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_post_reset()
8437 mutex_lock(&tp->control); in rtl8152_post_reset()
8438 tp->rtl_ops.enable(tp); in rtl8152_post_reset()
8439 rtl_start_rx(tp); in rtl8152_post_reset()
8441 mutex_unlock(&tp->control); in rtl8152_post_reset()
8444 napi_enable(&tp->napi); in rtl8152_post_reset()
8445 tasklet_enable(&tp->tx_tl); in rtl8152_post_reset()
8447 usb_submit_urb(tp->intr_urb, GFP_KERNEL); in rtl8152_post_reset()
8449 if (!list_empty(&tp->rx_done)) in rtl8152_post_reset()
8450 napi_schedule(&tp->napi); in rtl8152_post_reset()
8457 static bool delay_autosuspend(struct r8152 *tp) in delay_autosuspend() argument
8459 bool sw_linking = !!netif_carrier_ok(tp->netdev); in delay_autosuspend()
8460 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS); in delay_autosuspend()
8466 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking) in delay_autosuspend()
8472 if (!sw_linking && tp->rtl_ops.in_nway(tp)) in delay_autosuspend()
8474 else if (!skb_queue_empty(&tp->tx_queue)) in delay_autosuspend()
8480 static int rtl8152_runtime_resume(struct r8152 *tp) in rtl8152_runtime_resume() argument
8482 struct net_device *netdev = tp->netdev; in rtl8152_runtime_resume()
8485 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_resume()
8487 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8489 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_resume()
8492 if (rtl8152_get_speed(tp) & LINK_STATUS) { in rtl8152_runtime_resume()
8493 rtl_start_rx(tp); in rtl8152_runtime_resume()
8496 tp->rtl_ops.disable(tp); in rtl8152_runtime_resume()
8497 netif_info(tp, link, netdev, "linking down\n"); in rtl8152_runtime_resume()
8502 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8505 if (!list_empty(&tp->rx_done)) in rtl8152_runtime_resume()
8506 napi_schedule(&tp->napi); in rtl8152_runtime_resume()
8508 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_runtime_resume()
8511 tp->rtl_ops.autosuspend_en(tp, false); in rtl8152_runtime_resume()
8513 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_resume()
8519 static int rtl8152_system_resume(struct r8152 *tp) in rtl8152_system_resume() argument
8521 struct net_device *netdev = tp->netdev; in rtl8152_system_resume()
8526 tp->rtl_ops.up(tp); in rtl8152_system_resume()
8528 set_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_resume()
8529 usb_submit_urb(tp->intr_urb, GFP_NOIO); in rtl8152_system_resume()
8535 static int rtl8152_runtime_suspend(struct r8152 *tp) in rtl8152_runtime_suspend() argument
8537 struct net_device *netdev = tp->netdev; in rtl8152_runtime_suspend()
8540 if (!tp->rtl_ops.autosuspend_en) in rtl8152_runtime_suspend()
8543 set_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8546 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_runtime_suspend()
8552 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); in rtl8152_runtime_suspend()
8554 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); in rtl8152_runtime_suspend()
8555 rxdy_gated_en(tp, true); in rtl8152_runtime_suspend()
8556 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, in rtl8152_runtime_suspend()
8559 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
8560 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
8561 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_runtime_suspend()
8568 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_runtime_suspend()
8569 usb_kill_urb(tp->intr_urb); in rtl8152_runtime_suspend()
8571 tp->rtl_ops.autosuspend_en(tp, true); in rtl8152_runtime_suspend()
8574 struct napi_struct *napi = &tp->napi; in rtl8152_runtime_suspend()
8577 rtl_stop_rx(tp); in rtl8152_runtime_suspend()
8578 rxdy_gated_en(tp, false); in rtl8152_runtime_suspend()
8579 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr); in rtl8152_runtime_suspend()
8583 if (delay_autosuspend(tp)) { in rtl8152_runtime_suspend()
8584 rtl8152_runtime_resume(tp); in rtl8152_runtime_suspend()
8593 static int rtl8152_system_suspend(struct r8152 *tp) in rtl8152_system_suspend() argument
8595 struct net_device *netdev = tp->netdev; in rtl8152_system_suspend()
8599 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { in rtl8152_system_suspend()
8600 struct napi_struct *napi = &tp->napi; in rtl8152_system_suspend()
8602 clear_bit(WORK_ENABLE, &tp->flags); in rtl8152_system_suspend()
8603 usb_kill_urb(tp->intr_urb); in rtl8152_system_suspend()
8604 tasklet_disable(&tp->tx_tl); in rtl8152_system_suspend()
8606 cancel_delayed_work_sync(&tp->schedule); in rtl8152_system_suspend()
8607 tp->rtl_ops.down(tp); in rtl8152_system_suspend()
8609 tasklet_enable(&tp->tx_tl); in rtl8152_system_suspend()
8617 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_suspend() local
8620 mutex_lock(&tp->control); in rtl8152_suspend()
8623 ret = rtl8152_runtime_suspend(tp); in rtl8152_suspend()
8625 ret = rtl8152_system_suspend(tp); in rtl8152_suspend()
8627 mutex_unlock(&tp->control); in rtl8152_suspend()
8634 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_resume() local
8637 mutex_lock(&tp->control); in rtl8152_resume()
8639 rtl_reset_ocp_base(tp); in rtl8152_resume()
8641 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) in rtl8152_resume()
8642 ret = rtl8152_runtime_resume(tp); in rtl8152_resume()
8644 ret = rtl8152_system_resume(tp); in rtl8152_resume()
8646 mutex_unlock(&tp->control); in rtl8152_resume()
8653 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_reset_resume() local
8655 clear_bit(SELECTIVE_SUSPEND, &tp->flags); in rtl8152_reset_resume()
8656 rtl_reset_ocp_base(tp); in rtl8152_reset_resume()
8657 tp->rtl_ops.init(tp); in rtl8152_reset_resume()
8658 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_reset_resume()
8659 set_ethernet_addr(tp, true); in rtl8152_reset_resume()
8665 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_wol() local
8667 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_wol()
8670 if (!rtl_can_wakeup(tp)) { in rtl8152_get_wol()
8674 mutex_lock(&tp->control); in rtl8152_get_wol()
8676 wol->wolopts = __rtl_get_wol(tp); in rtl8152_get_wol()
8677 mutex_unlock(&tp->control); in rtl8152_get_wol()
8680 usb_autopm_put_interface(tp->intf); in rtl8152_get_wol()
8685 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_wol() local
8688 if (!rtl_can_wakeup(tp)) in rtl8152_set_wol()
8694 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_wol()
8698 mutex_lock(&tp->control); in rtl8152_set_wol()
8700 __rtl_set_wol(tp, wol->wolopts); in rtl8152_set_wol()
8701 tp->saved_wolopts = wol->wolopts & WAKE_ANY; in rtl8152_set_wol()
8703 mutex_unlock(&tp->control); in rtl8152_set_wol()
8705 usb_autopm_put_interface(tp->intf); in rtl8152_set_wol()
8713 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_msglevel() local
8715 return tp->msg_enable; in rtl8152_get_msglevel()
8720 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_msglevel() local
8722 tp->msg_enable = value; in rtl8152_set_msglevel()
8728 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_drvinfo() local
8732 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); in rtl8152_get_drvinfo()
8733 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw)) in rtl8152_get_drvinfo()
8734 strscpy(info->fw_version, tp->rtl_fw.version, in rtl8152_get_drvinfo()
8742 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_link_ksettings() local
8745 if (!tp->mii.mdio_read) in rtl8152_get_link_ksettings()
8748 ret = usb_autopm_get_interface(tp->intf); in rtl8152_get_link_ksettings()
8752 mutex_lock(&tp->control); in rtl8152_get_link_ksettings()
8754 mii_ethtool_get_link_ksettings(&tp->mii, cmd); in rtl8152_get_link_ksettings()
8757 cmd->link_modes.supported, tp->support_2500full); in rtl8152_get_link_ksettings()
8759 if (tp->support_2500full) { in rtl8152_get_link_ksettings()
8762 ocp_reg_read(tp, OCP_10GBT_CTRL) & MDIO_AN_10GBT_CTRL_ADV2_5G); in rtl8152_get_link_ksettings()
8766 ocp_reg_read(tp, OCP_10GBT_STAT) & MDIO_AN_10GBT_STAT_LP2_5G); in rtl8152_get_link_ksettings()
8768 if (is_speed_2500(rtl8152_get_speed(tp))) in rtl8152_get_link_ksettings()
8772 mutex_unlock(&tp->control); in rtl8152_get_link_ksettings()
8774 usb_autopm_put_interface(tp->intf); in rtl8152_get_link_ksettings()
8783 struct r8152 *tp = netdev_priv(dev); in rtl8152_set_link_ksettings() local
8787 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_link_ksettings()
8819 mutex_lock(&tp->control); in rtl8152_set_link_ksettings()
8821 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed, in rtl8152_set_link_ksettings()
8824 tp->autoneg = cmd->base.autoneg; in rtl8152_set_link_ksettings()
8825 tp->speed = cmd->base.speed; in rtl8152_set_link_ksettings()
8826 tp->duplex = cmd->base.duplex; in rtl8152_set_link_ksettings()
8827 tp->advertising = advertising; in rtl8152_set_link_ksettings()
8830 mutex_unlock(&tp->control); in rtl8152_set_link_ksettings()
8832 usb_autopm_put_interface(tp->intf); in rtl8152_set_link_ksettings()
8867 struct r8152 *tp = netdev_priv(dev); in rtl8152_get_ethtool_stats() local
8870 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_ethtool_stats()
8873 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); in rtl8152_get_ethtool_stats()
8875 usb_autopm_put_interface(tp->intf); in rtl8152_get_ethtool_stats()
8901 static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_get_eee() argument
8906 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); in r8152_get_eee()
8909 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); in r8152_get_eee()
8912 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); in r8152_get_eee()
8915 eee->eee_enabled = tp->eee_en; in r8152_get_eee()
8918 eee->advertised = tp->eee_adv; in r8152_get_eee()
8924 static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8152_set_eee() argument
8928 tp->eee_en = eee->eee_enabled; in r8152_set_eee()
8929 tp->eee_adv = val; in r8152_set_eee()
8931 rtl_eee_enable(tp, tp->eee_en); in r8152_set_eee()
8936 static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) in r8153_get_eee() argument
8941 val = ocp_reg_read(tp, OCP_EEE_ABLE); in r8153_get_eee()
8944 val = ocp_reg_read(tp, OCP_EEE_ADV); in r8153_get_eee()
8947 val = ocp_reg_read(tp, OCP_EEE_LPABLE); in r8153_get_eee()
8950 eee->eee_enabled = tp->eee_en; in r8153_get_eee()
8953 eee->advertised = tp->eee_adv; in r8153_get_eee()
8962 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_get_eee() local
8965 if (!tp->rtl_ops.eee_get) { in rtl_ethtool_get_eee()
8970 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_get_eee()
8974 mutex_lock(&tp->control); in rtl_ethtool_get_eee()
8976 ret = tp->rtl_ops.eee_get(tp, edata); in rtl_ethtool_get_eee()
8978 mutex_unlock(&tp->control); in rtl_ethtool_get_eee()
8980 usb_autopm_put_interface(tp->intf); in rtl_ethtool_get_eee()
8989 struct r8152 *tp = netdev_priv(net); in rtl_ethtool_set_eee() local
8992 if (!tp->rtl_ops.eee_set) { in rtl_ethtool_set_eee()
8997 ret = usb_autopm_get_interface(tp->intf); in rtl_ethtool_set_eee()
9001 mutex_lock(&tp->control); in rtl_ethtool_set_eee()
9003 ret = tp->rtl_ops.eee_set(tp, edata); in rtl_ethtool_set_eee()
9005 ret = mii_nway_restart(&tp->mii); in rtl_ethtool_set_eee()
9007 mutex_unlock(&tp->control); in rtl_ethtool_set_eee()
9009 usb_autopm_put_interface(tp->intf); in rtl_ethtool_set_eee()
9017 struct r8152 *tp = netdev_priv(dev); in rtl8152_nway_reset() local
9020 ret = usb_autopm_get_interface(tp->intf); in rtl8152_nway_reset()
9024 mutex_lock(&tp->control); in rtl8152_nway_reset()
9026 ret = mii_nway_restart(&tp->mii); in rtl8152_nway_reset()
9028 mutex_unlock(&tp->control); in rtl8152_nway_reset()
9030 usb_autopm_put_interface(tp->intf); in rtl8152_nway_reset()
9041 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_coalesce() local
9043 switch (tp->version) { in rtl8152_get_coalesce()
9052 coalesce->rx_coalesce_usecs = tp->coalesce; in rtl8152_get_coalesce()
9062 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_coalesce() local
9065 switch (tp->version) { in rtl8152_set_coalesce()
9077 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_coalesce()
9081 mutex_lock(&tp->control); in rtl8152_set_coalesce()
9083 if (tp->coalesce != coalesce->rx_coalesce_usecs) { in rtl8152_set_coalesce()
9084 tp->coalesce = coalesce->rx_coalesce_usecs; in rtl8152_set_coalesce()
9088 napi_disable(&tp->napi); in rtl8152_set_coalesce()
9089 tp->rtl_ops.disable(tp); in rtl8152_set_coalesce()
9090 tp->rtl_ops.enable(tp); in rtl8152_set_coalesce()
9091 rtl_start_rx(tp); in rtl8152_set_coalesce()
9092 clear_bit(RTL8152_SET_RX_MODE, &tp->flags); in rtl8152_set_coalesce()
9094 napi_enable(&tp->napi); in rtl8152_set_coalesce()
9099 mutex_unlock(&tp->control); in rtl8152_set_coalesce()
9101 usb_autopm_put_interface(tp->intf); in rtl8152_set_coalesce()
9109 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_tunable() local
9113 *(u32 *)d = tp->rx_copybreak; in rtl8152_get_tunable()
9126 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_tunable() local
9133 netif_err(tp, rx_err, netdev, in rtl8152_set_tunable()
9138 if (tp->rx_copybreak != val) { in rtl8152_set_tunable()
9140 mutex_lock(&tp->control); in rtl8152_set_tunable()
9141 napi_disable(&tp->napi); in rtl8152_set_tunable()
9142 tp->rx_copybreak = val; in rtl8152_set_tunable()
9143 napi_enable(&tp->napi); in rtl8152_set_tunable()
9144 mutex_unlock(&tp->control); in rtl8152_set_tunable()
9146 tp->rx_copybreak = val; in rtl8152_set_tunable()
9162 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_ringparam() local
9165 ring->rx_pending = tp->rx_pending; in rtl8152_get_ringparam()
9173 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_ringparam() local
9178 if (tp->rx_pending != ring->rx_pending) { in rtl8152_set_ringparam()
9180 mutex_lock(&tp->control); in rtl8152_set_ringparam()
9181 napi_disable(&tp->napi); in rtl8152_set_ringparam()
9182 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9183 napi_enable(&tp->napi); in rtl8152_set_ringparam()
9184 mutex_unlock(&tp->control); in rtl8152_set_ringparam()
9186 tp->rx_pending = ring->rx_pending; in rtl8152_set_ringparam()
9195 struct r8152 *tp = netdev_priv(netdev); in rtl8152_get_pauseparam() local
9199 if (usb_autopm_get_interface(tp->intf) < 0) in rtl8152_get_pauseparam()
9202 mutex_lock(&tp->control); in rtl8152_get_pauseparam()
9204 bmcr = r8152_mdio_read(tp, MII_BMCR); in rtl8152_get_pauseparam()
9205 lcladv = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_get_pauseparam()
9206 rmtadv = r8152_mdio_read(tp, MII_LPA); in rtl8152_get_pauseparam()
9208 mutex_unlock(&tp->control); in rtl8152_get_pauseparam()
9210 usb_autopm_put_interface(tp->intf); in rtl8152_get_pauseparam()
9232 struct r8152 *tp = netdev_priv(netdev); in rtl8152_set_pauseparam() local
9237 ret = usb_autopm_get_interface(tp->intf); in rtl8152_set_pauseparam()
9241 mutex_lock(&tp->control); in rtl8152_set_pauseparam()
9243 if (pause->autoneg && !(r8152_mdio_read(tp, MII_BMCR) & BMCR_ANENABLE)) { in rtl8152_set_pauseparam()
9254 old = r8152_mdio_read(tp, MII_ADVERTISE); in rtl8152_set_pauseparam()
9257 r8152_mdio_write(tp, MII_ADVERTISE, new1); in rtl8152_set_pauseparam()
9260 mutex_unlock(&tp->control); in rtl8152_set_pauseparam()
9261 usb_autopm_put_interface(tp->intf); in rtl8152_set_pauseparam()
9294 struct r8152 *tp = netdev_priv(netdev); in rtl8152_ioctl() local
9298 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_ioctl()
9301 res = usb_autopm_get_interface(tp->intf); in rtl8152_ioctl()
9311 mutex_lock(&tp->control); in rtl8152_ioctl()
9312 data->val_out = r8152_mdio_read(tp, data->reg_num); in rtl8152_ioctl()
9313 mutex_unlock(&tp->control); in rtl8152_ioctl()
9321 mutex_lock(&tp->control); in rtl8152_ioctl()
9322 r8152_mdio_write(tp, data->reg_num, data->val_in); in rtl8152_ioctl()
9323 mutex_unlock(&tp->control); in rtl8152_ioctl()
9330 usb_autopm_put_interface(tp->intf); in rtl8152_ioctl()
9338 struct r8152 *tp = netdev_priv(dev); in rtl8152_change_mtu() local
9341 switch (tp->version) { in rtl8152_change_mtu()
9351 ret = usb_autopm_get_interface(tp->intf); in rtl8152_change_mtu()
9355 mutex_lock(&tp->control); in rtl8152_change_mtu()
9360 if (tp->rtl_ops.change_mtu) in rtl8152_change_mtu()
9361 tp->rtl_ops.change_mtu(tp); in rtl8152_change_mtu()
9365 napi_disable(&tp->napi); in rtl8152_change_mtu()
9366 tasklet_disable(&tp->tx_tl); in rtl8152_change_mtu()
9367 tp->rtl_ops.disable(tp); in rtl8152_change_mtu()
9368 tp->rtl_ops.enable(tp); in rtl8152_change_mtu()
9369 rtl_start_rx(tp); in rtl8152_change_mtu()
9370 tasklet_enable(&tp->tx_tl); in rtl8152_change_mtu()
9371 napi_enable(&tp->napi); in rtl8152_change_mtu()
9377 mutex_unlock(&tp->control); in rtl8152_change_mtu()
9379 usb_autopm_put_interface(tp->intf); in rtl8152_change_mtu()
9398 static void rtl8152_unload(struct r8152 *tp) in rtl8152_unload() argument
9400 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8152_unload()
9403 if (tp->version != RTL_VER_01) in rtl8152_unload()
9404 r8152_power_cut_en(tp, true); in rtl8152_unload()
9407 static void rtl8153_unload(struct r8152 *tp) in rtl8153_unload() argument
9409 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153_unload()
9412 r8153_power_cut_en(tp, false); in rtl8153_unload()
9415 static void rtl8153b_unload(struct r8152 *tp) in rtl8153b_unload() argument
9417 if (test_bit(RTL8152_INACCESSIBLE, &tp->flags)) in rtl8153b_unload()
9420 r8153b_power_cut_en(tp, false); in rtl8153b_unload()
9423 static int rtl_ops_init(struct r8152 *tp) in rtl_ops_init() argument
9425 struct rtl_ops *ops = &tp->rtl_ops; in rtl_ops_init()
9428 switch (tp->version) { in rtl_ops_init()
9443 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9444 tp->eee_en = true; in rtl_ops_init()
9445 tp->eee_adv = MDIO_EEE_100TX; in rtl_ops_init()
9464 if (tp->udev->speed < USB_SPEED_SUPER) in rtl_ops_init()
9465 tp->rx_buf_sz = 16 * 1024; in rtl_ops_init()
9467 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9468 tp->eee_en = true; in rtl_ops_init()
9469 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9486 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9487 tp->eee_en = true; in rtl_ops_init()
9488 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9492 tp->eee_en = true; in rtl_ops_init()
9493 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9508 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9509 tp->support_2500full = 1; in rtl_ops_init()
9514 tp->support_2500full = 1; in rtl_ops_init()
9517 tp->eee_en = true; in rtl_ops_init()
9518 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9531 tp->rx_buf_sz = 48 * 1024; in rtl_ops_init()
9547 tp->rx_buf_sz = 32 * 1024; in rtl_ops_init()
9548 tp->eee_en = true; in rtl_ops_init()
9549 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX; in rtl_ops_init()
9554 dev_err(&tp->intf->dev, "Unknown Device\n"); in rtl_ops_init()
9577 static int rtl_fw_init(struct r8152 *tp) in rtl_fw_init() argument
9579 struct rtl_fw *rtl_fw = &tp->rtl_fw; in rtl_fw_init()
9581 switch (tp->version) { in rtl_fw_init()
9752 struct r8152 *tp; in rtl8152_probe_once() local
9764 tp = netdev_priv(netdev); in rtl8152_probe_once()
9765 tp->msg_enable = 0x7FFF; in rtl8152_probe_once()
9767 tp->udev = udev; in rtl8152_probe_once()
9768 tp->netdev = netdev; in rtl8152_probe_once()
9769 tp->intf = intf; in rtl8152_probe_once()
9770 tp->version = version; in rtl8152_probe_once()
9772 tp->pipe_ctrl_in = usb_rcvctrlpipe(udev, 0); in rtl8152_probe_once()
9773 tp->pipe_ctrl_out = usb_sndctrlpipe(udev, 0); in rtl8152_probe_once()
9774 tp->pipe_in = usb_rcvbulkpipe(udev, 1); in rtl8152_probe_once()
9775 tp->pipe_out = usb_sndbulkpipe(udev, 2); in rtl8152_probe_once()
9776 tp->pipe_intr = usb_rcvintpipe(udev, 3); in rtl8152_probe_once()
9782 tp->mii.supports_gmii = 0; in rtl8152_probe_once()
9785 tp->mii.supports_gmii = 1; in rtl8152_probe_once()
9789 ret = rtl_ops_init(tp); in rtl8152_probe_once()
9793 rtl_fw_init(tp); in rtl8152_probe_once()
9795 mutex_init(&tp->control); in rtl8152_probe_once()
9796 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); in rtl8152_probe_once()
9797 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t); in rtl8152_probe_once()
9798 tasklet_setup(&tp->tx_tl, bottom_half); in rtl8152_probe_once()
9799 tasklet_disable(&tp->tx_tl); in rtl8152_probe_once()
9816 if (tp->version == RTL_VER_01) { in rtl8152_probe_once()
9821 tp->lenovo_macpassthru = rtl8152_supports_lenovo_macpassthru(udev); in rtl8152_probe_once()
9827 tp->dell_tb_rx_agg_bug = 1; in rtl8152_probe_once()
9835 switch (tp->version) { in rtl8152_probe_once()
9862 tp->mii.dev = netdev; in rtl8152_probe_once()
9863 tp->mii.mdio_read = read_mii_word; in rtl8152_probe_once()
9864 tp->mii.mdio_write = write_mii_word; in rtl8152_probe_once()
9865 tp->mii.phy_id_mask = 0x3f; in rtl8152_probe_once()
9866 tp->mii.reg_num_mask = 0x1f; in rtl8152_probe_once()
9867 tp->mii.phy_id = R8152_PHY_ID; in rtl8152_probe_once()
9869 tp->autoneg = AUTONEG_ENABLE; in rtl8152_probe_once()
9870 tp->speed = SPEED_100; in rtl8152_probe_once()
9871 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL | in rtl8152_probe_once()
9873 if (tp->mii.supports_gmii) { in rtl8152_probe_once()
9874 if (tp->support_2500full && in rtl8152_probe_once()
9875 tp->udev->speed >= USB_SPEED_SUPER) { in rtl8152_probe_once()
9876 tp->speed = SPEED_2500; in rtl8152_probe_once()
9877 tp->advertising |= RTL_ADVERTISED_2500_FULL; in rtl8152_probe_once()
9879 tp->speed = SPEED_1000; in rtl8152_probe_once()
9881 tp->advertising |= RTL_ADVERTISED_1000_FULL; in rtl8152_probe_once()
9883 tp->duplex = DUPLEX_FULL; in rtl8152_probe_once()
9885 tp->rx_copybreak = RTL8152_RXFG_HEADSZ; in rtl8152_probe_once()
9886 tp->rx_pending = 10 * RTL8152_MAX_RX; in rtl8152_probe_once()
9890 if (!rtl_can_wakeup(tp)) in rtl8152_probe_once()
9891 __rtl_set_wol(tp, 0); in rtl8152_probe_once()
9893 tp->saved_wolopts = __rtl_get_wol(tp); in rtl8152_probe_once()
9895 tp->rtl_ops.init(tp); in rtl8152_probe_once()
9898 tp->rtl_fw.retry = true; in rtl8152_probe_once()
9900 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0); in rtl8152_probe_once()
9901 set_ethernet_addr(tp, false); in rtl8152_probe_once()
9903 usb_set_intfdata(intf, tp); in rtl8152_probe_once()
9905 netif_napi_add(netdev, &tp->napi, r8152_poll); in rtl8152_probe_once()
9913 if (tp->saved_wolopts) in rtl8152_probe_once()
9921 if (test_bit(PROBE_SHOULD_RETRY, &tp->flags)) in rtl8152_probe_once()
9924 set_bit(PROBED_WITH_NO_ERRORS, &tp->flags); in rtl8152_probe_once()
9925 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); in rtl8152_probe_once()
9933 tasklet_kill(&tp->tx_tl); in rtl8152_probe_once()
9934 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_probe_once()
9935 if (tp->rtl_ops.unload) in rtl8152_probe_once()
9936 tp->rtl_ops.unload(tp); in rtl8152_probe_once()
9937 rtl8152_release_firmware(tp); in rtl8152_probe_once()
9940 if (test_bit(PROBE_SHOULD_RETRY, &tp->flags)) in rtl8152_probe_once()
9982 struct r8152 *tp = usb_get_intfdata(intf); in rtl8152_disconnect() local
9985 if (tp) { in rtl8152_disconnect()
9986 rtl_set_unplug(tp); in rtl8152_disconnect()
9988 unregister_netdev(tp->netdev); in rtl8152_disconnect()
9989 tasklet_kill(&tp->tx_tl); in rtl8152_disconnect()
9990 cancel_delayed_work_sync(&tp->hw_phy_work); in rtl8152_disconnect()
9991 if (tp->rtl_ops.unload) in rtl8152_disconnect()
9992 tp->rtl_ops.unload(tp); in rtl8152_disconnect()
9993 rtl8152_release_firmware(tp); in rtl8152_disconnect()
9994 free_netdev(tp->netdev); in rtl8152_disconnect()