cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

r8152.c (239744B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 *  Copyright (c) 2014 Realtek Semiconductor Corp. All rights reserved.
      4 */
      5
      6#include <linux/signal.h>
      7#include <linux/slab.h>
      8#include <linux/module.h>
      9#include <linux/netdevice.h>
     10#include <linux/etherdevice.h>
     11#include <linux/mii.h>
     12#include <linux/ethtool.h>
     13#include <linux/usb.h>
     14#include <linux/crc32.h>
     15#include <linux/if_vlan.h>
     16#include <linux/uaccess.h>
     17#include <linux/list.h>
     18#include <linux/ip.h>
     19#include <linux/ipv6.h>
     20#include <net/ip6_checksum.h>
     21#include <uapi/linux/mdio.h>
     22#include <linux/mdio.h>
     23#include <linux/usb/cdc.h>
     24#include <linux/suspend.h>
     25#include <linux/atomic.h>
     26#include <linux/acpi.h>
     27#include <linux/firmware.h>
     28#include <crypto/hash.h>
     29#include <linux/usb/r8152.h>
     30
     31/* Information for net-next */
     32#define NETNEXT_VERSION		"12"
     33
     34/* Information for net */
     35#define NET_VERSION		"12"
     36
     37#define DRIVER_VERSION		"v1." NETNEXT_VERSION "." NET_VERSION
     38#define DRIVER_AUTHOR "Realtek linux nic maintainers <nic_swsd@realtek.com>"
     39#define DRIVER_DESC "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters"
     40#define MODULENAME "r8152"
     41
     42#define R8152_PHY_ID		32
     43
     44#define PLA_IDR			0xc000
     45#define PLA_RCR			0xc010
     46#define PLA_RCR1		0xc012
     47#define PLA_RMS			0xc016
     48#define PLA_RXFIFO_CTRL0	0xc0a0
     49#define PLA_RXFIFO_FULL		0xc0a2
     50#define PLA_RXFIFO_CTRL1	0xc0a4
     51#define PLA_RX_FIFO_FULL	0xc0a6
     52#define PLA_RXFIFO_CTRL2	0xc0a8
     53#define PLA_RX_FIFO_EMPTY	0xc0aa
     54#define PLA_DMY_REG0		0xc0b0
     55#define PLA_FMC			0xc0b4
     56#define PLA_CFG_WOL		0xc0b6
     57#define PLA_TEREDO_CFG		0xc0bc
     58#define PLA_TEREDO_WAKE_BASE	0xc0c4
     59#define PLA_MAR			0xcd00
     60#define PLA_BACKUP		0xd000
     61#define PLA_BDC_CR		0xd1a0
     62#define PLA_TEREDO_TIMER	0xd2cc
     63#define PLA_REALWOW_TIMER	0xd2e8
     64#define PLA_UPHY_TIMER		0xd388
     65#define PLA_SUSPEND_FLAG	0xd38a
     66#define PLA_INDICATE_FALG	0xd38c
     67#define PLA_MACDBG_PRE		0xd38c	/* RTL_VER_04 only */
     68#define PLA_MACDBG_POST		0xd38e	/* RTL_VER_04 only */
     69#define PLA_EXTRA_STATUS	0xd398
     70#define PLA_GPHY_CTRL		0xd3ae
     71#define PLA_POL_GPIO_CTRL	0xdc6a
     72#define PLA_EFUSE_DATA		0xdd00
     73#define PLA_EFUSE_CMD		0xdd02
     74#define PLA_LEDSEL		0xdd90
     75#define PLA_LED_FEATURE		0xdd92
     76#define PLA_PHYAR		0xde00
     77#define PLA_BOOT_CTRL		0xe004
     78#define PLA_LWAKE_CTRL_REG	0xe007
     79#define PLA_GPHY_INTR_IMR	0xe022
     80#define PLA_EEE_CR		0xe040
     81#define PLA_EEE_TXTWSYS		0xe04c
     82#define PLA_EEE_TXTWSYS_2P5G	0xe058
     83#define PLA_EEEP_CR		0xe080
     84#define PLA_MAC_PWR_CTRL	0xe0c0
     85#define PLA_MAC_PWR_CTRL2	0xe0ca
     86#define PLA_MAC_PWR_CTRL3	0xe0cc
     87#define PLA_MAC_PWR_CTRL4	0xe0ce
     88#define PLA_WDT6_CTRL		0xe428
     89#define PLA_TCR0		0xe610
     90#define PLA_TCR1		0xe612
     91#define PLA_MTPS		0xe615
     92#define PLA_TXFIFO_CTRL		0xe618
     93#define PLA_TXFIFO_FULL		0xe61a
     94#define PLA_RSTTALLY		0xe800
     95#define PLA_CR			0xe813
     96#define PLA_CRWECR		0xe81c
     97#define PLA_CONFIG12		0xe81e	/* CONFIG1, CONFIG2 */
     98#define PLA_CONFIG34		0xe820	/* CONFIG3, CONFIG4 */
     99#define PLA_CONFIG5		0xe822
    100#define PLA_PHY_PWR		0xe84c
    101#define PLA_OOB_CTRL		0xe84f
    102#define PLA_CPCR		0xe854
    103#define PLA_MISC_0		0xe858
    104#define PLA_MISC_1		0xe85a
    105#define PLA_OCP_GPHY_BASE	0xe86c
    106#define PLA_TALLYCNT		0xe890
    107#define PLA_SFF_STS_7		0xe8de
    108#define PLA_PHYSTATUS		0xe908
    109#define PLA_CONFIG6		0xe90a /* CONFIG6 */
    110#define PLA_USB_CFG		0xe952
    111#define PLA_BP_BA		0xfc26
    112#define PLA_BP_0		0xfc28
    113#define PLA_BP_1		0xfc2a
    114#define PLA_BP_2		0xfc2c
    115#define PLA_BP_3		0xfc2e
    116#define PLA_BP_4		0xfc30
    117#define PLA_BP_5		0xfc32
    118#define PLA_BP_6		0xfc34
    119#define PLA_BP_7		0xfc36
    120#define PLA_BP_EN		0xfc38
    121
    122#define USB_USB2PHY		0xb41e
    123#define USB_SSPHYLINK1		0xb426
    124#define USB_SSPHYLINK2		0xb428
    125#define USB_L1_CTRL		0xb45e
    126#define USB_U2P3_CTRL		0xb460
    127#define USB_CSR_DUMMY1		0xb464
    128#define USB_CSR_DUMMY2		0xb466
    129#define USB_DEV_STAT		0xb808
    130#define USB_CONNECT_TIMER	0xcbf8
    131#define USB_MSC_TIMER		0xcbfc
    132#define USB_BURST_SIZE		0xcfc0
    133#define USB_FW_FIX_EN0		0xcfca
    134#define USB_FW_FIX_EN1		0xcfcc
    135#define USB_LPM_CONFIG		0xcfd8
    136#define USB_ECM_OPTION		0xcfee
    137#define USB_CSTMR		0xcfef	/* RTL8153A */
    138#define USB_MISC_2		0xcfff
    139#define USB_ECM_OP		0xd26b
    140#define USB_GPHY_CTRL		0xd284
    141#define USB_SPEED_OPTION	0xd32a
    142#define USB_FW_CTRL		0xd334	/* RTL8153B */
    143#define USB_FC_TIMER		0xd340
    144#define USB_USB_CTRL		0xd406
    145#define USB_PHY_CTRL		0xd408
    146#define USB_TX_AGG		0xd40a
    147#define USB_RX_BUF_TH		0xd40c
    148#define USB_USB_TIMER		0xd428
    149#define USB_RX_EARLY_TIMEOUT	0xd42c
    150#define USB_RX_EARLY_SIZE	0xd42e
    151#define USB_PM_CTRL_STATUS	0xd432	/* RTL8153A */
    152#define USB_RX_EXTRA_AGGR_TMR	0xd432	/* RTL8153B */
    153#define USB_TX_DMA		0xd434
    154#define USB_UPT_RXDMA_OWN	0xd437
    155#define USB_UPHY3_MDCMDIO	0xd480
    156#define USB_TOLERANCE		0xd490
    157#define USB_LPM_CTRL		0xd41a
    158#define USB_BMU_RESET		0xd4b0
    159#define USB_BMU_CONFIG		0xd4b4
    160#define USB_U1U2_TIMER		0xd4da
    161#define USB_FW_TASK		0xd4e8	/* RTL8153B */
    162#define USB_RX_AGGR_NUM		0xd4ee
    163#define USB_UPS_CTRL		0xd800
    164#define USB_POWER_CUT		0xd80a
    165#define USB_MISC_0		0xd81a
    166#define USB_MISC_1		0xd81f
    167#define USB_AFE_CTRL2		0xd824
    168#define USB_UPHY_XTAL		0xd826
    169#define USB_UPS_CFG		0xd842
    170#define USB_UPS_FLAGS		0xd848
    171#define USB_WDT1_CTRL		0xe404
    172#define USB_WDT11_CTRL		0xe43c
    173#define USB_BP_BA		PLA_BP_BA
    174#define USB_BP_0		PLA_BP_0
    175#define USB_BP_1		PLA_BP_1
    176#define USB_BP_2		PLA_BP_2
    177#define USB_BP_3		PLA_BP_3
    178#define USB_BP_4		PLA_BP_4
    179#define USB_BP_5		PLA_BP_5
    180#define USB_BP_6		PLA_BP_6
    181#define USB_BP_7		PLA_BP_7
    182#define USB_BP_EN		PLA_BP_EN	/* RTL8153A */
    183#define USB_BP_8		0xfc38		/* RTL8153B */
    184#define USB_BP_9		0xfc3a
    185#define USB_BP_10		0xfc3c
    186#define USB_BP_11		0xfc3e
    187#define USB_BP_12		0xfc40
    188#define USB_BP_13		0xfc42
    189#define USB_BP_14		0xfc44
    190#define USB_BP_15		0xfc46
    191#define USB_BP2_EN		0xfc48
    192
    193/* OCP Registers */
    194#define OCP_ALDPS_CONFIG	0x2010
    195#define OCP_EEE_CONFIG1		0x2080
    196#define OCP_EEE_CONFIG2		0x2092
    197#define OCP_EEE_CONFIG3		0x2094
    198#define OCP_BASE_MII		0xa400
    199#define OCP_EEE_AR		0xa41a
    200#define OCP_EEE_DATA		0xa41c
    201#define OCP_PHY_STATUS		0xa420
    202#define OCP_NCTL_CFG		0xa42c
    203#define OCP_POWER_CFG		0xa430
    204#define OCP_EEE_CFG		0xa432
    205#define OCP_SRAM_ADDR		0xa436
    206#define OCP_SRAM_DATA		0xa438
    207#define OCP_DOWN_SPEED		0xa442
    208#define OCP_EEE_ABLE		0xa5c4
    209#define OCP_EEE_ADV		0xa5d0
    210#define OCP_EEE_LPABLE		0xa5d2
    211#define OCP_10GBT_CTRL		0xa5d4
    212#define OCP_10GBT_STAT		0xa5d6
    213#define OCP_EEE_ADV2		0xa6d4
    214#define OCP_PHY_STATE		0xa708		/* nway state for 8153 */
    215#define OCP_PHY_PATCH_STAT	0xb800
    216#define OCP_PHY_PATCH_CMD	0xb820
    217#define OCP_PHY_LOCK		0xb82e
    218#define OCP_ADC_IOFFSET		0xbcfc
    219#define OCP_ADC_CFG		0xbc06
    220#define OCP_SYSCLK_CFG		0xc416
    221
    222/* SRAM Register */
    223#define SRAM_GREEN_CFG		0x8011
    224#define SRAM_LPF_CFG		0x8012
    225#define SRAM_GPHY_FW_VER	0x801e
    226#define SRAM_10M_AMP1		0x8080
    227#define SRAM_10M_AMP2		0x8082
    228#define SRAM_IMPEDANCE		0x8084
    229#define SRAM_PHY_LOCK		0xb82e
    230
    231/* PLA_RCR */
    232#define RCR_AAP			0x00000001
    233#define RCR_APM			0x00000002
    234#define RCR_AM			0x00000004
    235#define RCR_AB			0x00000008
    236#define RCR_ACPT_ALL		(RCR_AAP | RCR_APM | RCR_AM | RCR_AB)
    237#define SLOT_EN			BIT(11)
    238
    239/* PLA_RCR1 */
    240#define OUTER_VLAN		BIT(7)
    241#define INNER_VLAN		BIT(6)
    242
    243/* PLA_RXFIFO_CTRL0 */
    244#define RXFIFO_THR1_NORMAL	0x00080002
    245#define RXFIFO_THR1_OOB		0x01800003
    246
    247/* PLA_RXFIFO_FULL */
    248#define RXFIFO_FULL_MASK	0xfff
    249
    250/* PLA_RXFIFO_CTRL1 */
    251#define RXFIFO_THR2_FULL	0x00000060
    252#define RXFIFO_THR2_HIGH	0x00000038
    253#define RXFIFO_THR2_OOB		0x0000004a
    254#define RXFIFO_THR2_NORMAL	0x00a0
    255
    256/* PLA_RXFIFO_CTRL2 */
    257#define RXFIFO_THR3_FULL	0x00000078
    258#define RXFIFO_THR3_HIGH	0x00000048
    259#define RXFIFO_THR3_OOB		0x0000005a
    260#define RXFIFO_THR3_NORMAL	0x0110
    261
    262/* PLA_TXFIFO_CTRL */
    263#define TXFIFO_THR_NORMAL	0x00400008
    264#define TXFIFO_THR_NORMAL2	0x01000008
    265
    266/* PLA_DMY_REG0 */
    267#define ECM_ALDPS		0x0002
    268
    269/* PLA_FMC */
    270#define FMC_FCR_MCU_EN		0x0001
    271
    272/* PLA_EEEP_CR */
    273#define EEEP_CR_EEEP_TX		0x0002
    274
    275/* PLA_WDT6_CTRL */
    276#define WDT6_SET_MODE		0x0010
    277
    278/* PLA_TCR0 */
    279#define TCR0_TX_EMPTY		0x0800
    280#define TCR0_AUTO_FIFO		0x0080
    281
    282/* PLA_TCR1 */
    283#define VERSION_MASK		0x7cf0
    284#define IFG_MASK		(BIT(3) | BIT(9) | BIT(8))
    285#define IFG_144NS		BIT(9)
    286#define IFG_96NS		(BIT(9) | BIT(8))
    287
    288/* PLA_MTPS */
    289#define MTPS_JUMBO		(12 * 1024 / 64)
    290#define MTPS_DEFAULT		(6 * 1024 / 64)
    291
    292/* PLA_RSTTALLY */
    293#define TALLY_RESET		0x0001
    294
    295/* PLA_CR */
    296#define CR_RST			0x10
    297#define CR_RE			0x08
    298#define CR_TE			0x04
    299
    300/* PLA_CRWECR */
    301#define CRWECR_NORAML		0x00
    302#define CRWECR_CONFIG		0xc0
    303
    304/* PLA_OOB_CTRL */
    305#define NOW_IS_OOB		0x80
    306#define TXFIFO_EMPTY		0x20
    307#define RXFIFO_EMPTY		0x10
    308#define LINK_LIST_READY		0x02
    309#define DIS_MCU_CLROOB		0x01
    310#define FIFO_EMPTY		(TXFIFO_EMPTY | RXFIFO_EMPTY)
    311
    312/* PLA_MISC_1 */
    313#define RXDY_GATED_EN		0x0008
    314
    315/* PLA_SFF_STS_7 */
    316#define RE_INIT_LL		0x8000
    317#define MCU_BORW_EN		0x4000
    318
    319/* PLA_CPCR */
    320#define FLOW_CTRL_EN		BIT(0)
    321#define CPCR_RX_VLAN		0x0040
    322
    323/* PLA_CFG_WOL */
    324#define MAGIC_EN		0x0001
    325
    326/* PLA_TEREDO_CFG */
    327#define TEREDO_SEL		0x8000
    328#define TEREDO_WAKE_MASK	0x7f00
    329#define TEREDO_RS_EVENT_MASK	0x00fe
    330#define OOB_TEREDO_EN		0x0001
    331
    332/* PLA_BDC_CR */
    333#define ALDPS_PROXY_MODE	0x0001
    334
    335/* PLA_EFUSE_CMD */
    336#define EFUSE_READ_CMD		BIT(15)
    337#define EFUSE_DATA_BIT16	BIT(7)
    338
    339/* PLA_CONFIG34 */
    340#define LINK_ON_WAKE_EN		0x0010
    341#define LINK_OFF_WAKE_EN	0x0008
    342
    343/* PLA_CONFIG6 */
    344#define LANWAKE_CLR_EN		BIT(0)
    345
    346/* PLA_USB_CFG */
    347#define EN_XG_LIP		BIT(1)
    348#define EN_G_LIP		BIT(2)
    349
    350/* PLA_CONFIG5 */
    351#define BWF_EN			0x0040
    352#define MWF_EN			0x0020
    353#define UWF_EN			0x0010
    354#define LAN_WAKE_EN		0x0002
    355
    356/* PLA_LED_FEATURE */
    357#define LED_MODE_MASK		0x0700
    358
    359/* PLA_PHY_PWR */
    360#define TX_10M_IDLE_EN		0x0080
    361#define PFM_PWM_SWITCH		0x0040
    362#define TEST_IO_OFF		BIT(4)
    363
    364/* PLA_MAC_PWR_CTRL */
    365#define D3_CLK_GATED_EN		0x00004000
    366#define MCU_CLK_RATIO		0x07010f07
    367#define MCU_CLK_RATIO_MASK	0x0f0f0f0f
    368#define ALDPS_SPDWN_RATIO	0x0f87
    369
    370/* PLA_MAC_PWR_CTRL2 */
    371#define EEE_SPDWN_RATIO		0x8007
    372#define MAC_CLK_SPDWN_EN	BIT(15)
    373#define EEE_SPDWN_RATIO_MASK	0xff
    374
    375/* PLA_MAC_PWR_CTRL3 */
    376#define PLA_MCU_SPDWN_EN	BIT(14)
    377#define PKT_AVAIL_SPDWN_EN	0x0100
    378#define SUSPEND_SPDWN_EN	0x0004
    379#define U1U2_SPDWN_EN		0x0002
    380#define L1_SPDWN_EN		0x0001
    381
    382/* PLA_MAC_PWR_CTRL4 */
    383#define PWRSAVE_SPDWN_EN	0x1000
    384#define RXDV_SPDWN_EN		0x0800
    385#define TX10MIDLE_EN		0x0100
    386#define IDLE_SPDWN_EN		BIT(6)
    387#define TP100_SPDWN_EN		0x0020
    388#define TP500_SPDWN_EN		0x0010
    389#define TP1000_SPDWN_EN		0x0008
    390#define EEE_SPDWN_EN		0x0001
    391
    392/* PLA_GPHY_INTR_IMR */
    393#define GPHY_STS_MSK		0x0001
    394#define SPEED_DOWN_MSK		0x0002
    395#define SPDWN_RXDV_MSK		0x0004
    396#define SPDWN_LINKCHG_MSK	0x0008
    397
    398/* PLA_PHYAR */
    399#define PHYAR_FLAG		0x80000000
    400
    401/* PLA_EEE_CR */
    402#define EEE_RX_EN		0x0001
    403#define EEE_TX_EN		0x0002
    404
    405/* PLA_BOOT_CTRL */
    406#define AUTOLOAD_DONE		0x0002
    407
    408/* PLA_LWAKE_CTRL_REG */
    409#define LANWAKE_PIN		BIT(7)
    410
    411/* PLA_SUSPEND_FLAG */
    412#define LINK_CHG_EVENT		BIT(0)
    413
    414/* PLA_INDICATE_FALG */
    415#define UPCOMING_RUNTIME_D3	BIT(0)
    416
    417/* PLA_MACDBG_PRE and PLA_MACDBG_POST */
    418#define DEBUG_OE		BIT(0)
    419#define DEBUG_LTSSM		0x0082
    420
    421/* PLA_EXTRA_STATUS */
    422#define CUR_LINK_OK		BIT(15)
    423#define U3P3_CHECK_EN		BIT(7)	/* RTL_VER_05 only */
    424#define LINK_CHANGE_FLAG	BIT(8)
    425#define POLL_LINK_CHG		BIT(0)
    426
    427/* PLA_GPHY_CTRL */
    428#define GPHY_FLASH		BIT(1)
    429
    430/* PLA_POL_GPIO_CTRL */
    431#define DACK_DET_EN		BIT(15)
    432#define POL_GPHY_PATCH		BIT(4)
    433
    434/* USB_USB2PHY */
    435#define USB2PHY_SUSPEND		0x0001
    436#define USB2PHY_L1		0x0002
    437
    438/* USB_SSPHYLINK1 */
    439#define DELAY_PHY_PWR_CHG	BIT(1)
    440
    441/* USB_SSPHYLINK2 */
    442#define pwd_dn_scale_mask	0x3ffe
    443#define pwd_dn_scale(x)		((x) << 1)
    444
    445/* USB_CSR_DUMMY1 */
    446#define DYNAMIC_BURST		0x0001
    447
    448/* USB_CSR_DUMMY2 */
    449#define EP4_FULL_FC		0x0001
    450
    451/* USB_DEV_STAT */
    452#define STAT_SPEED_MASK		0x0006
    453#define STAT_SPEED_HIGH		0x0000
    454#define STAT_SPEED_FULL		0x0002
    455
    456/* USB_FW_FIX_EN0 */
    457#define FW_FIX_SUSPEND		BIT(14)
    458
    459/* USB_FW_FIX_EN1 */
    460#define FW_IP_RESET_EN		BIT(9)
    461
    462/* USB_LPM_CONFIG */
    463#define LPM_U1U2_EN		BIT(0)
    464
    465/* USB_TX_AGG */
    466#define TX_AGG_MAX_THRESHOLD	0x03
    467
    468/* USB_RX_BUF_TH */
    469#define RX_THR_SUPPER		0x0c350180
    470#define RX_THR_HIGH		0x7a120180
    471#define RX_THR_SLOW		0xffff0180
    472#define RX_THR_B		0x00010001
    473
    474/* USB_TX_DMA */
    475#define TEST_MODE_DISABLE	0x00000001
    476#define TX_SIZE_ADJUST1		0x00000100
    477
    478/* USB_BMU_RESET */
    479#define BMU_RESET_EP_IN		0x01
    480#define BMU_RESET_EP_OUT	0x02
    481
    482/* USB_BMU_CONFIG */
    483#define ACT_ODMA		BIT(1)
    484
    485/* USB_UPT_RXDMA_OWN */
    486#define OWN_UPDATE		BIT(0)
    487#define OWN_CLEAR		BIT(1)
    488
    489/* USB_FW_TASK */
    490#define FC_PATCH_TASK		BIT(1)
    491
    492/* USB_RX_AGGR_NUM */
    493#define RX_AGGR_NUM_MASK	0x1ff
    494
    495/* USB_UPS_CTRL */
    496#define POWER_CUT		0x0100
    497
    498/* USB_PM_CTRL_STATUS */
    499#define RESUME_INDICATE		0x0001
    500
    501/* USB_ECM_OPTION */
    502#define BYPASS_MAC_RESET	BIT(5)
    503
    504/* USB_CSTMR */
    505#define FORCE_SUPER		BIT(0)
    506
    507/* USB_MISC_2 */
    508#define UPS_FORCE_PWR_DOWN	BIT(0)
    509
    510/* USB_ECM_OP */
    511#define	EN_ALL_SPEED		BIT(0)
    512
    513/* USB_GPHY_CTRL */
    514#define GPHY_PATCH_DONE		BIT(2)
    515#define BYPASS_FLASH		BIT(5)
    516#define BACKUP_RESTRORE		BIT(6)
    517
    518/* USB_SPEED_OPTION */
    519#define RG_PWRDN_EN		BIT(8)
    520#define ALL_SPEED_OFF		BIT(9)
    521
    522/* USB_FW_CTRL */
    523#define FLOW_CTRL_PATCH_OPT	BIT(1)
    524#define AUTO_SPEEDUP		BIT(3)
    525#define FLOW_CTRL_PATCH_2	BIT(8)
    526
    527/* USB_FC_TIMER */
    528#define CTRL_TIMER_EN		BIT(15)
    529
    530/* USB_USB_CTRL */
    531#define CDC_ECM_EN		BIT(3)
    532#define RX_AGG_DISABLE		0x0010
    533#define RX_ZERO_EN		0x0080
    534
    535/* USB_U2P3_CTRL */
    536#define U2P3_ENABLE		0x0001
    537#define RX_DETECT8		BIT(3)
    538
    539/* USB_POWER_CUT */
    540#define PWR_EN			0x0001
    541#define PHASE2_EN		0x0008
    542#define UPS_EN			BIT(4)
    543#define USP_PREWAKE		BIT(5)
    544
    545/* USB_MISC_0 */
    546#define PCUT_STATUS		0x0001
    547
    548/* USB_RX_EARLY_TIMEOUT */
    549#define COALESCE_SUPER		 85000U
    550#define COALESCE_HIGH		250000U
    551#define COALESCE_SLOW		524280U
    552
    553/* USB_WDT1_CTRL */
    554#define WTD1_EN			BIT(0)
    555
    556/* USB_WDT11_CTRL */
    557#define TIMER11_EN		0x0001
    558
    559/* USB_LPM_CTRL */
    560/* bit 4 ~ 5: fifo empty boundary */
    561#define FIFO_EMPTY_1FB		0x30	/* 0x1fb * 64 = 32448 bytes */
    562/* bit 2 ~ 3: LMP timer */
    563#define LPM_TIMER_MASK		0x0c
    564#define LPM_TIMER_500MS		0x04	/* 500 ms */
    565#define LPM_TIMER_500US		0x0c	/* 500 us */
    566#define ROK_EXIT_LPM		0x02
    567
    568/* USB_AFE_CTRL2 */
    569#define SEN_VAL_MASK		0xf800
    570#define SEN_VAL_NORMAL		0xa000
    571#define SEL_RXIDLE		0x0100
    572
    573/* USB_UPHY_XTAL */
    574#define OOBS_POLLING		BIT(8)
    575
    576/* USB_UPS_CFG */
    577#define SAW_CNT_1MS_MASK	0x0fff
    578#define MID_REVERSE		BIT(5)	/* RTL8156A */
    579
    580/* USB_UPS_FLAGS */
    581#define UPS_FLAGS_R_TUNE		BIT(0)
    582#define UPS_FLAGS_EN_10M_CKDIV		BIT(1)
    583#define UPS_FLAGS_250M_CKDIV		BIT(2)
    584#define UPS_FLAGS_EN_ALDPS		BIT(3)
    585#define UPS_FLAGS_CTAP_SHORT_DIS	BIT(4)
    586#define UPS_FLAGS_SPEED_MASK		(0xf << 16)
    587#define ups_flags_speed(x)		((x) << 16)
    588#define UPS_FLAGS_EN_EEE		BIT(20)
    589#define UPS_FLAGS_EN_500M_EEE		BIT(21)
    590#define UPS_FLAGS_EN_EEE_CKDIV		BIT(22)
    591#define UPS_FLAGS_EEE_PLLOFF_100	BIT(23)
    592#define UPS_FLAGS_EEE_PLLOFF_GIGA	BIT(24)
    593#define UPS_FLAGS_EEE_CMOD_LV_EN	BIT(25)
    594#define UPS_FLAGS_EN_GREEN		BIT(26)
    595#define UPS_FLAGS_EN_FLOW_CTR		BIT(27)
    596
    597enum spd_duplex {
    598	NWAY_10M_HALF,
    599	NWAY_10M_FULL,
    600	NWAY_100M_HALF,
    601	NWAY_100M_FULL,
    602	NWAY_1000M_FULL,
    603	FORCE_10M_HALF,
    604	FORCE_10M_FULL,
    605	FORCE_100M_HALF,
    606	FORCE_100M_FULL,
    607	FORCE_1000M_FULL,
    608	NWAY_2500M_FULL,
    609};
    610
    611/* OCP_ALDPS_CONFIG */
    612#define ENPWRSAVE		0x8000
    613#define ENPDNPS			0x0200
    614#define LINKENA			0x0100
    615#define DIS_SDSAVE		0x0010
    616
    617/* OCP_PHY_STATUS */
    618#define PHY_STAT_MASK		0x0007
    619#define PHY_STAT_EXT_INIT	2
    620#define PHY_STAT_LAN_ON		3
    621#define PHY_STAT_PWRDN		5
    622
    623/* OCP_NCTL_CFG */
    624#define PGA_RETURN_EN		BIT(1)
    625
    626/* OCP_POWER_CFG */
    627#define EEE_CLKDIV_EN		0x8000
    628#define EN_ALDPS		0x0004
    629#define EN_10M_PLLOFF		0x0001
    630
    631/* OCP_EEE_CONFIG1 */
    632#define RG_TXLPI_MSK_HFDUP	0x8000
    633#define RG_MATCLR_EN		0x4000
    634#define EEE_10_CAP		0x2000
    635#define EEE_NWAY_EN		0x1000
    636#define TX_QUIET_EN		0x0200
    637#define RX_QUIET_EN		0x0100
    638#define sd_rise_time_mask	0x0070
    639#define sd_rise_time(x)		(min(x, 7) << 4)	/* bit 4 ~ 6 */
    640#define RG_RXLPI_MSK_HFDUP	0x0008
    641#define SDFALLTIME		0x0007	/* bit 0 ~ 2 */
    642
    643/* OCP_EEE_CONFIG2 */
    644#define RG_LPIHYS_NUM		0x7000	/* bit 12 ~ 15 */
    645#define RG_DACQUIET_EN		0x0400
    646#define RG_LDVQUIET_EN		0x0200
    647#define RG_CKRSEL		0x0020
    648#define RG_EEEPRG_EN		0x0010
    649
    650/* OCP_EEE_CONFIG3 */
    651#define fast_snr_mask		0xff80
    652#define fast_snr(x)		(min(x, 0x1ff) << 7)	/* bit 7 ~ 15 */
    653#define RG_LFS_SEL		0x0060	/* bit 6 ~ 5 */
    654#define MSK_PH			0x0006	/* bit 0 ~ 3 */
    655
    656/* OCP_EEE_AR */
    657/* bit[15:14] function */
    658#define FUN_ADDR		0x0000
    659#define FUN_DATA		0x4000
    660/* bit[4:0] device addr */
    661
    662/* OCP_EEE_CFG */
    663#define CTAP_SHORT_EN		0x0040
    664#define EEE10_EN		0x0010
    665
    666/* OCP_DOWN_SPEED */
    667#define EN_EEE_CMODE		BIT(14)
    668#define EN_EEE_1000		BIT(13)
    669#define EN_EEE_100		BIT(12)
    670#define EN_10M_CLKDIV		BIT(11)
    671#define EN_10M_BGOFF		0x0080
    672
    673/* OCP_10GBT_CTRL */
    674#define RTL_ADV2_5G_F_R		BIT(5)	/* Advertise 2.5GBASE-T fast-retrain */
    675
    676/* OCP_PHY_STATE */
    677#define TXDIS_STATE		0x01
    678#define ABD_STATE		0x02
    679
    680/* OCP_PHY_PATCH_STAT */
    681#define PATCH_READY		BIT(6)
    682
    683/* OCP_PHY_PATCH_CMD */
    684#define PATCH_REQUEST		BIT(4)
    685
    686/* OCP_PHY_LOCK */
    687#define PATCH_LOCK		BIT(0)
    688
    689/* OCP_ADC_CFG */
    690#define CKADSEL_L		0x0100
    691#define ADC_EN			0x0080
    692#define EN_EMI_L		0x0040
    693
    694/* OCP_SYSCLK_CFG */
    695#define sysclk_div_expo(x)	(min(x, 5) << 8)
    696#define clk_div_expo(x)		(min(x, 5) << 4)
    697
    698/* SRAM_GREEN_CFG */
    699#define GREEN_ETH_EN		BIT(15)
    700#define R_TUNE_EN		BIT(11)
    701
    702/* SRAM_LPF_CFG */
    703#define LPF_AUTO_TUNE		0x8000
    704
    705/* SRAM_10M_AMP1 */
    706#define GDAC_IB_UPALL		0x0008
    707
    708/* SRAM_10M_AMP2 */
    709#define AMP_DN			0x0200
    710
    711/* SRAM_IMPEDANCE */
    712#define RX_DRIVING_MASK		0x6000
    713
    714/* SRAM_PHY_LOCK */
    715#define PHY_PATCH_LOCK		0x0001
    716
    717/* MAC PASSTHRU */
    718#define AD_MASK			0xfee0
    719#define BND_MASK		0x0004
    720#define BD_MASK			0x0001
    721#define EFUSE			0xcfdb
    722#define PASS_THRU_MASK		0x1
    723
    724#define BP4_SUPER_ONLY		0x1578	/* RTL_VER_04 only */
    725
    726enum rtl_register_content {
    727	_2500bps	= BIT(10),
    728	_1250bps	= BIT(9),
    729	_500bps		= BIT(8),
    730	_tx_flow	= BIT(6),
    731	_rx_flow	= BIT(5),
    732	_1000bps	= 0x10,
    733	_100bps		= 0x08,
    734	_10bps		= 0x04,
    735	LINK_STATUS	= 0x02,
    736	FULL_DUP	= 0x01,
    737};
    738
    739#define is_speed_2500(_speed)	(((_speed) & (_2500bps | LINK_STATUS)) == (_2500bps | LINK_STATUS))
    740#define is_flow_control(_speed)	(((_speed) & (_tx_flow | _rx_flow)) == (_tx_flow | _rx_flow))
    741
    742#define RTL8152_MAX_TX		4
    743#define RTL8152_MAX_RX		10
    744#define INTBUFSIZE		2
    745#define TX_ALIGN		4
    746#define RX_ALIGN		8
    747
    748#define RTL8152_RX_MAX_PENDING	4096
    749#define RTL8152_RXFG_HEADSZ	256
    750
    751#define INTR_LINK		0x0004
    752
    753#define RTL8152_RMS		(VLAN_ETH_FRAME_LEN + ETH_FCS_LEN)
    754#define RTL8153_RMS		RTL8153_MAX_PACKET
    755#define RTL8152_TX_TIMEOUT	(5 * HZ)
    756#define mtu_to_size(m)		((m) + VLAN_ETH_HLEN + ETH_FCS_LEN)
    757#define size_to_mtu(s)		((s) - VLAN_ETH_HLEN - ETH_FCS_LEN)
    758#define rx_reserved_size(x)	(mtu_to_size(x) + sizeof(struct rx_desc) + RX_ALIGN)
    759
    760/* rtl8152 flags */
    761enum rtl8152_flags {
    762	RTL8152_UNPLUG = 0,
    763	RTL8152_SET_RX_MODE,
    764	WORK_ENABLE,
    765	RTL8152_LINK_CHG,
    766	SELECTIVE_SUSPEND,
    767	PHY_RESET,
    768	SCHEDULE_TASKLET,
    769	GREEN_ETHERNET,
    770	RX_EPROTO,
    771};
    772
    773#define DEVICE_ID_THINKPAD_THUNDERBOLT3_DOCK_GEN2	0x3082
    774#define DEVICE_ID_THINKPAD_USB_C_DONGLE			0x720c
    775#define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2		0xa387
    776#define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN3		0x3062
    777
    778struct tally_counter {
    779	__le64	tx_packets;
    780	__le64	rx_packets;
    781	__le64	tx_errors;
    782	__le32	rx_errors;
    783	__le16	rx_missed;
    784	__le16	align_errors;
    785	__le32	tx_one_collision;
    786	__le32	tx_multi_collision;
    787	__le64	rx_unicast;
    788	__le64	rx_broadcast;
    789	__le32	rx_multicast;
    790	__le16	tx_aborted;
    791	__le16	tx_underrun;
    792};
    793
    794struct rx_desc {
    795	__le32 opts1;
    796#define RX_LEN_MASK			0x7fff
    797
    798	__le32 opts2;
    799#define RD_UDP_CS			BIT(23)
    800#define RD_TCP_CS			BIT(22)
    801#define RD_IPV6_CS			BIT(20)
    802#define RD_IPV4_CS			BIT(19)
    803
    804	__le32 opts3;
    805#define IPF				BIT(23) /* IP checksum fail */
    806#define UDPF				BIT(22) /* UDP checksum fail */
    807#define TCPF				BIT(21) /* TCP checksum fail */
    808#define RX_VLAN_TAG			BIT(16)
    809
    810	__le32 opts4;
    811	__le32 opts5;
    812	__le32 opts6;
    813};
    814
    815struct tx_desc {
    816	__le32 opts1;
    817#define TX_FS			BIT(31) /* First segment of a packet */
    818#define TX_LS			BIT(30) /* Final segment of a packet */
    819#define GTSENDV4		BIT(28)
    820#define GTSENDV6		BIT(27)
    821#define GTTCPHO_SHIFT		18
    822#define GTTCPHO_MAX		0x7fU
    823#define TX_LEN_MAX		0x3ffffU
    824
    825	__le32 opts2;
    826#define UDP_CS			BIT(31) /* Calculate UDP/IP checksum */
    827#define TCP_CS			BIT(30) /* Calculate TCP/IP checksum */
    828#define IPV4_CS			BIT(29) /* Calculate IPv4 checksum */
    829#define IPV6_CS			BIT(28) /* Calculate IPv6 checksum */
    830#define MSS_SHIFT		17
    831#define MSS_MAX			0x7ffU
    832#define TCPHO_SHIFT		17
    833#define TCPHO_MAX		0x7ffU
    834#define TX_VLAN_TAG		BIT(16)
    835};
    836
    837struct r8152;
    838
    839struct rx_agg {
    840	struct list_head list, info_list;
    841	struct urb *urb;
    842	struct r8152 *context;
    843	struct page *page;
    844	void *buffer;
    845};
    846
    847struct tx_agg {
    848	struct list_head list;
    849	struct urb *urb;
    850	struct r8152 *context;
    851	void *buffer;
    852	void *head;
    853	u32 skb_num;
    854	u32 skb_len;
    855};
    856
    857struct r8152 {
    858	unsigned long flags;
    859	struct usb_device *udev;
    860	struct napi_struct napi;
    861	struct usb_interface *intf;
    862	struct net_device *netdev;
    863	struct urb *intr_urb;
    864	struct tx_agg tx_info[RTL8152_MAX_TX];
    865	struct list_head rx_info, rx_used;
    866	struct list_head rx_done, tx_free;
    867	struct sk_buff_head tx_queue, rx_queue;
    868	spinlock_t rx_lock, tx_lock;
    869	struct delayed_work schedule, hw_phy_work;
    870	struct mii_if_info mii;
    871	struct mutex control;	/* use for hw setting */
    872#ifdef CONFIG_PM_SLEEP
    873	struct notifier_block pm_notifier;
    874#endif
    875	struct tasklet_struct tx_tl;
    876
    877	struct rtl_ops {
    878		void (*init)(struct r8152 *tp);
    879		int (*enable)(struct r8152 *tp);
    880		void (*disable)(struct r8152 *tp);
    881		void (*up)(struct r8152 *tp);
    882		void (*down)(struct r8152 *tp);
    883		void (*unload)(struct r8152 *tp);
    884		int (*eee_get)(struct r8152 *tp, struct ethtool_eee *eee);
    885		int (*eee_set)(struct r8152 *tp, struct ethtool_eee *eee);
    886		bool (*in_nway)(struct r8152 *tp);
    887		void (*hw_phy_cfg)(struct r8152 *tp);
    888		void (*autosuspend_en)(struct r8152 *tp, bool enable);
    889		void (*change_mtu)(struct r8152 *tp);
    890	} rtl_ops;
    891
    892	struct ups_info {
    893		u32 r_tune:1;
    894		u32 _10m_ckdiv:1;
    895		u32 _250m_ckdiv:1;
    896		u32 aldps:1;
    897		u32 lite_mode:2;
    898		u32 speed_duplex:4;
    899		u32 eee:1;
    900		u32 eee_lite:1;
    901		u32 eee_ckdiv:1;
    902		u32 eee_plloff_100:1;
    903		u32 eee_plloff_giga:1;
    904		u32 eee_cmod_lv:1;
    905		u32 green:1;
    906		u32 flow_control:1;
    907		u32 ctap_short_off:1;
    908	} ups_info;
    909
    910#define RTL_VER_SIZE		32
    911
    912	struct rtl_fw {
    913		const char *fw_name;
    914		const struct firmware *fw;
    915
    916		char version[RTL_VER_SIZE];
    917		int (*pre_fw)(struct r8152 *tp);
    918		int (*post_fw)(struct r8152 *tp);
    919
    920		bool retry;
    921	} rtl_fw;
    922
    923	atomic_t rx_count;
    924
    925	bool eee_en;
    926	int intr_interval;
    927	u32 saved_wolopts;
    928	u32 msg_enable;
    929	u32 tx_qlen;
    930	u32 coalesce;
    931	u32 advertising;
    932	u32 rx_buf_sz;
    933	u32 rx_copybreak;
    934	u32 rx_pending;
    935	u32 fc_pause_on, fc_pause_off;
    936
    937	unsigned int pipe_in, pipe_out, pipe_intr, pipe_ctrl_in, pipe_ctrl_out;
    938
    939	u32 support_2500full:1;
    940	u32 lenovo_macpassthru:1;
    941	u32 dell_tb_rx_agg_bug:1;
    942	u16 ocp_base;
    943	u16 speed;
    944	u16 eee_adv;
    945	u8 *intr_buff;
    946	u8 version;
    947	u8 duplex;
    948	u8 autoneg;
    949};
    950
    951/**
    952 * struct fw_block - block type and total length
    953 * @type: type of the current block, such as RTL_FW_END, RTL_FW_PLA,
    954 *	RTL_FW_USB and so on.
    955 * @length: total length of the current block.
    956 */
    957struct fw_block {
    958	__le32 type;
    959	__le32 length;
    960} __packed;
    961
    962/**
    963 * struct fw_header - header of the firmware file
    964 * @checksum: checksum of sha256 which is calculated from the whole file
    965 *	except the checksum field of the file. That is, calculate sha256
    966 *	from the version field to the end of the file.
    967 * @version: version of this firmware.
    968 * @blocks: the first firmware block of the file
    969 */
    970struct fw_header {
    971	u8 checksum[32];
    972	char version[RTL_VER_SIZE];
    973	struct fw_block blocks[];
    974} __packed;
    975
    976enum rtl8152_fw_flags {
    977	FW_FLAGS_USB = 0,
    978	FW_FLAGS_PLA,
    979	FW_FLAGS_START,
    980	FW_FLAGS_STOP,
    981	FW_FLAGS_NC,
    982	FW_FLAGS_NC1,
    983	FW_FLAGS_NC2,
    984	FW_FLAGS_UC2,
    985	FW_FLAGS_UC,
    986	FW_FLAGS_SPEED_UP,
    987	FW_FLAGS_VER,
    988};
    989
    990enum rtl8152_fw_fixup_cmd {
    991	FW_FIXUP_AND = 0,
    992	FW_FIXUP_OR,
    993	FW_FIXUP_NOT,
    994	FW_FIXUP_XOR,
    995};
    996
    997struct fw_phy_set {
    998	__le16 addr;
    999	__le16 data;
   1000} __packed;
   1001
   1002struct fw_phy_speed_up {
   1003	struct fw_block blk_hdr;
   1004	__le16 fw_offset;
   1005	__le16 version;
   1006	__le16 fw_reg;
   1007	__le16 reserved;
   1008	char info[];
   1009} __packed;
   1010
   1011struct fw_phy_ver {
   1012	struct fw_block blk_hdr;
   1013	struct fw_phy_set ver;
   1014	__le32 reserved;
   1015} __packed;
   1016
   1017struct fw_phy_fixup {
   1018	struct fw_block blk_hdr;
   1019	struct fw_phy_set setting;
   1020	__le16 bit_cmd;
   1021	__le16 reserved;
   1022} __packed;
   1023
   1024struct fw_phy_union {
   1025	struct fw_block blk_hdr;
   1026	__le16 fw_offset;
   1027	__le16 fw_reg;
   1028	struct fw_phy_set pre_set[2];
   1029	struct fw_phy_set bp[8];
   1030	struct fw_phy_set bp_en;
   1031	u8 pre_num;
   1032	u8 bp_num;
   1033	char info[];
   1034} __packed;
   1035
   1036/**
   1037 * struct fw_mac - a firmware block used by RTL_FW_PLA and RTL_FW_USB.
   1038 *	The layout of the firmware block is:
   1039 *	<struct fw_mac> + <info> + <firmware data>.
   1040 * @blk_hdr: firmware descriptor (type, length)
   1041 * @fw_offset: offset of the firmware binary data. The start address of
   1042 *	the data would be the address of struct fw_mac + @fw_offset.
   1043 * @fw_reg: the register to load the firmware. Depends on chip.
   1044 * @bp_ba_addr: the register to write break point base address. Depends on
   1045 *	chip.
   1046 * @bp_ba_value: break point base address. Depends on chip.
   1047 * @bp_en_addr: the register to write break point enabled mask. Depends
   1048 *	on chip.
   1049 * @bp_en_value: break point enabled mask. Depends on the firmware.
   1050 * @bp_start: the start register of break points. Depends on chip.
   1051 * @bp_num: the break point number which needs to be set for this firmware.
   1052 *	Depends on the firmware.
   1053 * @bp: break points. Depends on firmware.
   1054 * @reserved: reserved space (unused)
   1055 * @fw_ver_reg: the register to store the fw version.
   1056 * @fw_ver_data: the firmware version of the current type.
   1057 * @info: additional information for debugging, and is followed by the
   1058 *	binary data of firmware.
   1059 */
   1060struct fw_mac {
   1061	struct fw_block blk_hdr;
   1062	__le16 fw_offset;
   1063	__le16 fw_reg;
   1064	__le16 bp_ba_addr;
   1065	__le16 bp_ba_value;
   1066	__le16 bp_en_addr;
   1067	__le16 bp_en_value;
   1068	__le16 bp_start;
   1069	__le16 bp_num;
   1070	__le16 bp[16]; /* any value determined by firmware */
   1071	__le32 reserved;
   1072	__le16 fw_ver_reg;
   1073	u8 fw_ver_data;
   1074	char info[];
   1075} __packed;
   1076
   1077/**
   1078 * struct fw_phy_patch_key - a firmware block used by RTL_FW_PHY_START.
   1079 *	This is used to set patch key when loading the firmware of PHY.
   1080 * @blk_hdr: firmware descriptor (type, length)
   1081 * @key_reg: the register to write the patch key.
   1082 * @key_data: patch key.
   1083 * @reserved: reserved space (unused)
   1084 */
   1085struct fw_phy_patch_key {
   1086	struct fw_block blk_hdr;
   1087	__le16 key_reg;
   1088	__le16 key_data;
   1089	__le32 reserved;
   1090} __packed;
   1091
   1092/**
   1093 * struct fw_phy_nc - a firmware block used by RTL_FW_PHY_NC.
   1094 *	The layout of the firmware block is:
   1095 *	<struct fw_phy_nc> + <info> + <firmware data>.
   1096 * @blk_hdr: firmware descriptor (type, length)
   1097 * @fw_offset: offset of the firmware binary data. The start address of
   1098 *	the data would be the address of struct fw_phy_nc + @fw_offset.
   1099 * @fw_reg: the register to load the firmware. Depends on chip.
   1100 * @ba_reg: the register to write the base address. Depends on chip.
   1101 * @ba_data: base address. Depends on chip.
   1102 * @patch_en_addr: the register of enabling patch mode. Depends on chip.
   1103 * @patch_en_value: patch mode enabled mask. Depends on the firmware.
   1104 * @mode_reg: the regitster of switching the mode.
   1105 * @mode_pre: the mode needing to be set before loading the firmware.
   1106 * @mode_post: the mode to be set when finishing to load the firmware.
   1107 * @reserved: reserved space (unused)
   1108 * @bp_start: the start register of break points. Depends on chip.
   1109 * @bp_num: the break point number which needs to be set for this firmware.
   1110 *	Depends on the firmware.
   1111 * @bp: break points. Depends on firmware.
   1112 * @info: additional information for debugging, and is followed by the
   1113 *	binary data of firmware.
   1114 */
   1115struct fw_phy_nc {
   1116	struct fw_block blk_hdr;
   1117	__le16 fw_offset;
   1118	__le16 fw_reg;
   1119	__le16 ba_reg;
   1120	__le16 ba_data;
   1121	__le16 patch_en_addr;
   1122	__le16 patch_en_value;
   1123	__le16 mode_reg;
   1124	__le16 mode_pre;
   1125	__le16 mode_post;
   1126	__le16 reserved;
   1127	__le16 bp_start;
   1128	__le16 bp_num;
   1129	__le16 bp[4];
   1130	char info[];
   1131} __packed;
   1132
   1133enum rtl_fw_type {
   1134	RTL_FW_END = 0,
   1135	RTL_FW_PLA,
   1136	RTL_FW_USB,
   1137	RTL_FW_PHY_START,
   1138	RTL_FW_PHY_STOP,
   1139	RTL_FW_PHY_NC,
   1140	RTL_FW_PHY_FIXUP,
   1141	RTL_FW_PHY_UNION_NC,
   1142	RTL_FW_PHY_UNION_NC1,
   1143	RTL_FW_PHY_UNION_NC2,
   1144	RTL_FW_PHY_UNION_UC2,
   1145	RTL_FW_PHY_UNION_UC,
   1146	RTL_FW_PHY_UNION_MISC,
   1147	RTL_FW_PHY_SPEED_UP,
   1148	RTL_FW_PHY_VER,
   1149};
   1150
   1151enum rtl_version {
   1152	RTL_VER_UNKNOWN = 0,
   1153	RTL_VER_01,
   1154	RTL_VER_02,
   1155	RTL_VER_03,
   1156	RTL_VER_04,
   1157	RTL_VER_05,
   1158	RTL_VER_06,
   1159	RTL_VER_07,
   1160	RTL_VER_08,
   1161	RTL_VER_09,
   1162
   1163	RTL_TEST_01,
   1164	RTL_VER_10,
   1165	RTL_VER_11,
   1166	RTL_VER_12,
   1167	RTL_VER_13,
   1168	RTL_VER_14,
   1169	RTL_VER_15,
   1170
   1171	RTL_VER_MAX
   1172};
   1173
   1174enum tx_csum_stat {
   1175	TX_CSUM_SUCCESS = 0,
   1176	TX_CSUM_TSO,
   1177	TX_CSUM_NONE
   1178};
   1179
   1180#define RTL_ADVERTISED_10_HALF			BIT(0)
   1181#define RTL_ADVERTISED_10_FULL			BIT(1)
   1182#define RTL_ADVERTISED_100_HALF			BIT(2)
   1183#define RTL_ADVERTISED_100_FULL			BIT(3)
   1184#define RTL_ADVERTISED_1000_HALF		BIT(4)
   1185#define RTL_ADVERTISED_1000_FULL		BIT(5)
   1186#define RTL_ADVERTISED_2500_FULL		BIT(6)
   1187
   1188/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
   1189 * The RTL chips use a 64 element hash table based on the Ethernet CRC.
   1190 */
   1191static const int multicast_filter_limit = 32;
   1192static unsigned int agg_buf_sz = 16384;
   1193
   1194#define RTL_LIMITED_TSO_SIZE	(size_to_mtu(agg_buf_sz) - sizeof(struct tx_desc))
   1195
   1196static
   1197int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
   1198{
   1199	int ret;
   1200	void *tmp;
   1201
   1202	tmp = kmalloc(size, GFP_KERNEL);
   1203	if (!tmp)
   1204		return -ENOMEM;
   1205
   1206	ret = usb_control_msg(tp->udev, tp->pipe_ctrl_in,
   1207			      RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
   1208			      value, index, tmp, size, 500);
   1209	if (ret < 0)
   1210		memset(data, 0xff, size);
   1211	else
   1212		memcpy(data, tmp, size);
   1213
   1214	kfree(tmp);
   1215
   1216	return ret;
   1217}
   1218
   1219static
   1220int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
   1221{
   1222	int ret;
   1223	void *tmp;
   1224
   1225	tmp = kmemdup(data, size, GFP_KERNEL);
   1226	if (!tmp)
   1227		return -ENOMEM;
   1228
   1229	ret = usb_control_msg(tp->udev, tp->pipe_ctrl_out,
   1230			      RTL8152_REQ_SET_REGS, RTL8152_REQT_WRITE,
   1231			      value, index, tmp, size, 500);
   1232
   1233	kfree(tmp);
   1234
   1235	return ret;
   1236}
   1237
   1238static void rtl_set_unplug(struct r8152 *tp)
   1239{
   1240	if (tp->udev->state == USB_STATE_NOTATTACHED) {
   1241		set_bit(RTL8152_UNPLUG, &tp->flags);
   1242		smp_mb__after_atomic();
   1243	}
   1244}
   1245
   1246static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
   1247			    void *data, u16 type)
   1248{
   1249	u16 limit = 64;
   1250	int ret = 0;
   1251
   1252	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   1253		return -ENODEV;
   1254
   1255	/* both size and indix must be 4 bytes align */
   1256	if ((size & 3) || !size || (index & 3) || !data)
   1257		return -EPERM;
   1258
   1259	if ((u32)index + (u32)size > 0xffff)
   1260		return -EPERM;
   1261
   1262	while (size) {
   1263		if (size > limit) {
   1264			ret = get_registers(tp, index, type, limit, data);
   1265			if (ret < 0)
   1266				break;
   1267
   1268			index += limit;
   1269			data += limit;
   1270			size -= limit;
   1271		} else {
   1272			ret = get_registers(tp, index, type, size, data);
   1273			if (ret < 0)
   1274				break;
   1275
   1276			index += size;
   1277			data += size;
   1278			size = 0;
   1279			break;
   1280		}
   1281	}
   1282
   1283	if (ret == -ENODEV)
   1284		rtl_set_unplug(tp);
   1285
   1286	return ret;
   1287}
   1288
   1289static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen,
   1290			     u16 size, void *data, u16 type)
   1291{
   1292	int ret;
   1293	u16 byteen_start, byteen_end, byen;
   1294	u16 limit = 512;
   1295
   1296	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   1297		return -ENODEV;
   1298
   1299	/* both size and indix must be 4 bytes align */
   1300	if ((size & 3) || !size || (index & 3) || !data)
   1301		return -EPERM;
   1302
   1303	if ((u32)index + (u32)size > 0xffff)
   1304		return -EPERM;
   1305
   1306	byteen_start = byteen & BYTE_EN_START_MASK;
   1307	byteen_end = byteen & BYTE_EN_END_MASK;
   1308
   1309	byen = byteen_start | (byteen_start << 4);
   1310	ret = set_registers(tp, index, type | byen, 4, data);
   1311	if (ret < 0)
   1312		goto error1;
   1313
   1314	index += 4;
   1315	data += 4;
   1316	size -= 4;
   1317
   1318	if (size) {
   1319		size -= 4;
   1320
   1321		while (size) {
   1322			if (size > limit) {
   1323				ret = set_registers(tp, index,
   1324						    type | BYTE_EN_DWORD,
   1325						    limit, data);
   1326				if (ret < 0)
   1327					goto error1;
   1328
   1329				index += limit;
   1330				data += limit;
   1331				size -= limit;
   1332			} else {
   1333				ret = set_registers(tp, index,
   1334						    type | BYTE_EN_DWORD,
   1335						    size, data);
   1336				if (ret < 0)
   1337					goto error1;
   1338
   1339				index += size;
   1340				data += size;
   1341				size = 0;
   1342				break;
   1343			}
   1344		}
   1345
   1346		byen = byteen_end | (byteen_end >> 4);
   1347		ret = set_registers(tp, index, type | byen, 4, data);
   1348		if (ret < 0)
   1349			goto error1;
   1350	}
   1351
   1352error1:
   1353	if (ret == -ENODEV)
   1354		rtl_set_unplug(tp);
   1355
   1356	return ret;
   1357}
   1358
   1359static inline
   1360int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data)
   1361{
   1362	return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA);
   1363}
   1364
   1365static inline
   1366int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data)
   1367{
   1368	return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA);
   1369}
   1370
   1371static inline
   1372int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data)
   1373{
   1374	return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB);
   1375}
   1376
   1377static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index)
   1378{
   1379	__le32 data;
   1380
   1381	generic_ocp_read(tp, index, sizeof(data), &data, type);
   1382
   1383	return __le32_to_cpu(data);
   1384}
   1385
   1386static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data)
   1387{
   1388	__le32 tmp = __cpu_to_le32(data);
   1389
   1390	generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type);
   1391}
   1392
   1393static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index)
   1394{
   1395	u32 data;
   1396	__le32 tmp;
   1397	u16 byen = BYTE_EN_WORD;
   1398	u8 shift = index & 2;
   1399
   1400	index &= ~3;
   1401	byen <<= shift;
   1402
   1403	generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen);
   1404
   1405	data = __le32_to_cpu(tmp);
   1406	data >>= (shift * 8);
   1407	data &= 0xffff;
   1408
   1409	return (u16)data;
   1410}
   1411
   1412static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data)
   1413{
   1414	u32 mask = 0xffff;
   1415	__le32 tmp;
   1416	u16 byen = BYTE_EN_WORD;
   1417	u8 shift = index & 2;
   1418
   1419	data &= mask;
   1420
   1421	if (index & 2) {
   1422		byen <<= shift;
   1423		mask <<= (shift * 8);
   1424		data <<= (shift * 8);
   1425		index &= ~3;
   1426	}
   1427
   1428	tmp = __cpu_to_le32(data);
   1429
   1430	generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
   1431}
   1432
   1433static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index)
   1434{
   1435	u32 data;
   1436	__le32 tmp;
   1437	u8 shift = index & 3;
   1438
   1439	index &= ~3;
   1440
   1441	generic_ocp_read(tp, index, sizeof(tmp), &tmp, type);
   1442
   1443	data = __le32_to_cpu(tmp);
   1444	data >>= (shift * 8);
   1445	data &= 0xff;
   1446
   1447	return (u8)data;
   1448}
   1449
   1450static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data)
   1451{
   1452	u32 mask = 0xff;
   1453	__le32 tmp;
   1454	u16 byen = BYTE_EN_BYTE;
   1455	u8 shift = index & 3;
   1456
   1457	data &= mask;
   1458
   1459	if (index & 3) {
   1460		byen <<= shift;
   1461		mask <<= (shift * 8);
   1462		data <<= (shift * 8);
   1463		index &= ~3;
   1464	}
   1465
   1466	tmp = __cpu_to_le32(data);
   1467
   1468	generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
   1469}
   1470
   1471static u16 ocp_reg_read(struct r8152 *tp, u16 addr)
   1472{
   1473	u16 ocp_base, ocp_index;
   1474
   1475	ocp_base = addr & 0xf000;
   1476	if (ocp_base != tp->ocp_base) {
   1477		ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base);
   1478		tp->ocp_base = ocp_base;
   1479	}
   1480
   1481	ocp_index = (addr & 0x0fff) | 0xb000;
   1482	return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index);
   1483}
   1484
   1485static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data)
   1486{
   1487	u16 ocp_base, ocp_index;
   1488
   1489	ocp_base = addr & 0xf000;
   1490	if (ocp_base != tp->ocp_base) {
   1491		ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base);
   1492		tp->ocp_base = ocp_base;
   1493	}
   1494
   1495	ocp_index = (addr & 0x0fff) | 0xb000;
   1496	ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data);
   1497}
   1498
   1499static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value)
   1500{
   1501	ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value);
   1502}
   1503
   1504static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr)
   1505{
   1506	return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2);
   1507}
   1508
   1509static void sram_write(struct r8152 *tp, u16 addr, u16 data)
   1510{
   1511	ocp_reg_write(tp, OCP_SRAM_ADDR, addr);
   1512	ocp_reg_write(tp, OCP_SRAM_DATA, data);
   1513}
   1514
   1515static u16 sram_read(struct r8152 *tp, u16 addr)
   1516{
   1517	ocp_reg_write(tp, OCP_SRAM_ADDR, addr);
   1518	return ocp_reg_read(tp, OCP_SRAM_DATA);
   1519}
   1520
   1521static int read_mii_word(struct net_device *netdev, int phy_id, int reg)
   1522{
   1523	struct r8152 *tp = netdev_priv(netdev);
   1524	int ret;
   1525
   1526	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   1527		return -ENODEV;
   1528
   1529	if (phy_id != R8152_PHY_ID)
   1530		return -EINVAL;
   1531
   1532	ret = r8152_mdio_read(tp, reg);
   1533
   1534	return ret;
   1535}
   1536
   1537static
   1538void write_mii_word(struct net_device *netdev, int phy_id, int reg, int val)
   1539{
   1540	struct r8152 *tp = netdev_priv(netdev);
   1541
   1542	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   1543		return;
   1544
   1545	if (phy_id != R8152_PHY_ID)
   1546		return;
   1547
   1548	r8152_mdio_write(tp, reg, val);
   1549}
   1550
   1551static int
   1552r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
   1553
   1554static int
   1555rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
   1556		  u32 advertising);
   1557
   1558static int __rtl8152_set_mac_address(struct net_device *netdev, void *p,
   1559				     bool in_resume)
   1560{
   1561	struct r8152 *tp = netdev_priv(netdev);
   1562	struct sockaddr *addr = p;
   1563	int ret = -EADDRNOTAVAIL;
   1564
   1565	if (!is_valid_ether_addr(addr->sa_data))
   1566		goto out1;
   1567
   1568	if (!in_resume) {
   1569		ret = usb_autopm_get_interface(tp->intf);
   1570		if (ret < 0)
   1571			goto out1;
   1572	}
   1573
   1574	mutex_lock(&tp->control);
   1575
   1576	eth_hw_addr_set(netdev, addr->sa_data);
   1577
   1578	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
   1579	pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data);
   1580	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
   1581
   1582	mutex_unlock(&tp->control);
   1583
   1584	if (!in_resume)
   1585		usb_autopm_put_interface(tp->intf);
   1586out1:
   1587	return ret;
   1588}
   1589
   1590static int rtl8152_set_mac_address(struct net_device *netdev, void *p)
   1591{
   1592	return __rtl8152_set_mac_address(netdev, p, false);
   1593}
   1594
   1595/* Devices containing proper chips can support a persistent
   1596 * host system provided MAC address.
   1597 * Examples of this are Dell TB15 and Dell WD15 docks
   1598 */
   1599static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa)
   1600{
   1601	acpi_status status;
   1602	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
   1603	union acpi_object *obj;
   1604	int ret = -EINVAL;
   1605	u32 ocp_data;
   1606	unsigned char buf[6];
   1607	char *mac_obj_name;
   1608	acpi_object_type mac_obj_type;
   1609	int mac_strlen;
   1610
   1611	if (tp->lenovo_macpassthru) {
   1612		mac_obj_name = "\\MACA";
   1613		mac_obj_type = ACPI_TYPE_STRING;
   1614		mac_strlen = 0x16;
   1615	} else {
   1616		/* test for -AD variant of RTL8153 */
   1617		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
   1618		if ((ocp_data & AD_MASK) == 0x1000) {
   1619			/* test for MAC address pass-through bit */
   1620			ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE);
   1621			if ((ocp_data & PASS_THRU_MASK) != 1) {
   1622				netif_dbg(tp, probe, tp->netdev,
   1623						"No efuse for RTL8153-AD MAC pass through\n");
   1624				return -ENODEV;
   1625			}
   1626		} else {
   1627			/* test for RTL8153-BND and RTL8153-BD */
   1628			ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
   1629			if ((ocp_data & BND_MASK) == 0 && (ocp_data & BD_MASK) == 0) {
   1630				netif_dbg(tp, probe, tp->netdev,
   1631						"Invalid variant for MAC pass through\n");
   1632				return -ENODEV;
   1633			}
   1634		}
   1635
   1636		mac_obj_name = "\\_SB.AMAC";
   1637		mac_obj_type = ACPI_TYPE_BUFFER;
   1638		mac_strlen = 0x17;
   1639	}
   1640
   1641	/* returns _AUXMAC_#AABBCCDDEEFF# */
   1642	status = acpi_evaluate_object(NULL, mac_obj_name, NULL, &buffer);
   1643	obj = (union acpi_object *)buffer.pointer;
   1644	if (!ACPI_SUCCESS(status))
   1645		return -ENODEV;
   1646	if (obj->type != mac_obj_type || obj->string.length != mac_strlen) {
   1647		netif_warn(tp, probe, tp->netdev,
   1648			   "Invalid buffer for pass-thru MAC addr: (%d, %d)\n",
   1649			   obj->type, obj->string.length);
   1650		goto amacout;
   1651	}
   1652
   1653	if (strncmp(obj->string.pointer, "_AUXMAC_#", 9) != 0 ||
   1654	    strncmp(obj->string.pointer + 0x15, "#", 1) != 0) {
   1655		netif_warn(tp, probe, tp->netdev,
   1656			   "Invalid header when reading pass-thru MAC addr\n");
   1657		goto amacout;
   1658	}
   1659	ret = hex2bin(buf, obj->string.pointer + 9, 6);
   1660	if (!(ret == 0 && is_valid_ether_addr(buf))) {
   1661		netif_warn(tp, probe, tp->netdev,
   1662			   "Invalid MAC for pass-thru MAC addr: %d, %pM\n",
   1663			   ret, buf);
   1664		ret = -EINVAL;
   1665		goto amacout;
   1666	}
   1667	memcpy(sa->sa_data, buf, 6);
   1668	netif_info(tp, probe, tp->netdev,
   1669		   "Using pass-thru MAC addr %pM\n", sa->sa_data);
   1670
   1671amacout:
   1672	kfree(obj);
   1673	return ret;
   1674}
   1675
   1676static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
   1677{
   1678	struct net_device *dev = tp->netdev;
   1679	int ret;
   1680
   1681	sa->sa_family = dev->type;
   1682
   1683	ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data);
   1684	if (ret < 0) {
   1685		if (tp->version == RTL_VER_01) {
   1686			ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data);
   1687		} else {
   1688			/* if device doesn't support MAC pass through this will
   1689			 * be expected to be non-zero
   1690			 */
   1691			ret = vendor_mac_passthru_addr_read(tp, sa);
   1692			if (ret < 0)
   1693				ret = pla_ocp_read(tp, PLA_BACKUP, 8,
   1694						   sa->sa_data);
   1695		}
   1696	}
   1697
   1698	if (ret < 0) {
   1699		netif_err(tp, probe, dev, "Get ether addr fail\n");
   1700	} else if (!is_valid_ether_addr(sa->sa_data)) {
   1701		netif_err(tp, probe, dev, "Invalid ether addr %pM\n",
   1702			  sa->sa_data);
   1703		eth_hw_addr_random(dev);
   1704		ether_addr_copy(sa->sa_data, dev->dev_addr);
   1705		netif_info(tp, probe, dev, "Random ether addr %pM\n",
   1706			   sa->sa_data);
   1707		return 0;
   1708	}
   1709
   1710	return ret;
   1711}
   1712
   1713static int set_ethernet_addr(struct r8152 *tp, bool in_resume)
   1714{
   1715	struct net_device *dev = tp->netdev;
   1716	struct sockaddr sa;
   1717	int ret;
   1718
   1719	ret = determine_ethernet_addr(tp, &sa);
   1720	if (ret < 0)
   1721		return ret;
   1722
   1723	if (tp->version == RTL_VER_01)
   1724		eth_hw_addr_set(dev, sa.sa_data);
   1725	else
   1726		ret = __rtl8152_set_mac_address(dev, &sa, in_resume);
   1727
   1728	return ret;
   1729}
   1730
   1731static void read_bulk_callback(struct urb *urb)
   1732{
   1733	struct net_device *netdev;
   1734	int status = urb->status;
   1735	struct rx_agg *agg;
   1736	struct r8152 *tp;
   1737	unsigned long flags;
   1738
   1739	agg = urb->context;
   1740	if (!agg)
   1741		return;
   1742
   1743	tp = agg->context;
   1744	if (!tp)
   1745		return;
   1746
   1747	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   1748		return;
   1749
   1750	if (!test_bit(WORK_ENABLE, &tp->flags))
   1751		return;
   1752
   1753	netdev = tp->netdev;
   1754
   1755	/* When link down, the driver would cancel all bulks. */
   1756	/* This avoid the re-submitting bulk */
   1757	if (!netif_carrier_ok(netdev))
   1758		return;
   1759
   1760	usb_mark_last_busy(tp->udev);
   1761
   1762	switch (status) {
   1763	case 0:
   1764		if (urb->actual_length < ETH_ZLEN)
   1765			break;
   1766
   1767		spin_lock_irqsave(&tp->rx_lock, flags);
   1768		list_add_tail(&agg->list, &tp->rx_done);
   1769		spin_unlock_irqrestore(&tp->rx_lock, flags);
   1770		napi_schedule(&tp->napi);
   1771		return;
   1772	case -ESHUTDOWN:
   1773		rtl_set_unplug(tp);
   1774		netif_device_detach(tp->netdev);
   1775		return;
   1776	case -EPROTO:
   1777		urb->actual_length = 0;
   1778		spin_lock_irqsave(&tp->rx_lock, flags);
   1779		list_add_tail(&agg->list, &tp->rx_done);
   1780		spin_unlock_irqrestore(&tp->rx_lock, flags);
   1781		set_bit(RX_EPROTO, &tp->flags);
   1782		schedule_delayed_work(&tp->schedule, 1);
   1783		return;
   1784	case -ENOENT:
   1785		return;	/* the urb is in unlink state */
   1786	case -ETIME:
   1787		if (net_ratelimit())
   1788			netdev_warn(netdev, "maybe reset is needed?\n");
   1789		break;
   1790	default:
   1791		if (net_ratelimit())
   1792			netdev_warn(netdev, "Rx status %d\n", status);
   1793		break;
   1794	}
   1795
   1796	r8152_submit_rx(tp, agg, GFP_ATOMIC);
   1797}
   1798
   1799static void write_bulk_callback(struct urb *urb)
   1800{
   1801	struct net_device_stats *stats;
   1802	struct net_device *netdev;
   1803	struct tx_agg *agg;
   1804	struct r8152 *tp;
   1805	unsigned long flags;
   1806	int status = urb->status;
   1807
   1808	agg = urb->context;
   1809	if (!agg)
   1810		return;
   1811
   1812	tp = agg->context;
   1813	if (!tp)
   1814		return;
   1815
   1816	netdev = tp->netdev;
   1817	stats = &netdev->stats;
   1818	if (status) {
   1819		if (net_ratelimit())
   1820			netdev_warn(netdev, "Tx status %d\n", status);
   1821		stats->tx_errors += agg->skb_num;
   1822	} else {
   1823		stats->tx_packets += agg->skb_num;
   1824		stats->tx_bytes += agg->skb_len;
   1825	}
   1826
   1827	spin_lock_irqsave(&tp->tx_lock, flags);
   1828	list_add_tail(&agg->list, &tp->tx_free);
   1829	spin_unlock_irqrestore(&tp->tx_lock, flags);
   1830
   1831	usb_autopm_put_interface_async(tp->intf);
   1832
   1833	if (!netif_carrier_ok(netdev))
   1834		return;
   1835
   1836	if (!test_bit(WORK_ENABLE, &tp->flags))
   1837		return;
   1838
   1839	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   1840		return;
   1841
   1842	if (!skb_queue_empty(&tp->tx_queue))
   1843		tasklet_schedule(&tp->tx_tl);
   1844}
   1845
   1846static void intr_callback(struct urb *urb)
   1847{
   1848	struct r8152 *tp;
   1849	__le16 *d;
   1850	int status = urb->status;
   1851	int res;
   1852
   1853	tp = urb->context;
   1854	if (!tp)
   1855		return;
   1856
   1857	if (!test_bit(WORK_ENABLE, &tp->flags))
   1858		return;
   1859
   1860	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   1861		return;
   1862
   1863	switch (status) {
   1864	case 0:			/* success */
   1865		break;
   1866	case -ECONNRESET:	/* unlink */
   1867	case -ESHUTDOWN:
   1868		netif_device_detach(tp->netdev);
   1869		fallthrough;
   1870	case -ENOENT:
   1871	case -EPROTO:
   1872		netif_info(tp, intr, tp->netdev,
   1873			   "Stop submitting intr, status %d\n", status);
   1874		return;
   1875	case -EOVERFLOW:
   1876		netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n");
   1877		goto resubmit;
   1878	/* -EPIPE:  should clear the halt */
   1879	default:
   1880		netif_info(tp, intr, tp->netdev, "intr status %d\n", status);
   1881		goto resubmit;
   1882	}
   1883
   1884	d = urb->transfer_buffer;
   1885	if (INTR_LINK & __le16_to_cpu(d[0])) {
   1886		if (!netif_carrier_ok(tp->netdev)) {
   1887			set_bit(RTL8152_LINK_CHG, &tp->flags);
   1888			schedule_delayed_work(&tp->schedule, 0);
   1889		}
   1890	} else {
   1891		if (netif_carrier_ok(tp->netdev)) {
   1892			netif_stop_queue(tp->netdev);
   1893			set_bit(RTL8152_LINK_CHG, &tp->flags);
   1894			schedule_delayed_work(&tp->schedule, 0);
   1895		}
   1896	}
   1897
   1898resubmit:
   1899	res = usb_submit_urb(urb, GFP_ATOMIC);
   1900	if (res == -ENODEV) {
   1901		rtl_set_unplug(tp);
   1902		netif_device_detach(tp->netdev);
   1903	} else if (res) {
   1904		netif_err(tp, intr, tp->netdev,
   1905			  "can't resubmit intr, status %d\n", res);
   1906	}
   1907}
   1908
   1909static inline void *rx_agg_align(void *data)
   1910{
   1911	return (void *)ALIGN((uintptr_t)data, RX_ALIGN);
   1912}
   1913
   1914static inline void *tx_agg_align(void *data)
   1915{
   1916	return (void *)ALIGN((uintptr_t)data, TX_ALIGN);
   1917}
   1918
   1919static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg)
   1920{
   1921	list_del(&agg->info_list);
   1922
   1923	usb_free_urb(agg->urb);
   1924	put_page(agg->page);
   1925	kfree(agg);
   1926
   1927	atomic_dec(&tp->rx_count);
   1928}
   1929
   1930static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags)
   1931{
   1932	struct net_device *netdev = tp->netdev;
   1933	int node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1;
   1934	unsigned int order = get_order(tp->rx_buf_sz);
   1935	struct rx_agg *rx_agg;
   1936	unsigned long flags;
   1937
   1938	rx_agg = kmalloc_node(sizeof(*rx_agg), mflags, node);
   1939	if (!rx_agg)
   1940		return NULL;
   1941
   1942	rx_agg->page = alloc_pages(mflags | __GFP_COMP, order);
   1943	if (!rx_agg->page)
   1944		goto free_rx;
   1945
   1946	rx_agg->buffer = page_address(rx_agg->page);
   1947
   1948	rx_agg->urb = usb_alloc_urb(0, mflags);
   1949	if (!rx_agg->urb)
   1950		goto free_buf;
   1951
   1952	rx_agg->context = tp;
   1953
   1954	INIT_LIST_HEAD(&rx_agg->list);
   1955	INIT_LIST_HEAD(&rx_agg->info_list);
   1956	spin_lock_irqsave(&tp->rx_lock, flags);
   1957	list_add_tail(&rx_agg->info_list, &tp->rx_info);
   1958	spin_unlock_irqrestore(&tp->rx_lock, flags);
   1959
   1960	atomic_inc(&tp->rx_count);
   1961
   1962	return rx_agg;
   1963
   1964free_buf:
   1965	__free_pages(rx_agg->page, order);
   1966free_rx:
   1967	kfree(rx_agg);
   1968	return NULL;
   1969}
   1970
   1971static void free_all_mem(struct r8152 *tp)
   1972{
   1973	struct rx_agg *agg, *agg_next;
   1974	unsigned long flags;
   1975	int i;
   1976
   1977	spin_lock_irqsave(&tp->rx_lock, flags);
   1978
   1979	list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list)
   1980		free_rx_agg(tp, agg);
   1981
   1982	spin_unlock_irqrestore(&tp->rx_lock, flags);
   1983
   1984	WARN_ON(atomic_read(&tp->rx_count));
   1985
   1986	for (i = 0; i < RTL8152_MAX_TX; i++) {
   1987		usb_free_urb(tp->tx_info[i].urb);
   1988		tp->tx_info[i].urb = NULL;
   1989
   1990		kfree(tp->tx_info[i].buffer);
   1991		tp->tx_info[i].buffer = NULL;
   1992		tp->tx_info[i].head = NULL;
   1993	}
   1994
   1995	usb_free_urb(tp->intr_urb);
   1996	tp->intr_urb = NULL;
   1997
   1998	kfree(tp->intr_buff);
   1999	tp->intr_buff = NULL;
   2000}
   2001
   2002static int alloc_all_mem(struct r8152 *tp)
   2003{
   2004	struct net_device *netdev = tp->netdev;
   2005	struct usb_interface *intf = tp->intf;
   2006	struct usb_host_interface *alt = intf->cur_altsetting;
   2007	struct usb_host_endpoint *ep_intr = alt->endpoint + 2;
   2008	int node, i;
   2009
   2010	node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1;
   2011
   2012	spin_lock_init(&tp->rx_lock);
   2013	spin_lock_init(&tp->tx_lock);
   2014	INIT_LIST_HEAD(&tp->rx_info);
   2015	INIT_LIST_HEAD(&tp->tx_free);
   2016	INIT_LIST_HEAD(&tp->rx_done);
   2017	skb_queue_head_init(&tp->tx_queue);
   2018	skb_queue_head_init(&tp->rx_queue);
   2019	atomic_set(&tp->rx_count, 0);
   2020
   2021	for (i = 0; i < RTL8152_MAX_RX; i++) {
   2022		if (!alloc_rx_agg(tp, GFP_KERNEL))
   2023			goto err1;
   2024	}
   2025
   2026	for (i = 0; i < RTL8152_MAX_TX; i++) {
   2027		struct urb *urb;
   2028		u8 *buf;
   2029
   2030		buf = kmalloc_node(agg_buf_sz, GFP_KERNEL, node);
   2031		if (!buf)
   2032			goto err1;
   2033
   2034		if (buf != tx_agg_align(buf)) {
   2035			kfree(buf);
   2036			buf = kmalloc_node(agg_buf_sz + TX_ALIGN, GFP_KERNEL,
   2037					   node);
   2038			if (!buf)
   2039				goto err1;
   2040		}
   2041
   2042		urb = usb_alloc_urb(0, GFP_KERNEL);
   2043		if (!urb) {
   2044			kfree(buf);
   2045			goto err1;
   2046		}
   2047
   2048		INIT_LIST_HEAD(&tp->tx_info[i].list);
   2049		tp->tx_info[i].context = tp;
   2050		tp->tx_info[i].urb = urb;
   2051		tp->tx_info[i].buffer = buf;
   2052		tp->tx_info[i].head = tx_agg_align(buf);
   2053
   2054		list_add_tail(&tp->tx_info[i].list, &tp->tx_free);
   2055	}
   2056
   2057	tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL);
   2058	if (!tp->intr_urb)
   2059		goto err1;
   2060
   2061	tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL);
   2062	if (!tp->intr_buff)
   2063		goto err1;
   2064
   2065	tp->intr_interval = (int)ep_intr->desc.bInterval;
   2066	usb_fill_int_urb(tp->intr_urb, tp->udev, tp->pipe_intr,
   2067			 tp->intr_buff, INTBUFSIZE, intr_callback,
   2068			 tp, tp->intr_interval);
   2069
   2070	return 0;
   2071
   2072err1:
   2073	free_all_mem(tp);
   2074	return -ENOMEM;
   2075}
   2076
   2077static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp)
   2078{
   2079	struct tx_agg *agg = NULL;
   2080	unsigned long flags;
   2081
   2082	if (list_empty(&tp->tx_free))
   2083		return NULL;
   2084
   2085	spin_lock_irqsave(&tp->tx_lock, flags);
   2086	if (!list_empty(&tp->tx_free)) {
   2087		struct list_head *cursor;
   2088
   2089		cursor = tp->tx_free.next;
   2090		list_del_init(cursor);
   2091		agg = list_entry(cursor, struct tx_agg, list);
   2092	}
   2093	spin_unlock_irqrestore(&tp->tx_lock, flags);
   2094
   2095	return agg;
   2096}
   2097
   2098/* r8152_csum_workaround()
   2099 * The hw limits the value of the transport offset. When the offset is out of
   2100 * range, calculate the checksum by sw.
   2101 */
   2102static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb,
   2103				  struct sk_buff_head *list)
   2104{
   2105	if (skb_shinfo(skb)->gso_size) {
   2106		netdev_features_t features = tp->netdev->features;
   2107		struct sk_buff *segs, *seg, *next;
   2108		struct sk_buff_head seg_list;
   2109
   2110		features &= ~(NETIF_F_SG | NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
   2111		segs = skb_gso_segment(skb, features);
   2112		if (IS_ERR(segs) || !segs)
   2113			goto drop;
   2114
   2115		__skb_queue_head_init(&seg_list);
   2116
   2117		skb_list_walk_safe(segs, seg, next) {
   2118			skb_mark_not_on_list(seg);
   2119			__skb_queue_tail(&seg_list, seg);
   2120		}
   2121
   2122		skb_queue_splice(&seg_list, list);
   2123		dev_kfree_skb(skb);
   2124	} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
   2125		if (skb_checksum_help(skb) < 0)
   2126			goto drop;
   2127
   2128		__skb_queue_head(list, skb);
   2129	} else {
   2130		struct net_device_stats *stats;
   2131
   2132drop:
   2133		stats = &tp->netdev->stats;
   2134		stats->tx_dropped++;
   2135		dev_kfree_skb(skb);
   2136	}
   2137}
   2138
   2139static inline void rtl_tx_vlan_tag(struct tx_desc *desc, struct sk_buff *skb)
   2140{
   2141	if (skb_vlan_tag_present(skb)) {
   2142		u32 opts2;
   2143
   2144		opts2 = TX_VLAN_TAG | swab16(skb_vlan_tag_get(skb));
   2145		desc->opts2 |= cpu_to_le32(opts2);
   2146	}
   2147}
   2148
   2149static inline void rtl_rx_vlan_tag(struct rx_desc *desc, struct sk_buff *skb)
   2150{
   2151	u32 opts2 = le32_to_cpu(desc->opts2);
   2152
   2153	if (opts2 & RX_VLAN_TAG)
   2154		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
   2155				       swab16(opts2 & 0xffff));
   2156}
   2157
   2158static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc,
   2159			 struct sk_buff *skb, u32 len, u32 transport_offset)
   2160{
   2161	u32 mss = skb_shinfo(skb)->gso_size;
   2162	u32 opts1, opts2 = 0;
   2163	int ret = TX_CSUM_SUCCESS;
   2164
   2165	WARN_ON_ONCE(len > TX_LEN_MAX);
   2166
   2167	opts1 = len | TX_FS | TX_LS;
   2168
   2169	if (mss) {
   2170		if (transport_offset > GTTCPHO_MAX) {
   2171			netif_warn(tp, tx_err, tp->netdev,
   2172				   "Invalid transport offset 0x%x for TSO\n",
   2173				   transport_offset);
   2174			ret = TX_CSUM_TSO;
   2175			goto unavailable;
   2176		}
   2177
   2178		switch (vlan_get_protocol(skb)) {
   2179		case htons(ETH_P_IP):
   2180			opts1 |= GTSENDV4;
   2181			break;
   2182
   2183		case htons(ETH_P_IPV6):
   2184			if (skb_cow_head(skb, 0)) {
   2185				ret = TX_CSUM_TSO;
   2186				goto unavailable;
   2187			}
   2188			tcp_v6_gso_csum_prep(skb);
   2189			opts1 |= GTSENDV6;
   2190			break;
   2191
   2192		default:
   2193			WARN_ON_ONCE(1);
   2194			break;
   2195		}
   2196
   2197		opts1 |= transport_offset << GTTCPHO_SHIFT;
   2198		opts2 |= min(mss, MSS_MAX) << MSS_SHIFT;
   2199	} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
   2200		u8 ip_protocol;
   2201
   2202		if (transport_offset > TCPHO_MAX) {
   2203			netif_warn(tp, tx_err, tp->netdev,
   2204				   "Invalid transport offset 0x%x\n",
   2205				   transport_offset);
   2206			ret = TX_CSUM_NONE;
   2207			goto unavailable;
   2208		}
   2209
   2210		switch (vlan_get_protocol(skb)) {
   2211		case htons(ETH_P_IP):
   2212			opts2 |= IPV4_CS;
   2213			ip_protocol = ip_hdr(skb)->protocol;
   2214			break;
   2215
   2216		case htons(ETH_P_IPV6):
   2217			opts2 |= IPV6_CS;
   2218			ip_protocol = ipv6_hdr(skb)->nexthdr;
   2219			break;
   2220
   2221		default:
   2222			ip_protocol = IPPROTO_RAW;
   2223			break;
   2224		}
   2225
   2226		if (ip_protocol == IPPROTO_TCP)
   2227			opts2 |= TCP_CS;
   2228		else if (ip_protocol == IPPROTO_UDP)
   2229			opts2 |= UDP_CS;
   2230		else
   2231			WARN_ON_ONCE(1);
   2232
   2233		opts2 |= transport_offset << TCPHO_SHIFT;
   2234	}
   2235
   2236	desc->opts2 = cpu_to_le32(opts2);
   2237	desc->opts1 = cpu_to_le32(opts1);
   2238
   2239unavailable:
   2240	return ret;
   2241}
   2242
   2243static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg)
   2244{
   2245	struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue;
   2246	int remain, ret;
   2247	u8 *tx_data;
   2248
   2249	__skb_queue_head_init(&skb_head);
   2250	spin_lock(&tx_queue->lock);
   2251	skb_queue_splice_init(tx_queue, &skb_head);
   2252	spin_unlock(&tx_queue->lock);
   2253
   2254	tx_data = agg->head;
   2255	agg->skb_num = 0;
   2256	agg->skb_len = 0;
   2257	remain = agg_buf_sz;
   2258
   2259	while (remain >= ETH_ZLEN + sizeof(struct tx_desc)) {
   2260		struct tx_desc *tx_desc;
   2261		struct sk_buff *skb;
   2262		unsigned int len;
   2263		u32 offset;
   2264
   2265		skb = __skb_dequeue(&skb_head);
   2266		if (!skb)
   2267			break;
   2268
   2269		len = skb->len + sizeof(*tx_desc);
   2270
   2271		if (len > remain) {
   2272			__skb_queue_head(&skb_head, skb);
   2273			break;
   2274		}
   2275
   2276		tx_data = tx_agg_align(tx_data);
   2277		tx_desc = (struct tx_desc *)tx_data;
   2278
   2279		offset = (u32)skb_transport_offset(skb);
   2280
   2281		if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) {
   2282			r8152_csum_workaround(tp, skb, &skb_head);
   2283			continue;
   2284		}
   2285
   2286		rtl_tx_vlan_tag(tx_desc, skb);
   2287
   2288		tx_data += sizeof(*tx_desc);
   2289
   2290		len = skb->len;
   2291		if (skb_copy_bits(skb, 0, tx_data, len) < 0) {
   2292			struct net_device_stats *stats = &tp->netdev->stats;
   2293
   2294			stats->tx_dropped++;
   2295			dev_kfree_skb_any(skb);
   2296			tx_data -= sizeof(*tx_desc);
   2297			continue;
   2298		}
   2299
   2300		tx_data += len;
   2301		agg->skb_len += len;
   2302		agg->skb_num += skb_shinfo(skb)->gso_segs ?: 1;
   2303
   2304		dev_kfree_skb_any(skb);
   2305
   2306		remain = agg_buf_sz - (int)(tx_agg_align(tx_data) - agg->head);
   2307
   2308		if (tp->dell_tb_rx_agg_bug)
   2309			break;
   2310	}
   2311
   2312	if (!skb_queue_empty(&skb_head)) {
   2313		spin_lock(&tx_queue->lock);
   2314		skb_queue_splice(&skb_head, tx_queue);
   2315		spin_unlock(&tx_queue->lock);
   2316	}
   2317
   2318	netif_tx_lock(tp->netdev);
   2319
   2320	if (netif_queue_stopped(tp->netdev) &&
   2321	    skb_queue_len(&tp->tx_queue) < tp->tx_qlen)
   2322		netif_wake_queue(tp->netdev);
   2323
   2324	netif_tx_unlock(tp->netdev);
   2325
   2326	ret = usb_autopm_get_interface_async(tp->intf);
   2327	if (ret < 0)
   2328		goto out_tx_fill;
   2329
   2330	usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_out,
   2331			  agg->head, (int)(tx_data - (u8 *)agg->head),
   2332			  (usb_complete_t)write_bulk_callback, agg);
   2333
   2334	ret = usb_submit_urb(agg->urb, GFP_ATOMIC);
   2335	if (ret < 0)
   2336		usb_autopm_put_interface_async(tp->intf);
   2337
   2338out_tx_fill:
   2339	return ret;
   2340}
   2341
   2342static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc)
   2343{
   2344	u8 checksum = CHECKSUM_NONE;
   2345	u32 opts2, opts3;
   2346
   2347	if (!(tp->netdev->features & NETIF_F_RXCSUM))
   2348		goto return_result;
   2349
   2350	opts2 = le32_to_cpu(rx_desc->opts2);
   2351	opts3 = le32_to_cpu(rx_desc->opts3);
   2352
   2353	if (opts2 & RD_IPV4_CS) {
   2354		if (opts3 & IPF)
   2355			checksum = CHECKSUM_NONE;
   2356		else if ((opts2 & RD_UDP_CS) && !(opts3 & UDPF))
   2357			checksum = CHECKSUM_UNNECESSARY;
   2358		else if ((opts2 & RD_TCP_CS) && !(opts3 & TCPF))
   2359			checksum = CHECKSUM_UNNECESSARY;
   2360	} else if (opts2 & RD_IPV6_CS) {
   2361		if ((opts2 & RD_UDP_CS) && !(opts3 & UDPF))
   2362			checksum = CHECKSUM_UNNECESSARY;
   2363		else if ((opts2 & RD_TCP_CS) && !(opts3 & TCPF))
   2364			checksum = CHECKSUM_UNNECESSARY;
   2365	}
   2366
   2367return_result:
   2368	return checksum;
   2369}
   2370
   2371static inline bool rx_count_exceed(struct r8152 *tp)
   2372{
   2373	return atomic_read(&tp->rx_count) > RTL8152_MAX_RX;
   2374}
   2375
   2376static inline int agg_offset(struct rx_agg *agg, void *addr)
   2377{
   2378	return (int)(addr - agg->buffer);
   2379}
   2380
   2381static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags)
   2382{
   2383	struct rx_agg *agg, *agg_next, *agg_free = NULL;
   2384	unsigned long flags;
   2385
   2386	spin_lock_irqsave(&tp->rx_lock, flags);
   2387
   2388	list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) {
   2389		if (page_count(agg->page) == 1) {
   2390			if (!agg_free) {
   2391				list_del_init(&agg->list);
   2392				agg_free = agg;
   2393				continue;
   2394			}
   2395			if (rx_count_exceed(tp)) {
   2396				list_del_init(&agg->list);
   2397				free_rx_agg(tp, agg);
   2398			}
   2399			break;
   2400		}
   2401	}
   2402
   2403	spin_unlock_irqrestore(&tp->rx_lock, flags);
   2404
   2405	if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending)
   2406		agg_free = alloc_rx_agg(tp, mflags);
   2407
   2408	return agg_free;
   2409}
   2410
   2411static int rx_bottom(struct r8152 *tp, int budget)
   2412{
   2413	unsigned long flags;
   2414	struct list_head *cursor, *next, rx_queue;
   2415	int ret = 0, work_done = 0;
   2416	struct napi_struct *napi = &tp->napi;
   2417
   2418	if (!skb_queue_empty(&tp->rx_queue)) {
   2419		while (work_done < budget) {
   2420			struct sk_buff *skb = __skb_dequeue(&tp->rx_queue);
   2421			struct net_device *netdev = tp->netdev;
   2422			struct net_device_stats *stats = &netdev->stats;
   2423			unsigned int pkt_len;
   2424
   2425			if (!skb)
   2426				break;
   2427
   2428			pkt_len = skb->len;
   2429			napi_gro_receive(napi, skb);
   2430			work_done++;
   2431			stats->rx_packets++;
   2432			stats->rx_bytes += pkt_len;
   2433		}
   2434	}
   2435
   2436	if (list_empty(&tp->rx_done))
   2437		goto out1;
   2438
   2439	clear_bit(RX_EPROTO, &tp->flags);
   2440	INIT_LIST_HEAD(&rx_queue);
   2441	spin_lock_irqsave(&tp->rx_lock, flags);
   2442	list_splice_init(&tp->rx_done, &rx_queue);
   2443	spin_unlock_irqrestore(&tp->rx_lock, flags);
   2444
   2445	list_for_each_safe(cursor, next, &rx_queue) {
   2446		struct rx_desc *rx_desc;
   2447		struct rx_agg *agg, *agg_free;
   2448		int len_used = 0;
   2449		struct urb *urb;
   2450		u8 *rx_data;
   2451
   2452		list_del_init(cursor);
   2453
   2454		agg = list_entry(cursor, struct rx_agg, list);
   2455		urb = agg->urb;
   2456		if (urb->status != 0 || urb->actual_length < ETH_ZLEN)
   2457			goto submit;
   2458
   2459		agg_free = rtl_get_free_rx(tp, GFP_ATOMIC);
   2460
   2461		rx_desc = agg->buffer;
   2462		rx_data = agg->buffer;
   2463		len_used += sizeof(struct rx_desc);
   2464
   2465		while (urb->actual_length > len_used) {
   2466			struct net_device *netdev = tp->netdev;
   2467			struct net_device_stats *stats = &netdev->stats;
   2468			unsigned int pkt_len, rx_frag_head_sz;
   2469			struct sk_buff *skb;
   2470
   2471			/* limit the skb numbers for rx_queue */
   2472			if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000))
   2473				break;
   2474
   2475			pkt_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK;
   2476			if (pkt_len < ETH_ZLEN)
   2477				break;
   2478
   2479			len_used += pkt_len;
   2480			if (urb->actual_length < len_used)
   2481				break;
   2482
   2483			pkt_len -= ETH_FCS_LEN;
   2484			rx_data += sizeof(struct rx_desc);
   2485
   2486			if (!agg_free || tp->rx_copybreak > pkt_len)
   2487				rx_frag_head_sz = pkt_len;
   2488			else
   2489				rx_frag_head_sz = tp->rx_copybreak;
   2490
   2491			skb = napi_alloc_skb(napi, rx_frag_head_sz);
   2492			if (!skb) {
   2493				stats->rx_dropped++;
   2494				goto find_next_rx;
   2495			}
   2496
   2497			skb->ip_summed = r8152_rx_csum(tp, rx_desc);
   2498			memcpy(skb->data, rx_data, rx_frag_head_sz);
   2499			skb_put(skb, rx_frag_head_sz);
   2500			pkt_len -= rx_frag_head_sz;
   2501			rx_data += rx_frag_head_sz;
   2502			if (pkt_len) {
   2503				skb_add_rx_frag(skb, 0, agg->page,
   2504						agg_offset(agg, rx_data),
   2505						pkt_len,
   2506						SKB_DATA_ALIGN(pkt_len));
   2507				get_page(agg->page);
   2508			}
   2509
   2510			skb->protocol = eth_type_trans(skb, netdev);
   2511			rtl_rx_vlan_tag(rx_desc, skb);
   2512			if (work_done < budget) {
   2513				work_done++;
   2514				stats->rx_packets++;
   2515				stats->rx_bytes += skb->len;
   2516				napi_gro_receive(napi, skb);
   2517			} else {
   2518				__skb_queue_tail(&tp->rx_queue, skb);
   2519			}
   2520
   2521find_next_rx:
   2522			rx_data = rx_agg_align(rx_data + pkt_len + ETH_FCS_LEN);
   2523			rx_desc = (struct rx_desc *)rx_data;
   2524			len_used = agg_offset(agg, rx_data);
   2525			len_used += sizeof(struct rx_desc);
   2526		}
   2527
   2528		WARN_ON(!agg_free && page_count(agg->page) > 1);
   2529
   2530		if (agg_free) {
   2531			spin_lock_irqsave(&tp->rx_lock, flags);
   2532			if (page_count(agg->page) == 1) {
   2533				list_add(&agg_free->list, &tp->rx_used);
   2534			} else {
   2535				list_add_tail(&agg->list, &tp->rx_used);
   2536				agg = agg_free;
   2537				urb = agg->urb;
   2538			}
   2539			spin_unlock_irqrestore(&tp->rx_lock, flags);
   2540		}
   2541
   2542submit:
   2543		if (!ret) {
   2544			ret = r8152_submit_rx(tp, agg, GFP_ATOMIC);
   2545		} else {
   2546			urb->actual_length = 0;
   2547			list_add_tail(&agg->list, next);
   2548		}
   2549	}
   2550
   2551	if (!list_empty(&rx_queue)) {
   2552		spin_lock_irqsave(&tp->rx_lock, flags);
   2553		list_splice_tail(&rx_queue, &tp->rx_done);
   2554		spin_unlock_irqrestore(&tp->rx_lock, flags);
   2555	}
   2556
   2557out1:
   2558	return work_done;
   2559}
   2560
   2561static void tx_bottom(struct r8152 *tp)
   2562{
   2563	int res;
   2564
   2565	do {
   2566		struct net_device *netdev = tp->netdev;
   2567		struct tx_agg *agg;
   2568
   2569		if (skb_queue_empty(&tp->tx_queue))
   2570			break;
   2571
   2572		agg = r8152_get_tx_agg(tp);
   2573		if (!agg)
   2574			break;
   2575
   2576		res = r8152_tx_agg_fill(tp, agg);
   2577		if (!res)
   2578			continue;
   2579
   2580		if (res == -ENODEV) {
   2581			rtl_set_unplug(tp);
   2582			netif_device_detach(netdev);
   2583		} else {
   2584			struct net_device_stats *stats = &netdev->stats;
   2585			unsigned long flags;
   2586
   2587			netif_warn(tp, tx_err, netdev,
   2588				   "failed tx_urb %d\n", res);
   2589			stats->tx_dropped += agg->skb_num;
   2590
   2591			spin_lock_irqsave(&tp->tx_lock, flags);
   2592			list_add_tail(&agg->list, &tp->tx_free);
   2593			spin_unlock_irqrestore(&tp->tx_lock, flags);
   2594		}
   2595	} while (res == 0);
   2596}
   2597
   2598static void bottom_half(struct tasklet_struct *t)
   2599{
   2600	struct r8152 *tp = from_tasklet(tp, t, tx_tl);
   2601
   2602	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   2603		return;
   2604
   2605	if (!test_bit(WORK_ENABLE, &tp->flags))
   2606		return;
   2607
   2608	/* When link down, the driver would cancel all bulks. */
   2609	/* This avoid the re-submitting bulk */
   2610	if (!netif_carrier_ok(tp->netdev))
   2611		return;
   2612
   2613	clear_bit(SCHEDULE_TASKLET, &tp->flags);
   2614
   2615	tx_bottom(tp);
   2616}
   2617
   2618static int r8152_poll(struct napi_struct *napi, int budget)
   2619{
   2620	struct r8152 *tp = container_of(napi, struct r8152, napi);
   2621	int work_done;
   2622
   2623	work_done = rx_bottom(tp, budget);
   2624
   2625	if (work_done < budget) {
   2626		if (!napi_complete_done(napi, work_done))
   2627			goto out;
   2628		if (!list_empty(&tp->rx_done))
   2629			napi_schedule(napi);
   2630	}
   2631
   2632out:
   2633	return work_done;
   2634}
   2635
   2636static
   2637int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags)
   2638{
   2639	int ret;
   2640
   2641	/* The rx would be stopped, so skip submitting */
   2642	if (test_bit(RTL8152_UNPLUG, &tp->flags) ||
   2643	    !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev))
   2644		return 0;
   2645
   2646	usb_fill_bulk_urb(agg->urb, tp->udev, tp->pipe_in,
   2647			  agg->buffer, tp->rx_buf_sz,
   2648			  (usb_complete_t)read_bulk_callback, agg);
   2649
   2650	ret = usb_submit_urb(agg->urb, mem_flags);
   2651	if (ret == -ENODEV) {
   2652		rtl_set_unplug(tp);
   2653		netif_device_detach(tp->netdev);
   2654	} else if (ret) {
   2655		struct urb *urb = agg->urb;
   2656		unsigned long flags;
   2657
   2658		urb->actual_length = 0;
   2659		spin_lock_irqsave(&tp->rx_lock, flags);
   2660		list_add_tail(&agg->list, &tp->rx_done);
   2661		spin_unlock_irqrestore(&tp->rx_lock, flags);
   2662
   2663		netif_err(tp, rx_err, tp->netdev,
   2664			  "Couldn't submit rx[%p], ret = %d\n", agg, ret);
   2665
   2666		napi_schedule(&tp->napi);
   2667	}
   2668
   2669	return ret;
   2670}
   2671
   2672static void rtl_drop_queued_tx(struct r8152 *tp)
   2673{
   2674	struct net_device_stats *stats = &tp->netdev->stats;
   2675	struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue;
   2676	struct sk_buff *skb;
   2677
   2678	if (skb_queue_empty(tx_queue))
   2679		return;
   2680
   2681	__skb_queue_head_init(&skb_head);
   2682	spin_lock_bh(&tx_queue->lock);
   2683	skb_queue_splice_init(tx_queue, &skb_head);
   2684	spin_unlock_bh(&tx_queue->lock);
   2685
   2686	while ((skb = __skb_dequeue(&skb_head))) {
   2687		dev_kfree_skb(skb);
   2688		stats->tx_dropped++;
   2689	}
   2690}
   2691
   2692static void rtl8152_tx_timeout(struct net_device *netdev, unsigned int txqueue)
   2693{
   2694	struct r8152 *tp = netdev_priv(netdev);
   2695
   2696	netif_warn(tp, tx_err, netdev, "Tx timeout\n");
   2697
   2698	usb_queue_reset_device(tp->intf);
   2699}
   2700
   2701static void rtl8152_set_rx_mode(struct net_device *netdev)
   2702{
   2703	struct r8152 *tp = netdev_priv(netdev);
   2704
   2705	if (netif_carrier_ok(netdev)) {
   2706		set_bit(RTL8152_SET_RX_MODE, &tp->flags);
   2707		schedule_delayed_work(&tp->schedule, 0);
   2708	}
   2709}
   2710
   2711static void _rtl8152_set_rx_mode(struct net_device *netdev)
   2712{
   2713	struct r8152 *tp = netdev_priv(netdev);
   2714	u32 mc_filter[2];	/* Multicast hash filter */
   2715	__le32 tmp[2];
   2716	u32 ocp_data;
   2717
   2718	netif_stop_queue(netdev);
   2719	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   2720	ocp_data &= ~RCR_ACPT_ALL;
   2721	ocp_data |= RCR_AB | RCR_APM;
   2722
   2723	if (netdev->flags & IFF_PROMISC) {
   2724		/* Unconditionally log net taps. */
   2725		netif_notice(tp, link, netdev, "Promiscuous mode enabled\n");
   2726		ocp_data |= RCR_AM | RCR_AAP;
   2727		mc_filter[1] = 0xffffffff;
   2728		mc_filter[0] = 0xffffffff;
   2729	} else if ((netdev_mc_count(netdev) > multicast_filter_limit) ||
   2730		   (netdev->flags & IFF_ALLMULTI)) {
   2731		/* Too many to filter perfectly -- accept all multicasts. */
   2732		ocp_data |= RCR_AM;
   2733		mc_filter[1] = 0xffffffff;
   2734		mc_filter[0] = 0xffffffff;
   2735	} else {
   2736		struct netdev_hw_addr *ha;
   2737
   2738		mc_filter[1] = 0;
   2739		mc_filter[0] = 0;
   2740		netdev_for_each_mc_addr(ha, netdev) {
   2741			int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
   2742
   2743			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
   2744			ocp_data |= RCR_AM;
   2745		}
   2746	}
   2747
   2748	tmp[0] = __cpu_to_le32(swab32(mc_filter[1]));
   2749	tmp[1] = __cpu_to_le32(swab32(mc_filter[0]));
   2750
   2751	pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp);
   2752	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   2753	netif_wake_queue(netdev);
   2754}
   2755
   2756static netdev_features_t
   2757rtl8152_features_check(struct sk_buff *skb, struct net_device *dev,
   2758		       netdev_features_t features)
   2759{
   2760	u32 mss = skb_shinfo(skb)->gso_size;
   2761	int max_offset = mss ? GTTCPHO_MAX : TCPHO_MAX;
   2762	int offset = skb_transport_offset(skb);
   2763
   2764	if ((mss || skb->ip_summed == CHECKSUM_PARTIAL) && offset > max_offset)
   2765		features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
   2766	else if ((skb->len + sizeof(struct tx_desc)) > agg_buf_sz)
   2767		features &= ~NETIF_F_GSO_MASK;
   2768
   2769	return features;
   2770}
   2771
   2772static netdev_tx_t rtl8152_start_xmit(struct sk_buff *skb,
   2773				      struct net_device *netdev)
   2774{
   2775	struct r8152 *tp = netdev_priv(netdev);
   2776
   2777	skb_tx_timestamp(skb);
   2778
   2779	skb_queue_tail(&tp->tx_queue, skb);
   2780
   2781	if (!list_empty(&tp->tx_free)) {
   2782		if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
   2783			set_bit(SCHEDULE_TASKLET, &tp->flags);
   2784			schedule_delayed_work(&tp->schedule, 0);
   2785		} else {
   2786			usb_mark_last_busy(tp->udev);
   2787			tasklet_schedule(&tp->tx_tl);
   2788		}
   2789	} else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) {
   2790		netif_stop_queue(netdev);
   2791	}
   2792
   2793	return NETDEV_TX_OK;
   2794}
   2795
   2796static void r8152b_reset_packet_filter(struct r8152 *tp)
   2797{
   2798	u32 ocp_data;
   2799
   2800	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC);
   2801	ocp_data &= ~FMC_FCR_MCU_EN;
   2802	ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data);
   2803	ocp_data |= FMC_FCR_MCU_EN;
   2804	ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data);
   2805}
   2806
   2807static void rtl8152_nic_reset(struct r8152 *tp)
   2808{
   2809	u32 ocp_data;
   2810	int i;
   2811
   2812	switch (tp->version) {
   2813	case RTL_TEST_01:
   2814	case RTL_VER_10:
   2815	case RTL_VER_11:
   2816		ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR);
   2817		ocp_data &= ~CR_TE;
   2818		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data);
   2819
   2820		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_RESET);
   2821		ocp_data &= ~BMU_RESET_EP_IN;
   2822		ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
   2823
   2824		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   2825		ocp_data |= CDC_ECM_EN;
   2826		ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   2827
   2828		ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR);
   2829		ocp_data &= ~CR_RE;
   2830		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data);
   2831
   2832		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_RESET);
   2833		ocp_data |= BMU_RESET_EP_IN;
   2834		ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
   2835
   2836		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   2837		ocp_data &= ~CDC_ECM_EN;
   2838		ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   2839		break;
   2840
   2841	default:
   2842		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST);
   2843
   2844		for (i = 0; i < 1000; i++) {
   2845			if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST))
   2846				break;
   2847			usleep_range(100, 400);
   2848		}
   2849		break;
   2850	}
   2851}
   2852
   2853static void set_tx_qlen(struct r8152 *tp)
   2854{
   2855	tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc));
   2856}
   2857
   2858static inline u16 rtl8152_get_speed(struct r8152 *tp)
   2859{
   2860	return ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHYSTATUS);
   2861}
   2862
   2863static void rtl_eee_plus_en(struct r8152 *tp, bool enable)
   2864{
   2865	u32 ocp_data;
   2866
   2867	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR);
   2868	if (enable)
   2869		ocp_data |= EEEP_CR_EEEP_TX;
   2870	else
   2871		ocp_data &= ~EEEP_CR_EEEP_TX;
   2872	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data);
   2873}
   2874
   2875static void rtl_set_eee_plus(struct r8152 *tp)
   2876{
   2877	if (rtl8152_get_speed(tp) & _10bps)
   2878		rtl_eee_plus_en(tp, true);
   2879	else
   2880		rtl_eee_plus_en(tp, false);
   2881}
   2882
   2883static void rxdy_gated_en(struct r8152 *tp, bool enable)
   2884{
   2885	u32 ocp_data;
   2886
   2887	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1);
   2888	if (enable)
   2889		ocp_data |= RXDY_GATED_EN;
   2890	else
   2891		ocp_data &= ~RXDY_GATED_EN;
   2892	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
   2893}
   2894
   2895static int rtl_start_rx(struct r8152 *tp)
   2896{
   2897	struct rx_agg *agg, *agg_next;
   2898	struct list_head tmp_list;
   2899	unsigned long flags;
   2900	int ret = 0, i = 0;
   2901
   2902	INIT_LIST_HEAD(&tmp_list);
   2903
   2904	spin_lock_irqsave(&tp->rx_lock, flags);
   2905
   2906	INIT_LIST_HEAD(&tp->rx_done);
   2907	INIT_LIST_HEAD(&tp->rx_used);
   2908
   2909	list_splice_init(&tp->rx_info, &tmp_list);
   2910
   2911	spin_unlock_irqrestore(&tp->rx_lock, flags);
   2912
   2913	list_for_each_entry_safe(agg, agg_next, &tmp_list, info_list) {
   2914		INIT_LIST_HEAD(&agg->list);
   2915
   2916		/* Only RTL8152_MAX_RX rx_agg need to be submitted. */
   2917		if (++i > RTL8152_MAX_RX) {
   2918			spin_lock_irqsave(&tp->rx_lock, flags);
   2919			list_add_tail(&agg->list, &tp->rx_used);
   2920			spin_unlock_irqrestore(&tp->rx_lock, flags);
   2921		} else if (unlikely(ret < 0)) {
   2922			spin_lock_irqsave(&tp->rx_lock, flags);
   2923			list_add_tail(&agg->list, &tp->rx_done);
   2924			spin_unlock_irqrestore(&tp->rx_lock, flags);
   2925		} else {
   2926			ret = r8152_submit_rx(tp, agg, GFP_KERNEL);
   2927		}
   2928	}
   2929
   2930	spin_lock_irqsave(&tp->rx_lock, flags);
   2931	WARN_ON(!list_empty(&tp->rx_info));
   2932	list_splice(&tmp_list, &tp->rx_info);
   2933	spin_unlock_irqrestore(&tp->rx_lock, flags);
   2934
   2935	return ret;
   2936}
   2937
   2938static int rtl_stop_rx(struct r8152 *tp)
   2939{
   2940	struct rx_agg *agg, *agg_next;
   2941	struct list_head tmp_list;
   2942	unsigned long flags;
   2943
   2944	INIT_LIST_HEAD(&tmp_list);
   2945
   2946	/* The usb_kill_urb() couldn't be used in atomic.
   2947	 * Therefore, move the list of rx_info to a tmp one.
   2948	 * Then, list_for_each_entry_safe could be used without
   2949	 * spin lock.
   2950	 */
   2951
   2952	spin_lock_irqsave(&tp->rx_lock, flags);
   2953	list_splice_init(&tp->rx_info, &tmp_list);
   2954	spin_unlock_irqrestore(&tp->rx_lock, flags);
   2955
   2956	list_for_each_entry_safe(agg, agg_next, &tmp_list, info_list) {
   2957		/* At least RTL8152_MAX_RX rx_agg have the page_count being
   2958		 * equal to 1, so the other ones could be freed safely.
   2959		 */
   2960		if (page_count(agg->page) > 1)
   2961			free_rx_agg(tp, agg);
   2962		else
   2963			usb_kill_urb(agg->urb);
   2964	}
   2965
   2966	/* Move back the list of temp to the rx_info */
   2967	spin_lock_irqsave(&tp->rx_lock, flags);
   2968	WARN_ON(!list_empty(&tp->rx_info));
   2969	list_splice(&tmp_list, &tp->rx_info);
   2970	spin_unlock_irqrestore(&tp->rx_lock, flags);
   2971
   2972	while (!skb_queue_empty(&tp->rx_queue))
   2973		dev_kfree_skb(__skb_dequeue(&tp->rx_queue));
   2974
   2975	return 0;
   2976}
   2977
   2978static void rtl_set_ifg(struct r8152 *tp, u16 speed)
   2979{
   2980	u32 ocp_data;
   2981
   2982	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR1);
   2983	ocp_data &= ~IFG_MASK;
   2984	if ((speed & (_10bps | _100bps)) && !(speed & FULL_DUP)) {
   2985		ocp_data |= IFG_144NS;
   2986		ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR1, ocp_data);
   2987
   2988		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4);
   2989		ocp_data &= ~TX10MIDLE_EN;
   2990		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data);
   2991	} else {
   2992		ocp_data |= IFG_96NS;
   2993		ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR1, ocp_data);
   2994
   2995		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4);
   2996		ocp_data |= TX10MIDLE_EN;
   2997		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data);
   2998	}
   2999}
   3000
   3001static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp)
   3002{
   3003	ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN,
   3004		       OWN_UPDATE | OWN_CLEAR);
   3005}
   3006
   3007static int rtl_enable(struct r8152 *tp)
   3008{
   3009	u32 ocp_data;
   3010
   3011	r8152b_reset_packet_filter(tp);
   3012
   3013	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR);
   3014	ocp_data |= CR_RE | CR_TE;
   3015	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data);
   3016
   3017	switch (tp->version) {
   3018	case RTL_VER_08:
   3019	case RTL_VER_09:
   3020	case RTL_VER_14:
   3021		r8153b_rx_agg_chg_indicate(tp);
   3022		break;
   3023	default:
   3024		break;
   3025	}
   3026
   3027	rxdy_gated_en(tp, false);
   3028
   3029	return 0;
   3030}
   3031
   3032static int rtl8152_enable(struct r8152 *tp)
   3033{
   3034	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   3035		return -ENODEV;
   3036
   3037	set_tx_qlen(tp);
   3038	rtl_set_eee_plus(tp);
   3039
   3040	return rtl_enable(tp);
   3041}
   3042
   3043static void r8153_set_rx_early_timeout(struct r8152 *tp)
   3044{
   3045	u32 ocp_data = tp->coalesce / 8;
   3046
   3047	switch (tp->version) {
   3048	case RTL_VER_03:
   3049	case RTL_VER_04:
   3050	case RTL_VER_05:
   3051	case RTL_VER_06:
   3052		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
   3053			       ocp_data);
   3054		break;
   3055
   3056	case RTL_VER_08:
   3057	case RTL_VER_09:
   3058	case RTL_VER_14:
   3059		/* The RTL8153B uses USB_RX_EXTRA_AGGR_TMR for rx timeout
   3060		 * primarily. For USB_RX_EARLY_TIMEOUT, we fix it to 128ns.
   3061		 */
   3062		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
   3063			       128 / 8);
   3064		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR,
   3065			       ocp_data);
   3066		break;
   3067
   3068	case RTL_VER_10:
   3069	case RTL_VER_11:
   3070	case RTL_VER_12:
   3071	case RTL_VER_13:
   3072	case RTL_VER_15:
   3073		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
   3074			       640 / 8);
   3075		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR,
   3076			       ocp_data);
   3077		r8153b_rx_agg_chg_indicate(tp);
   3078		break;
   3079
   3080	default:
   3081		break;
   3082	}
   3083}
   3084
   3085static void r8153_set_rx_early_size(struct r8152 *tp)
   3086{
   3087	u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu);
   3088
   3089	switch (tp->version) {
   3090	case RTL_VER_03:
   3091	case RTL_VER_04:
   3092	case RTL_VER_05:
   3093	case RTL_VER_06:
   3094		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
   3095			       ocp_data / 4);
   3096		break;
   3097	case RTL_VER_08:
   3098	case RTL_VER_09:
   3099	case RTL_VER_14:
   3100		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
   3101			       ocp_data / 8);
   3102		break;
   3103	case RTL_TEST_01:
   3104	case RTL_VER_10:
   3105	case RTL_VER_11:
   3106	case RTL_VER_12:
   3107	case RTL_VER_13:
   3108	case RTL_VER_15:
   3109		ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
   3110			       ocp_data / 8);
   3111		r8153b_rx_agg_chg_indicate(tp);
   3112		break;
   3113	default:
   3114		WARN_ON_ONCE(1);
   3115		break;
   3116	}
   3117}
   3118
   3119static int rtl8153_enable(struct r8152 *tp)
   3120{
   3121	u32 ocp_data;
   3122
   3123	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   3124		return -ENODEV;
   3125
   3126	set_tx_qlen(tp);
   3127	rtl_set_eee_plus(tp);
   3128	r8153_set_rx_early_timeout(tp);
   3129	r8153_set_rx_early_size(tp);
   3130
   3131	rtl_set_ifg(tp, rtl8152_get_speed(tp));
   3132
   3133	switch (tp->version) {
   3134	case RTL_VER_09:
   3135	case RTL_VER_14:
   3136		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
   3137		ocp_data &= ~FC_PATCH_TASK;
   3138		ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
   3139		usleep_range(1000, 2000);
   3140		ocp_data |= FC_PATCH_TASK;
   3141		ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
   3142		break;
   3143	default:
   3144		break;
   3145	}
   3146
   3147	return rtl_enable(tp);
   3148}
   3149
   3150static void rtl_disable(struct r8152 *tp)
   3151{
   3152	u32 ocp_data;
   3153	int i;
   3154
   3155	if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
   3156		rtl_drop_queued_tx(tp);
   3157		return;
   3158	}
   3159
   3160	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   3161	ocp_data &= ~RCR_ACPT_ALL;
   3162	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   3163
   3164	rtl_drop_queued_tx(tp);
   3165
   3166	for (i = 0; i < RTL8152_MAX_TX; i++)
   3167		usb_kill_urb(tp->tx_info[i].urb);
   3168
   3169	rxdy_gated_en(tp, true);
   3170
   3171	for (i = 0; i < 1000; i++) {
   3172		ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   3173		if ((ocp_data & FIFO_EMPTY) == FIFO_EMPTY)
   3174			break;
   3175		usleep_range(1000, 2000);
   3176	}
   3177
   3178	for (i = 0; i < 1000; i++) {
   3179		if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY)
   3180			break;
   3181		usleep_range(1000, 2000);
   3182	}
   3183
   3184	rtl_stop_rx(tp);
   3185
   3186	rtl8152_nic_reset(tp);
   3187}
   3188
   3189static void r8152_power_cut_en(struct r8152 *tp, bool enable)
   3190{
   3191	u32 ocp_data;
   3192
   3193	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL);
   3194	if (enable)
   3195		ocp_data |= POWER_CUT;
   3196	else
   3197		ocp_data &= ~POWER_CUT;
   3198	ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data);
   3199
   3200	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS);
   3201	ocp_data &= ~RESUME_INDICATE;
   3202	ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data);
   3203}
   3204
   3205static void rtl_rx_vlan_en(struct r8152 *tp, bool enable)
   3206{
   3207	u32 ocp_data;
   3208
   3209	switch (tp->version) {
   3210	case RTL_VER_01:
   3211	case RTL_VER_02:
   3212	case RTL_VER_03:
   3213	case RTL_VER_04:
   3214	case RTL_VER_05:
   3215	case RTL_VER_06:
   3216	case RTL_VER_07:
   3217	case RTL_VER_08:
   3218	case RTL_VER_09:
   3219	case RTL_VER_14:
   3220		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR);
   3221		if (enable)
   3222			ocp_data |= CPCR_RX_VLAN;
   3223		else
   3224			ocp_data &= ~CPCR_RX_VLAN;
   3225		ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data);
   3226		break;
   3227
   3228	case RTL_TEST_01:
   3229	case RTL_VER_10:
   3230	case RTL_VER_11:
   3231	case RTL_VER_12:
   3232	case RTL_VER_13:
   3233	case RTL_VER_15:
   3234	default:
   3235		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RCR1);
   3236		if (enable)
   3237			ocp_data |= OUTER_VLAN | INNER_VLAN;
   3238		else
   3239			ocp_data &= ~(OUTER_VLAN | INNER_VLAN);
   3240		ocp_write_word(tp, MCU_TYPE_PLA, PLA_RCR1, ocp_data);
   3241		break;
   3242	}
   3243}
   3244
   3245static int rtl8152_set_features(struct net_device *dev,
   3246				netdev_features_t features)
   3247{
   3248	netdev_features_t changed = features ^ dev->features;
   3249	struct r8152 *tp = netdev_priv(dev);
   3250	int ret;
   3251
   3252	ret = usb_autopm_get_interface(tp->intf);
   3253	if (ret < 0)
   3254		goto out;
   3255
   3256	mutex_lock(&tp->control);
   3257
   3258	if (changed & NETIF_F_HW_VLAN_CTAG_RX) {
   3259		if (features & NETIF_F_HW_VLAN_CTAG_RX)
   3260			rtl_rx_vlan_en(tp, true);
   3261		else
   3262			rtl_rx_vlan_en(tp, false);
   3263	}
   3264
   3265	mutex_unlock(&tp->control);
   3266
   3267	usb_autopm_put_interface(tp->intf);
   3268
   3269out:
   3270	return ret;
   3271}
   3272
   3273#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
   3274
   3275static u32 __rtl_get_wol(struct r8152 *tp)
   3276{
   3277	u32 ocp_data;
   3278	u32 wolopts = 0;
   3279
   3280	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
   3281	if (ocp_data & LINK_ON_WAKE_EN)
   3282		wolopts |= WAKE_PHY;
   3283
   3284	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5);
   3285	if (ocp_data & UWF_EN)
   3286		wolopts |= WAKE_UCAST;
   3287	if (ocp_data & BWF_EN)
   3288		wolopts |= WAKE_BCAST;
   3289	if (ocp_data & MWF_EN)
   3290		wolopts |= WAKE_MCAST;
   3291
   3292	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL);
   3293	if (ocp_data & MAGIC_EN)
   3294		wolopts |= WAKE_MAGIC;
   3295
   3296	return wolopts;
   3297}
   3298
   3299static void __rtl_set_wol(struct r8152 *tp, u32 wolopts)
   3300{
   3301	u32 ocp_data;
   3302
   3303	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
   3304
   3305	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
   3306	ocp_data &= ~LINK_ON_WAKE_EN;
   3307	if (wolopts & WAKE_PHY)
   3308		ocp_data |= LINK_ON_WAKE_EN;
   3309	ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
   3310
   3311	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5);
   3312	ocp_data &= ~(UWF_EN | BWF_EN | MWF_EN);
   3313	if (wolopts & WAKE_UCAST)
   3314		ocp_data |= UWF_EN;
   3315	if (wolopts & WAKE_BCAST)
   3316		ocp_data |= BWF_EN;
   3317	if (wolopts & WAKE_MCAST)
   3318		ocp_data |= MWF_EN;
   3319	ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data);
   3320
   3321	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
   3322
   3323	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL);
   3324	ocp_data &= ~MAGIC_EN;
   3325	if (wolopts & WAKE_MAGIC)
   3326		ocp_data |= MAGIC_EN;
   3327	ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data);
   3328
   3329	if (wolopts & WAKE_ANY)
   3330		device_set_wakeup_enable(&tp->udev->dev, true);
   3331	else
   3332		device_set_wakeup_enable(&tp->udev->dev, false);
   3333}
   3334
   3335static void r8153_mac_clk_speed_down(struct r8152 *tp, bool enable)
   3336{
   3337	u32 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2);
   3338
   3339	/* MAC clock speed down */
   3340	if (enable)
   3341		ocp_data |= MAC_CLK_SPDWN_EN;
   3342	else
   3343		ocp_data &= ~MAC_CLK_SPDWN_EN;
   3344
   3345	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data);
   3346}
   3347
   3348static void r8156_mac_clk_spd(struct r8152 *tp, bool enable)
   3349{
   3350	u32 ocp_data;
   3351
   3352	/* MAC clock speed down */
   3353	if (enable) {
   3354		/* aldps_spdwn_ratio, tp10_spdwn_ratio */
   3355		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL,
   3356			       0x0403);
   3357
   3358		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2);
   3359		ocp_data &= ~EEE_SPDWN_RATIO_MASK;
   3360		ocp_data |= MAC_CLK_SPDWN_EN | 0x03; /* eee_spdwn_ratio */
   3361		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data);
   3362	} else {
   3363		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2);
   3364		ocp_data &= ~MAC_CLK_SPDWN_EN;
   3365		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data);
   3366	}
   3367}
   3368
   3369static void r8153_u1u2en(struct r8152 *tp, bool enable)
   3370{
   3371	u8 u1u2[8];
   3372
   3373	if (enable)
   3374		memset(u1u2, 0xff, sizeof(u1u2));
   3375	else
   3376		memset(u1u2, 0x00, sizeof(u1u2));
   3377
   3378	usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2);
   3379}
   3380
   3381static void r8153b_u1u2en(struct r8152 *tp, bool enable)
   3382{
   3383	u32 ocp_data;
   3384
   3385	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG);
   3386	if (enable)
   3387		ocp_data |= LPM_U1U2_EN;
   3388	else
   3389		ocp_data &= ~LPM_U1U2_EN;
   3390
   3391	ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data);
   3392}
   3393
   3394static void r8153_u2p3en(struct r8152 *tp, bool enable)
   3395{
   3396	u32 ocp_data;
   3397
   3398	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL);
   3399	if (enable)
   3400		ocp_data |= U2P3_ENABLE;
   3401	else
   3402		ocp_data &= ~U2P3_ENABLE;
   3403	ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data);
   3404}
   3405
   3406static void r8153b_ups_flags(struct r8152 *tp)
   3407{
   3408	u32 ups_flags = 0;
   3409
   3410	if (tp->ups_info.green)
   3411		ups_flags |= UPS_FLAGS_EN_GREEN;
   3412
   3413	if (tp->ups_info.aldps)
   3414		ups_flags |= UPS_FLAGS_EN_ALDPS;
   3415
   3416	if (tp->ups_info.eee)
   3417		ups_flags |= UPS_FLAGS_EN_EEE;
   3418
   3419	if (tp->ups_info.flow_control)
   3420		ups_flags |= UPS_FLAGS_EN_FLOW_CTR;
   3421
   3422	if (tp->ups_info.eee_ckdiv)
   3423		ups_flags |= UPS_FLAGS_EN_EEE_CKDIV;
   3424
   3425	if (tp->ups_info.eee_cmod_lv)
   3426		ups_flags |= UPS_FLAGS_EEE_CMOD_LV_EN;
   3427
   3428	if (tp->ups_info.r_tune)
   3429		ups_flags |= UPS_FLAGS_R_TUNE;
   3430
   3431	if (tp->ups_info._10m_ckdiv)
   3432		ups_flags |= UPS_FLAGS_EN_10M_CKDIV;
   3433
   3434	if (tp->ups_info.eee_plloff_100)
   3435		ups_flags |= UPS_FLAGS_EEE_PLLOFF_100;
   3436
   3437	if (tp->ups_info.eee_plloff_giga)
   3438		ups_flags |= UPS_FLAGS_EEE_PLLOFF_GIGA;
   3439
   3440	if (tp->ups_info._250m_ckdiv)
   3441		ups_flags |= UPS_FLAGS_250M_CKDIV;
   3442
   3443	if (tp->ups_info.ctap_short_off)
   3444		ups_flags |= UPS_FLAGS_CTAP_SHORT_DIS;
   3445
   3446	switch (tp->ups_info.speed_duplex) {
   3447	case NWAY_10M_HALF:
   3448		ups_flags |= ups_flags_speed(1);
   3449		break;
   3450	case NWAY_10M_FULL:
   3451		ups_flags |= ups_flags_speed(2);
   3452		break;
   3453	case NWAY_100M_HALF:
   3454		ups_flags |= ups_flags_speed(3);
   3455		break;
   3456	case NWAY_100M_FULL:
   3457		ups_flags |= ups_flags_speed(4);
   3458		break;
   3459	case NWAY_1000M_FULL:
   3460		ups_flags |= ups_flags_speed(5);
   3461		break;
   3462	case FORCE_10M_HALF:
   3463		ups_flags |= ups_flags_speed(6);
   3464		break;
   3465	case FORCE_10M_FULL:
   3466		ups_flags |= ups_flags_speed(7);
   3467		break;
   3468	case FORCE_100M_HALF:
   3469		ups_flags |= ups_flags_speed(8);
   3470		break;
   3471	case FORCE_100M_FULL:
   3472		ups_flags |= ups_flags_speed(9);
   3473		break;
   3474	default:
   3475		break;
   3476	}
   3477
   3478	ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
   3479}
   3480
   3481static void r8156_ups_flags(struct r8152 *tp)
   3482{
   3483	u32 ups_flags = 0;
   3484
   3485	if (tp->ups_info.green)
   3486		ups_flags |= UPS_FLAGS_EN_GREEN;
   3487
   3488	if (tp->ups_info.aldps)
   3489		ups_flags |= UPS_FLAGS_EN_ALDPS;
   3490
   3491	if (tp->ups_info.eee)
   3492		ups_flags |= UPS_FLAGS_EN_EEE;
   3493
   3494	if (tp->ups_info.flow_control)
   3495		ups_flags |= UPS_FLAGS_EN_FLOW_CTR;
   3496
   3497	if (tp->ups_info.eee_ckdiv)
   3498		ups_flags |= UPS_FLAGS_EN_EEE_CKDIV;
   3499
   3500	if (tp->ups_info._10m_ckdiv)
   3501		ups_flags |= UPS_FLAGS_EN_10M_CKDIV;
   3502
   3503	if (tp->ups_info.eee_plloff_100)
   3504		ups_flags |= UPS_FLAGS_EEE_PLLOFF_100;
   3505
   3506	if (tp->ups_info.eee_plloff_giga)
   3507		ups_flags |= UPS_FLAGS_EEE_PLLOFF_GIGA;
   3508
   3509	if (tp->ups_info._250m_ckdiv)
   3510		ups_flags |= UPS_FLAGS_250M_CKDIV;
   3511
   3512	switch (tp->ups_info.speed_duplex) {
   3513	case FORCE_10M_HALF:
   3514		ups_flags |= ups_flags_speed(0);
   3515		break;
   3516	case FORCE_10M_FULL:
   3517		ups_flags |= ups_flags_speed(1);
   3518		break;
   3519	case FORCE_100M_HALF:
   3520		ups_flags |= ups_flags_speed(2);
   3521		break;
   3522	case FORCE_100M_FULL:
   3523		ups_flags |= ups_flags_speed(3);
   3524		break;
   3525	case NWAY_10M_HALF:
   3526		ups_flags |= ups_flags_speed(4);
   3527		break;
   3528	case NWAY_10M_FULL:
   3529		ups_flags |= ups_flags_speed(5);
   3530		break;
   3531	case NWAY_100M_HALF:
   3532		ups_flags |= ups_flags_speed(6);
   3533		break;
   3534	case NWAY_100M_FULL:
   3535		ups_flags |= ups_flags_speed(7);
   3536		break;
   3537	case NWAY_1000M_FULL:
   3538		ups_flags |= ups_flags_speed(8);
   3539		break;
   3540	case NWAY_2500M_FULL:
   3541		ups_flags |= ups_flags_speed(9);
   3542		break;
   3543	default:
   3544		break;
   3545	}
   3546
   3547	switch (tp->ups_info.lite_mode) {
   3548	case 1:
   3549		ups_flags |= 0 << 5;
   3550		break;
   3551	case 2:
   3552		ups_flags |= 2 << 5;
   3553		break;
   3554	case 0:
   3555	default:
   3556		ups_flags |= 1 << 5;
   3557		break;
   3558	}
   3559
   3560	ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
   3561}
   3562
   3563static void rtl_green_en(struct r8152 *tp, bool enable)
   3564{
   3565	u16 data;
   3566
   3567	data = sram_read(tp, SRAM_GREEN_CFG);
   3568	if (enable)
   3569		data |= GREEN_ETH_EN;
   3570	else
   3571		data &= ~GREEN_ETH_EN;
   3572	sram_write(tp, SRAM_GREEN_CFG, data);
   3573
   3574	tp->ups_info.green = enable;
   3575}
   3576
   3577static void r8153b_green_en(struct r8152 *tp, bool enable)
   3578{
   3579	if (enable) {
   3580		sram_write(tp, 0x8045, 0);	/* 10M abiq&ldvbias */
   3581		sram_write(tp, 0x804d, 0x1222);	/* 100M short abiq&ldvbias */
   3582		sram_write(tp, 0x805d, 0x0022);	/* 1000M short abiq&ldvbias */
   3583	} else {
   3584		sram_write(tp, 0x8045, 0x2444);	/* 10M abiq&ldvbias */
   3585		sram_write(tp, 0x804d, 0x2444);	/* 100M short abiq&ldvbias */
   3586		sram_write(tp, 0x805d, 0x2444);	/* 1000M short abiq&ldvbias */
   3587	}
   3588
   3589	rtl_green_en(tp, true);
   3590}
   3591
   3592static u16 r8153_phy_status(struct r8152 *tp, u16 desired)
   3593{
   3594	u16 data;
   3595	int i;
   3596
   3597	for (i = 0; i < 500; i++) {
   3598		data = ocp_reg_read(tp, OCP_PHY_STATUS);
   3599		data &= PHY_STAT_MASK;
   3600		if (desired) {
   3601			if (data == desired)
   3602				break;
   3603		} else if (data == PHY_STAT_LAN_ON || data == PHY_STAT_PWRDN ||
   3604			   data == PHY_STAT_EXT_INIT) {
   3605			break;
   3606		}
   3607
   3608		msleep(20);
   3609		if (test_bit(RTL8152_UNPLUG, &tp->flags))
   3610			break;
   3611	}
   3612
   3613	return data;
   3614}
   3615
   3616static void r8153b_ups_en(struct r8152 *tp, bool enable)
   3617{
   3618	u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT);
   3619
   3620	if (enable) {
   3621		r8153b_ups_flags(tp);
   3622
   3623		ocp_data |= UPS_EN | USP_PREWAKE | PHASE2_EN;
   3624		ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3625
   3626		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2);
   3627		ocp_data |= UPS_FORCE_PWR_DOWN;
   3628		ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data);
   3629	} else {
   3630		ocp_data &= ~(UPS_EN | USP_PREWAKE);
   3631		ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3632
   3633		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2);
   3634		ocp_data &= ~UPS_FORCE_PWR_DOWN;
   3635		ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data);
   3636
   3637		if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
   3638			int i;
   3639
   3640			for (i = 0; i < 500; i++) {
   3641				if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
   3642				    AUTOLOAD_DONE)
   3643					break;
   3644				msleep(20);
   3645			}
   3646
   3647			tp->rtl_ops.hw_phy_cfg(tp);
   3648
   3649			rtl8152_set_speed(tp, tp->autoneg, tp->speed,
   3650					  tp->duplex, tp->advertising);
   3651		}
   3652	}
   3653}
   3654
   3655static void r8153c_ups_en(struct r8152 *tp, bool enable)
   3656{
   3657	u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT);
   3658
   3659	if (enable) {
   3660		r8153b_ups_flags(tp);
   3661
   3662		ocp_data |= UPS_EN | USP_PREWAKE | PHASE2_EN;
   3663		ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3664
   3665		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2);
   3666		ocp_data |= UPS_FORCE_PWR_DOWN;
   3667		ocp_data &= ~BIT(7);
   3668		ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data);
   3669	} else {
   3670		ocp_data &= ~(UPS_EN | USP_PREWAKE);
   3671		ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3672
   3673		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2);
   3674		ocp_data &= ~UPS_FORCE_PWR_DOWN;
   3675		ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data);
   3676
   3677		if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
   3678			int i;
   3679
   3680			for (i = 0; i < 500; i++) {
   3681				if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
   3682				    AUTOLOAD_DONE)
   3683					break;
   3684				msleep(20);
   3685			}
   3686
   3687			tp->rtl_ops.hw_phy_cfg(tp);
   3688
   3689			rtl8152_set_speed(tp, tp->autoneg, tp->speed,
   3690					  tp->duplex, tp->advertising);
   3691		}
   3692
   3693		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
   3694
   3695		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
   3696		ocp_data |= BIT(8);
   3697		ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
   3698
   3699		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
   3700	}
   3701}
   3702
   3703static void r8156_ups_en(struct r8152 *tp, bool enable)
   3704{
   3705	u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT);
   3706
   3707	if (enable) {
   3708		r8156_ups_flags(tp);
   3709
   3710		ocp_data |= UPS_EN | USP_PREWAKE | PHASE2_EN;
   3711		ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3712
   3713		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2);
   3714		ocp_data |= UPS_FORCE_PWR_DOWN;
   3715		ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data);
   3716
   3717		switch (tp->version) {
   3718		case RTL_VER_13:
   3719		case RTL_VER_15:
   3720			ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPHY_XTAL);
   3721			ocp_data &= ~OOBS_POLLING;
   3722			ocp_write_byte(tp, MCU_TYPE_USB, USB_UPHY_XTAL, ocp_data);
   3723			break;
   3724		default:
   3725			break;
   3726		}
   3727	} else {
   3728		ocp_data &= ~(UPS_EN | USP_PREWAKE);
   3729		ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3730
   3731		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2);
   3732		ocp_data &= ~UPS_FORCE_PWR_DOWN;
   3733		ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data);
   3734
   3735		if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
   3736			tp->rtl_ops.hw_phy_cfg(tp);
   3737
   3738			rtl8152_set_speed(tp, tp->autoneg, tp->speed,
   3739					  tp->duplex, tp->advertising);
   3740		}
   3741	}
   3742}
   3743
   3744static void r8153_power_cut_en(struct r8152 *tp, bool enable)
   3745{
   3746	u32 ocp_data;
   3747
   3748	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT);
   3749	if (enable)
   3750		ocp_data |= PWR_EN | PHASE2_EN;
   3751	else
   3752		ocp_data &= ~(PWR_EN | PHASE2_EN);
   3753	ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3754
   3755	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
   3756	ocp_data &= ~PCUT_STATUS;
   3757	ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
   3758}
   3759
   3760static void r8153b_power_cut_en(struct r8152 *tp, bool enable)
   3761{
   3762	u32 ocp_data;
   3763
   3764	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT);
   3765	if (enable)
   3766		ocp_data |= PWR_EN | PHASE2_EN;
   3767	else
   3768		ocp_data &= ~PWR_EN;
   3769	ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
   3770
   3771	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
   3772	ocp_data &= ~PCUT_STATUS;
   3773	ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
   3774}
   3775
   3776static void r8153_queue_wake(struct r8152 *tp, bool enable)
   3777{
   3778	u32 ocp_data;
   3779
   3780	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG);
   3781	if (enable)
   3782		ocp_data |= UPCOMING_RUNTIME_D3;
   3783	else
   3784		ocp_data &= ~UPCOMING_RUNTIME_D3;
   3785	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data);
   3786
   3787	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG);
   3788	ocp_data &= ~LINK_CHG_EVENT;
   3789	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data);
   3790
   3791	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
   3792	ocp_data &= ~LINK_CHANGE_FLAG;
   3793	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
   3794}
   3795
   3796static bool rtl_can_wakeup(struct r8152 *tp)
   3797{
   3798	struct usb_device *udev = tp->udev;
   3799
   3800	return (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP);
   3801}
   3802
   3803static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable)
   3804{
   3805	if (enable) {
   3806		u32 ocp_data;
   3807
   3808		__rtl_set_wol(tp, WAKE_ANY);
   3809
   3810		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
   3811
   3812		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
   3813		ocp_data |= LINK_OFF_WAKE_EN;
   3814		ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
   3815
   3816		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
   3817	} else {
   3818		u32 ocp_data;
   3819
   3820		__rtl_set_wol(tp, tp->saved_wolopts);
   3821
   3822		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
   3823
   3824		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
   3825		ocp_data &= ~LINK_OFF_WAKE_EN;
   3826		ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
   3827
   3828		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
   3829	}
   3830}
   3831
   3832static void rtl8153_runtime_enable(struct r8152 *tp, bool enable)
   3833{
   3834	if (enable) {
   3835		r8153_u1u2en(tp, false);
   3836		r8153_u2p3en(tp, false);
   3837		rtl_runtime_suspend_enable(tp, true);
   3838	} else {
   3839		rtl_runtime_suspend_enable(tp, false);
   3840
   3841		switch (tp->version) {
   3842		case RTL_VER_03:
   3843		case RTL_VER_04:
   3844			break;
   3845		case RTL_VER_05:
   3846		case RTL_VER_06:
   3847		default:
   3848			r8153_u2p3en(tp, true);
   3849			break;
   3850		}
   3851
   3852		r8153_u1u2en(tp, true);
   3853	}
   3854}
   3855
   3856static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable)
   3857{
   3858	if (enable) {
   3859		r8153_queue_wake(tp, true);
   3860		r8153b_u1u2en(tp, false);
   3861		r8153_u2p3en(tp, false);
   3862		rtl_runtime_suspend_enable(tp, true);
   3863		r8153b_ups_en(tp, true);
   3864	} else {
   3865		r8153b_ups_en(tp, false);
   3866		r8153_queue_wake(tp, false);
   3867		rtl_runtime_suspend_enable(tp, false);
   3868		if (tp->udev->speed >= USB_SPEED_SUPER)
   3869			r8153b_u1u2en(tp, true);
   3870	}
   3871}
   3872
   3873static void rtl8153c_runtime_enable(struct r8152 *tp, bool enable)
   3874{
   3875	if (enable) {
   3876		r8153_queue_wake(tp, true);
   3877		r8153b_u1u2en(tp, false);
   3878		r8153_u2p3en(tp, false);
   3879		rtl_runtime_suspend_enable(tp, true);
   3880		r8153c_ups_en(tp, true);
   3881	} else {
   3882		r8153c_ups_en(tp, false);
   3883		r8153_queue_wake(tp, false);
   3884		rtl_runtime_suspend_enable(tp, false);
   3885		r8153b_u1u2en(tp, true);
   3886	}
   3887}
   3888
   3889static void rtl8156_runtime_enable(struct r8152 *tp, bool enable)
   3890{
   3891	if (enable) {
   3892		r8153_queue_wake(tp, true);
   3893		r8153b_u1u2en(tp, false);
   3894		r8153_u2p3en(tp, false);
   3895		rtl_runtime_suspend_enable(tp, true);
   3896	} else {
   3897		r8153_queue_wake(tp, false);
   3898		rtl_runtime_suspend_enable(tp, false);
   3899		r8153_u2p3en(tp, true);
   3900		if (tp->udev->speed >= USB_SPEED_SUPER)
   3901			r8153b_u1u2en(tp, true);
   3902	}
   3903}
   3904
   3905static void r8153_teredo_off(struct r8152 *tp)
   3906{
   3907	u32 ocp_data;
   3908
   3909	switch (tp->version) {
   3910	case RTL_VER_01:
   3911	case RTL_VER_02:
   3912	case RTL_VER_03:
   3913	case RTL_VER_04:
   3914	case RTL_VER_05:
   3915	case RTL_VER_06:
   3916	case RTL_VER_07:
   3917		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG);
   3918		ocp_data &= ~(TEREDO_SEL | TEREDO_RS_EVENT_MASK |
   3919			      OOB_TEREDO_EN);
   3920		ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data);
   3921		break;
   3922
   3923	case RTL_VER_08:
   3924	case RTL_VER_09:
   3925	case RTL_TEST_01:
   3926	case RTL_VER_10:
   3927	case RTL_VER_11:
   3928	case RTL_VER_12:
   3929	case RTL_VER_13:
   3930	case RTL_VER_14:
   3931	case RTL_VER_15:
   3932	default:
   3933		/* The bit 0 ~ 7 are relative with teredo settings. They are
   3934		 * W1C (write 1 to clear), so set all 1 to disable it.
   3935		 */
   3936		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff);
   3937		break;
   3938	}
   3939
   3940	ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE);
   3941	ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0);
   3942	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0);
   3943}
   3944
   3945static void rtl_reset_bmu(struct r8152 *tp)
   3946{
   3947	u32 ocp_data;
   3948
   3949	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET);
   3950	ocp_data &= ~(BMU_RESET_EP_IN | BMU_RESET_EP_OUT);
   3951	ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
   3952	ocp_data |= BMU_RESET_EP_IN | BMU_RESET_EP_OUT;
   3953	ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
   3954}
   3955
   3956/* Clear the bp to stop the firmware before loading a new one */
   3957static void rtl_clear_bp(struct r8152 *tp, u16 type)
   3958{
   3959	switch (tp->version) {
   3960	case RTL_VER_01:
   3961	case RTL_VER_02:
   3962	case RTL_VER_07:
   3963		break;
   3964	case RTL_VER_03:
   3965	case RTL_VER_04:
   3966	case RTL_VER_05:
   3967	case RTL_VER_06:
   3968		ocp_write_byte(tp, type, PLA_BP_EN, 0);
   3969		break;
   3970	case RTL_VER_14:
   3971		ocp_write_word(tp, type, USB_BP2_EN, 0);
   3972
   3973		ocp_write_word(tp, type, USB_BP_8, 0);
   3974		ocp_write_word(tp, type, USB_BP_9, 0);
   3975		ocp_write_word(tp, type, USB_BP_10, 0);
   3976		ocp_write_word(tp, type, USB_BP_11, 0);
   3977		ocp_write_word(tp, type, USB_BP_12, 0);
   3978		ocp_write_word(tp, type, USB_BP_13, 0);
   3979		ocp_write_word(tp, type, USB_BP_14, 0);
   3980		ocp_write_word(tp, type, USB_BP_15, 0);
   3981		break;
   3982	case RTL_VER_08:
   3983	case RTL_VER_09:
   3984	case RTL_VER_10:
   3985	case RTL_VER_11:
   3986	case RTL_VER_12:
   3987	case RTL_VER_13:
   3988	case RTL_VER_15:
   3989	default:
   3990		if (type == MCU_TYPE_USB) {
   3991			ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
   3992
   3993			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_8, 0);
   3994			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_9, 0);
   3995			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_10, 0);
   3996			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_11, 0);
   3997			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_12, 0);
   3998			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_13, 0);
   3999			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_14, 0);
   4000			ocp_write_word(tp, MCU_TYPE_USB, USB_BP_15, 0);
   4001		} else {
   4002			ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
   4003		}
   4004		break;
   4005	}
   4006
   4007	ocp_write_word(tp, type, PLA_BP_0, 0);
   4008	ocp_write_word(tp, type, PLA_BP_1, 0);
   4009	ocp_write_word(tp, type, PLA_BP_2, 0);
   4010	ocp_write_word(tp, type, PLA_BP_3, 0);
   4011	ocp_write_word(tp, type, PLA_BP_4, 0);
   4012	ocp_write_word(tp, type, PLA_BP_5, 0);
   4013	ocp_write_word(tp, type, PLA_BP_6, 0);
   4014	ocp_write_word(tp, type, PLA_BP_7, 0);
   4015
   4016	/* wait 3 ms to make sure the firmware is stopped */
   4017	usleep_range(3000, 6000);
   4018	ocp_write_word(tp, type, PLA_BP_BA, 0);
   4019}
   4020
   4021static inline void rtl_reset_ocp_base(struct r8152 *tp)
   4022{
   4023	tp->ocp_base = -1;
   4024}
   4025
   4026static int rtl_phy_patch_request(struct r8152 *tp, bool request, bool wait)
   4027{
   4028	u16 data, check;
   4029	int i;
   4030
   4031	data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD);
   4032	if (request) {
   4033		data |= PATCH_REQUEST;
   4034		check = 0;
   4035	} else {
   4036		data &= ~PATCH_REQUEST;
   4037		check = PATCH_READY;
   4038	}
   4039	ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data);
   4040
   4041	for (i = 0; wait && i < 5000; i++) {
   4042		u32 ocp_data;
   4043
   4044		usleep_range(1000, 2000);
   4045		ocp_data = ocp_reg_read(tp, OCP_PHY_PATCH_STAT);
   4046		if ((ocp_data & PATCH_READY) ^ check)
   4047			break;
   4048	}
   4049
   4050	if (request && wait &&
   4051	    !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) {
   4052		dev_err(&tp->intf->dev, "PHY patch request fail\n");
   4053		rtl_phy_patch_request(tp, false, false);
   4054		return -ETIME;
   4055	} else {
   4056		return 0;
   4057	}
   4058}
   4059
   4060static void rtl_patch_key_set(struct r8152 *tp, u16 key_addr, u16 patch_key)
   4061{
   4062	if (patch_key && key_addr) {
   4063		sram_write(tp, key_addr, patch_key);
   4064		sram_write(tp, SRAM_PHY_LOCK, PHY_PATCH_LOCK);
   4065	} else if (key_addr) {
   4066		u16 data;
   4067
   4068		sram_write(tp, 0x0000, 0x0000);
   4069
   4070		data = ocp_reg_read(tp, OCP_PHY_LOCK);
   4071		data &= ~PATCH_LOCK;
   4072		ocp_reg_write(tp, OCP_PHY_LOCK, data);
   4073
   4074		sram_write(tp, key_addr, 0x0000);
   4075	} else {
   4076		WARN_ON_ONCE(1);
   4077	}
   4078}
   4079
   4080static int
   4081rtl_pre_ram_code(struct r8152 *tp, u16 key_addr, u16 patch_key, bool wait)
   4082{
   4083	if (rtl_phy_patch_request(tp, true, wait))
   4084		return -ETIME;
   4085
   4086	rtl_patch_key_set(tp, key_addr, patch_key);
   4087
   4088	return 0;
   4089}
   4090
   4091static int rtl_post_ram_code(struct r8152 *tp, u16 key_addr, bool wait)
   4092{
   4093	rtl_patch_key_set(tp, key_addr, 0);
   4094
   4095	rtl_phy_patch_request(tp, false, wait);
   4096
   4097	return 0;
   4098}
   4099
   4100static bool rtl8152_is_fw_phy_speed_up_ok(struct r8152 *tp, struct fw_phy_speed_up *phy)
   4101{
   4102	u16 fw_offset;
   4103	u32 length;
   4104	bool rc = false;
   4105
   4106	switch (tp->version) {
   4107	case RTL_VER_01:
   4108	case RTL_VER_02:
   4109	case RTL_VER_03:
   4110	case RTL_VER_04:
   4111	case RTL_VER_05:
   4112	case RTL_VER_06:
   4113	case RTL_VER_07:
   4114	case RTL_VER_08:
   4115	case RTL_VER_09:
   4116	case RTL_VER_10:
   4117	case RTL_VER_11:
   4118	case RTL_VER_12:
   4119	case RTL_VER_14:
   4120		goto out;
   4121	case RTL_VER_13:
   4122	case RTL_VER_15:
   4123	default:
   4124		break;
   4125	}
   4126
   4127	fw_offset = __le16_to_cpu(phy->fw_offset);
   4128	length = __le32_to_cpu(phy->blk_hdr.length);
   4129	if (fw_offset < sizeof(*phy) || length <= fw_offset) {
   4130		dev_err(&tp->intf->dev, "invalid fw_offset\n");
   4131		goto out;
   4132	}
   4133
   4134	length -= fw_offset;
   4135	if (length & 3) {
   4136		dev_err(&tp->intf->dev, "invalid block length\n");
   4137		goto out;
   4138	}
   4139
   4140	if (__le16_to_cpu(phy->fw_reg) != 0x9A00) {
   4141		dev_err(&tp->intf->dev, "invalid register to load firmware\n");
   4142		goto out;
   4143	}
   4144
   4145	rc = true;
   4146out:
   4147	return rc;
   4148}
   4149
   4150static bool rtl8152_is_fw_phy_ver_ok(struct r8152 *tp, struct fw_phy_ver *ver)
   4151{
   4152	bool rc = false;
   4153
   4154	switch (tp->version) {
   4155	case RTL_VER_10:
   4156	case RTL_VER_11:
   4157	case RTL_VER_12:
   4158	case RTL_VER_13:
   4159	case RTL_VER_15:
   4160		break;
   4161	default:
   4162		goto out;
   4163	}
   4164
   4165	if (__le32_to_cpu(ver->blk_hdr.length) != sizeof(*ver)) {
   4166		dev_err(&tp->intf->dev, "invalid block length\n");
   4167		goto out;
   4168	}
   4169
   4170	if (__le16_to_cpu(ver->ver.addr) != SRAM_GPHY_FW_VER) {
   4171		dev_err(&tp->intf->dev, "invalid phy ver addr\n");
   4172		goto out;
   4173	}
   4174
   4175	rc = true;
   4176out:
   4177	return rc;
   4178}
   4179
   4180static bool rtl8152_is_fw_phy_fixup_ok(struct r8152 *tp, struct fw_phy_fixup *fix)
   4181{
   4182	bool rc = false;
   4183
   4184	switch (tp->version) {
   4185	case RTL_VER_10:
   4186	case RTL_VER_11:
   4187	case RTL_VER_12:
   4188	case RTL_VER_13:
   4189	case RTL_VER_15:
   4190		break;
   4191	default:
   4192		goto out;
   4193	}
   4194
   4195	if (__le32_to_cpu(fix->blk_hdr.length) != sizeof(*fix)) {
   4196		dev_err(&tp->intf->dev, "invalid block length\n");
   4197		goto out;
   4198	}
   4199
   4200	if (__le16_to_cpu(fix->setting.addr) != OCP_PHY_PATCH_CMD ||
   4201	    __le16_to_cpu(fix->setting.data) != BIT(7)) {
   4202		dev_err(&tp->intf->dev, "invalid phy fixup\n");
   4203		goto out;
   4204	}
   4205
   4206	rc = true;
   4207out:
   4208	return rc;
   4209}
   4210
   4211static bool rtl8152_is_fw_phy_union_ok(struct r8152 *tp, struct fw_phy_union *phy)
   4212{
   4213	u16 fw_offset;
   4214	u32 length;
   4215	bool rc = false;
   4216
   4217	switch (tp->version) {
   4218	case RTL_VER_10:
   4219	case RTL_VER_11:
   4220	case RTL_VER_12:
   4221	case RTL_VER_13:
   4222	case RTL_VER_15:
   4223		break;
   4224	default:
   4225		goto out;
   4226	}
   4227
   4228	fw_offset = __le16_to_cpu(phy->fw_offset);
   4229	length = __le32_to_cpu(phy->blk_hdr.length);
   4230	if (fw_offset < sizeof(*phy) || length <= fw_offset) {
   4231		dev_err(&tp->intf->dev, "invalid fw_offset\n");
   4232		goto out;
   4233	}
   4234
   4235	length -= fw_offset;
   4236	if (length & 1) {
   4237		dev_err(&tp->intf->dev, "invalid block length\n");
   4238		goto out;
   4239	}
   4240
   4241	if (phy->pre_num > 2) {
   4242		dev_err(&tp->intf->dev, "invalid pre_num %d\n", phy->pre_num);
   4243		goto out;
   4244	}
   4245
   4246	if (phy->bp_num > 8) {
   4247		dev_err(&tp->intf->dev, "invalid bp_num %d\n", phy->bp_num);
   4248		goto out;
   4249	}
   4250
   4251	rc = true;
   4252out:
   4253	return rc;
   4254}
   4255
   4256static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy)
   4257{
   4258	u32 length;
   4259	u16 fw_offset, fw_reg, ba_reg, patch_en_addr, mode_reg, bp_start;
   4260	bool rc = false;
   4261
   4262	switch (tp->version) {
   4263	case RTL_VER_04:
   4264	case RTL_VER_05:
   4265	case RTL_VER_06:
   4266		fw_reg = 0xa014;
   4267		ba_reg = 0xa012;
   4268		patch_en_addr = 0xa01a;
   4269		mode_reg = 0xb820;
   4270		bp_start = 0xa000;
   4271		break;
   4272	default:
   4273		goto out;
   4274	}
   4275
   4276	fw_offset = __le16_to_cpu(phy->fw_offset);
   4277	if (fw_offset < sizeof(*phy)) {
   4278		dev_err(&tp->intf->dev, "fw_offset too small\n");
   4279		goto out;
   4280	}
   4281
   4282	length = __le32_to_cpu(phy->blk_hdr.length);
   4283	if (length < fw_offset) {
   4284		dev_err(&tp->intf->dev, "invalid fw_offset\n");
   4285		goto out;
   4286	}
   4287
   4288	length -= __le16_to_cpu(phy->fw_offset);
   4289	if (!length || (length & 1)) {
   4290		dev_err(&tp->intf->dev, "invalid block length\n");
   4291		goto out;
   4292	}
   4293
   4294	if (__le16_to_cpu(phy->fw_reg) != fw_reg) {
   4295		dev_err(&tp->intf->dev, "invalid register to load firmware\n");
   4296		goto out;
   4297	}
   4298
   4299	if (__le16_to_cpu(phy->ba_reg) != ba_reg) {
   4300		dev_err(&tp->intf->dev, "invalid base address register\n");
   4301		goto out;
   4302	}
   4303
   4304	if (__le16_to_cpu(phy->patch_en_addr) != patch_en_addr) {
   4305		dev_err(&tp->intf->dev,
   4306			"invalid patch mode enabled register\n");
   4307		goto out;
   4308	}
   4309
   4310	if (__le16_to_cpu(phy->mode_reg) != mode_reg) {
   4311		dev_err(&tp->intf->dev,
   4312			"invalid register to switch the mode\n");
   4313		goto out;
   4314	}
   4315
   4316	if (__le16_to_cpu(phy->bp_start) != bp_start) {
   4317		dev_err(&tp->intf->dev,
   4318			"invalid start register of break point\n");
   4319		goto out;
   4320	}
   4321
   4322	if (__le16_to_cpu(phy->bp_num) > 4) {
   4323		dev_err(&tp->intf->dev, "invalid break point number\n");
   4324		goto out;
   4325	}
   4326
   4327	rc = true;
   4328out:
   4329	return rc;
   4330}
   4331
   4332static bool rtl8152_is_fw_mac_ok(struct r8152 *tp, struct fw_mac *mac)
   4333{
   4334	u16 fw_reg, bp_ba_addr, bp_en_addr, bp_start, fw_offset;
   4335	bool rc = false;
   4336	u32 length, type;
   4337	int i, max_bp;
   4338
   4339	type = __le32_to_cpu(mac->blk_hdr.type);
   4340	if (type == RTL_FW_PLA) {
   4341		switch (tp->version) {
   4342		case RTL_VER_01:
   4343		case RTL_VER_02:
   4344		case RTL_VER_07:
   4345			fw_reg = 0xf800;
   4346			bp_ba_addr = PLA_BP_BA;
   4347			bp_en_addr = 0;
   4348			bp_start = PLA_BP_0;
   4349			max_bp = 8;
   4350			break;
   4351		case RTL_VER_03:
   4352		case RTL_VER_04:
   4353		case RTL_VER_05:
   4354		case RTL_VER_06:
   4355		case RTL_VER_08:
   4356		case RTL_VER_09:
   4357		case RTL_VER_11:
   4358		case RTL_VER_12:
   4359		case RTL_VER_13:
   4360		case RTL_VER_15:
   4361			fw_reg = 0xf800;
   4362			bp_ba_addr = PLA_BP_BA;
   4363			bp_en_addr = PLA_BP_EN;
   4364			bp_start = PLA_BP_0;
   4365			max_bp = 8;
   4366			break;
   4367		case RTL_VER_14:
   4368			fw_reg = 0xf800;
   4369			bp_ba_addr = PLA_BP_BA;
   4370			bp_en_addr = USB_BP2_EN;
   4371			bp_start = PLA_BP_0;
   4372			max_bp = 16;
   4373			break;
   4374		default:
   4375			goto out;
   4376		}
   4377	} else if (type == RTL_FW_USB) {
   4378		switch (tp->version) {
   4379		case RTL_VER_03:
   4380		case RTL_VER_04:
   4381		case RTL_VER_05:
   4382		case RTL_VER_06:
   4383			fw_reg = 0xf800;
   4384			bp_ba_addr = USB_BP_BA;
   4385			bp_en_addr = USB_BP_EN;
   4386			bp_start = USB_BP_0;
   4387			max_bp = 8;
   4388			break;
   4389		case RTL_VER_08:
   4390		case RTL_VER_09:
   4391		case RTL_VER_11:
   4392		case RTL_VER_12:
   4393		case RTL_VER_13:
   4394		case RTL_VER_14:
   4395		case RTL_VER_15:
   4396			fw_reg = 0xe600;
   4397			bp_ba_addr = USB_BP_BA;
   4398			bp_en_addr = USB_BP2_EN;
   4399			bp_start = USB_BP_0;
   4400			max_bp = 16;
   4401			break;
   4402		case RTL_VER_01:
   4403		case RTL_VER_02:
   4404		case RTL_VER_07:
   4405		default:
   4406			goto out;
   4407		}
   4408	} else {
   4409		goto out;
   4410	}
   4411
   4412	fw_offset = __le16_to_cpu(mac->fw_offset);
   4413	if (fw_offset < sizeof(*mac)) {
   4414		dev_err(&tp->intf->dev, "fw_offset too small\n");
   4415		goto out;
   4416	}
   4417
   4418	length = __le32_to_cpu(mac->blk_hdr.length);
   4419	if (length < fw_offset) {
   4420		dev_err(&tp->intf->dev, "invalid fw_offset\n");
   4421		goto out;
   4422	}
   4423
   4424	length -= fw_offset;
   4425	if (length < 4 || (length & 3)) {
   4426		dev_err(&tp->intf->dev, "invalid block length\n");
   4427		goto out;
   4428	}
   4429
   4430	if (__le16_to_cpu(mac->fw_reg) != fw_reg) {
   4431		dev_err(&tp->intf->dev, "invalid register to load firmware\n");
   4432		goto out;
   4433	}
   4434
   4435	if (__le16_to_cpu(mac->bp_ba_addr) != bp_ba_addr) {
   4436		dev_err(&tp->intf->dev, "invalid base address register\n");
   4437		goto out;
   4438	}
   4439
   4440	if (__le16_to_cpu(mac->bp_en_addr) != bp_en_addr) {
   4441		dev_err(&tp->intf->dev, "invalid enabled mask register\n");
   4442		goto out;
   4443	}
   4444
   4445	if (__le16_to_cpu(mac->bp_start) != bp_start) {
   4446		dev_err(&tp->intf->dev,
   4447			"invalid start register of break point\n");
   4448		goto out;
   4449	}
   4450
   4451	if (__le16_to_cpu(mac->bp_num) > max_bp) {
   4452		dev_err(&tp->intf->dev, "invalid break point number\n");
   4453		goto out;
   4454	}
   4455
   4456	for (i = __le16_to_cpu(mac->bp_num); i < max_bp; i++) {
   4457		if (mac->bp[i]) {
   4458			dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i);
   4459			goto out;
   4460		}
   4461	}
   4462
   4463	rc = true;
   4464out:
   4465	return rc;
   4466}
   4467
   4468/* Verify the checksum for the firmware file. It is calculated from the version
   4469 * field to the end of the file. Compare the result with the checksum field to
   4470 * make sure the file is correct.
   4471 */
   4472static long rtl8152_fw_verify_checksum(struct r8152 *tp,
   4473				       struct fw_header *fw_hdr, size_t size)
   4474{
   4475	unsigned char checksum[sizeof(fw_hdr->checksum)];
   4476	struct crypto_shash *alg;
   4477	struct shash_desc *sdesc;
   4478	size_t len;
   4479	long rc;
   4480
   4481	alg = crypto_alloc_shash("sha256", 0, 0);
   4482	if (IS_ERR(alg)) {
   4483		rc = PTR_ERR(alg);
   4484		goto out;
   4485	}
   4486
   4487	if (crypto_shash_digestsize(alg) != sizeof(fw_hdr->checksum)) {
   4488		rc = -EFAULT;
   4489		dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n",
   4490			crypto_shash_digestsize(alg));
   4491		goto free_shash;
   4492	}
   4493
   4494	len = sizeof(*sdesc) + crypto_shash_descsize(alg);
   4495	sdesc = kmalloc(len, GFP_KERNEL);
   4496	if (!sdesc) {
   4497		rc = -ENOMEM;
   4498		goto free_shash;
   4499	}
   4500	sdesc->tfm = alg;
   4501
   4502	len = size - sizeof(fw_hdr->checksum);
   4503	rc = crypto_shash_digest(sdesc, fw_hdr->version, len, checksum);
   4504	kfree(sdesc);
   4505	if (rc)
   4506		goto free_shash;
   4507
   4508	if (memcmp(fw_hdr->checksum, checksum, sizeof(fw_hdr->checksum))) {
   4509		dev_err(&tp->intf->dev, "checksum fail\n");
   4510		rc = -EFAULT;
   4511	}
   4512
   4513free_shash:
   4514	crypto_free_shash(alg);
   4515out:
   4516	return rc;
   4517}
   4518
   4519static long rtl8152_check_firmware(struct r8152 *tp, struct rtl_fw *rtl_fw)
   4520{
   4521	const struct firmware *fw = rtl_fw->fw;
   4522	struct fw_header *fw_hdr = (struct fw_header *)fw->data;
   4523	unsigned long fw_flags = 0;
   4524	long ret = -EFAULT;
   4525	int i;
   4526
   4527	if (fw->size < sizeof(*fw_hdr)) {
   4528		dev_err(&tp->intf->dev, "file too small\n");
   4529		goto fail;
   4530	}
   4531
   4532	ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size);
   4533	if (ret)
   4534		goto fail;
   4535
   4536	ret = -EFAULT;
   4537
   4538	for (i = sizeof(*fw_hdr); i < fw->size;) {
   4539		struct fw_block *block = (struct fw_block *)&fw->data[i];
   4540		u32 type;
   4541
   4542		if ((i + sizeof(*block)) > fw->size)
   4543			goto fail;
   4544
   4545		type = __le32_to_cpu(block->type);
   4546		switch (type) {
   4547		case RTL_FW_END:
   4548			if (__le32_to_cpu(block->length) != sizeof(*block))
   4549				goto fail;
   4550			goto fw_end;
   4551		case RTL_FW_PLA:
   4552			if (test_bit(FW_FLAGS_PLA, &fw_flags)) {
   4553				dev_err(&tp->intf->dev,
   4554					"multiple PLA firmware encountered");
   4555				goto fail;
   4556			}
   4557
   4558			if (!rtl8152_is_fw_mac_ok(tp, (struct fw_mac *)block)) {
   4559				dev_err(&tp->intf->dev,
   4560					"check PLA firmware failed\n");
   4561				goto fail;
   4562			}
   4563			__set_bit(FW_FLAGS_PLA, &fw_flags);
   4564			break;
   4565		case RTL_FW_USB:
   4566			if (test_bit(FW_FLAGS_USB, &fw_flags)) {
   4567				dev_err(&tp->intf->dev,
   4568					"multiple USB firmware encountered");
   4569				goto fail;
   4570			}
   4571
   4572			if (!rtl8152_is_fw_mac_ok(tp, (struct fw_mac *)block)) {
   4573				dev_err(&tp->intf->dev,
   4574					"check USB firmware failed\n");
   4575				goto fail;
   4576			}
   4577			__set_bit(FW_FLAGS_USB, &fw_flags);
   4578			break;
   4579		case RTL_FW_PHY_START:
   4580			if (test_bit(FW_FLAGS_START, &fw_flags) ||
   4581			    test_bit(FW_FLAGS_NC, &fw_flags) ||
   4582			    test_bit(FW_FLAGS_NC1, &fw_flags) ||
   4583			    test_bit(FW_FLAGS_NC2, &fw_flags) ||
   4584			    test_bit(FW_FLAGS_UC2, &fw_flags) ||
   4585			    test_bit(FW_FLAGS_UC, &fw_flags) ||
   4586			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4587				dev_err(&tp->intf->dev,
   4588					"check PHY_START fail\n");
   4589				goto fail;
   4590			}
   4591
   4592			if (__le32_to_cpu(block->length) != sizeof(struct fw_phy_patch_key)) {
   4593				dev_err(&tp->intf->dev,
   4594					"Invalid length for PHY_START\n");
   4595				goto fail;
   4596			}
   4597			__set_bit(FW_FLAGS_START, &fw_flags);
   4598			break;
   4599		case RTL_FW_PHY_STOP:
   4600			if (test_bit(FW_FLAGS_STOP, &fw_flags) ||
   4601			    !test_bit(FW_FLAGS_START, &fw_flags)) {
   4602				dev_err(&tp->intf->dev,
   4603					"Check PHY_STOP fail\n");
   4604				goto fail;
   4605			}
   4606
   4607			if (__le32_to_cpu(block->length) != sizeof(*block)) {
   4608				dev_err(&tp->intf->dev,
   4609					"Invalid length for PHY_STOP\n");
   4610				goto fail;
   4611			}
   4612			__set_bit(FW_FLAGS_STOP, &fw_flags);
   4613			break;
   4614		case RTL_FW_PHY_NC:
   4615			if (!test_bit(FW_FLAGS_START, &fw_flags) ||
   4616			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4617				dev_err(&tp->intf->dev,
   4618					"check PHY_NC fail\n");
   4619				goto fail;
   4620			}
   4621
   4622			if (test_bit(FW_FLAGS_NC, &fw_flags)) {
   4623				dev_err(&tp->intf->dev,
   4624					"multiple PHY NC encountered\n");
   4625				goto fail;
   4626			}
   4627
   4628			if (!rtl8152_is_fw_phy_nc_ok(tp, (struct fw_phy_nc *)block)) {
   4629				dev_err(&tp->intf->dev,
   4630					"check PHY NC firmware failed\n");
   4631				goto fail;
   4632			}
   4633			__set_bit(FW_FLAGS_NC, &fw_flags);
   4634			break;
   4635		case RTL_FW_PHY_UNION_NC:
   4636			if (!test_bit(FW_FLAGS_START, &fw_flags) ||
   4637			    test_bit(FW_FLAGS_NC1, &fw_flags) ||
   4638			    test_bit(FW_FLAGS_NC2, &fw_flags) ||
   4639			    test_bit(FW_FLAGS_UC2, &fw_flags) ||
   4640			    test_bit(FW_FLAGS_UC, &fw_flags) ||
   4641			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4642				dev_err(&tp->intf->dev, "PHY_UNION_NC out of order\n");
   4643				goto fail;
   4644			}
   4645
   4646			if (test_bit(FW_FLAGS_NC, &fw_flags)) {
   4647				dev_err(&tp->intf->dev, "multiple PHY_UNION_NC encountered\n");
   4648				goto fail;
   4649			}
   4650
   4651			if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) {
   4652				dev_err(&tp->intf->dev, "check PHY_UNION_NC failed\n");
   4653				goto fail;
   4654			}
   4655			__set_bit(FW_FLAGS_NC, &fw_flags);
   4656			break;
   4657		case RTL_FW_PHY_UNION_NC1:
   4658			if (!test_bit(FW_FLAGS_START, &fw_flags) ||
   4659			    test_bit(FW_FLAGS_NC2, &fw_flags) ||
   4660			    test_bit(FW_FLAGS_UC2, &fw_flags) ||
   4661			    test_bit(FW_FLAGS_UC, &fw_flags) ||
   4662			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4663				dev_err(&tp->intf->dev, "PHY_UNION_NC1 out of order\n");
   4664				goto fail;
   4665			}
   4666
   4667			if (test_bit(FW_FLAGS_NC1, &fw_flags)) {
   4668				dev_err(&tp->intf->dev, "multiple PHY NC1 encountered\n");
   4669				goto fail;
   4670			}
   4671
   4672			if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) {
   4673				dev_err(&tp->intf->dev, "check PHY_UNION_NC1 failed\n");
   4674				goto fail;
   4675			}
   4676			__set_bit(FW_FLAGS_NC1, &fw_flags);
   4677			break;
   4678		case RTL_FW_PHY_UNION_NC2:
   4679			if (!test_bit(FW_FLAGS_START, &fw_flags) ||
   4680			    test_bit(FW_FLAGS_UC2, &fw_flags) ||
   4681			    test_bit(FW_FLAGS_UC, &fw_flags) ||
   4682			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4683				dev_err(&tp->intf->dev, "PHY_UNION_NC2 out of order\n");
   4684				goto fail;
   4685			}
   4686
   4687			if (test_bit(FW_FLAGS_NC2, &fw_flags)) {
   4688				dev_err(&tp->intf->dev, "multiple PHY NC2 encountered\n");
   4689				goto fail;
   4690			}
   4691
   4692			if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) {
   4693				dev_err(&tp->intf->dev, "check PHY_UNION_NC2 failed\n");
   4694				goto fail;
   4695			}
   4696			__set_bit(FW_FLAGS_NC2, &fw_flags);
   4697			break;
   4698		case RTL_FW_PHY_UNION_UC2:
   4699			if (!test_bit(FW_FLAGS_START, &fw_flags) ||
   4700			    test_bit(FW_FLAGS_UC, &fw_flags) ||
   4701			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4702				dev_err(&tp->intf->dev, "PHY_UNION_UC2 out of order\n");
   4703				goto fail;
   4704			}
   4705
   4706			if (test_bit(FW_FLAGS_UC2, &fw_flags)) {
   4707				dev_err(&tp->intf->dev, "multiple PHY UC2 encountered\n");
   4708				goto fail;
   4709			}
   4710
   4711			if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) {
   4712				dev_err(&tp->intf->dev, "check PHY_UNION_UC2 failed\n");
   4713				goto fail;
   4714			}
   4715			__set_bit(FW_FLAGS_UC2, &fw_flags);
   4716			break;
   4717		case RTL_FW_PHY_UNION_UC:
   4718			if (!test_bit(FW_FLAGS_START, &fw_flags) ||
   4719			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4720				dev_err(&tp->intf->dev, "PHY_UNION_UC out of order\n");
   4721				goto fail;
   4722			}
   4723
   4724			if (test_bit(FW_FLAGS_UC, &fw_flags)) {
   4725				dev_err(&tp->intf->dev, "multiple PHY UC encountered\n");
   4726				goto fail;
   4727			}
   4728
   4729			if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) {
   4730				dev_err(&tp->intf->dev, "check PHY_UNION_UC failed\n");
   4731				goto fail;
   4732			}
   4733			__set_bit(FW_FLAGS_UC, &fw_flags);
   4734			break;
   4735		case RTL_FW_PHY_UNION_MISC:
   4736			if (!rtl8152_is_fw_phy_union_ok(tp, (struct fw_phy_union *)block)) {
   4737				dev_err(&tp->intf->dev, "check RTL_FW_PHY_UNION_MISC failed\n");
   4738				goto fail;
   4739			}
   4740			break;
   4741		case RTL_FW_PHY_FIXUP:
   4742			if (!rtl8152_is_fw_phy_fixup_ok(tp, (struct fw_phy_fixup *)block)) {
   4743				dev_err(&tp->intf->dev, "check PHY fixup failed\n");
   4744				goto fail;
   4745			}
   4746			break;
   4747		case RTL_FW_PHY_SPEED_UP:
   4748			if (test_bit(FW_FLAGS_SPEED_UP, &fw_flags)) {
   4749				dev_err(&tp->intf->dev, "multiple PHY firmware encountered");
   4750				goto fail;
   4751			}
   4752
   4753			if (!rtl8152_is_fw_phy_speed_up_ok(tp, (struct fw_phy_speed_up *)block)) {
   4754				dev_err(&tp->intf->dev, "check PHY speed up failed\n");
   4755				goto fail;
   4756			}
   4757			__set_bit(FW_FLAGS_SPEED_UP, &fw_flags);
   4758			break;
   4759		case RTL_FW_PHY_VER:
   4760			if (test_bit(FW_FLAGS_START, &fw_flags) ||
   4761			    test_bit(FW_FLAGS_NC, &fw_flags) ||
   4762			    test_bit(FW_FLAGS_NC1, &fw_flags) ||
   4763			    test_bit(FW_FLAGS_NC2, &fw_flags) ||
   4764			    test_bit(FW_FLAGS_UC2, &fw_flags) ||
   4765			    test_bit(FW_FLAGS_UC, &fw_flags) ||
   4766			    test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4767				dev_err(&tp->intf->dev, "Invalid order to set PHY version\n");
   4768				goto fail;
   4769			}
   4770
   4771			if (test_bit(FW_FLAGS_VER, &fw_flags)) {
   4772				dev_err(&tp->intf->dev, "multiple PHY version encountered");
   4773				goto fail;
   4774			}
   4775
   4776			if (!rtl8152_is_fw_phy_ver_ok(tp, (struct fw_phy_ver *)block)) {
   4777				dev_err(&tp->intf->dev, "check PHY version failed\n");
   4778				goto fail;
   4779			}
   4780			__set_bit(FW_FLAGS_VER, &fw_flags);
   4781			break;
   4782		default:
   4783			dev_warn(&tp->intf->dev, "Unknown type %u is found\n",
   4784				 type);
   4785			break;
   4786		}
   4787
   4788		/* next block */
   4789		i += ALIGN(__le32_to_cpu(block->length), 8);
   4790	}
   4791
   4792fw_end:
   4793	if (test_bit(FW_FLAGS_START, &fw_flags) && !test_bit(FW_FLAGS_STOP, &fw_flags)) {
   4794		dev_err(&tp->intf->dev, "without PHY_STOP\n");
   4795		goto fail;
   4796	}
   4797
   4798	return 0;
   4799fail:
   4800	return ret;
   4801}
   4802
   4803static void rtl_ram_code_speed_up(struct r8152 *tp, struct fw_phy_speed_up *phy, bool wait)
   4804{
   4805	u32 len;
   4806	u8 *data;
   4807
   4808	rtl_reset_ocp_base(tp);
   4809
   4810	if (sram_read(tp, SRAM_GPHY_FW_VER) >= __le16_to_cpu(phy->version)) {
   4811		dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n");
   4812		return;
   4813	}
   4814
   4815	len = __le32_to_cpu(phy->blk_hdr.length);
   4816	len -= __le16_to_cpu(phy->fw_offset);
   4817	data = (u8 *)phy + __le16_to_cpu(phy->fw_offset);
   4818
   4819	if (rtl_phy_patch_request(tp, true, wait))
   4820		return;
   4821
   4822	while (len) {
   4823		u32 ocp_data, size;
   4824		int i;
   4825
   4826		if (len < 2048)
   4827			size = len;
   4828		else
   4829			size = 2048;
   4830
   4831		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL);
   4832		ocp_data |= GPHY_PATCH_DONE | BACKUP_RESTRORE;
   4833		ocp_write_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL, ocp_data);
   4834
   4835		generic_ocp_write(tp, __le16_to_cpu(phy->fw_reg), 0xff, size, data, MCU_TYPE_USB);
   4836
   4837		data += size;
   4838		len -= size;
   4839
   4840		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL);
   4841		ocp_data |= POL_GPHY_PATCH;
   4842		ocp_write_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL, ocp_data);
   4843
   4844		for (i = 0; i < 1000; i++) {
   4845			if (!(ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL) & POL_GPHY_PATCH))
   4846				break;
   4847		}
   4848
   4849		if (i == 1000) {
   4850			dev_err(&tp->intf->dev, "ram code speedup mode timeout\n");
   4851			break;
   4852		}
   4853	}
   4854
   4855	rtl_reset_ocp_base(tp);
   4856
   4857	rtl_phy_patch_request(tp, false, wait);
   4858
   4859	if (sram_read(tp, SRAM_GPHY_FW_VER) == __le16_to_cpu(phy->version))
   4860		dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info);
   4861	else
   4862		dev_err(&tp->intf->dev, "ram code speedup mode fail\n");
   4863}
   4864
   4865static int rtl8152_fw_phy_ver(struct r8152 *tp, struct fw_phy_ver *phy_ver)
   4866{
   4867	u16 ver_addr, ver;
   4868
   4869	ver_addr = __le16_to_cpu(phy_ver->ver.addr);
   4870	ver = __le16_to_cpu(phy_ver->ver.data);
   4871
   4872	rtl_reset_ocp_base(tp);
   4873
   4874	if (sram_read(tp, ver_addr) >= ver) {
   4875		dev_dbg(&tp->intf->dev, "PHY firmware has been the newest\n");
   4876		return 0;
   4877	}
   4878
   4879	sram_write(tp, ver_addr, ver);
   4880
   4881	dev_dbg(&tp->intf->dev, "PHY firmware version %x\n", ver);
   4882
   4883	return ver;
   4884}
   4885
   4886static void rtl8152_fw_phy_fixup(struct r8152 *tp, struct fw_phy_fixup *fix)
   4887{
   4888	u16 addr, data;
   4889
   4890	rtl_reset_ocp_base(tp);
   4891
   4892	addr = __le16_to_cpu(fix->setting.addr);
   4893	data = ocp_reg_read(tp, addr);
   4894
   4895	switch (__le16_to_cpu(fix->bit_cmd)) {
   4896	case FW_FIXUP_AND:
   4897		data &= __le16_to_cpu(fix->setting.data);
   4898		break;
   4899	case FW_FIXUP_OR:
   4900		data |= __le16_to_cpu(fix->setting.data);
   4901		break;
   4902	case FW_FIXUP_NOT:
   4903		data &= ~__le16_to_cpu(fix->setting.data);
   4904		break;
   4905	case FW_FIXUP_XOR:
   4906		data ^= __le16_to_cpu(fix->setting.data);
   4907		break;
   4908	default:
   4909		return;
   4910	}
   4911
   4912	ocp_reg_write(tp, addr, data);
   4913
   4914	dev_dbg(&tp->intf->dev, "applied ocp %x %x\n", addr, data);
   4915}
   4916
   4917static void rtl8152_fw_phy_union_apply(struct r8152 *tp, struct fw_phy_union *phy)
   4918{
   4919	__le16 *data;
   4920	u32 length;
   4921	int i, num;
   4922
   4923	rtl_reset_ocp_base(tp);
   4924
   4925	num = phy->pre_num;
   4926	for (i = 0; i < num; i++)
   4927		sram_write(tp, __le16_to_cpu(phy->pre_set[i].addr),
   4928			   __le16_to_cpu(phy->pre_set[i].data));
   4929
   4930	length = __le32_to_cpu(phy->blk_hdr.length);
   4931	length -= __le16_to_cpu(phy->fw_offset);
   4932	num = length / 2;
   4933	data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset));
   4934
   4935	ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg));
   4936	for (i = 0; i < num; i++)
   4937		ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i]));
   4938
   4939	num = phy->bp_num;
   4940	for (i = 0; i < num; i++)
   4941		sram_write(tp, __le16_to_cpu(phy->bp[i].addr), __le16_to_cpu(phy->bp[i].data));
   4942
   4943	if (phy->bp_num && phy->bp_en.addr)
   4944		sram_write(tp, __le16_to_cpu(phy->bp_en.addr), __le16_to_cpu(phy->bp_en.data));
   4945
   4946	dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info);
   4947}
   4948
   4949static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy)
   4950{
   4951	u16 mode_reg, bp_index;
   4952	u32 length, i, num;
   4953	__le16 *data;
   4954
   4955	rtl_reset_ocp_base(tp);
   4956
   4957	mode_reg = __le16_to_cpu(phy->mode_reg);
   4958	sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre));
   4959	sram_write(tp, __le16_to_cpu(phy->ba_reg),
   4960		   __le16_to_cpu(phy->ba_data));
   4961
   4962	length = __le32_to_cpu(phy->blk_hdr.length);
   4963	length -= __le16_to_cpu(phy->fw_offset);
   4964	num = length / 2;
   4965	data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset));
   4966
   4967	ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg));
   4968	for (i = 0; i < num; i++)
   4969		ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i]));
   4970
   4971	sram_write(tp, __le16_to_cpu(phy->patch_en_addr),
   4972		   __le16_to_cpu(phy->patch_en_value));
   4973
   4974	bp_index = __le16_to_cpu(phy->bp_start);
   4975	num = __le16_to_cpu(phy->bp_num);
   4976	for (i = 0; i < num; i++) {
   4977		sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i]));
   4978		bp_index += 2;
   4979	}
   4980
   4981	sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post));
   4982
   4983	dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info);
   4984}
   4985
   4986static void rtl8152_fw_mac_apply(struct r8152 *tp, struct fw_mac *mac)
   4987{
   4988	u16 bp_en_addr, bp_index, type, bp_num, fw_ver_reg;
   4989	u32 length;
   4990	u8 *data;
   4991	int i;
   4992
   4993	switch (__le32_to_cpu(mac->blk_hdr.type)) {
   4994	case RTL_FW_PLA:
   4995		type = MCU_TYPE_PLA;
   4996		break;
   4997	case RTL_FW_USB:
   4998		type = MCU_TYPE_USB;
   4999		break;
   5000	default:
   5001		return;
   5002	}
   5003
   5004	fw_ver_reg = __le16_to_cpu(mac->fw_ver_reg);
   5005	if (fw_ver_reg && ocp_read_byte(tp, MCU_TYPE_USB, fw_ver_reg) >= mac->fw_ver_data) {
   5006		dev_dbg(&tp->intf->dev, "%s firmware has been the newest\n", type ? "PLA" : "USB");
   5007		return;
   5008	}
   5009
   5010	rtl_clear_bp(tp, type);
   5011
   5012	/* Enable backup/restore of MACDBG. This is required after clearing PLA
   5013	 * break points and before applying the PLA firmware.
   5014	 */
   5015	if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA &&
   5016	    !(ocp_read_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST) & DEBUG_OE)) {
   5017		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_PRE, DEBUG_LTSSM);
   5018		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST, DEBUG_LTSSM);
   5019	}
   5020
   5021	length = __le32_to_cpu(mac->blk_hdr.length);
   5022	length -= __le16_to_cpu(mac->fw_offset);
   5023
   5024	data = (u8 *)mac;
   5025	data += __le16_to_cpu(mac->fw_offset);
   5026
   5027	generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data,
   5028			  type);
   5029
   5030	ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr),
   5031		       __le16_to_cpu(mac->bp_ba_value));
   5032
   5033	bp_index = __le16_to_cpu(mac->bp_start);
   5034	bp_num = __le16_to_cpu(mac->bp_num);
   5035	for (i = 0; i < bp_num; i++) {
   5036		ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i]));
   5037		bp_index += 2;
   5038	}
   5039
   5040	bp_en_addr = __le16_to_cpu(mac->bp_en_addr);
   5041	if (bp_en_addr)
   5042		ocp_write_word(tp, type, bp_en_addr,
   5043			       __le16_to_cpu(mac->bp_en_value));
   5044
   5045	if (fw_ver_reg)
   5046		ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg,
   5047			       mac->fw_ver_data);
   5048
   5049	dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info);
   5050}
   5051
   5052static void rtl8152_apply_firmware(struct r8152 *tp, bool power_cut)
   5053{
   5054	struct rtl_fw *rtl_fw = &tp->rtl_fw;
   5055	const struct firmware *fw;
   5056	struct fw_header *fw_hdr;
   5057	struct fw_phy_patch_key *key;
   5058	u16 key_addr = 0;
   5059	int i, patch_phy = 1;
   5060
   5061	if (IS_ERR_OR_NULL(rtl_fw->fw))
   5062		return;
   5063
   5064	fw = rtl_fw->fw;
   5065	fw_hdr = (struct fw_header *)fw->data;
   5066
   5067	if (rtl_fw->pre_fw)
   5068		rtl_fw->pre_fw(tp);
   5069
   5070	for (i = offsetof(struct fw_header, blocks); i < fw->size;) {
   5071		struct fw_block *block = (struct fw_block *)&fw->data[i];
   5072
   5073		switch (__le32_to_cpu(block->type)) {
   5074		case RTL_FW_END:
   5075			goto post_fw;
   5076		case RTL_FW_PLA:
   5077		case RTL_FW_USB:
   5078			rtl8152_fw_mac_apply(tp, (struct fw_mac *)block);
   5079			break;
   5080		case RTL_FW_PHY_START:
   5081			if (!patch_phy)
   5082				break;
   5083			key = (struct fw_phy_patch_key *)block;
   5084			key_addr = __le16_to_cpu(key->key_reg);
   5085			rtl_pre_ram_code(tp, key_addr, __le16_to_cpu(key->key_data), !power_cut);
   5086			break;
   5087		case RTL_FW_PHY_STOP:
   5088			if (!patch_phy)
   5089				break;
   5090			WARN_ON(!key_addr);
   5091			rtl_post_ram_code(tp, key_addr, !power_cut);
   5092			break;
   5093		case RTL_FW_PHY_NC:
   5094			rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block);
   5095			break;
   5096		case RTL_FW_PHY_VER:
   5097			patch_phy = rtl8152_fw_phy_ver(tp, (struct fw_phy_ver *)block);
   5098			break;
   5099		case RTL_FW_PHY_UNION_NC:
   5100		case RTL_FW_PHY_UNION_NC1:
   5101		case RTL_FW_PHY_UNION_NC2:
   5102		case RTL_FW_PHY_UNION_UC2:
   5103		case RTL_FW_PHY_UNION_UC:
   5104		case RTL_FW_PHY_UNION_MISC:
   5105			if (patch_phy)
   5106				rtl8152_fw_phy_union_apply(tp, (struct fw_phy_union *)block);
   5107			break;
   5108		case RTL_FW_PHY_FIXUP:
   5109			if (patch_phy)
   5110				rtl8152_fw_phy_fixup(tp, (struct fw_phy_fixup *)block);
   5111			break;
   5112		case RTL_FW_PHY_SPEED_UP:
   5113			rtl_ram_code_speed_up(tp, (struct fw_phy_speed_up *)block, !power_cut);
   5114			break;
   5115		default:
   5116			break;
   5117		}
   5118
   5119		i += ALIGN(__le32_to_cpu(block->length), 8);
   5120	}
   5121
   5122post_fw:
   5123	if (rtl_fw->post_fw)
   5124		rtl_fw->post_fw(tp);
   5125
   5126	rtl_reset_ocp_base(tp);
   5127	strscpy(rtl_fw->version, fw_hdr->version, RTL_VER_SIZE);
   5128	dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version);
   5129}
   5130
   5131static void rtl8152_release_firmware(struct r8152 *tp)
   5132{
   5133	struct rtl_fw *rtl_fw = &tp->rtl_fw;
   5134
   5135	if (!IS_ERR_OR_NULL(rtl_fw->fw)) {
   5136		release_firmware(rtl_fw->fw);
   5137		rtl_fw->fw = NULL;
   5138	}
   5139}
   5140
   5141static int rtl8152_request_firmware(struct r8152 *tp)
   5142{
   5143	struct rtl_fw *rtl_fw = &tp->rtl_fw;
   5144	long rc;
   5145
   5146	if (rtl_fw->fw || !rtl_fw->fw_name) {
   5147		dev_info(&tp->intf->dev, "skip request firmware\n");
   5148		rc = 0;
   5149		goto result;
   5150	}
   5151
   5152	rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev);
   5153	if (rc < 0)
   5154		goto result;
   5155
   5156	rc = rtl8152_check_firmware(tp, rtl_fw);
   5157	if (rc < 0)
   5158		release_firmware(rtl_fw->fw);
   5159
   5160result:
   5161	if (rc) {
   5162		rtl_fw->fw = ERR_PTR(rc);
   5163
   5164		dev_warn(&tp->intf->dev,
   5165			 "unable to load firmware patch %s (%ld)\n",
   5166			 rtl_fw->fw_name, rc);
   5167	}
   5168
   5169	return rc;
   5170}
   5171
   5172static void r8152_aldps_en(struct r8152 *tp, bool enable)
   5173{
   5174	if (enable) {
   5175		ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS |
   5176						    LINKENA | DIS_SDSAVE);
   5177	} else {
   5178		ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA |
   5179						    DIS_SDSAVE);
   5180		msleep(20);
   5181	}
   5182}
   5183
   5184static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg)
   5185{
   5186	ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev);
   5187	ocp_reg_write(tp, OCP_EEE_DATA, reg);
   5188	ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev);
   5189}
   5190
   5191static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg)
   5192{
   5193	u16 data;
   5194
   5195	r8152_mmd_indirect(tp, dev, reg);
   5196	data = ocp_reg_read(tp, OCP_EEE_DATA);
   5197	ocp_reg_write(tp, OCP_EEE_AR, 0x0000);
   5198
   5199	return data;
   5200}
   5201
   5202static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data)
   5203{
   5204	r8152_mmd_indirect(tp, dev, reg);
   5205	ocp_reg_write(tp, OCP_EEE_DATA, data);
   5206	ocp_reg_write(tp, OCP_EEE_AR, 0x0000);
   5207}
   5208
   5209static void r8152_eee_en(struct r8152 *tp, bool enable)
   5210{
   5211	u16 config1, config2, config3;
   5212	u32 ocp_data;
   5213
   5214	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR);
   5215	config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask;
   5216	config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2);
   5217	config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask;
   5218
   5219	if (enable) {
   5220		ocp_data |= EEE_RX_EN | EEE_TX_EN;
   5221		config1 |= EEE_10_CAP | EEE_NWAY_EN | TX_QUIET_EN | RX_QUIET_EN;
   5222		config1 |= sd_rise_time(1);
   5223		config2 |= RG_DACQUIET_EN | RG_LDVQUIET_EN;
   5224		config3 |= fast_snr(42);
   5225	} else {
   5226		ocp_data &= ~(EEE_RX_EN | EEE_TX_EN);
   5227		config1 &= ~(EEE_10_CAP | EEE_NWAY_EN | TX_QUIET_EN |
   5228			     RX_QUIET_EN);
   5229		config1 |= sd_rise_time(7);
   5230		config2 &= ~(RG_DACQUIET_EN | RG_LDVQUIET_EN);
   5231		config3 |= fast_snr(511);
   5232	}
   5233
   5234	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data);
   5235	ocp_reg_write(tp, OCP_EEE_CONFIG1, config1);
   5236	ocp_reg_write(tp, OCP_EEE_CONFIG2, config2);
   5237	ocp_reg_write(tp, OCP_EEE_CONFIG3, config3);
   5238}
   5239
   5240static void r8153_eee_en(struct r8152 *tp, bool enable)
   5241{
   5242	u32 ocp_data;
   5243	u16 config;
   5244
   5245	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR);
   5246	config = ocp_reg_read(tp, OCP_EEE_CFG);
   5247
   5248	if (enable) {
   5249		ocp_data |= EEE_RX_EN | EEE_TX_EN;
   5250		config |= EEE10_EN;
   5251	} else {
   5252		ocp_data &= ~(EEE_RX_EN | EEE_TX_EN);
   5253		config &= ~EEE10_EN;
   5254	}
   5255
   5256	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data);
   5257	ocp_reg_write(tp, OCP_EEE_CFG, config);
   5258
   5259	tp->ups_info.eee = enable;
   5260}
   5261
   5262static void r8156_eee_en(struct r8152 *tp, bool enable)
   5263{
   5264	u16 config;
   5265
   5266	r8153_eee_en(tp, enable);
   5267
   5268	config = ocp_reg_read(tp, OCP_EEE_ADV2);
   5269
   5270	if (enable)
   5271		config |= MDIO_EEE_2_5GT;
   5272	else
   5273		config &= ~MDIO_EEE_2_5GT;
   5274
   5275	ocp_reg_write(tp, OCP_EEE_ADV2, config);
   5276}
   5277
   5278static void rtl_eee_enable(struct r8152 *tp, bool enable)
   5279{
   5280	switch (tp->version) {
   5281	case RTL_VER_01:
   5282	case RTL_VER_02:
   5283	case RTL_VER_07:
   5284		if (enable) {
   5285			r8152_eee_en(tp, true);
   5286			r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV,
   5287					tp->eee_adv);
   5288		} else {
   5289			r8152_eee_en(tp, false);
   5290			r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0);
   5291		}
   5292		break;
   5293	case RTL_VER_03:
   5294	case RTL_VER_04:
   5295	case RTL_VER_05:
   5296	case RTL_VER_06:
   5297	case RTL_VER_08:
   5298	case RTL_VER_09:
   5299	case RTL_VER_14:
   5300		if (enable) {
   5301			r8153_eee_en(tp, true);
   5302			ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv);
   5303		} else {
   5304			r8153_eee_en(tp, false);
   5305			ocp_reg_write(tp, OCP_EEE_ADV, 0);
   5306		}
   5307		break;
   5308	case RTL_VER_10:
   5309	case RTL_VER_11:
   5310	case RTL_VER_12:
   5311	case RTL_VER_13:
   5312	case RTL_VER_15:
   5313		if (enable) {
   5314			r8156_eee_en(tp, true);
   5315			ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv);
   5316		} else {
   5317			r8156_eee_en(tp, false);
   5318			ocp_reg_write(tp, OCP_EEE_ADV, 0);
   5319		}
   5320		break;
   5321	default:
   5322		break;
   5323	}
   5324}
   5325
   5326static void r8152b_enable_fc(struct r8152 *tp)
   5327{
   5328	u16 anar;
   5329
   5330	anar = r8152_mdio_read(tp, MII_ADVERTISE);
   5331	anar |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
   5332	r8152_mdio_write(tp, MII_ADVERTISE, anar);
   5333
   5334	tp->ups_info.flow_control = true;
   5335}
   5336
   5337static void rtl8152_disable(struct r8152 *tp)
   5338{
   5339	r8152_aldps_en(tp, false);
   5340	rtl_disable(tp);
   5341	r8152_aldps_en(tp, true);
   5342}
   5343
   5344static void r8152b_hw_phy_cfg(struct r8152 *tp)
   5345{
   5346	rtl8152_apply_firmware(tp, false);
   5347	rtl_eee_enable(tp, tp->eee_en);
   5348	r8152_aldps_en(tp, true);
   5349	r8152b_enable_fc(tp);
   5350
   5351	set_bit(PHY_RESET, &tp->flags);
   5352}
   5353
   5354static void wait_oob_link_list_ready(struct r8152 *tp)
   5355{
   5356	u32 ocp_data;
   5357	int i;
   5358
   5359	for (i = 0; i < 1000; i++) {
   5360		ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   5361		if (ocp_data & LINK_LIST_READY)
   5362			break;
   5363		usleep_range(1000, 2000);
   5364	}
   5365}
   5366
   5367static void r8156b_wait_loading_flash(struct r8152 *tp)
   5368{
   5369	if ((ocp_read_word(tp, MCU_TYPE_PLA, PLA_GPHY_CTRL) & GPHY_FLASH) &&
   5370	    !(ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & BYPASS_FLASH)) {
   5371		int i;
   5372
   5373		for (i = 0; i < 100; i++) {
   5374			if (ocp_read_word(tp, MCU_TYPE_USB, USB_GPHY_CTRL) & GPHY_PATCH_DONE)
   5375				break;
   5376			usleep_range(1000, 2000);
   5377		}
   5378	}
   5379}
   5380
   5381static void r8152b_exit_oob(struct r8152 *tp)
   5382{
   5383	u32 ocp_data;
   5384
   5385	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   5386	ocp_data &= ~RCR_ACPT_ALL;
   5387	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   5388
   5389	rxdy_gated_en(tp, true);
   5390	r8153_teredo_off(tp);
   5391	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
   5392	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00);
   5393
   5394	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   5395	ocp_data &= ~NOW_IS_OOB;
   5396	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   5397
   5398	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   5399	ocp_data &= ~MCU_BORW_EN;
   5400	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   5401
   5402	wait_oob_link_list_ready(tp);
   5403
   5404	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   5405	ocp_data |= RE_INIT_LL;
   5406	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   5407
   5408	wait_oob_link_list_ready(tp);
   5409
   5410	rtl8152_nic_reset(tp);
   5411
   5412	/* rx share fifo credit full threshold */
   5413	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL);
   5414
   5415	if (tp->udev->speed == USB_SPEED_FULL ||
   5416	    tp->udev->speed == USB_SPEED_LOW) {
   5417		/* rx share fifo credit near full threshold */
   5418		ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1,
   5419				RXFIFO_THR2_FULL);
   5420		ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2,
   5421				RXFIFO_THR3_FULL);
   5422	} else {
   5423		/* rx share fifo credit near full threshold */
   5424		ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1,
   5425				RXFIFO_THR2_HIGH);
   5426		ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2,
   5427				RXFIFO_THR3_HIGH);
   5428	}
   5429
   5430	/* TX share fifo free credit full threshold */
   5431	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2);
   5432
   5433	ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD);
   5434	ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH);
   5435	ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA,
   5436			TEST_MODE_DISABLE | TX_SIZE_ADJUST1);
   5437
   5438	rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
   5439
   5440	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
   5441
   5442	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
   5443	ocp_data |= TCR0_AUTO_FIFO;
   5444	ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data);
   5445}
   5446
   5447static void r8152b_enter_oob(struct r8152 *tp)
   5448{
   5449	u32 ocp_data;
   5450
   5451	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   5452	ocp_data &= ~NOW_IS_OOB;
   5453	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   5454
   5455	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB);
   5456	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB);
   5457	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB);
   5458
   5459	rtl_disable(tp);
   5460
   5461	wait_oob_link_list_ready(tp);
   5462
   5463	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   5464	ocp_data |= RE_INIT_LL;
   5465	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   5466
   5467	wait_oob_link_list_ready(tp);
   5468
   5469	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
   5470
   5471	rtl_rx_vlan_en(tp, true);
   5472
   5473	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR);
   5474	ocp_data |= ALDPS_PROXY_MODE;
   5475	ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data);
   5476
   5477	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   5478	ocp_data |= NOW_IS_OOB | DIS_MCU_CLROOB;
   5479	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   5480
   5481	rxdy_gated_en(tp, false);
   5482
   5483	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   5484	ocp_data |= RCR_APM | RCR_AM | RCR_AB;
   5485	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   5486}
   5487
   5488static int r8153_pre_firmware_1(struct r8152 *tp)
   5489{
   5490	int i;
   5491
   5492	/* Wait till the WTD timer is ready. It would take at most 104 ms. */
   5493	for (i = 0; i < 104; i++) {
   5494		u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL);
   5495
   5496		if (!(ocp_data & WTD1_EN))
   5497			break;
   5498		usleep_range(1000, 2000);
   5499	}
   5500
   5501	return 0;
   5502}
   5503
   5504static int r8153_post_firmware_1(struct r8152 *tp)
   5505{
   5506	/* set USB_BP_4 to support USB_SPEED_SUPER only */
   5507	if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER)
   5508		ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY);
   5509
   5510	/* reset UPHY timer to 36 ms */
   5511	ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16);
   5512
   5513	return 0;
   5514}
   5515
   5516static int r8153_pre_firmware_2(struct r8152 *tp)
   5517{
   5518	u32 ocp_data;
   5519
   5520	r8153_pre_firmware_1(tp);
   5521
   5522	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0);
   5523	ocp_data &= ~FW_FIX_SUSPEND;
   5524	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data);
   5525
   5526	return 0;
   5527}
   5528
   5529static int r8153_post_firmware_2(struct r8152 *tp)
   5530{
   5531	u32 ocp_data;
   5532
   5533	/* enable bp0 if support USB_SPEED_SUPER only */
   5534	if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) {
   5535		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN);
   5536		ocp_data |= BIT(0);
   5537		ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data);
   5538	}
   5539
   5540	/* reset UPHY timer to 36 ms */
   5541	ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16);
   5542
   5543	/* enable U3P3 check, set the counter to 4 */
   5544	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, U3P3_CHECK_EN | 4);
   5545
   5546	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0);
   5547	ocp_data |= FW_FIX_SUSPEND;
   5548	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data);
   5549
   5550	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
   5551	ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
   5552	ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
   5553
   5554	return 0;
   5555}
   5556
   5557static int r8153_post_firmware_3(struct r8152 *tp)
   5558{
   5559	u32 ocp_data;
   5560
   5561	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
   5562	ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
   5563	ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
   5564
   5565	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
   5566	ocp_data |= FW_IP_RESET_EN;
   5567	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
   5568
   5569	return 0;
   5570}
   5571
   5572static int r8153b_pre_firmware_1(struct r8152 *tp)
   5573{
   5574	/* enable fc timer and set timer to 1 second. */
   5575	ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER,
   5576		       CTRL_TIMER_EN | (1000 / 8));
   5577
   5578	return 0;
   5579}
   5580
   5581static int r8153b_post_firmware_1(struct r8152 *tp)
   5582{
   5583	u32 ocp_data;
   5584
   5585	/* enable bp0 for RTL8153-BND */
   5586	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
   5587	if (ocp_data & BND_MASK) {
   5588		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN);
   5589		ocp_data |= BIT(0);
   5590		ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data);
   5591	}
   5592
   5593	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL);
   5594	ocp_data |= FLOW_CTRL_PATCH_OPT;
   5595	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data);
   5596
   5597	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
   5598	ocp_data |= FC_PATCH_TASK;
   5599	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
   5600
   5601	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
   5602	ocp_data |= FW_IP_RESET_EN;
   5603	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
   5604
   5605	return 0;
   5606}
   5607
   5608static int r8153c_post_firmware_1(struct r8152 *tp)
   5609{
   5610	u32 ocp_data;
   5611
   5612	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL);
   5613	ocp_data |= FLOW_CTRL_PATCH_2;
   5614	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data);
   5615
   5616	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
   5617	ocp_data |= FC_PATCH_TASK;
   5618	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
   5619
   5620	return 0;
   5621}
   5622
   5623static int r8156a_post_firmware_1(struct r8152 *tp)
   5624{
   5625	u32 ocp_data;
   5626
   5627	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
   5628	ocp_data |= FW_IP_RESET_EN;
   5629	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
   5630
   5631	/* Modify U3PHY parameter for compatibility issue */
   5632	ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4026840e);
   5633	ocp_write_dword(tp, MCU_TYPE_USB, USB_UPHY3_MDCMDIO, 0x4001acc9);
   5634
   5635	return 0;
   5636}
   5637
   5638static void r8153_aldps_en(struct r8152 *tp, bool enable)
   5639{
   5640	u16 data;
   5641
   5642	data = ocp_reg_read(tp, OCP_POWER_CFG);
   5643	if (enable) {
   5644		data |= EN_ALDPS;
   5645		ocp_reg_write(tp, OCP_POWER_CFG, data);
   5646	} else {
   5647		int i;
   5648
   5649		data &= ~EN_ALDPS;
   5650		ocp_reg_write(tp, OCP_POWER_CFG, data);
   5651		for (i = 0; i < 20; i++) {
   5652			usleep_range(1000, 2000);
   5653			if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100)
   5654				break;
   5655		}
   5656	}
   5657
   5658	tp->ups_info.aldps = enable;
   5659}
   5660
   5661static void r8153_hw_phy_cfg(struct r8152 *tp)
   5662{
   5663	u32 ocp_data;
   5664	u16 data;
   5665
   5666	/* disable ALDPS before updating the PHY parameters */
   5667	r8153_aldps_en(tp, false);
   5668
   5669	/* disable EEE before updating the PHY parameters */
   5670	rtl_eee_enable(tp, false);
   5671
   5672	rtl8152_apply_firmware(tp, false);
   5673
   5674	if (tp->version == RTL_VER_03) {
   5675		data = ocp_reg_read(tp, OCP_EEE_CFG);
   5676		data &= ~CTAP_SHORT_EN;
   5677		ocp_reg_write(tp, OCP_EEE_CFG, data);
   5678	}
   5679
   5680	data = ocp_reg_read(tp, OCP_POWER_CFG);
   5681	data |= EEE_CLKDIV_EN;
   5682	ocp_reg_write(tp, OCP_POWER_CFG, data);
   5683
   5684	data = ocp_reg_read(tp, OCP_DOWN_SPEED);
   5685	data |= EN_10M_BGOFF;
   5686	ocp_reg_write(tp, OCP_DOWN_SPEED, data);
   5687	data = ocp_reg_read(tp, OCP_POWER_CFG);
   5688	data |= EN_10M_PLLOFF;
   5689	ocp_reg_write(tp, OCP_POWER_CFG, data);
   5690	sram_write(tp, SRAM_IMPEDANCE, 0x0b13);
   5691
   5692	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
   5693	ocp_data |= PFM_PWM_SWITCH;
   5694	ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
   5695
   5696	/* Enable LPF corner auto tune */
   5697	sram_write(tp, SRAM_LPF_CFG, 0xf70f);
   5698
   5699	/* Adjust 10M Amplitude */
   5700	sram_write(tp, SRAM_10M_AMP1, 0x00af);
   5701	sram_write(tp, SRAM_10M_AMP2, 0x0208);
   5702
   5703	if (tp->eee_en)
   5704		rtl_eee_enable(tp, true);
   5705
   5706	r8153_aldps_en(tp, true);
   5707	r8152b_enable_fc(tp);
   5708
   5709	switch (tp->version) {
   5710	case RTL_VER_03:
   5711	case RTL_VER_04:
   5712		break;
   5713	case RTL_VER_05:
   5714	case RTL_VER_06:
   5715	default:
   5716		r8153_u2p3en(tp, true);
   5717		break;
   5718	}
   5719
   5720	set_bit(PHY_RESET, &tp->flags);
   5721}
   5722
   5723static u32 r8152_efuse_read(struct r8152 *tp, u8 addr)
   5724{
   5725	u32 ocp_data;
   5726
   5727	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr);
   5728	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD);
   5729	ocp_data = (ocp_data & EFUSE_DATA_BIT16) << 9;	/* data of bit16 */
   5730	ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA);
   5731
   5732	return ocp_data;
   5733}
   5734
   5735static void r8153b_hw_phy_cfg(struct r8152 *tp)
   5736{
   5737	u32 ocp_data;
   5738	u16 data;
   5739
   5740	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
   5741	if (ocp_data & PCUT_STATUS) {
   5742		ocp_data &= ~PCUT_STATUS;
   5743		ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
   5744	}
   5745
   5746	/* disable ALDPS before updating the PHY parameters */
   5747	r8153_aldps_en(tp, false);
   5748
   5749	/* disable EEE before updating the PHY parameters */
   5750	rtl_eee_enable(tp, false);
   5751
   5752	/* U1/U2/L1 idle timer. 500 us */
   5753	ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500);
   5754
   5755	data = r8153_phy_status(tp, 0);
   5756
   5757	switch (data) {
   5758	case PHY_STAT_PWRDN:
   5759	case PHY_STAT_EXT_INIT:
   5760		rtl8152_apply_firmware(tp, true);
   5761
   5762		data = r8152_mdio_read(tp, MII_BMCR);
   5763		data &= ~BMCR_PDOWN;
   5764		r8152_mdio_write(tp, MII_BMCR, data);
   5765		break;
   5766	case PHY_STAT_LAN_ON:
   5767	default:
   5768		rtl8152_apply_firmware(tp, false);
   5769		break;
   5770	}
   5771
   5772	r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
   5773
   5774	data = sram_read(tp, SRAM_GREEN_CFG);
   5775	data |= R_TUNE_EN;
   5776	sram_write(tp, SRAM_GREEN_CFG, data);
   5777	data = ocp_reg_read(tp, OCP_NCTL_CFG);
   5778	data |= PGA_RETURN_EN;
   5779	ocp_reg_write(tp, OCP_NCTL_CFG, data);
   5780
   5781	/* ADC Bias Calibration:
   5782	 * read efuse offset 0x7d to get a 17-bit data. Remove the dummy/fake
   5783	 * bit (bit3) to rebuild the real 16-bit data. Write the data to the
   5784	 * ADC ioffset.
   5785	 */
   5786	ocp_data = r8152_efuse_read(tp, 0x7d);
   5787	data = (u16)(((ocp_data & 0x1fff0) >> 1) | (ocp_data & 0x7));
   5788	if (data != 0xffff)
   5789		ocp_reg_write(tp, OCP_ADC_IOFFSET, data);
   5790
   5791	/* ups mode tx-link-pulse timing adjustment:
   5792	 * rg_saw_cnt = OCP reg 0xC426 Bit[13:0]
   5793	 * swr_cnt_1ms_ini = 16000000 / rg_saw_cnt
   5794	 */
   5795	ocp_data = ocp_reg_read(tp, 0xc426);
   5796	ocp_data &= 0x3fff;
   5797	if (ocp_data) {
   5798		u32 swr_cnt_1ms_ini;
   5799
   5800		swr_cnt_1ms_ini = (16000000 / ocp_data) & SAW_CNT_1MS_MASK;
   5801		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG);
   5802		ocp_data = (ocp_data & ~SAW_CNT_1MS_MASK) | swr_cnt_1ms_ini;
   5803		ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data);
   5804	}
   5805
   5806	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
   5807	ocp_data |= PFM_PWM_SWITCH;
   5808	ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
   5809
   5810	/* Advnace EEE */
   5811	if (!rtl_phy_patch_request(tp, true, true)) {
   5812		data = ocp_reg_read(tp, OCP_POWER_CFG);
   5813		data |= EEE_CLKDIV_EN;
   5814		ocp_reg_write(tp, OCP_POWER_CFG, data);
   5815		tp->ups_info.eee_ckdiv = true;
   5816
   5817		data = ocp_reg_read(tp, OCP_DOWN_SPEED);
   5818		data |= EN_EEE_CMODE | EN_EEE_1000 | EN_10M_CLKDIV;
   5819		ocp_reg_write(tp, OCP_DOWN_SPEED, data);
   5820		tp->ups_info.eee_cmod_lv = true;
   5821		tp->ups_info._10m_ckdiv = true;
   5822		tp->ups_info.eee_plloff_giga = true;
   5823
   5824		ocp_reg_write(tp, OCP_SYSCLK_CFG, 0);
   5825		ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5));
   5826		tp->ups_info._250m_ckdiv = true;
   5827
   5828		rtl_phy_patch_request(tp, false, true);
   5829	}
   5830
   5831	if (tp->eee_en)
   5832		rtl_eee_enable(tp, true);
   5833
   5834	r8153_aldps_en(tp, true);
   5835	r8152b_enable_fc(tp);
   5836
   5837	set_bit(PHY_RESET, &tp->flags);
   5838}
   5839
   5840static void r8153c_hw_phy_cfg(struct r8152 *tp)
   5841{
   5842	r8153b_hw_phy_cfg(tp);
   5843
   5844	tp->ups_info.r_tune = true;
   5845}
   5846
   5847static void rtl8153_change_mtu(struct r8152 *tp)
   5848{
   5849	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu));
   5850	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO);
   5851}
   5852
   5853static void r8153_first_init(struct r8152 *tp)
   5854{
   5855	u32 ocp_data;
   5856
   5857	rxdy_gated_en(tp, true);
   5858	r8153_teredo_off(tp);
   5859
   5860	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   5861	ocp_data &= ~RCR_ACPT_ALL;
   5862	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   5863
   5864	rtl8152_nic_reset(tp);
   5865	rtl_reset_bmu(tp);
   5866
   5867	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   5868	ocp_data &= ~NOW_IS_OOB;
   5869	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   5870
   5871	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   5872	ocp_data &= ~MCU_BORW_EN;
   5873	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   5874
   5875	wait_oob_link_list_ready(tp);
   5876
   5877	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   5878	ocp_data |= RE_INIT_LL;
   5879	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   5880
   5881	wait_oob_link_list_ready(tp);
   5882
   5883	rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
   5884
   5885	rtl8153_change_mtu(tp);
   5886
   5887	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
   5888	ocp_data |= TCR0_AUTO_FIFO;
   5889	ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data);
   5890
   5891	rtl8152_nic_reset(tp);
   5892
   5893	/* rx share fifo credit full threshold */
   5894	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL);
   5895	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL);
   5896	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL);
   5897	/* TX share fifo free credit full threshold */
   5898	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2);
   5899}
   5900
   5901static void r8153_enter_oob(struct r8152 *tp)
   5902{
   5903	u32 ocp_data;
   5904
   5905	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   5906	ocp_data &= ~NOW_IS_OOB;
   5907	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   5908
   5909	rtl_disable(tp);
   5910	rtl_reset_bmu(tp);
   5911
   5912	wait_oob_link_list_ready(tp);
   5913
   5914	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   5915	ocp_data |= RE_INIT_LL;
   5916	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   5917
   5918	wait_oob_link_list_ready(tp);
   5919
   5920	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu));
   5921
   5922	switch (tp->version) {
   5923	case RTL_VER_03:
   5924	case RTL_VER_04:
   5925	case RTL_VER_05:
   5926	case RTL_VER_06:
   5927		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG);
   5928		ocp_data &= ~TEREDO_WAKE_MASK;
   5929		ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data);
   5930		break;
   5931
   5932	case RTL_VER_08:
   5933	case RTL_VER_09:
   5934	case RTL_VER_14:
   5935		/* Clear teredo wake event. bit[15:8] is the teredo wakeup
   5936		 * type. Set it to zero. bits[7:0] are the W1C bits about
   5937		 * the events. Set them to all 1 to clear them.
   5938		 */
   5939		ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff);
   5940		break;
   5941
   5942	default:
   5943		break;
   5944	}
   5945
   5946	rtl_rx_vlan_en(tp, true);
   5947
   5948	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR);
   5949	ocp_data |= ALDPS_PROXY_MODE;
   5950	ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data);
   5951
   5952	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   5953	ocp_data |= NOW_IS_OOB | DIS_MCU_CLROOB;
   5954	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   5955
   5956	rxdy_gated_en(tp, false);
   5957
   5958	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   5959	ocp_data |= RCR_APM | RCR_AM | RCR_AB;
   5960	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   5961}
   5962
   5963static void rtl8153_disable(struct r8152 *tp)
   5964{
   5965	r8153_aldps_en(tp, false);
   5966	rtl_disable(tp);
   5967	rtl_reset_bmu(tp);
   5968	r8153_aldps_en(tp, true);
   5969}
   5970
   5971static int rtl8156_enable(struct r8152 *tp)
   5972{
   5973	u32 ocp_data;
   5974	u16 speed;
   5975
   5976	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   5977		return -ENODEV;
   5978
   5979	set_tx_qlen(tp);
   5980	rtl_set_eee_plus(tp);
   5981	r8153_set_rx_early_timeout(tp);
   5982	r8153_set_rx_early_size(tp);
   5983
   5984	speed = rtl8152_get_speed(tp);
   5985	rtl_set_ifg(tp, speed);
   5986
   5987	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4);
   5988	if (speed & _2500bps)
   5989		ocp_data &= ~IDLE_SPDWN_EN;
   5990	else
   5991		ocp_data |= IDLE_SPDWN_EN;
   5992	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data);
   5993
   5994	if (speed & _1000bps)
   5995		ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS, 0x11);
   5996	else if (speed & _500bps)
   5997		ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS, 0x3d);
   5998
   5999	if (tp->udev->speed == USB_SPEED_HIGH) {
   6000		/* USB 0xb45e[3:0] l1_nyet_hird */
   6001		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_L1_CTRL);
   6002		ocp_data &= ~0xf;
   6003		if (is_flow_control(speed))
   6004			ocp_data |= 0xf;
   6005		else
   6006			ocp_data |= 0x1;
   6007		ocp_write_word(tp, MCU_TYPE_USB, USB_L1_CTRL, ocp_data);
   6008	}
   6009
   6010	return rtl_enable(tp);
   6011}
   6012
   6013static int rtl8156b_enable(struct r8152 *tp)
   6014{
   6015	u32 ocp_data;
   6016	u16 speed;
   6017
   6018	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6019		return -ENODEV;
   6020
   6021	set_tx_qlen(tp);
   6022	rtl_set_eee_plus(tp);
   6023
   6024	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_RX_AGGR_NUM);
   6025	ocp_data &= ~RX_AGGR_NUM_MASK;
   6026	ocp_write_word(tp, MCU_TYPE_USB, USB_RX_AGGR_NUM, ocp_data);
   6027
   6028	r8153_set_rx_early_timeout(tp);
   6029	r8153_set_rx_early_size(tp);
   6030
   6031	speed = rtl8152_get_speed(tp);
   6032	rtl_set_ifg(tp, speed);
   6033
   6034	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4);
   6035	if (speed & _2500bps)
   6036		ocp_data &= ~IDLE_SPDWN_EN;
   6037	else
   6038		ocp_data |= IDLE_SPDWN_EN;
   6039	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data);
   6040
   6041	if (tp->udev->speed == USB_SPEED_HIGH) {
   6042		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_L1_CTRL);
   6043		ocp_data &= ~0xf;
   6044		if (is_flow_control(speed))
   6045			ocp_data |= 0xf;
   6046		else
   6047			ocp_data |= 0x1;
   6048		ocp_write_word(tp, MCU_TYPE_USB, USB_L1_CTRL, ocp_data);
   6049	}
   6050
   6051	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
   6052	ocp_data &= ~FC_PATCH_TASK;
   6053	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
   6054	usleep_range(1000, 2000);
   6055	ocp_data |= FC_PATCH_TASK;
   6056	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
   6057
   6058	return rtl_enable(tp);
   6059}
   6060
   6061static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
   6062			     u32 advertising)
   6063{
   6064	u16 bmcr;
   6065	int ret = 0;
   6066
   6067	if (autoneg == AUTONEG_DISABLE) {
   6068		if (duplex != DUPLEX_HALF && duplex != DUPLEX_FULL)
   6069			return -EINVAL;
   6070
   6071		switch (speed) {
   6072		case SPEED_10:
   6073			bmcr = BMCR_SPEED10;
   6074			if (duplex == DUPLEX_FULL) {
   6075				bmcr |= BMCR_FULLDPLX;
   6076				tp->ups_info.speed_duplex = FORCE_10M_FULL;
   6077			} else {
   6078				tp->ups_info.speed_duplex = FORCE_10M_HALF;
   6079			}
   6080			break;
   6081		case SPEED_100:
   6082			bmcr = BMCR_SPEED100;
   6083			if (duplex == DUPLEX_FULL) {
   6084				bmcr |= BMCR_FULLDPLX;
   6085				tp->ups_info.speed_duplex = FORCE_100M_FULL;
   6086			} else {
   6087				tp->ups_info.speed_duplex = FORCE_100M_HALF;
   6088			}
   6089			break;
   6090		case SPEED_1000:
   6091			if (tp->mii.supports_gmii) {
   6092				bmcr = BMCR_SPEED1000 | BMCR_FULLDPLX;
   6093				tp->ups_info.speed_duplex = NWAY_1000M_FULL;
   6094				break;
   6095			}
   6096			fallthrough;
   6097		default:
   6098			ret = -EINVAL;
   6099			goto out;
   6100		}
   6101
   6102		if (duplex == DUPLEX_FULL)
   6103			tp->mii.full_duplex = 1;
   6104		else
   6105			tp->mii.full_duplex = 0;
   6106
   6107		tp->mii.force_media = 1;
   6108	} else {
   6109		u16 orig, new1;
   6110		u32 support;
   6111
   6112		support = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL |
   6113			  RTL_ADVERTISED_100_HALF | RTL_ADVERTISED_100_FULL;
   6114
   6115		if (tp->mii.supports_gmii) {
   6116			support |= RTL_ADVERTISED_1000_FULL;
   6117
   6118			if (tp->support_2500full)
   6119				support |= RTL_ADVERTISED_2500_FULL;
   6120		}
   6121
   6122		if (!(advertising & support))
   6123			return -EINVAL;
   6124
   6125		orig = r8152_mdio_read(tp, MII_ADVERTISE);
   6126		new1 = orig & ~(ADVERTISE_10HALF | ADVERTISE_10FULL |
   6127				ADVERTISE_100HALF | ADVERTISE_100FULL);
   6128		if (advertising & RTL_ADVERTISED_10_HALF) {
   6129			new1 |= ADVERTISE_10HALF;
   6130			tp->ups_info.speed_duplex = NWAY_10M_HALF;
   6131		}
   6132		if (advertising & RTL_ADVERTISED_10_FULL) {
   6133			new1 |= ADVERTISE_10FULL;
   6134			tp->ups_info.speed_duplex = NWAY_10M_FULL;
   6135		}
   6136
   6137		if (advertising & RTL_ADVERTISED_100_HALF) {
   6138			new1 |= ADVERTISE_100HALF;
   6139			tp->ups_info.speed_duplex = NWAY_100M_HALF;
   6140		}
   6141		if (advertising & RTL_ADVERTISED_100_FULL) {
   6142			new1 |= ADVERTISE_100FULL;
   6143			tp->ups_info.speed_duplex = NWAY_100M_FULL;
   6144		}
   6145
   6146		if (orig != new1) {
   6147			r8152_mdio_write(tp, MII_ADVERTISE, new1);
   6148			tp->mii.advertising = new1;
   6149		}
   6150
   6151		if (tp->mii.supports_gmii) {
   6152			orig = r8152_mdio_read(tp, MII_CTRL1000);
   6153			new1 = orig & ~(ADVERTISE_1000FULL |
   6154					ADVERTISE_1000HALF);
   6155
   6156			if (advertising & RTL_ADVERTISED_1000_FULL) {
   6157				new1 |= ADVERTISE_1000FULL;
   6158				tp->ups_info.speed_duplex = NWAY_1000M_FULL;
   6159			}
   6160
   6161			if (orig != new1)
   6162				r8152_mdio_write(tp, MII_CTRL1000, new1);
   6163		}
   6164
   6165		if (tp->support_2500full) {
   6166			orig = ocp_reg_read(tp, OCP_10GBT_CTRL);
   6167			new1 = orig & ~MDIO_AN_10GBT_CTRL_ADV2_5G;
   6168
   6169			if (advertising & RTL_ADVERTISED_2500_FULL) {
   6170				new1 |= MDIO_AN_10GBT_CTRL_ADV2_5G;
   6171				tp->ups_info.speed_duplex = NWAY_2500M_FULL;
   6172			}
   6173
   6174			if (orig != new1)
   6175				ocp_reg_write(tp, OCP_10GBT_CTRL, new1);
   6176		}
   6177
   6178		bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
   6179
   6180		tp->mii.force_media = 0;
   6181	}
   6182
   6183	if (test_and_clear_bit(PHY_RESET, &tp->flags))
   6184		bmcr |= BMCR_RESET;
   6185
   6186	r8152_mdio_write(tp, MII_BMCR, bmcr);
   6187
   6188	if (bmcr & BMCR_RESET) {
   6189		int i;
   6190
   6191		for (i = 0; i < 50; i++) {
   6192			msleep(20);
   6193			if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0)
   6194				break;
   6195		}
   6196	}
   6197
   6198out:
   6199	return ret;
   6200}
   6201
   6202static void rtl8152_up(struct r8152 *tp)
   6203{
   6204	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6205		return;
   6206
   6207	r8152_aldps_en(tp, false);
   6208	r8152b_exit_oob(tp);
   6209	r8152_aldps_en(tp, true);
   6210}
   6211
   6212static void rtl8152_down(struct r8152 *tp)
   6213{
   6214	if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
   6215		rtl_drop_queued_tx(tp);
   6216		return;
   6217	}
   6218
   6219	r8152_power_cut_en(tp, false);
   6220	r8152_aldps_en(tp, false);
   6221	r8152b_enter_oob(tp);
   6222	r8152_aldps_en(tp, true);
   6223}
   6224
   6225static void rtl8153_up(struct r8152 *tp)
   6226{
   6227	u32 ocp_data;
   6228
   6229	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6230		return;
   6231
   6232	r8153_u1u2en(tp, false);
   6233	r8153_u2p3en(tp, false);
   6234	r8153_aldps_en(tp, false);
   6235	r8153_first_init(tp);
   6236
   6237	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
   6238	ocp_data |= LANWAKE_CLR_EN;
   6239	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
   6240
   6241	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG);
   6242	ocp_data &= ~LANWAKE_PIN;
   6243	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data);
   6244
   6245	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1);
   6246	ocp_data &= ~DELAY_PHY_PWR_CHG;
   6247	ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1, ocp_data);
   6248
   6249	r8153_aldps_en(tp, true);
   6250
   6251	switch (tp->version) {
   6252	case RTL_VER_03:
   6253	case RTL_VER_04:
   6254		break;
   6255	case RTL_VER_05:
   6256	case RTL_VER_06:
   6257	default:
   6258		r8153_u2p3en(tp, true);
   6259		break;
   6260	}
   6261
   6262	r8153_u1u2en(tp, true);
   6263}
   6264
   6265static void rtl8153_down(struct r8152 *tp)
   6266{
   6267	u32 ocp_data;
   6268
   6269	if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
   6270		rtl_drop_queued_tx(tp);
   6271		return;
   6272	}
   6273
   6274	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
   6275	ocp_data &= ~LANWAKE_CLR_EN;
   6276	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
   6277
   6278	r8153_u1u2en(tp, false);
   6279	r8153_u2p3en(tp, false);
   6280	r8153_power_cut_en(tp, false);
   6281	r8153_aldps_en(tp, false);
   6282	r8153_enter_oob(tp);
   6283	r8153_aldps_en(tp, true);
   6284}
   6285
   6286static void rtl8153b_up(struct r8152 *tp)
   6287{
   6288	u32 ocp_data;
   6289
   6290	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6291		return;
   6292
   6293	r8153b_u1u2en(tp, false);
   6294	r8153_u2p3en(tp, false);
   6295	r8153_aldps_en(tp, false);
   6296
   6297	r8153_first_init(tp);
   6298	ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B);
   6299
   6300	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   6301	ocp_data &= ~PLA_MCU_SPDWN_EN;
   6302	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   6303
   6304	r8153_aldps_en(tp, true);
   6305
   6306	if (tp->udev->speed >= USB_SPEED_SUPER)
   6307		r8153b_u1u2en(tp, true);
   6308}
   6309
   6310static void rtl8153b_down(struct r8152 *tp)
   6311{
   6312	u32 ocp_data;
   6313
   6314	if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
   6315		rtl_drop_queued_tx(tp);
   6316		return;
   6317	}
   6318
   6319	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   6320	ocp_data |= PLA_MCU_SPDWN_EN;
   6321	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   6322
   6323	r8153b_u1u2en(tp, false);
   6324	r8153_u2p3en(tp, false);
   6325	r8153b_power_cut_en(tp, false);
   6326	r8153_aldps_en(tp, false);
   6327	r8153_enter_oob(tp);
   6328	r8153_aldps_en(tp, true);
   6329}
   6330
   6331static void rtl8153c_change_mtu(struct r8152 *tp)
   6332{
   6333	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu));
   6334	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, 10 * 1024 / 64);
   6335
   6336	ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, 512 / 64);
   6337
   6338	/* Adjust the tx fifo free credit full threshold, otherwise
   6339	 * the fifo would be too small to send a jumbo frame packet.
   6340	 */
   6341	if (tp->netdev->mtu < 8000)
   6342		ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, 2048 / 8);
   6343	else
   6344		ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL, 900 / 8);
   6345}
   6346
   6347static void rtl8153c_up(struct r8152 *tp)
   6348{
   6349	u32 ocp_data;
   6350
   6351	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6352		return;
   6353
   6354	r8153b_u1u2en(tp, false);
   6355	r8153_u2p3en(tp, false);
   6356	r8153_aldps_en(tp, false);
   6357
   6358	rxdy_gated_en(tp, true);
   6359	r8153_teredo_off(tp);
   6360
   6361	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   6362	ocp_data &= ~RCR_ACPT_ALL;
   6363	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   6364
   6365	rtl8152_nic_reset(tp);
   6366	rtl_reset_bmu(tp);
   6367
   6368	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   6369	ocp_data &= ~NOW_IS_OOB;
   6370	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   6371
   6372	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   6373	ocp_data &= ~MCU_BORW_EN;
   6374	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   6375
   6376	wait_oob_link_list_ready(tp);
   6377
   6378	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   6379	ocp_data |= RE_INIT_LL;
   6380	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   6381
   6382	wait_oob_link_list_ready(tp);
   6383
   6384	rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
   6385
   6386	rtl8153c_change_mtu(tp);
   6387
   6388	rtl8152_nic_reset(tp);
   6389
   6390	/* rx share fifo credit full threshold */
   6391	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, 0x02);
   6392	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, 0x08);
   6393	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL);
   6394	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL);
   6395
   6396	ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B);
   6397
   6398	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
   6399
   6400	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
   6401	ocp_data |= BIT(8);
   6402	ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
   6403
   6404	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
   6405
   6406	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   6407	ocp_data &= ~PLA_MCU_SPDWN_EN;
   6408	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   6409
   6410	r8153_aldps_en(tp, true);
   6411	r8153b_u1u2en(tp, true);
   6412}
   6413
   6414static inline u32 fc_pause_on_auto(struct r8152 *tp)
   6415{
   6416	return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 6 * 1024);
   6417}
   6418
   6419static inline u32 fc_pause_off_auto(struct r8152 *tp)
   6420{
   6421	return (ALIGN(mtu_to_size(tp->netdev->mtu), 1024) + 14 * 1024);
   6422}
   6423
   6424static void r8156_fc_parameter(struct r8152 *tp)
   6425{
   6426	u32 pause_on = tp->fc_pause_on ? tp->fc_pause_on : fc_pause_on_auto(tp);
   6427	u32 pause_off = tp->fc_pause_off ? tp->fc_pause_off : fc_pause_off_auto(tp);
   6428
   6429	switch (tp->version) {
   6430	case RTL_VER_10:
   6431	case RTL_VER_11:
   6432		ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_FULL, pause_on / 8);
   6433		ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_EMPTY, pause_off / 8);
   6434		break;
   6435	case RTL_VER_12:
   6436	case RTL_VER_13:
   6437	case RTL_VER_15:
   6438		ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_FULL, pause_on / 16);
   6439		ocp_write_word(tp, MCU_TYPE_PLA, PLA_RX_FIFO_EMPTY, pause_off / 16);
   6440		break;
   6441	default:
   6442		break;
   6443	}
   6444}
   6445
   6446static void rtl8156_change_mtu(struct r8152 *tp)
   6447{
   6448	u32 rx_max_size = mtu_to_size(tp->netdev->mtu);
   6449
   6450	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rx_max_size);
   6451	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO);
   6452	r8156_fc_parameter(tp);
   6453
   6454	/* TX share fifo free credit full threshold */
   6455	ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, 512 / 64);
   6456	ocp_write_word(tp, MCU_TYPE_PLA, PLA_TXFIFO_FULL,
   6457		       ALIGN(rx_max_size + sizeof(struct tx_desc), 1024) / 16);
   6458}
   6459
   6460static void rtl8156_up(struct r8152 *tp)
   6461{
   6462	u32 ocp_data;
   6463
   6464	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6465		return;
   6466
   6467	r8153b_u1u2en(tp, false);
   6468	r8153_u2p3en(tp, false);
   6469	r8153_aldps_en(tp, false);
   6470
   6471	rxdy_gated_en(tp, true);
   6472	r8153_teredo_off(tp);
   6473
   6474	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   6475	ocp_data &= ~RCR_ACPT_ALL;
   6476	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   6477
   6478	rtl8152_nic_reset(tp);
   6479	rtl_reset_bmu(tp);
   6480
   6481	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   6482	ocp_data &= ~NOW_IS_OOB;
   6483	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   6484
   6485	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
   6486	ocp_data &= ~MCU_BORW_EN;
   6487	ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
   6488
   6489	rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
   6490
   6491	rtl8156_change_mtu(tp);
   6492
   6493	switch (tp->version) {
   6494	case RTL_TEST_01:
   6495	case RTL_VER_10:
   6496	case RTL_VER_11:
   6497		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG);
   6498		ocp_data |= ACT_ODMA;
   6499		ocp_write_word(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data);
   6500		break;
   6501	default:
   6502		break;
   6503	}
   6504
   6505	/* share FIFO settings */
   6506	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL);
   6507	ocp_data &= ~RXFIFO_FULL_MASK;
   6508	ocp_data |= 0x08;
   6509	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_FULL, ocp_data);
   6510
   6511	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   6512	ocp_data &= ~PLA_MCU_SPDWN_EN;
   6513	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   6514
   6515	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION);
   6516	ocp_data &= ~(RG_PWRDN_EN | ALL_SPEED_OFF);
   6517	ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, ocp_data);
   6518
   6519	ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, 0x00600400);
   6520
   6521	if (tp->saved_wolopts != __rtl_get_wol(tp)) {
   6522		netif_warn(tp, ifup, tp->netdev, "wol setting is changed\n");
   6523		__rtl_set_wol(tp, tp->saved_wolopts);
   6524	}
   6525
   6526	r8153_aldps_en(tp, true);
   6527	r8153_u2p3en(tp, true);
   6528
   6529	if (tp->udev->speed >= USB_SPEED_SUPER)
   6530		r8153b_u1u2en(tp, true);
   6531}
   6532
   6533static void rtl8156_down(struct r8152 *tp)
   6534{
   6535	u32 ocp_data;
   6536
   6537	if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
   6538		rtl_drop_queued_tx(tp);
   6539		return;
   6540	}
   6541
   6542	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   6543	ocp_data |= PLA_MCU_SPDWN_EN;
   6544	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   6545
   6546	r8153b_u1u2en(tp, false);
   6547	r8153_u2p3en(tp, false);
   6548	r8153b_power_cut_en(tp, false);
   6549	r8153_aldps_en(tp, false);
   6550
   6551	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   6552	ocp_data &= ~NOW_IS_OOB;
   6553	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   6554
   6555	rtl_disable(tp);
   6556	rtl_reset_bmu(tp);
   6557
   6558	/* Clear teredo wake event. bit[15:8] is the teredo wakeup
   6559	 * type. Set it to zero. bits[7:0] are the W1C bits about
   6560	 * the events. Set them to all 1 to clear them.
   6561	 */
   6562	ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff);
   6563
   6564	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
   6565	ocp_data |= NOW_IS_OOB;
   6566	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
   6567
   6568	rtl_rx_vlan_en(tp, true);
   6569	rxdy_gated_en(tp, false);
   6570
   6571	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   6572	ocp_data |= RCR_APM | RCR_AM | RCR_AB;
   6573	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   6574
   6575	r8153_aldps_en(tp, true);
   6576}
   6577
   6578static bool rtl8152_in_nway(struct r8152 *tp)
   6579{
   6580	u16 nway_state;
   6581
   6582	ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
   6583	tp->ocp_base = 0x2000;
   6584	ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c);		/* phy state */
   6585	nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a);
   6586
   6587	/* bit 15: TXDIS_STATE, bit 14: ABD_STATE */
   6588	if (nway_state & 0xc000)
   6589		return false;
   6590	else
   6591		return true;
   6592}
   6593
   6594static bool rtl8153_in_nway(struct r8152 *tp)
   6595{
   6596	u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff;
   6597
   6598	if (phy_state == TXDIS_STATE || phy_state == ABD_STATE)
   6599		return false;
   6600	else
   6601		return true;
   6602}
   6603
   6604static void r8156_mdio_force_mode(struct r8152 *tp)
   6605{
   6606	u16 data;
   6607
   6608	/* Select force mode through 0xa5b4 bit 15
   6609	 * 0: MDIO force mode
   6610	 * 1: MMD force mode
   6611	 */
   6612	data = ocp_reg_read(tp, 0xa5b4);
   6613	if (data & BIT(15)) {
   6614		data &= ~BIT(15);
   6615		ocp_reg_write(tp, 0xa5b4, data);
   6616	}
   6617}
   6618
   6619static void set_carrier(struct r8152 *tp)
   6620{
   6621	struct net_device *netdev = tp->netdev;
   6622	struct napi_struct *napi = &tp->napi;
   6623	u16 speed;
   6624
   6625	speed = rtl8152_get_speed(tp);
   6626
   6627	if (speed & LINK_STATUS) {
   6628		if (!netif_carrier_ok(netdev)) {
   6629			tp->rtl_ops.enable(tp);
   6630			netif_stop_queue(netdev);
   6631			napi_disable(napi);
   6632			netif_carrier_on(netdev);
   6633			rtl_start_rx(tp);
   6634			clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
   6635			_rtl8152_set_rx_mode(netdev);
   6636			napi_enable(napi);
   6637			netif_wake_queue(netdev);
   6638			netif_info(tp, link, netdev, "carrier on\n");
   6639		} else if (netif_queue_stopped(netdev) &&
   6640			   skb_queue_len(&tp->tx_queue) < tp->tx_qlen) {
   6641			netif_wake_queue(netdev);
   6642		}
   6643	} else {
   6644		if (netif_carrier_ok(netdev)) {
   6645			netif_carrier_off(netdev);
   6646			tasklet_disable(&tp->tx_tl);
   6647			napi_disable(napi);
   6648			tp->rtl_ops.disable(tp);
   6649			napi_enable(napi);
   6650			tasklet_enable(&tp->tx_tl);
   6651			netif_info(tp, link, netdev, "carrier off\n");
   6652		}
   6653	}
   6654}
   6655
   6656static void rtl_work_func_t(struct work_struct *work)
   6657{
   6658	struct r8152 *tp = container_of(work, struct r8152, schedule.work);
   6659
   6660	/* If the device is unplugged or !netif_running(), the workqueue
   6661	 * doesn't need to wake the device, and could return directly.
   6662	 */
   6663	if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev))
   6664		return;
   6665
   6666	if (usb_autopm_get_interface(tp->intf) < 0)
   6667		return;
   6668
   6669	if (!test_bit(WORK_ENABLE, &tp->flags))
   6670		goto out1;
   6671
   6672	if (!mutex_trylock(&tp->control)) {
   6673		schedule_delayed_work(&tp->schedule, 0);
   6674		goto out1;
   6675	}
   6676
   6677	if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags))
   6678		set_carrier(tp);
   6679
   6680	if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags))
   6681		_rtl8152_set_rx_mode(tp->netdev);
   6682
   6683	/* don't schedule tasket before linking */
   6684	if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) &&
   6685	    netif_carrier_ok(tp->netdev))
   6686		tasklet_schedule(&tp->tx_tl);
   6687
   6688	if (test_and_clear_bit(RX_EPROTO, &tp->flags) &&
   6689	    !list_empty(&tp->rx_done))
   6690		napi_schedule(&tp->napi);
   6691
   6692	mutex_unlock(&tp->control);
   6693
   6694out1:
   6695	usb_autopm_put_interface(tp->intf);
   6696}
   6697
   6698static void rtl_hw_phy_work_func_t(struct work_struct *work)
   6699{
   6700	struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work);
   6701
   6702	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6703		return;
   6704
   6705	if (usb_autopm_get_interface(tp->intf) < 0)
   6706		return;
   6707
   6708	mutex_lock(&tp->control);
   6709
   6710	if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) {
   6711		tp->rtl_fw.retry = false;
   6712		tp->rtl_fw.fw = NULL;
   6713
   6714		/* Delay execution in case request_firmware() is not ready yet.
   6715		 */
   6716		queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10);
   6717		goto ignore_once;
   6718	}
   6719
   6720	tp->rtl_ops.hw_phy_cfg(tp);
   6721
   6722	rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex,
   6723			  tp->advertising);
   6724
   6725ignore_once:
   6726	mutex_unlock(&tp->control);
   6727
   6728	usb_autopm_put_interface(tp->intf);
   6729}
   6730
   6731#ifdef CONFIG_PM_SLEEP
   6732static int rtl_notifier(struct notifier_block *nb, unsigned long action,
   6733			void *data)
   6734{
   6735	struct r8152 *tp = container_of(nb, struct r8152, pm_notifier);
   6736
   6737	switch (action) {
   6738	case PM_HIBERNATION_PREPARE:
   6739	case PM_SUSPEND_PREPARE:
   6740		usb_autopm_get_interface(tp->intf);
   6741		break;
   6742
   6743	case PM_POST_HIBERNATION:
   6744	case PM_POST_SUSPEND:
   6745		usb_autopm_put_interface(tp->intf);
   6746		break;
   6747
   6748	case PM_POST_RESTORE:
   6749	case PM_RESTORE_PREPARE:
   6750	default:
   6751		break;
   6752	}
   6753
   6754	return NOTIFY_DONE;
   6755}
   6756#endif
   6757
   6758static int rtl8152_open(struct net_device *netdev)
   6759{
   6760	struct r8152 *tp = netdev_priv(netdev);
   6761	int res = 0;
   6762
   6763	if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) {
   6764		cancel_delayed_work_sync(&tp->hw_phy_work);
   6765		rtl_hw_phy_work_func_t(&tp->hw_phy_work.work);
   6766	}
   6767
   6768	res = alloc_all_mem(tp);
   6769	if (res)
   6770		goto out;
   6771
   6772	res = usb_autopm_get_interface(tp->intf);
   6773	if (res < 0)
   6774		goto out_free;
   6775
   6776	mutex_lock(&tp->control);
   6777
   6778	tp->rtl_ops.up(tp);
   6779
   6780	netif_carrier_off(netdev);
   6781	netif_start_queue(netdev);
   6782	set_bit(WORK_ENABLE, &tp->flags);
   6783
   6784	res = usb_submit_urb(tp->intr_urb, GFP_KERNEL);
   6785	if (res) {
   6786		if (res == -ENODEV)
   6787			netif_device_detach(tp->netdev);
   6788		netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n",
   6789			   res);
   6790		goto out_unlock;
   6791	}
   6792	napi_enable(&tp->napi);
   6793	tasklet_enable(&tp->tx_tl);
   6794
   6795	mutex_unlock(&tp->control);
   6796
   6797	usb_autopm_put_interface(tp->intf);
   6798#ifdef CONFIG_PM_SLEEP
   6799	tp->pm_notifier.notifier_call = rtl_notifier;
   6800	register_pm_notifier(&tp->pm_notifier);
   6801#endif
   6802	return 0;
   6803
   6804out_unlock:
   6805	mutex_unlock(&tp->control);
   6806	usb_autopm_put_interface(tp->intf);
   6807out_free:
   6808	free_all_mem(tp);
   6809out:
   6810	return res;
   6811}
   6812
   6813static int rtl8152_close(struct net_device *netdev)
   6814{
   6815	struct r8152 *tp = netdev_priv(netdev);
   6816	int res = 0;
   6817
   6818#ifdef CONFIG_PM_SLEEP
   6819	unregister_pm_notifier(&tp->pm_notifier);
   6820#endif
   6821	tasklet_disable(&tp->tx_tl);
   6822	clear_bit(WORK_ENABLE, &tp->flags);
   6823	usb_kill_urb(tp->intr_urb);
   6824	cancel_delayed_work_sync(&tp->schedule);
   6825	napi_disable(&tp->napi);
   6826	netif_stop_queue(netdev);
   6827
   6828	res = usb_autopm_get_interface(tp->intf);
   6829	if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) {
   6830		rtl_drop_queued_tx(tp);
   6831		rtl_stop_rx(tp);
   6832	} else {
   6833		mutex_lock(&tp->control);
   6834
   6835		tp->rtl_ops.down(tp);
   6836
   6837		mutex_unlock(&tp->control);
   6838	}
   6839
   6840	if (!res)
   6841		usb_autopm_put_interface(tp->intf);
   6842
   6843	free_all_mem(tp);
   6844
   6845	return res;
   6846}
   6847
   6848static void rtl_tally_reset(struct r8152 *tp)
   6849{
   6850	u32 ocp_data;
   6851
   6852	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY);
   6853	ocp_data |= TALLY_RESET;
   6854	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
   6855}
   6856
   6857static void r8152b_init(struct r8152 *tp)
   6858{
   6859	u32 ocp_data;
   6860	u16 data;
   6861
   6862	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6863		return;
   6864
   6865	data = r8152_mdio_read(tp, MII_BMCR);
   6866	if (data & BMCR_PDOWN) {
   6867		data &= ~BMCR_PDOWN;
   6868		r8152_mdio_write(tp, MII_BMCR, data);
   6869	}
   6870
   6871	r8152_aldps_en(tp, false);
   6872
   6873	if (tp->version == RTL_VER_01) {
   6874		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
   6875		ocp_data &= ~LED_MODE_MASK;
   6876		ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data);
   6877	}
   6878
   6879	r8152_power_cut_en(tp, false);
   6880
   6881	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
   6882	ocp_data |= TX_10M_IDLE_EN | PFM_PWM_SWITCH;
   6883	ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
   6884	ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL);
   6885	ocp_data &= ~MCU_CLK_RATIO_MASK;
   6886	ocp_data |= MCU_CLK_RATIO | D3_CLK_GATED_EN;
   6887	ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data);
   6888	ocp_data = GPHY_STS_MSK | SPEED_DOWN_MSK |
   6889		   SPDWN_RXDV_MSK | SPDWN_LINKCHG_MSK;
   6890	ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data);
   6891
   6892	rtl_tally_reset(tp);
   6893
   6894	/* enable rx aggregation */
   6895	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   6896	ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
   6897	ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   6898}
   6899
   6900static void r8153_init(struct r8152 *tp)
   6901{
   6902	u32 ocp_data;
   6903	u16 data;
   6904	int i;
   6905
   6906	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6907		return;
   6908
   6909	r8153_u1u2en(tp, false);
   6910
   6911	for (i = 0; i < 500; i++) {
   6912		if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
   6913		    AUTOLOAD_DONE)
   6914			break;
   6915
   6916		msleep(20);
   6917		if (test_bit(RTL8152_UNPLUG, &tp->flags))
   6918			break;
   6919	}
   6920
   6921	data = r8153_phy_status(tp, 0);
   6922
   6923	if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 ||
   6924	    tp->version == RTL_VER_05)
   6925		ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L);
   6926
   6927	data = r8152_mdio_read(tp, MII_BMCR);
   6928	if (data & BMCR_PDOWN) {
   6929		data &= ~BMCR_PDOWN;
   6930		r8152_mdio_write(tp, MII_BMCR, data);
   6931	}
   6932
   6933	data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
   6934
   6935	r8153_u2p3en(tp, false);
   6936
   6937	if (tp->version == RTL_VER_04) {
   6938		ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2);
   6939		ocp_data &= ~pwd_dn_scale_mask;
   6940		ocp_data |= pwd_dn_scale(96);
   6941		ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data);
   6942
   6943		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
   6944		ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
   6945		ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
   6946	} else if (tp->version == RTL_VER_05) {
   6947		ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0);
   6948		ocp_data &= ~ECM_ALDPS;
   6949		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data);
   6950
   6951		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1);
   6952		if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
   6953			ocp_data &= ~DYNAMIC_BURST;
   6954		else
   6955			ocp_data |= DYNAMIC_BURST;
   6956		ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data);
   6957	} else if (tp->version == RTL_VER_06) {
   6958		ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1);
   6959		if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
   6960			ocp_data &= ~DYNAMIC_BURST;
   6961		else
   6962			ocp_data |= DYNAMIC_BURST;
   6963		ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data);
   6964
   6965		r8153_queue_wake(tp, false);
   6966
   6967		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
   6968		if (rtl8152_get_speed(tp) & LINK_STATUS)
   6969			ocp_data |= CUR_LINK_OK;
   6970		else
   6971			ocp_data &= ~CUR_LINK_OK;
   6972		ocp_data |= POLL_LINK_CHG;
   6973		ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
   6974	}
   6975
   6976	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2);
   6977	ocp_data |= EP4_FULL_FC;
   6978	ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data);
   6979
   6980	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL);
   6981	ocp_data &= ~TIMER11_EN;
   6982	ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data);
   6983
   6984	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
   6985	ocp_data &= ~LED_MODE_MASK;
   6986	ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data);
   6987
   6988	ocp_data = FIFO_EMPTY_1FB | ROK_EXIT_LPM;
   6989	if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER)
   6990		ocp_data |= LPM_TIMER_500MS;
   6991	else
   6992		ocp_data |= LPM_TIMER_500US;
   6993	ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data);
   6994
   6995	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2);
   6996	ocp_data &= ~SEN_VAL_MASK;
   6997	ocp_data |= SEN_VAL_NORMAL | SEL_RXIDLE;
   6998	ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data);
   6999
   7000	ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001);
   7001
   7002	r8153_power_cut_en(tp, false);
   7003	rtl_runtime_suspend_enable(tp, false);
   7004	r8153_mac_clk_speed_down(tp, false);
   7005	r8153_u1u2en(tp, true);
   7006	usb_enable_lpm(tp->udev);
   7007
   7008	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
   7009	ocp_data |= LANWAKE_CLR_EN;
   7010	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
   7011
   7012	ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG);
   7013	ocp_data &= ~LANWAKE_PIN;
   7014	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data);
   7015
   7016	/* rx aggregation */
   7017	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   7018	ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
   7019	if (tp->dell_tb_rx_agg_bug)
   7020		ocp_data |= RX_AGG_DISABLE;
   7021
   7022	ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   7023
   7024	rtl_tally_reset(tp);
   7025
   7026	switch (tp->udev->speed) {
   7027	case USB_SPEED_SUPER:
   7028	case USB_SPEED_SUPER_PLUS:
   7029		tp->coalesce = COALESCE_SUPER;
   7030		break;
   7031	case USB_SPEED_HIGH:
   7032		tp->coalesce = COALESCE_HIGH;
   7033		break;
   7034	default:
   7035		tp->coalesce = COALESCE_SLOW;
   7036		break;
   7037	}
   7038}
   7039
   7040static void r8153b_init(struct r8152 *tp)
   7041{
   7042	u32 ocp_data;
   7043	u16 data;
   7044	int i;
   7045
   7046	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   7047		return;
   7048
   7049	r8153b_u1u2en(tp, false);
   7050
   7051	for (i = 0; i < 500; i++) {
   7052		if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
   7053		    AUTOLOAD_DONE)
   7054			break;
   7055
   7056		msleep(20);
   7057		if (test_bit(RTL8152_UNPLUG, &tp->flags))
   7058			break;
   7059	}
   7060
   7061	data = r8153_phy_status(tp, 0);
   7062
   7063	data = r8152_mdio_read(tp, MII_BMCR);
   7064	if (data & BMCR_PDOWN) {
   7065		data &= ~BMCR_PDOWN;
   7066		r8152_mdio_write(tp, MII_BMCR, data);
   7067	}
   7068
   7069	data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
   7070
   7071	r8153_u2p3en(tp, false);
   7072
   7073	/* MSC timer = 0xfff * 8ms = 32760 ms */
   7074	ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
   7075
   7076	r8153b_power_cut_en(tp, false);
   7077	r8153b_ups_en(tp, false);
   7078	r8153_queue_wake(tp, false);
   7079	rtl_runtime_suspend_enable(tp, false);
   7080
   7081	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
   7082	if (rtl8152_get_speed(tp) & LINK_STATUS)
   7083		ocp_data |= CUR_LINK_OK;
   7084	else
   7085		ocp_data &= ~CUR_LINK_OK;
   7086	ocp_data |= POLL_LINK_CHG;
   7087	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
   7088
   7089	if (tp->udev->speed >= USB_SPEED_SUPER)
   7090		r8153b_u1u2en(tp, true);
   7091
   7092	usb_enable_lpm(tp->udev);
   7093
   7094	/* MAC clock speed down */
   7095	r8153_mac_clk_speed_down(tp, true);
   7096
   7097	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   7098	ocp_data &= ~PLA_MCU_SPDWN_EN;
   7099	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   7100
   7101	if (tp->version == RTL_VER_09) {
   7102		/* Disable Test IO for 32QFN */
   7103		if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) {
   7104			ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
   7105			ocp_data |= TEST_IO_OFF;
   7106			ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
   7107		}
   7108	}
   7109
   7110	set_bit(GREEN_ETHERNET, &tp->flags);
   7111
   7112	/* rx aggregation */
   7113	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   7114	ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
   7115	ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   7116
   7117	rtl_tally_reset(tp);
   7118
   7119	tp->coalesce = 15000;	/* 15 us */
   7120}
   7121
   7122static void r8153c_init(struct r8152 *tp)
   7123{
   7124	u32 ocp_data;
   7125	u16 data;
   7126	int i;
   7127
   7128	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   7129		return;
   7130
   7131	r8153b_u1u2en(tp, false);
   7132
   7133	/* Disable spi_en */
   7134	ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
   7135	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5);
   7136	ocp_data &= ~BIT(3);
   7137	ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data);
   7138	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, 0xcbf0);
   7139	ocp_data |= BIT(1);
   7140	ocp_write_word(tp, MCU_TYPE_USB, 0xcbf0, ocp_data);
   7141
   7142	for (i = 0; i < 500; i++) {
   7143		if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
   7144		    AUTOLOAD_DONE)
   7145			break;
   7146
   7147		msleep(20);
   7148		if (test_bit(RTL8152_UNPLUG, &tp->flags))
   7149			return;
   7150	}
   7151
   7152	data = r8153_phy_status(tp, 0);
   7153
   7154	data = r8152_mdio_read(tp, MII_BMCR);
   7155	if (data & BMCR_PDOWN) {
   7156		data &= ~BMCR_PDOWN;
   7157		r8152_mdio_write(tp, MII_BMCR, data);
   7158	}
   7159
   7160	data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
   7161
   7162	r8153_u2p3en(tp, false);
   7163
   7164	/* MSC timer = 0xfff * 8ms = 32760 ms */
   7165	ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
   7166
   7167	r8153b_power_cut_en(tp, false);
   7168	r8153c_ups_en(tp, false);
   7169	r8153_queue_wake(tp, false);
   7170	rtl_runtime_suspend_enable(tp, false);
   7171
   7172	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
   7173	if (rtl8152_get_speed(tp) & LINK_STATUS)
   7174		ocp_data |= CUR_LINK_OK;
   7175	else
   7176		ocp_data &= ~CUR_LINK_OK;
   7177
   7178	ocp_data |= POLL_LINK_CHG;
   7179	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
   7180
   7181	r8153b_u1u2en(tp, true);
   7182
   7183	usb_enable_lpm(tp->udev);
   7184
   7185	/* MAC clock speed down */
   7186	r8153_mac_clk_speed_down(tp, true);
   7187
   7188	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_2);
   7189	ocp_data &= ~BIT(7);
   7190	ocp_write_byte(tp, MCU_TYPE_USB, USB_MISC_2, ocp_data);
   7191
   7192	set_bit(GREEN_ETHERNET, &tp->flags);
   7193
   7194	/* rx aggregation */
   7195	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   7196	ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
   7197	ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   7198
   7199	rtl_tally_reset(tp);
   7200
   7201	tp->coalesce = 15000;	/* 15 us */
   7202}
   7203
   7204static void r8156_hw_phy_cfg(struct r8152 *tp)
   7205{
   7206	u32 ocp_data;
   7207	u16 data;
   7208
   7209	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
   7210	if (ocp_data & PCUT_STATUS) {
   7211		ocp_data &= ~PCUT_STATUS;
   7212		ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
   7213	}
   7214
   7215	data = r8153_phy_status(tp, 0);
   7216	switch (data) {
   7217	case PHY_STAT_EXT_INIT:
   7218		rtl8152_apply_firmware(tp, true);
   7219
   7220		data = ocp_reg_read(tp, 0xa468);
   7221		data &= ~(BIT(3) | BIT(1));
   7222		ocp_reg_write(tp, 0xa468, data);
   7223		break;
   7224	case PHY_STAT_LAN_ON:
   7225	case PHY_STAT_PWRDN:
   7226	default:
   7227		rtl8152_apply_firmware(tp, false);
   7228		break;
   7229	}
   7230
   7231	/* disable ALDPS before updating the PHY parameters */
   7232	r8153_aldps_en(tp, false);
   7233
   7234	/* disable EEE before updating the PHY parameters */
   7235	rtl_eee_enable(tp, false);
   7236
   7237	data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
   7238	WARN_ON_ONCE(data != PHY_STAT_LAN_ON);
   7239
   7240	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
   7241	ocp_data |= PFM_PWM_SWITCH;
   7242	ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
   7243
   7244	switch (tp->version) {
   7245	case RTL_VER_10:
   7246		data = ocp_reg_read(tp, 0xad40);
   7247		data &= ~0x3ff;
   7248		data |= BIT(7) | BIT(2);
   7249		ocp_reg_write(tp, 0xad40, data);
   7250
   7251		data = ocp_reg_read(tp, 0xad4e);
   7252		data |= BIT(4);
   7253		ocp_reg_write(tp, 0xad4e, data);
   7254		data = ocp_reg_read(tp, 0xad16);
   7255		data &= ~0x3ff;
   7256		data |= 0x6;
   7257		ocp_reg_write(tp, 0xad16, data);
   7258		data = ocp_reg_read(tp, 0xad32);
   7259		data &= ~0x3f;
   7260		data |= 6;
   7261		ocp_reg_write(tp, 0xad32, data);
   7262		data = ocp_reg_read(tp, 0xac08);
   7263		data &= ~(BIT(12) | BIT(8));
   7264		ocp_reg_write(tp, 0xac08, data);
   7265		data = ocp_reg_read(tp, 0xac8a);
   7266		data |= BIT(12) | BIT(13) | BIT(14);
   7267		data &= ~BIT(15);
   7268		ocp_reg_write(tp, 0xac8a, data);
   7269		data = ocp_reg_read(tp, 0xad18);
   7270		data |= BIT(10);
   7271		ocp_reg_write(tp, 0xad18, data);
   7272		data = ocp_reg_read(tp, 0xad1a);
   7273		data |= 0x3ff;
   7274		ocp_reg_write(tp, 0xad1a, data);
   7275		data = ocp_reg_read(tp, 0xad1c);
   7276		data |= 0x3ff;
   7277		ocp_reg_write(tp, 0xad1c, data);
   7278
   7279		data = sram_read(tp, 0x80ea);
   7280		data &= ~0xff00;
   7281		data |= 0xc400;
   7282		sram_write(tp, 0x80ea, data);
   7283		data = sram_read(tp, 0x80eb);
   7284		data &= ~0x0700;
   7285		data |= 0x0300;
   7286		sram_write(tp, 0x80eb, data);
   7287		data = sram_read(tp, 0x80f8);
   7288		data &= ~0xff00;
   7289		data |= 0x1c00;
   7290		sram_write(tp, 0x80f8, data);
   7291		data = sram_read(tp, 0x80f1);
   7292		data &= ~0xff00;
   7293		data |= 0x3000;
   7294		sram_write(tp, 0x80f1, data);
   7295
   7296		data = sram_read(tp, 0x80fe);
   7297		data &= ~0xff00;
   7298		data |= 0xa500;
   7299		sram_write(tp, 0x80fe, data);
   7300		data = sram_read(tp, 0x8102);
   7301		data &= ~0xff00;
   7302		data |= 0x5000;
   7303		sram_write(tp, 0x8102, data);
   7304		data = sram_read(tp, 0x8015);
   7305		data &= ~0xff00;
   7306		data |= 0x3300;
   7307		sram_write(tp, 0x8015, data);
   7308		data = sram_read(tp, 0x8100);
   7309		data &= ~0xff00;
   7310		data |= 0x7000;
   7311		sram_write(tp, 0x8100, data);
   7312		data = sram_read(tp, 0x8014);
   7313		data &= ~0xff00;
   7314		data |= 0xf000;
   7315		sram_write(tp, 0x8014, data);
   7316		data = sram_read(tp, 0x8016);
   7317		data &= ~0xff00;
   7318		data |= 0x6500;
   7319		sram_write(tp, 0x8016, data);
   7320		data = sram_read(tp, 0x80dc);
   7321		data &= ~0xff00;
   7322		data |= 0xed00;
   7323		sram_write(tp, 0x80dc, data);
   7324		data = sram_read(tp, 0x80df);
   7325		data |= BIT(8);
   7326		sram_write(tp, 0x80df, data);
   7327		data = sram_read(tp, 0x80e1);
   7328		data &= ~BIT(8);
   7329		sram_write(tp, 0x80e1, data);
   7330
   7331		data = ocp_reg_read(tp, 0xbf06);
   7332		data &= ~0x003f;
   7333		data |= 0x0038;
   7334		ocp_reg_write(tp, 0xbf06, data);
   7335
   7336		sram_write(tp, 0x819f, 0xddb6);
   7337
   7338		ocp_reg_write(tp, 0xbc34, 0x5555);
   7339		data = ocp_reg_read(tp, 0xbf0a);
   7340		data &= ~0x0e00;
   7341		data |= 0x0a00;
   7342		ocp_reg_write(tp, 0xbf0a, data);
   7343
   7344		data = ocp_reg_read(tp, 0xbd2c);
   7345		data &= ~BIT(13);
   7346		ocp_reg_write(tp, 0xbd2c, data);
   7347		break;
   7348	case RTL_VER_11:
   7349		data = ocp_reg_read(tp, 0xad16);
   7350		data |= 0x3ff;
   7351		ocp_reg_write(tp, 0xad16, data);
   7352		data = ocp_reg_read(tp, 0xad32);
   7353		data &= ~0x3f;
   7354		data |= 6;
   7355		ocp_reg_write(tp, 0xad32, data);
   7356		data = ocp_reg_read(tp, 0xac08);
   7357		data &= ~(BIT(12) | BIT(8));
   7358		ocp_reg_write(tp, 0xac08, data);
   7359		data = ocp_reg_read(tp, 0xacc0);
   7360		data &= ~0x3;
   7361		data |= BIT(1);
   7362		ocp_reg_write(tp, 0xacc0, data);
   7363		data = ocp_reg_read(tp, 0xad40);
   7364		data &= ~0xe7;
   7365		data |= BIT(6) | BIT(2);
   7366		ocp_reg_write(tp, 0xad40, data);
   7367		data = ocp_reg_read(tp, 0xac14);
   7368		data &= ~BIT(7);
   7369		ocp_reg_write(tp, 0xac14, data);
   7370		data = ocp_reg_read(tp, 0xac80);
   7371		data &= ~(BIT(8) | BIT(9));
   7372		ocp_reg_write(tp, 0xac80, data);
   7373		data = ocp_reg_read(tp, 0xac5e);
   7374		data &= ~0x7;
   7375		data |= BIT(1);
   7376		ocp_reg_write(tp, 0xac5e, data);
   7377		ocp_reg_write(tp, 0xad4c, 0x00a8);
   7378		ocp_reg_write(tp, 0xac5c, 0x01ff);
   7379		data = ocp_reg_read(tp, 0xac8a);
   7380		data &= ~0xf0;
   7381		data |= BIT(4) | BIT(5);
   7382		ocp_reg_write(tp, 0xac8a, data);
   7383		ocp_reg_write(tp, 0xb87c, 0x8157);
   7384		data = ocp_reg_read(tp, 0xb87e);
   7385		data &= ~0xff00;
   7386		data |= 0x0500;
   7387		ocp_reg_write(tp, 0xb87e, data);
   7388		ocp_reg_write(tp, 0xb87c, 0x8159);
   7389		data = ocp_reg_read(tp, 0xb87e);
   7390		data &= ~0xff00;
   7391		data |= 0x0700;
   7392		ocp_reg_write(tp, 0xb87e, data);
   7393
   7394		/* AAGC */
   7395		ocp_reg_write(tp, 0xb87c, 0x80a2);
   7396		ocp_reg_write(tp, 0xb87e, 0x0153);
   7397		ocp_reg_write(tp, 0xb87c, 0x809c);
   7398		ocp_reg_write(tp, 0xb87e, 0x0153);
   7399
   7400		/* EEE parameter */
   7401		ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_TXTWSYS_2P5G, 0x0056);
   7402
   7403		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_USB_CFG);
   7404		ocp_data |= EN_XG_LIP | EN_G_LIP;
   7405		ocp_write_word(tp, MCU_TYPE_PLA, PLA_USB_CFG, ocp_data);
   7406
   7407		sram_write(tp, 0x8257, 0x020f); /*  XG PLL */
   7408		sram_write(tp, 0x80ea, 0x7843); /* GIGA Master */
   7409
   7410		if (rtl_phy_patch_request(tp, true, true))
   7411			return;
   7412
   7413		/* Advance EEE */
   7414		ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4);
   7415		ocp_data |= EEE_SPDWN_EN;
   7416		ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data);
   7417
   7418		data = ocp_reg_read(tp, OCP_DOWN_SPEED);
   7419		data &= ~(EN_EEE_100 | EN_EEE_1000);
   7420		data |= EN_10M_CLKDIV;
   7421		ocp_reg_write(tp, OCP_DOWN_SPEED, data);
   7422		tp->ups_info._10m_ckdiv = true;
   7423		tp->ups_info.eee_plloff_100 = false;
   7424		tp->ups_info.eee_plloff_giga = false;
   7425
   7426		data = ocp_reg_read(tp, OCP_POWER_CFG);
   7427		data &= ~EEE_CLKDIV_EN;
   7428		ocp_reg_write(tp, OCP_POWER_CFG, data);
   7429		tp->ups_info.eee_ckdiv = false;
   7430
   7431		ocp_reg_write(tp, OCP_SYSCLK_CFG, 0);
   7432		ocp_reg_write(tp, OCP_SYSCLK_CFG, sysclk_div_expo(5));
   7433		tp->ups_info._250m_ckdiv = false;
   7434
   7435		rtl_phy_patch_request(tp, false, true);
   7436
   7437		/* enable ADC Ibias Cal */
   7438		data = ocp_reg_read(tp, 0xd068);
   7439		data |= BIT(13);
   7440		ocp_reg_write(tp, 0xd068, data);
   7441
   7442		/* enable Thermal Sensor */
   7443		data = sram_read(tp, 0x81a2);
   7444		data &= ~BIT(8);
   7445		sram_write(tp, 0x81a2, data);
   7446		data = ocp_reg_read(tp, 0xb54c);
   7447		data &= ~0xff00;
   7448		data |= 0xdb00;
   7449		ocp_reg_write(tp, 0xb54c, data);
   7450
   7451		/* Nway 2.5G Lite */
   7452		data = ocp_reg_read(tp, 0xa454);
   7453		data &= ~BIT(0);
   7454		ocp_reg_write(tp, 0xa454, data);
   7455
   7456		/* CS DSP solution */
   7457		data = ocp_reg_read(tp, OCP_10GBT_CTRL);
   7458		data |= RTL_ADV2_5G_F_R;
   7459		ocp_reg_write(tp, OCP_10GBT_CTRL, data);
   7460		data = ocp_reg_read(tp, 0xad4e);
   7461		data &= ~BIT(4);
   7462		ocp_reg_write(tp, 0xad4e, data);
   7463		data = ocp_reg_read(tp, 0xa86a);
   7464		data &= ~BIT(0);
   7465		ocp_reg_write(tp, 0xa86a, data);
   7466
   7467		/* MDI SWAP */
   7468		if ((ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG) & MID_REVERSE) &&
   7469		    (ocp_reg_read(tp, 0xd068) & BIT(1))) {
   7470			u16 swap_a, swap_b;
   7471
   7472			data = ocp_reg_read(tp, 0xd068);
   7473			data &= ~0x1f;
   7474			data |= 0x1; /* p0 */
   7475			ocp_reg_write(tp, 0xd068, data);
   7476			swap_a = ocp_reg_read(tp, 0xd06a);
   7477			data &= ~0x18;
   7478			data |= 0x18; /* p3 */
   7479			ocp_reg_write(tp, 0xd068, data);
   7480			swap_b = ocp_reg_read(tp, 0xd06a);
   7481			data &= ~0x18; /* p0 */
   7482			ocp_reg_write(tp, 0xd068, data);
   7483			ocp_reg_write(tp, 0xd06a,
   7484				      (swap_a & ~0x7ff) | (swap_b & 0x7ff));
   7485			data |= 0x18; /* p3 */
   7486			ocp_reg_write(tp, 0xd068, data);
   7487			ocp_reg_write(tp, 0xd06a,
   7488				      (swap_b & ~0x7ff) | (swap_a & 0x7ff));
   7489			data &= ~0x18;
   7490			data |= 0x08; /* p1 */
   7491			ocp_reg_write(tp, 0xd068, data);
   7492			swap_a = ocp_reg_read(tp, 0xd06a);
   7493			data &= ~0x18;
   7494			data |= 0x10; /* p2 */
   7495			ocp_reg_write(tp, 0xd068, data);
   7496			swap_b = ocp_reg_read(tp, 0xd06a);
   7497			data &= ~0x18;
   7498			data |= 0x08; /* p1 */
   7499			ocp_reg_write(tp, 0xd068, data);
   7500			ocp_reg_write(tp, 0xd06a,
   7501				      (swap_a & ~0x7ff) | (swap_b & 0x7ff));
   7502			data &= ~0x18;
   7503			data |= 0x10; /* p2 */
   7504			ocp_reg_write(tp, 0xd068, data);
   7505			ocp_reg_write(tp, 0xd06a,
   7506				      (swap_b & ~0x7ff) | (swap_a & 0x7ff));
   7507			swap_a = ocp_reg_read(tp, 0xbd5a);
   7508			swap_b = ocp_reg_read(tp, 0xbd5c);
   7509			ocp_reg_write(tp, 0xbd5a, (swap_a & ~0x1f1f) |
   7510				      ((swap_b & 0x1f) << 8) |
   7511				      ((swap_b >> 8) & 0x1f));
   7512			ocp_reg_write(tp, 0xbd5c, (swap_b & ~0x1f1f) |
   7513				      ((swap_a & 0x1f) << 8) |
   7514				      ((swap_a >> 8) & 0x1f));
   7515			swap_a = ocp_reg_read(tp, 0xbc18);
   7516			swap_b = ocp_reg_read(tp, 0xbc1a);
   7517			ocp_reg_write(tp, 0xbc18, (swap_a & ~0x1f1f) |
   7518				      ((swap_b & 0x1f) << 8) |
   7519				      ((swap_b >> 8) & 0x1f));
   7520			ocp_reg_write(tp, 0xbc1a, (swap_b & ~0x1f1f) |
   7521				      ((swap_a & 0x1f) << 8) |
   7522				      ((swap_a >> 8) & 0x1f));
   7523		}
   7524		break;
   7525	default:
   7526		break;
   7527	}
   7528
   7529	rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
   7530
   7531	data = ocp_reg_read(tp, 0xa428);
   7532	data &= ~BIT(9);
   7533	ocp_reg_write(tp, 0xa428, data);
   7534	data = ocp_reg_read(tp, 0xa5ea);
   7535	data &= ~BIT(0);
   7536	ocp_reg_write(tp, 0xa5ea, data);
   7537	tp->ups_info.lite_mode = 0;
   7538
   7539	if (tp->eee_en)
   7540		rtl_eee_enable(tp, true);
   7541
   7542	r8153_aldps_en(tp, true);
   7543	r8152b_enable_fc(tp);
   7544	r8153_u2p3en(tp, true);
   7545
   7546	set_bit(PHY_RESET, &tp->flags);
   7547}
   7548
   7549static void r8156b_hw_phy_cfg(struct r8152 *tp)
   7550{
   7551	u32 ocp_data;
   7552	u16 data;
   7553
   7554	switch (tp->version) {
   7555	case RTL_VER_12:
   7556		ocp_reg_write(tp, 0xbf86, 0x9000);
   7557		data = ocp_reg_read(tp, 0xc402);
   7558		data |= BIT(10);
   7559		ocp_reg_write(tp, 0xc402, data);
   7560		data &= ~BIT(10);
   7561		ocp_reg_write(tp, 0xc402, data);
   7562		ocp_reg_write(tp, 0xbd86, 0x1010);
   7563		ocp_reg_write(tp, 0xbd88, 0x1010);
   7564		data = ocp_reg_read(tp, 0xbd4e);
   7565		data &= ~(BIT(10) | BIT(11));
   7566		data |= BIT(11);
   7567		ocp_reg_write(tp, 0xbd4e, data);
   7568		data = ocp_reg_read(tp, 0xbf46);
   7569		data &= ~0xf00;
   7570		data |= 0x700;
   7571		ocp_reg_write(tp, 0xbf46, data);
   7572		break;
   7573	case RTL_VER_13:
   7574	case RTL_VER_15:
   7575		r8156b_wait_loading_flash(tp);
   7576		break;
   7577	default:
   7578		break;
   7579	}
   7580
   7581	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
   7582	if (ocp_data & PCUT_STATUS) {
   7583		ocp_data &= ~PCUT_STATUS;
   7584		ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
   7585	}
   7586
   7587	data = r8153_phy_status(tp, 0);
   7588	switch (data) {
   7589	case PHY_STAT_EXT_INIT:
   7590		rtl8152_apply_firmware(tp, true);
   7591
   7592		data = ocp_reg_read(tp, 0xa466);
   7593		data &= ~BIT(0);
   7594		ocp_reg_write(tp, 0xa466, data);
   7595
   7596		data = ocp_reg_read(tp, 0xa468);
   7597		data &= ~(BIT(3) | BIT(1));
   7598		ocp_reg_write(tp, 0xa468, data);
   7599		break;
   7600	case PHY_STAT_LAN_ON:
   7601	case PHY_STAT_PWRDN:
   7602	default:
   7603		rtl8152_apply_firmware(tp, false);
   7604		break;
   7605	}
   7606
   7607	data = r8152_mdio_read(tp, MII_BMCR);
   7608	if (data & BMCR_PDOWN) {
   7609		data &= ~BMCR_PDOWN;
   7610		r8152_mdio_write(tp, MII_BMCR, data);
   7611	}
   7612
   7613	/* disable ALDPS before updating the PHY parameters */
   7614	r8153_aldps_en(tp, false);
   7615
   7616	/* disable EEE before updating the PHY parameters */
   7617	rtl_eee_enable(tp, false);
   7618
   7619	data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
   7620	WARN_ON_ONCE(data != PHY_STAT_LAN_ON);
   7621
   7622	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
   7623	ocp_data |= PFM_PWM_SWITCH;
   7624	ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
   7625
   7626	switch (tp->version) {
   7627	case RTL_VER_12:
   7628		data = ocp_reg_read(tp, 0xbc08);
   7629		data |= BIT(3) | BIT(2);
   7630		ocp_reg_write(tp, 0xbc08, data);
   7631
   7632		data = sram_read(tp, 0x8fff);
   7633		data &= ~0xff00;
   7634		data |= 0x0400;
   7635		sram_write(tp, 0x8fff, data);
   7636
   7637		data = ocp_reg_read(tp, 0xacda);
   7638		data |= 0xff00;
   7639		ocp_reg_write(tp, 0xacda, data);
   7640		data = ocp_reg_read(tp, 0xacde);
   7641		data |= 0xf000;
   7642		ocp_reg_write(tp, 0xacde, data);
   7643		ocp_reg_write(tp, 0xac8c, 0x0ffc);
   7644		ocp_reg_write(tp, 0xac46, 0xb7b4);
   7645		ocp_reg_write(tp, 0xac50, 0x0fbc);
   7646		ocp_reg_write(tp, 0xac3c, 0x9240);
   7647		ocp_reg_write(tp, 0xac4e, 0x0db4);
   7648		ocp_reg_write(tp, 0xacc6, 0x0707);
   7649		ocp_reg_write(tp, 0xacc8, 0xa0d3);
   7650		ocp_reg_write(tp, 0xad08, 0x0007);
   7651
   7652		ocp_reg_write(tp, 0xb87c, 0x8560);
   7653		ocp_reg_write(tp, 0xb87e, 0x19cc);
   7654		ocp_reg_write(tp, 0xb87c, 0x8562);
   7655		ocp_reg_write(tp, 0xb87e, 0x19cc);
   7656		ocp_reg_write(tp, 0xb87c, 0x8564);
   7657		ocp_reg_write(tp, 0xb87e, 0x19cc);
   7658		ocp_reg_write(tp, 0xb87c, 0x8566);
   7659		ocp_reg_write(tp, 0xb87e, 0x147d);
   7660		ocp_reg_write(tp, 0xb87c, 0x8568);
   7661		ocp_reg_write(tp, 0xb87e, 0x147d);
   7662		ocp_reg_write(tp, 0xb87c, 0x856a);
   7663		ocp_reg_write(tp, 0xb87e, 0x147d);
   7664		ocp_reg_write(tp, 0xb87c, 0x8ffe);
   7665		ocp_reg_write(tp, 0xb87e, 0x0907);
   7666		ocp_reg_write(tp, 0xb87c, 0x80d6);
   7667		ocp_reg_write(tp, 0xb87e, 0x2801);
   7668		ocp_reg_write(tp, 0xb87c, 0x80f2);
   7669		ocp_reg_write(tp, 0xb87e, 0x2801);
   7670		ocp_reg_write(tp, 0xb87c, 0x80f4);
   7671		ocp_reg_write(tp, 0xb87e, 0x6077);
   7672		ocp_reg_write(tp, 0xb506, 0x01e7);
   7673
   7674		ocp_reg_write(tp, 0xb87c, 0x8013);
   7675		ocp_reg_write(tp, 0xb87e, 0x0700);
   7676		ocp_reg_write(tp, 0xb87c, 0x8fb9);
   7677		ocp_reg_write(tp, 0xb87e, 0x2801);
   7678		ocp_reg_write(tp, 0xb87c, 0x8fba);
   7679		ocp_reg_write(tp, 0xb87e, 0x0100);
   7680		ocp_reg_write(tp, 0xb87c, 0x8fbc);
   7681		ocp_reg_write(tp, 0xb87e, 0x1900);
   7682		ocp_reg_write(tp, 0xb87c, 0x8fbe);
   7683		ocp_reg_write(tp, 0xb87e, 0xe100);
   7684		ocp_reg_write(tp, 0xb87c, 0x8fc0);
   7685		ocp_reg_write(tp, 0xb87e, 0x0800);
   7686		ocp_reg_write(tp, 0xb87c, 0x8fc2);
   7687		ocp_reg_write(tp, 0xb87e, 0xe500);
   7688		ocp_reg_write(tp, 0xb87c, 0x8fc4);
   7689		ocp_reg_write(tp, 0xb87e, 0x0f00);
   7690		ocp_reg_write(tp, 0xb87c, 0x8fc6);
   7691		ocp_reg_write(tp, 0xb87e, 0xf100);
   7692		ocp_reg_write(tp, 0xb87c, 0x8fc8);
   7693		ocp_reg_write(tp, 0xb87e, 0x0400);
   7694		ocp_reg_write(tp, 0xb87c, 0x8fca);
   7695		ocp_reg_write(tp, 0xb87e, 0xf300);
   7696		ocp_reg_write(tp, 0xb87c, 0x8fcc);
   7697		ocp_reg_write(tp, 0xb87e, 0xfd00);
   7698		ocp_reg_write(tp, 0xb87c, 0x8fce);
   7699		ocp_reg_write(tp, 0xb87e, 0xff00);
   7700		ocp_reg_write(tp, 0xb87c, 0x8fd0);
   7701		ocp_reg_write(tp, 0xb87e, 0xfb00);
   7702		ocp_reg_write(tp, 0xb87c, 0x8fd2);
   7703		ocp_reg_write(tp, 0xb87e, 0x0100);
   7704		ocp_reg_write(tp, 0xb87c, 0x8fd4);
   7705		ocp_reg_write(tp, 0xb87e, 0xf400);
   7706		ocp_reg_write(tp, 0xb87c, 0x8fd6);
   7707		ocp_reg_write(tp, 0xb87e, 0xff00);
   7708		ocp_reg_write(tp, 0xb87c, 0x8fd8);
   7709		ocp_reg_write(tp, 0xb87e, 0xf600);
   7710
   7711		ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_USB_CFG);
   7712		ocp_data |= EN_XG_LIP | EN_G_LIP;
   7713		ocp_write_byte(tp, MCU_TYPE_PLA, PLA_USB_CFG, ocp_data);
   7714		ocp_reg_write(tp, 0xb87c, 0x813d);
   7715		ocp_reg_write(tp, 0xb87e, 0x390e);
   7716		ocp_reg_write(tp, 0xb87c, 0x814f);
   7717		ocp_reg_write(tp, 0xb87e, 0x790e);
   7718		ocp_reg_write(tp, 0xb87c, 0x80b0);
   7719		ocp_reg_write(tp, 0xb87e, 0x0f31);
   7720		data = ocp_reg_read(tp, 0xbf4c);
   7721		data |= BIT(1);
   7722		ocp_reg_write(tp, 0xbf4c, data);
   7723		data = ocp_reg_read(tp, 0xbcca);
   7724		data |= BIT(9) | BIT(8);
   7725		ocp_reg_write(tp, 0xbcca, data);
   7726		ocp_reg_write(tp, 0xb87c, 0x8141);
   7727		ocp_reg_write(tp, 0xb87e, 0x320e);
   7728		ocp_reg_write(tp, 0xb87c, 0x8153);
   7729		ocp_reg_write(tp, 0xb87e, 0x720e);
   7730		ocp_reg_write(tp, 0xb87c, 0x8529);
   7731		ocp_reg_write(tp, 0xb87e, 0x050e);
   7732		data = ocp_reg_read(tp, OCP_EEE_CFG);
   7733		data &= ~CTAP_SHORT_EN;
   7734		ocp_reg_write(tp, OCP_EEE_CFG, data);
   7735
   7736		sram_write(tp, 0x816c, 0xc4a0);
   7737		sram_write(tp, 0x8170, 0xc4a0);
   7738		sram_write(tp, 0x8174, 0x04a0);
   7739		sram_write(tp, 0x8178, 0x04a0);
   7740		sram_write(tp, 0x817c, 0x0719);
   7741		sram_write(tp, 0x8ff4, 0x0400);
   7742		sram_write(tp, 0x8ff1, 0x0404);
   7743
   7744		ocp_reg_write(tp, 0xbf4a, 0x001b);
   7745		ocp_reg_write(tp, 0xb87c, 0x8033);
   7746		ocp_reg_write(tp, 0xb87e, 0x7c13);
   7747		ocp_reg_write(tp, 0xb87c, 0x8037);
   7748		ocp_reg_write(tp, 0xb87e, 0x7c13);
   7749		ocp_reg_write(tp, 0xb87c, 0x803b);
   7750		ocp_reg_write(tp, 0xb87e, 0xfc32);
   7751		ocp_reg_write(tp, 0xb87c, 0x803f);
   7752		ocp_reg_write(tp, 0xb87e, 0x7c13);
   7753		ocp_reg_write(tp, 0xb87c, 0x8043);
   7754		ocp_reg_write(tp, 0xb87e, 0x7c13);
   7755		ocp_reg_write(tp, 0xb87c, 0x8047);
   7756		ocp_reg_write(tp, 0xb87e, 0x7c13);
   7757
   7758		ocp_reg_write(tp, 0xb87c, 0x8145);
   7759		ocp_reg_write(tp, 0xb87e, 0x370e);
   7760		ocp_reg_write(tp, 0xb87c, 0x8157);
   7761		ocp_reg_write(tp, 0xb87e, 0x770e);
   7762		ocp_reg_write(tp, 0xb87c, 0x8169);
   7763		ocp_reg_write(tp, 0xb87e, 0x0d0a);
   7764		ocp_reg_write(tp, 0xb87c, 0x817b);
   7765		ocp_reg_write(tp, 0xb87e, 0x1d0a);
   7766
   7767		data = sram_read(tp, 0x8217);
   7768		data &= ~0xff00;
   7769		data |= 0x5000;
   7770		sram_write(tp, 0x8217, data);
   7771		data = sram_read(tp, 0x821a);
   7772		data &= ~0xff00;
   7773		data |= 0x5000;
   7774		sram_write(tp, 0x821a, data);
   7775		sram_write(tp, 0x80da, 0x0403);
   7776		data = sram_read(tp, 0x80dc);
   7777		data &= ~0xff00;
   7778		data |= 0x1000;
   7779		sram_write(tp, 0x80dc, data);
   7780		sram_write(tp, 0x80b3, 0x0384);
   7781		sram_write(tp, 0x80b7, 0x2007);
   7782		data = sram_read(tp, 0x80ba);
   7783		data &= ~0xff00;
   7784		data |= 0x6c00;
   7785		sram_write(tp, 0x80ba, data);
   7786		sram_write(tp, 0x80b5, 0xf009);
   7787		data = sram_read(tp, 0x80bd);
   7788		data &= ~0xff00;
   7789		data |= 0x9f00;
   7790		sram_write(tp, 0x80bd, data);
   7791		sram_write(tp, 0x80c7, 0xf083);
   7792		sram_write(tp, 0x80dd, 0x03f0);
   7793		data = sram_read(tp, 0x80df);
   7794		data &= ~0xff00;
   7795		data |= 0x1000;
   7796		sram_write(tp, 0x80df, data);
   7797		sram_write(tp, 0x80cb, 0x2007);
   7798		data = sram_read(tp, 0x80ce);
   7799		data &= ~0xff00;
   7800		data |= 0x6c00;
   7801		sram_write(tp, 0x80ce, data);
   7802		sram_write(tp, 0x80c9, 0x8009);
   7803		data = sram_read(tp, 0x80d1);
   7804		data &= ~0xff00;
   7805		data |= 0x8000;
   7806		sram_write(tp, 0x80d1, data);
   7807		sram_write(tp, 0x80a3, 0x200a);
   7808		sram_write(tp, 0x80a5, 0xf0ad);
   7809		sram_write(tp, 0x809f, 0x6073);
   7810		sram_write(tp, 0x80a1, 0x000b);
   7811		data = sram_read(tp, 0x80a9);
   7812		data &= ~0xff00;
   7813		data |= 0xc000;
   7814		sram_write(tp, 0x80a9, data);
   7815
   7816		if (rtl_phy_patch_request(tp, true, true))
   7817			return;
   7818
   7819		data = ocp_reg_read(tp, 0xb896);
   7820		data &= ~BIT(0);
   7821		ocp_reg_write(tp, 0xb896, data);
   7822		data = ocp_reg_read(tp, 0xb892);
   7823		data &= ~0xff00;
   7824		ocp_reg_write(tp, 0xb892, data);
   7825		ocp_reg_write(tp, 0xb88e, 0xc23e);
   7826		ocp_reg_write(tp, 0xb890, 0x0000);
   7827		ocp_reg_write(tp, 0xb88e, 0xc240);
   7828		ocp_reg_write(tp, 0xb890, 0x0103);
   7829		ocp_reg_write(tp, 0xb88e, 0xc242);
   7830		ocp_reg_write(tp, 0xb890, 0x0507);
   7831		ocp_reg_write(tp, 0xb88e, 0xc244);
   7832		ocp_reg_write(tp, 0xb890, 0x090b);
   7833		ocp_reg_write(tp, 0xb88e, 0xc246);
   7834		ocp_reg_write(tp, 0xb890, 0x0c0e);
   7835		ocp_reg_write(tp, 0xb88e, 0xc248);
   7836		ocp_reg_write(tp, 0xb890, 0x1012);
   7837		ocp_reg_write(tp, 0xb88e, 0xc24a);
   7838		ocp_reg_write(tp, 0xb890, 0x1416);
   7839		data = ocp_reg_read(tp, 0xb896);
   7840		data |= BIT(0);
   7841		ocp_reg_write(tp, 0xb896, data);
   7842
   7843		rtl_phy_patch_request(tp, false, true);
   7844
   7845		data = ocp_reg_read(tp, 0xa86a);
   7846		data |= BIT(0);
   7847		ocp_reg_write(tp, 0xa86a, data);
   7848		data = ocp_reg_read(tp, 0xa6f0);
   7849		data |= BIT(0);
   7850		ocp_reg_write(tp, 0xa6f0, data);
   7851
   7852		ocp_reg_write(tp, 0xbfa0, 0xd70d);
   7853		ocp_reg_write(tp, 0xbfa2, 0x4100);
   7854		ocp_reg_write(tp, 0xbfa4, 0xe868);
   7855		ocp_reg_write(tp, 0xbfa6, 0xdc59);
   7856		ocp_reg_write(tp, 0xb54c, 0x3c18);
   7857		data = ocp_reg_read(tp, 0xbfa4);
   7858		data &= ~BIT(5);
   7859		ocp_reg_write(tp, 0xbfa4, data);
   7860		data = sram_read(tp, 0x817d);
   7861		data |= BIT(12);
   7862		sram_write(tp, 0x817d, data);
   7863		break;
   7864	case RTL_VER_13:
   7865		/* 2.5G INRX */
   7866		data = ocp_reg_read(tp, 0xac46);
   7867		data &= ~0x00f0;
   7868		data |= 0x0090;
   7869		ocp_reg_write(tp, 0xac46, data);
   7870		data = ocp_reg_read(tp, 0xad30);
   7871		data &= ~0x0003;
   7872		data |= 0x0001;
   7873		ocp_reg_write(tp, 0xad30, data);
   7874		fallthrough;
   7875	case RTL_VER_15:
   7876		/* EEE parameter */
   7877		ocp_reg_write(tp, 0xb87c, 0x80f5);
   7878		ocp_reg_write(tp, 0xb87e, 0x760e);
   7879		ocp_reg_write(tp, 0xb87c, 0x8107);
   7880		ocp_reg_write(tp, 0xb87e, 0x360e);
   7881		ocp_reg_write(tp, 0xb87c, 0x8551);
   7882		data = ocp_reg_read(tp, 0xb87e);
   7883		data &= ~0xff00;
   7884		data |= 0x0800;
   7885		ocp_reg_write(tp, 0xb87e, data);
   7886
   7887		/* ADC_PGA parameter */
   7888		data = ocp_reg_read(tp, 0xbf00);
   7889		data &= ~0xe000;
   7890		data |= 0xa000;
   7891		ocp_reg_write(tp, 0xbf00, data);
   7892		data = ocp_reg_read(tp, 0xbf46);
   7893		data &= ~0x0f00;
   7894		data |= 0x0300;
   7895		ocp_reg_write(tp, 0xbf46, data);
   7896
   7897		/* Green Table-PGA, 1G full viterbi */
   7898		sram_write(tp, 0x8044, 0x2417);
   7899		sram_write(tp, 0x804a, 0x2417);
   7900		sram_write(tp, 0x8050, 0x2417);
   7901		sram_write(tp, 0x8056, 0x2417);
   7902		sram_write(tp, 0x805c, 0x2417);
   7903		sram_write(tp, 0x8062, 0x2417);
   7904		sram_write(tp, 0x8068, 0x2417);
   7905		sram_write(tp, 0x806e, 0x2417);
   7906		sram_write(tp, 0x8074, 0x2417);
   7907		sram_write(tp, 0x807a, 0x2417);
   7908
   7909		/* XG PLL */
   7910		data = ocp_reg_read(tp, 0xbf84);
   7911		data &= ~0xe000;
   7912		data |= 0xa000;
   7913		ocp_reg_write(tp, 0xbf84, data);
   7914		break;
   7915	default:
   7916		break;
   7917	}
   7918
   7919	if (rtl_phy_patch_request(tp, true, true))
   7920		return;
   7921
   7922	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4);
   7923	ocp_data |= EEE_SPDWN_EN;
   7924	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, ocp_data);
   7925
   7926	data = ocp_reg_read(tp, OCP_DOWN_SPEED);
   7927	data &= ~(EN_EEE_100 | EN_EEE_1000);
   7928	data |= EN_10M_CLKDIV;
   7929	ocp_reg_write(tp, OCP_DOWN_SPEED, data);
   7930	tp->ups_info._10m_ckdiv = true;
   7931	tp->ups_info.eee_plloff_100 = false;
   7932	tp->ups_info.eee_plloff_giga = false;
   7933
   7934	data = ocp_reg_read(tp, OCP_POWER_CFG);
   7935	data &= ~EEE_CLKDIV_EN;
   7936	ocp_reg_write(tp, OCP_POWER_CFG, data);
   7937	tp->ups_info.eee_ckdiv = false;
   7938
   7939	rtl_phy_patch_request(tp, false, true);
   7940
   7941	rtl_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
   7942
   7943	data = ocp_reg_read(tp, 0xa428);
   7944	data &= ~BIT(9);
   7945	ocp_reg_write(tp, 0xa428, data);
   7946	data = ocp_reg_read(tp, 0xa5ea);
   7947	data &= ~BIT(0);
   7948	ocp_reg_write(tp, 0xa5ea, data);
   7949	tp->ups_info.lite_mode = 0;
   7950
   7951	if (tp->eee_en)
   7952		rtl_eee_enable(tp, true);
   7953
   7954	r8153_aldps_en(tp, true);
   7955	r8152b_enable_fc(tp);
   7956	r8153_u2p3en(tp, true);
   7957
   7958	set_bit(PHY_RESET, &tp->flags);
   7959}
   7960
   7961static void r8156_init(struct r8152 *tp)
   7962{
   7963	u32 ocp_data;
   7964	u16 data;
   7965	int i;
   7966
   7967	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   7968		return;
   7969
   7970	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_ECM_OP);
   7971	ocp_data &= ~EN_ALL_SPEED;
   7972	ocp_write_byte(tp, MCU_TYPE_USB, USB_ECM_OP, ocp_data);
   7973
   7974	ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0);
   7975
   7976	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_ECM_OPTION);
   7977	ocp_data |= BYPASS_MAC_RESET;
   7978	ocp_write_word(tp, MCU_TYPE_USB, USB_ECM_OPTION, ocp_data);
   7979
   7980	r8153b_u1u2en(tp, false);
   7981
   7982	for (i = 0; i < 500; i++) {
   7983		if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
   7984		    AUTOLOAD_DONE)
   7985			break;
   7986
   7987		msleep(20);
   7988		if (test_bit(RTL8152_UNPLUG, &tp->flags))
   7989			return;
   7990	}
   7991
   7992	data = r8153_phy_status(tp, 0);
   7993	if (data == PHY_STAT_EXT_INIT) {
   7994		data = ocp_reg_read(tp, 0xa468);
   7995		data &= ~(BIT(3) | BIT(1));
   7996		ocp_reg_write(tp, 0xa468, data);
   7997	}
   7998
   7999	data = r8152_mdio_read(tp, MII_BMCR);
   8000	if (data & BMCR_PDOWN) {
   8001		data &= ~BMCR_PDOWN;
   8002		r8152_mdio_write(tp, MII_BMCR, data);
   8003	}
   8004
   8005	data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
   8006	WARN_ON_ONCE(data != PHY_STAT_LAN_ON);
   8007
   8008	r8153_u2p3en(tp, false);
   8009
   8010	/* MSC timer = 0xfff * 8ms = 32760 ms */
   8011	ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
   8012
   8013	/* U1/U2/L1 idle timer. 500 us */
   8014	ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500);
   8015
   8016	r8153b_power_cut_en(tp, false);
   8017	r8156_ups_en(tp, false);
   8018	r8153_queue_wake(tp, false);
   8019	rtl_runtime_suspend_enable(tp, false);
   8020
   8021	if (tp->udev->speed >= USB_SPEED_SUPER)
   8022		r8153b_u1u2en(tp, true);
   8023
   8024	usb_enable_lpm(tp->udev);
   8025
   8026	r8156_mac_clk_spd(tp, true);
   8027
   8028	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   8029	ocp_data &= ~PLA_MCU_SPDWN_EN;
   8030	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   8031
   8032	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
   8033	if (rtl8152_get_speed(tp) & LINK_STATUS)
   8034		ocp_data |= CUR_LINK_OK;
   8035	else
   8036		ocp_data &= ~CUR_LINK_OK;
   8037	ocp_data |= POLL_LINK_CHG;
   8038	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
   8039
   8040	set_bit(GREEN_ETHERNET, &tp->flags);
   8041
   8042	/* rx aggregation */
   8043	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   8044	ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
   8045	ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   8046
   8047	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_CONFIG);
   8048	ocp_data |= ACT_ODMA;
   8049	ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_CONFIG, ocp_data);
   8050
   8051	r8156_mdio_force_mode(tp);
   8052	rtl_tally_reset(tp);
   8053
   8054	tp->coalesce = 15000;	/* 15 us */
   8055}
   8056
   8057static void r8156b_init(struct r8152 *tp)
   8058{
   8059	u32 ocp_data;
   8060	u16 data;
   8061	int i;
   8062
   8063	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   8064		return;
   8065
   8066	ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_ECM_OP);
   8067	ocp_data &= ~EN_ALL_SPEED;
   8068	ocp_write_byte(tp, MCU_TYPE_USB, USB_ECM_OP, ocp_data);
   8069
   8070	ocp_write_word(tp, MCU_TYPE_USB, USB_SPEED_OPTION, 0);
   8071
   8072	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_ECM_OPTION);
   8073	ocp_data |= BYPASS_MAC_RESET;
   8074	ocp_write_word(tp, MCU_TYPE_USB, USB_ECM_OPTION, ocp_data);
   8075
   8076	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL);
   8077	ocp_data |= RX_DETECT8;
   8078	ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data);
   8079
   8080	r8153b_u1u2en(tp, false);
   8081
   8082	switch (tp->version) {
   8083	case RTL_VER_13:
   8084	case RTL_VER_15:
   8085		r8156b_wait_loading_flash(tp);
   8086		break;
   8087	default:
   8088		break;
   8089	}
   8090
   8091	for (i = 0; i < 500; i++) {
   8092		if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
   8093		    AUTOLOAD_DONE)
   8094			break;
   8095
   8096		msleep(20);
   8097		if (test_bit(RTL8152_UNPLUG, &tp->flags))
   8098			return;
   8099	}
   8100
   8101	data = r8153_phy_status(tp, 0);
   8102	if (data == PHY_STAT_EXT_INIT) {
   8103		data = ocp_reg_read(tp, 0xa468);
   8104		data &= ~(BIT(3) | BIT(1));
   8105		ocp_reg_write(tp, 0xa468, data);
   8106
   8107		data = ocp_reg_read(tp, 0xa466);
   8108		data &= ~BIT(0);
   8109		ocp_reg_write(tp, 0xa466, data);
   8110	}
   8111
   8112	data = r8152_mdio_read(tp, MII_BMCR);
   8113	if (data & BMCR_PDOWN) {
   8114		data &= ~BMCR_PDOWN;
   8115		r8152_mdio_write(tp, MII_BMCR, data);
   8116	}
   8117
   8118	data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
   8119
   8120	r8153_u2p3en(tp, false);
   8121
   8122	/* MSC timer = 0xfff * 8ms = 32760 ms */
   8123	ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
   8124
   8125	/* U1/U2/L1 idle timer. 500 us */
   8126	ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500);
   8127
   8128	r8153b_power_cut_en(tp, false);
   8129	r8156_ups_en(tp, false);
   8130	r8153_queue_wake(tp, false);
   8131	rtl_runtime_suspend_enable(tp, false);
   8132
   8133	if (tp->udev->speed >= USB_SPEED_SUPER)
   8134		r8153b_u1u2en(tp, true);
   8135
   8136	usb_enable_lpm(tp->udev);
   8137
   8138	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RCR);
   8139	ocp_data &= ~SLOT_EN;
   8140	ocp_write_word(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   8141
   8142	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR);
   8143	ocp_data |= FLOW_CTRL_EN;
   8144	ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data);
   8145
   8146	/* enable fc timer and set timer to 600 ms. */
   8147	ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER,
   8148		       CTRL_TIMER_EN | (600 / 8));
   8149
   8150	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL);
   8151	if (!(ocp_read_word(tp, MCU_TYPE_PLA, PLA_POL_GPIO_CTRL) & DACK_DET_EN))
   8152		ocp_data |= FLOW_CTRL_PATCH_2;
   8153	ocp_data &= ~AUTO_SPEEDUP;
   8154	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data);
   8155
   8156	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
   8157	ocp_data |= FC_PATCH_TASK;
   8158	ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
   8159
   8160	r8156_mac_clk_spd(tp, true);
   8161
   8162	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
   8163	ocp_data &= ~PLA_MCU_SPDWN_EN;
   8164	ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
   8165
   8166	ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
   8167	if (rtl8152_get_speed(tp) & LINK_STATUS)
   8168		ocp_data |= CUR_LINK_OK;
   8169	else
   8170		ocp_data &= ~CUR_LINK_OK;
   8171	ocp_data |= POLL_LINK_CHG;
   8172	ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
   8173
   8174	set_bit(GREEN_ETHERNET, &tp->flags);
   8175
   8176	/* rx aggregation */
   8177	ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
   8178	ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
   8179	ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
   8180
   8181	r8156_mdio_force_mode(tp);
   8182	rtl_tally_reset(tp);
   8183
   8184	tp->coalesce = 15000;	/* 15 us */
   8185}
   8186
   8187static bool rtl_check_vendor_ok(struct usb_interface *intf)
   8188{
   8189	struct usb_host_interface *alt = intf->cur_altsetting;
   8190	struct usb_endpoint_descriptor *in, *out, *intr;
   8191
   8192	if (usb_find_common_endpoints(alt, &in, &out, &intr, NULL) < 0) {
   8193		dev_err(&intf->dev, "Expected endpoints are not found\n");
   8194		return false;
   8195	}
   8196
   8197	/* Check Rx endpoint address */
   8198	if (usb_endpoint_num(in) != 1) {
   8199		dev_err(&intf->dev, "Invalid Rx endpoint address\n");
   8200		return false;
   8201	}
   8202
   8203	/* Check Tx endpoint address */
   8204	if (usb_endpoint_num(out) != 2) {
   8205		dev_err(&intf->dev, "Invalid Tx endpoint address\n");
   8206		return false;
   8207	}
   8208
   8209	/* Check interrupt endpoint address */
   8210	if (usb_endpoint_num(intr) != 3) {
   8211		dev_err(&intf->dev, "Invalid interrupt endpoint address\n");
   8212		return false;
   8213	}
   8214
   8215	return true;
   8216}
   8217
   8218static bool rtl_vendor_mode(struct usb_interface *intf)
   8219{
   8220	struct usb_host_interface *alt = intf->cur_altsetting;
   8221	struct usb_device *udev;
   8222	struct usb_host_config *c;
   8223	int i, num_configs;
   8224
   8225	if (alt->desc.bInterfaceClass == USB_CLASS_VENDOR_SPEC)
   8226		return rtl_check_vendor_ok(intf);
   8227
   8228	/* The vendor mode is not always config #1, so to find it out. */
   8229	udev = interface_to_usbdev(intf);
   8230	c = udev->config;
   8231	num_configs = udev->descriptor.bNumConfigurations;
   8232	if (num_configs < 2)
   8233		return false;
   8234
   8235	for (i = 0; i < num_configs; (i++, c++)) {
   8236		struct usb_interface_descriptor	*desc = NULL;
   8237
   8238		if (c->desc.bNumInterfaces > 0)
   8239			desc = &c->intf_cache[0]->altsetting->desc;
   8240		else
   8241			continue;
   8242
   8243		if (desc->bInterfaceClass == USB_CLASS_VENDOR_SPEC) {
   8244			usb_driver_set_configuration(udev, c->desc.bConfigurationValue);
   8245			break;
   8246		}
   8247	}
   8248
   8249	if (i == num_configs)
   8250		dev_err(&intf->dev, "Unexpected Device\n");
   8251
   8252	return false;
   8253}
   8254
   8255static int rtl8152_pre_reset(struct usb_interface *intf)
   8256{
   8257	struct r8152 *tp = usb_get_intfdata(intf);
   8258	struct net_device *netdev;
   8259
   8260	if (!tp)
   8261		return 0;
   8262
   8263	netdev = tp->netdev;
   8264	if (!netif_running(netdev))
   8265		return 0;
   8266
   8267	netif_stop_queue(netdev);
   8268	tasklet_disable(&tp->tx_tl);
   8269	clear_bit(WORK_ENABLE, &tp->flags);
   8270	usb_kill_urb(tp->intr_urb);
   8271	cancel_delayed_work_sync(&tp->schedule);
   8272	napi_disable(&tp->napi);
   8273	if (netif_carrier_ok(netdev)) {
   8274		mutex_lock(&tp->control);
   8275		tp->rtl_ops.disable(tp);
   8276		mutex_unlock(&tp->control);
   8277	}
   8278
   8279	return 0;
   8280}
   8281
   8282static int rtl8152_post_reset(struct usb_interface *intf)
   8283{
   8284	struct r8152 *tp = usb_get_intfdata(intf);
   8285	struct net_device *netdev;
   8286	struct sockaddr sa;
   8287
   8288	if (!tp)
   8289		return 0;
   8290
   8291	/* reset the MAC address in case of policy change */
   8292	if (determine_ethernet_addr(tp, &sa) >= 0) {
   8293		rtnl_lock();
   8294		dev_set_mac_address (tp->netdev, &sa, NULL);
   8295		rtnl_unlock();
   8296	}
   8297
   8298	netdev = tp->netdev;
   8299	if (!netif_running(netdev))
   8300		return 0;
   8301
   8302	set_bit(WORK_ENABLE, &tp->flags);
   8303	if (netif_carrier_ok(netdev)) {
   8304		mutex_lock(&tp->control);
   8305		tp->rtl_ops.enable(tp);
   8306		rtl_start_rx(tp);
   8307		_rtl8152_set_rx_mode(netdev);
   8308		mutex_unlock(&tp->control);
   8309	}
   8310
   8311	napi_enable(&tp->napi);
   8312	tasklet_enable(&tp->tx_tl);
   8313	netif_wake_queue(netdev);
   8314	usb_submit_urb(tp->intr_urb, GFP_KERNEL);
   8315
   8316	if (!list_empty(&tp->rx_done))
   8317		napi_schedule(&tp->napi);
   8318
   8319	return 0;
   8320}
   8321
   8322static bool delay_autosuspend(struct r8152 *tp)
   8323{
   8324	bool sw_linking = !!netif_carrier_ok(tp->netdev);
   8325	bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS);
   8326
   8327	/* This means a linking change occurs and the driver doesn't detect it,
   8328	 * yet. If the driver has disabled tx/rx and hw is linking on, the
   8329	 * device wouldn't wake up by receiving any packet.
   8330	 */
   8331	if (work_busy(&tp->schedule.work) || sw_linking != hw_linking)
   8332		return true;
   8333
   8334	/* If the linking down is occurred by nway, the device may miss the
   8335	 * linking change event. And it wouldn't wake when linking on.
   8336	 */
   8337	if (!sw_linking && tp->rtl_ops.in_nway(tp))
   8338		return true;
   8339	else if (!skb_queue_empty(&tp->tx_queue))
   8340		return true;
   8341	else
   8342		return false;
   8343}
   8344
   8345static int rtl8152_runtime_resume(struct r8152 *tp)
   8346{
   8347	struct net_device *netdev = tp->netdev;
   8348
   8349	if (netif_running(netdev) && netdev->flags & IFF_UP) {
   8350		struct napi_struct *napi = &tp->napi;
   8351
   8352		tp->rtl_ops.autosuspend_en(tp, false);
   8353		napi_disable(napi);
   8354		set_bit(WORK_ENABLE, &tp->flags);
   8355
   8356		if (netif_carrier_ok(netdev)) {
   8357			if (rtl8152_get_speed(tp) & LINK_STATUS) {
   8358				rtl_start_rx(tp);
   8359			} else {
   8360				netif_carrier_off(netdev);
   8361				tp->rtl_ops.disable(tp);
   8362				netif_info(tp, link, netdev, "linking down\n");
   8363			}
   8364		}
   8365
   8366		napi_enable(napi);
   8367		clear_bit(SELECTIVE_SUSPEND, &tp->flags);
   8368		smp_mb__after_atomic();
   8369
   8370		if (!list_empty(&tp->rx_done))
   8371			napi_schedule(&tp->napi);
   8372
   8373		usb_submit_urb(tp->intr_urb, GFP_NOIO);
   8374	} else {
   8375		if (netdev->flags & IFF_UP)
   8376			tp->rtl_ops.autosuspend_en(tp, false);
   8377
   8378		clear_bit(SELECTIVE_SUSPEND, &tp->flags);
   8379	}
   8380
   8381	return 0;
   8382}
   8383
   8384static int rtl8152_system_resume(struct r8152 *tp)
   8385{
   8386	struct net_device *netdev = tp->netdev;
   8387
   8388	netif_device_attach(netdev);
   8389
   8390	if (netif_running(netdev) && (netdev->flags & IFF_UP)) {
   8391		tp->rtl_ops.up(tp);
   8392		netif_carrier_off(netdev);
   8393		set_bit(WORK_ENABLE, &tp->flags);
   8394		usb_submit_urb(tp->intr_urb, GFP_NOIO);
   8395	}
   8396
   8397	return 0;
   8398}
   8399
   8400static int rtl8152_runtime_suspend(struct r8152 *tp)
   8401{
   8402	struct net_device *netdev = tp->netdev;
   8403	int ret = 0;
   8404
   8405	if (!tp->rtl_ops.autosuspend_en)
   8406		return -EBUSY;
   8407
   8408	set_bit(SELECTIVE_SUSPEND, &tp->flags);
   8409	smp_mb__after_atomic();
   8410
   8411	if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) {
   8412		u32 rcr = 0;
   8413
   8414		if (netif_carrier_ok(netdev)) {
   8415			u32 ocp_data;
   8416
   8417			rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
   8418			ocp_data = rcr & ~RCR_ACPT_ALL;
   8419			ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
   8420			rxdy_gated_en(tp, true);
   8421			ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA,
   8422						 PLA_OOB_CTRL);
   8423			if (!(ocp_data & RXFIFO_EMPTY)) {
   8424				rxdy_gated_en(tp, false);
   8425				ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr);
   8426				clear_bit(SELECTIVE_SUSPEND, &tp->flags);
   8427				smp_mb__after_atomic();
   8428				ret = -EBUSY;
   8429				goto out1;
   8430			}
   8431		}
   8432
   8433		clear_bit(WORK_ENABLE, &tp->flags);
   8434		usb_kill_urb(tp->intr_urb);
   8435
   8436		tp->rtl_ops.autosuspend_en(tp, true);
   8437
   8438		if (netif_carrier_ok(netdev)) {
   8439			struct napi_struct *napi = &tp->napi;
   8440
   8441			napi_disable(napi);
   8442			rtl_stop_rx(tp);
   8443			rxdy_gated_en(tp, false);
   8444			ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr);
   8445			napi_enable(napi);
   8446		}
   8447
   8448		if (delay_autosuspend(tp)) {
   8449			rtl8152_runtime_resume(tp);
   8450			ret = -EBUSY;
   8451		}
   8452	}
   8453
   8454out1:
   8455	return ret;
   8456}
   8457
   8458static int rtl8152_system_suspend(struct r8152 *tp)
   8459{
   8460	struct net_device *netdev = tp->netdev;
   8461
   8462	netif_device_detach(netdev);
   8463
   8464	if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) {
   8465		struct napi_struct *napi = &tp->napi;
   8466
   8467		clear_bit(WORK_ENABLE, &tp->flags);
   8468		usb_kill_urb(tp->intr_urb);
   8469		tasklet_disable(&tp->tx_tl);
   8470		napi_disable(napi);
   8471		cancel_delayed_work_sync(&tp->schedule);
   8472		tp->rtl_ops.down(tp);
   8473		napi_enable(napi);
   8474		tasklet_enable(&tp->tx_tl);
   8475	}
   8476
   8477	return 0;
   8478}
   8479
   8480static int rtl8152_suspend(struct usb_interface *intf, pm_message_t message)
   8481{
   8482	struct r8152 *tp = usb_get_intfdata(intf);
   8483	int ret;
   8484
   8485	mutex_lock(&tp->control);
   8486
   8487	if (PMSG_IS_AUTO(message))
   8488		ret = rtl8152_runtime_suspend(tp);
   8489	else
   8490		ret = rtl8152_system_suspend(tp);
   8491
   8492	mutex_unlock(&tp->control);
   8493
   8494	return ret;
   8495}
   8496
   8497static int rtl8152_resume(struct usb_interface *intf)
   8498{
   8499	struct r8152 *tp = usb_get_intfdata(intf);
   8500	int ret;
   8501
   8502	mutex_lock(&tp->control);
   8503
   8504	rtl_reset_ocp_base(tp);
   8505
   8506	if (test_bit(SELECTIVE_SUSPEND, &tp->flags))
   8507		ret = rtl8152_runtime_resume(tp);
   8508	else
   8509		ret = rtl8152_system_resume(tp);
   8510
   8511	mutex_unlock(&tp->control);
   8512
   8513	return ret;
   8514}
   8515
   8516static int rtl8152_reset_resume(struct usb_interface *intf)
   8517{
   8518	struct r8152 *tp = usb_get_intfdata(intf);
   8519
   8520	clear_bit(SELECTIVE_SUSPEND, &tp->flags);
   8521	rtl_reset_ocp_base(tp);
   8522	tp->rtl_ops.init(tp);
   8523	queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0);
   8524	set_ethernet_addr(tp, true);
   8525	return rtl8152_resume(intf);
   8526}
   8527
   8528static void rtl8152_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
   8529{
   8530	struct r8152 *tp = netdev_priv(dev);
   8531
   8532	if (usb_autopm_get_interface(tp->intf) < 0)
   8533		return;
   8534
   8535	if (!rtl_can_wakeup(tp)) {
   8536		wol->supported = 0;
   8537		wol->wolopts = 0;
   8538	} else {
   8539		mutex_lock(&tp->control);
   8540		wol->supported = WAKE_ANY;
   8541		wol->wolopts = __rtl_get_wol(tp);
   8542		mutex_unlock(&tp->control);
   8543	}
   8544
   8545	usb_autopm_put_interface(tp->intf);
   8546}
   8547
   8548static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
   8549{
   8550	struct r8152 *tp = netdev_priv(dev);
   8551	int ret;
   8552
   8553	if (!rtl_can_wakeup(tp))
   8554		return -EOPNOTSUPP;
   8555
   8556	if (wol->wolopts & ~WAKE_ANY)
   8557		return -EINVAL;
   8558
   8559	ret = usb_autopm_get_interface(tp->intf);
   8560	if (ret < 0)
   8561		goto out_set_wol;
   8562
   8563	mutex_lock(&tp->control);
   8564
   8565	__rtl_set_wol(tp, wol->wolopts);
   8566	tp->saved_wolopts = wol->wolopts & WAKE_ANY;
   8567
   8568	mutex_unlock(&tp->control);
   8569
   8570	usb_autopm_put_interface(tp->intf);
   8571
   8572out_set_wol:
   8573	return ret;
   8574}
   8575
   8576static u32 rtl8152_get_msglevel(struct net_device *dev)
   8577{
   8578	struct r8152 *tp = netdev_priv(dev);
   8579
   8580	return tp->msg_enable;
   8581}
   8582
   8583static void rtl8152_set_msglevel(struct net_device *dev, u32 value)
   8584{
   8585	struct r8152 *tp = netdev_priv(dev);
   8586
   8587	tp->msg_enable = value;
   8588}
   8589
   8590static void rtl8152_get_drvinfo(struct net_device *netdev,
   8591				struct ethtool_drvinfo *info)
   8592{
   8593	struct r8152 *tp = netdev_priv(netdev);
   8594
   8595	strlcpy(info->driver, MODULENAME, sizeof(info->driver));
   8596	strlcpy(info->version, DRIVER_VERSION, sizeof(info->version));
   8597	usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info));
   8598	if (!IS_ERR_OR_NULL(tp->rtl_fw.fw))
   8599		strlcpy(info->fw_version, tp->rtl_fw.version,
   8600			sizeof(info->fw_version));
   8601}
   8602
   8603static
   8604int rtl8152_get_link_ksettings(struct net_device *netdev,
   8605			       struct ethtool_link_ksettings *cmd)
   8606{
   8607	struct r8152 *tp = netdev_priv(netdev);
   8608	int ret;
   8609
   8610	if (!tp->mii.mdio_read)
   8611		return -EOPNOTSUPP;
   8612
   8613	ret = usb_autopm_get_interface(tp->intf);
   8614	if (ret < 0)
   8615		goto out;
   8616
   8617	mutex_lock(&tp->control);
   8618
   8619	mii_ethtool_get_link_ksettings(&tp->mii, cmd);
   8620
   8621	linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
   8622			 cmd->link_modes.supported, tp->support_2500full);
   8623
   8624	if (tp->support_2500full) {
   8625		linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
   8626				 cmd->link_modes.advertising,
   8627				 ocp_reg_read(tp, OCP_10GBT_CTRL) & MDIO_AN_10GBT_CTRL_ADV2_5G);
   8628
   8629		linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
   8630				 cmd->link_modes.lp_advertising,
   8631				 ocp_reg_read(tp, OCP_10GBT_STAT) & MDIO_AN_10GBT_STAT_LP2_5G);
   8632
   8633		if (is_speed_2500(rtl8152_get_speed(tp)))
   8634			cmd->base.speed = SPEED_2500;
   8635	}
   8636
   8637	mutex_unlock(&tp->control);
   8638
   8639	usb_autopm_put_interface(tp->intf);
   8640
   8641out:
   8642	return ret;
   8643}
   8644
   8645static int rtl8152_set_link_ksettings(struct net_device *dev,
   8646				      const struct ethtool_link_ksettings *cmd)
   8647{
   8648	struct r8152 *tp = netdev_priv(dev);
   8649	u32 advertising = 0;
   8650	int ret;
   8651
   8652	ret = usb_autopm_get_interface(tp->intf);
   8653	if (ret < 0)
   8654		goto out;
   8655
   8656	if (test_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
   8657		     cmd->link_modes.advertising))
   8658		advertising |= RTL_ADVERTISED_10_HALF;
   8659
   8660	if (test_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
   8661		     cmd->link_modes.advertising))
   8662		advertising |= RTL_ADVERTISED_10_FULL;
   8663
   8664	if (test_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
   8665		     cmd->link_modes.advertising))
   8666		advertising |= RTL_ADVERTISED_100_HALF;
   8667
   8668	if (test_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
   8669		     cmd->link_modes.advertising))
   8670		advertising |= RTL_ADVERTISED_100_FULL;
   8671
   8672	if (test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
   8673		     cmd->link_modes.advertising))
   8674		advertising |= RTL_ADVERTISED_1000_HALF;
   8675
   8676	if (test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
   8677		     cmd->link_modes.advertising))
   8678		advertising |= RTL_ADVERTISED_1000_FULL;
   8679
   8680	if (test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
   8681		     cmd->link_modes.advertising))
   8682		advertising |= RTL_ADVERTISED_2500_FULL;
   8683
   8684	mutex_lock(&tp->control);
   8685
   8686	ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed,
   8687				cmd->base.duplex, advertising);
   8688	if (!ret) {
   8689		tp->autoneg = cmd->base.autoneg;
   8690		tp->speed = cmd->base.speed;
   8691		tp->duplex = cmd->base.duplex;
   8692		tp->advertising = advertising;
   8693	}
   8694
   8695	mutex_unlock(&tp->control);
   8696
   8697	usb_autopm_put_interface(tp->intf);
   8698
   8699out:
   8700	return ret;
   8701}
   8702
   8703static const char rtl8152_gstrings[][ETH_GSTRING_LEN] = {
   8704	"tx_packets",
   8705	"rx_packets",
   8706	"tx_errors",
   8707	"rx_errors",
   8708	"rx_missed",
   8709	"align_errors",
   8710	"tx_single_collisions",
   8711	"tx_multi_collisions",
   8712	"rx_unicast",
   8713	"rx_broadcast",
   8714	"rx_multicast",
   8715	"tx_aborted",
   8716	"tx_underrun",
   8717};
   8718
   8719static int rtl8152_get_sset_count(struct net_device *dev, int sset)
   8720{
   8721	switch (sset) {
   8722	case ETH_SS_STATS:
   8723		return ARRAY_SIZE(rtl8152_gstrings);
   8724	default:
   8725		return -EOPNOTSUPP;
   8726	}
   8727}
   8728
   8729static void rtl8152_get_ethtool_stats(struct net_device *dev,
   8730				      struct ethtool_stats *stats, u64 *data)
   8731{
   8732	struct r8152 *tp = netdev_priv(dev);
   8733	struct tally_counter tally;
   8734
   8735	if (usb_autopm_get_interface(tp->intf) < 0)
   8736		return;
   8737
   8738	generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA);
   8739
   8740	usb_autopm_put_interface(tp->intf);
   8741
   8742	data[0] = le64_to_cpu(tally.tx_packets);
   8743	data[1] = le64_to_cpu(tally.rx_packets);
   8744	data[2] = le64_to_cpu(tally.tx_errors);
   8745	data[3] = le32_to_cpu(tally.rx_errors);
   8746	data[4] = le16_to_cpu(tally.rx_missed);
   8747	data[5] = le16_to_cpu(tally.align_errors);
   8748	data[6] = le32_to_cpu(tally.tx_one_collision);
   8749	data[7] = le32_to_cpu(tally.tx_multi_collision);
   8750	data[8] = le64_to_cpu(tally.rx_unicast);
   8751	data[9] = le64_to_cpu(tally.rx_broadcast);
   8752	data[10] = le32_to_cpu(tally.rx_multicast);
   8753	data[11] = le16_to_cpu(tally.tx_aborted);
   8754	data[12] = le16_to_cpu(tally.tx_underrun);
   8755}
   8756
   8757static void rtl8152_get_strings(struct net_device *dev, u32 stringset, u8 *data)
   8758{
   8759	switch (stringset) {
   8760	case ETH_SS_STATS:
   8761		memcpy(data, rtl8152_gstrings, sizeof(rtl8152_gstrings));
   8762		break;
   8763	}
   8764}
   8765
   8766static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee)
   8767{
   8768	u32 lp, adv, supported = 0;
   8769	u16 val;
   8770
   8771	val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
   8772	supported = mmd_eee_cap_to_ethtool_sup_t(val);
   8773
   8774	val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV);
   8775	adv = mmd_eee_adv_to_ethtool_adv_t(val);
   8776
   8777	val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE);
   8778	lp = mmd_eee_adv_to_ethtool_adv_t(val);
   8779
   8780	eee->eee_enabled = tp->eee_en;
   8781	eee->eee_active = !!(supported & adv & lp);
   8782	eee->supported = supported;
   8783	eee->advertised = tp->eee_adv;
   8784	eee->lp_advertised = lp;
   8785
   8786	return 0;
   8787}
   8788
   8789static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee)
   8790{
   8791	u16 val = ethtool_adv_to_mmd_eee_adv_t(eee->advertised);
   8792
   8793	tp->eee_en = eee->eee_enabled;
   8794	tp->eee_adv = val;
   8795
   8796	rtl_eee_enable(tp, tp->eee_en);
   8797
   8798	return 0;
   8799}
   8800
   8801static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee)
   8802{
   8803	u32 lp, adv, supported = 0;
   8804	u16 val;
   8805
   8806	val = ocp_reg_read(tp, OCP_EEE_ABLE);
   8807	supported = mmd_eee_cap_to_ethtool_sup_t(val);
   8808
   8809	val = ocp_reg_read(tp, OCP_EEE_ADV);
   8810	adv = mmd_eee_adv_to_ethtool_adv_t(val);
   8811
   8812	val = ocp_reg_read(tp, OCP_EEE_LPABLE);
   8813	lp = mmd_eee_adv_to_ethtool_adv_t(val);
   8814
   8815	eee->eee_enabled = tp->eee_en;
   8816	eee->eee_active = !!(supported & adv & lp);
   8817	eee->supported = supported;
   8818	eee->advertised = tp->eee_adv;
   8819	eee->lp_advertised = lp;
   8820
   8821	return 0;
   8822}
   8823
   8824static int
   8825rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata)
   8826{
   8827	struct r8152 *tp = netdev_priv(net);
   8828	int ret;
   8829
   8830	if (!tp->rtl_ops.eee_get) {
   8831		ret = -EOPNOTSUPP;
   8832		goto out;
   8833	}
   8834
   8835	ret = usb_autopm_get_interface(tp->intf);
   8836	if (ret < 0)
   8837		goto out;
   8838
   8839	mutex_lock(&tp->control);
   8840
   8841	ret = tp->rtl_ops.eee_get(tp, edata);
   8842
   8843	mutex_unlock(&tp->control);
   8844
   8845	usb_autopm_put_interface(tp->intf);
   8846
   8847out:
   8848	return ret;
   8849}
   8850
   8851static int
   8852rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *edata)
   8853{
   8854	struct r8152 *tp = netdev_priv(net);
   8855	int ret;
   8856
   8857	if (!tp->rtl_ops.eee_set) {
   8858		ret = -EOPNOTSUPP;
   8859		goto out;
   8860	}
   8861
   8862	ret = usb_autopm_get_interface(tp->intf);
   8863	if (ret < 0)
   8864		goto out;
   8865
   8866	mutex_lock(&tp->control);
   8867
   8868	ret = tp->rtl_ops.eee_set(tp, edata);
   8869	if (!ret)
   8870		ret = mii_nway_restart(&tp->mii);
   8871
   8872	mutex_unlock(&tp->control);
   8873
   8874	usb_autopm_put_interface(tp->intf);
   8875
   8876out:
   8877	return ret;
   8878}
   8879
   8880static int rtl8152_nway_reset(struct net_device *dev)
   8881{
   8882	struct r8152 *tp = netdev_priv(dev);
   8883	int ret;
   8884
   8885	ret = usb_autopm_get_interface(tp->intf);
   8886	if (ret < 0)
   8887		goto out;
   8888
   8889	mutex_lock(&tp->control);
   8890
   8891	ret = mii_nway_restart(&tp->mii);
   8892
   8893	mutex_unlock(&tp->control);
   8894
   8895	usb_autopm_put_interface(tp->intf);
   8896
   8897out:
   8898	return ret;
   8899}
   8900
   8901static int rtl8152_get_coalesce(struct net_device *netdev,
   8902				struct ethtool_coalesce *coalesce,
   8903				struct kernel_ethtool_coalesce *kernel_coal,
   8904				struct netlink_ext_ack *extack)
   8905{
   8906	struct r8152 *tp = netdev_priv(netdev);
   8907
   8908	switch (tp->version) {
   8909	case RTL_VER_01:
   8910	case RTL_VER_02:
   8911	case RTL_VER_07:
   8912		return -EOPNOTSUPP;
   8913	default:
   8914		break;
   8915	}
   8916
   8917	coalesce->rx_coalesce_usecs = tp->coalesce;
   8918
   8919	return 0;
   8920}
   8921
   8922static int rtl8152_set_coalesce(struct net_device *netdev,
   8923				struct ethtool_coalesce *coalesce,
   8924				struct kernel_ethtool_coalesce *kernel_coal,
   8925				struct netlink_ext_ack *extack)
   8926{
   8927	struct r8152 *tp = netdev_priv(netdev);
   8928	int ret;
   8929
   8930	switch (tp->version) {
   8931	case RTL_VER_01:
   8932	case RTL_VER_02:
   8933	case RTL_VER_07:
   8934		return -EOPNOTSUPP;
   8935	default:
   8936		break;
   8937	}
   8938
   8939	if (coalesce->rx_coalesce_usecs > COALESCE_SLOW)
   8940		return -EINVAL;
   8941
   8942	ret = usb_autopm_get_interface(tp->intf);
   8943	if (ret < 0)
   8944		return ret;
   8945
   8946	mutex_lock(&tp->control);
   8947
   8948	if (tp->coalesce != coalesce->rx_coalesce_usecs) {
   8949		tp->coalesce = coalesce->rx_coalesce_usecs;
   8950
   8951		if (netif_running(netdev) && netif_carrier_ok(netdev)) {
   8952			netif_stop_queue(netdev);
   8953			napi_disable(&tp->napi);
   8954			tp->rtl_ops.disable(tp);
   8955			tp->rtl_ops.enable(tp);
   8956			rtl_start_rx(tp);
   8957			clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
   8958			_rtl8152_set_rx_mode(netdev);
   8959			napi_enable(&tp->napi);
   8960			netif_wake_queue(netdev);
   8961		}
   8962	}
   8963
   8964	mutex_unlock(&tp->control);
   8965
   8966	usb_autopm_put_interface(tp->intf);
   8967
   8968	return ret;
   8969}
   8970
   8971static int rtl8152_get_tunable(struct net_device *netdev,
   8972			       const struct ethtool_tunable *tunable, void *d)
   8973{
   8974	struct r8152 *tp = netdev_priv(netdev);
   8975
   8976	switch (tunable->id) {
   8977	case ETHTOOL_RX_COPYBREAK:
   8978		*(u32 *)d = tp->rx_copybreak;
   8979		break;
   8980	default:
   8981		return -EOPNOTSUPP;
   8982	}
   8983
   8984	return 0;
   8985}
   8986
   8987static int rtl8152_set_tunable(struct net_device *netdev,
   8988			       const struct ethtool_tunable *tunable,
   8989			       const void *d)
   8990{
   8991	struct r8152 *tp = netdev_priv(netdev);
   8992	u32 val;
   8993
   8994	switch (tunable->id) {
   8995	case ETHTOOL_RX_COPYBREAK:
   8996		val = *(u32 *)d;
   8997		if (val < ETH_ZLEN) {
   8998			netif_err(tp, rx_err, netdev,
   8999				  "Invalid rx copy break value\n");
   9000			return -EINVAL;
   9001		}
   9002
   9003		if (tp->rx_copybreak != val) {
   9004			if (netdev->flags & IFF_UP) {
   9005				mutex_lock(&tp->control);
   9006				napi_disable(&tp->napi);
   9007				tp->rx_copybreak = val;
   9008				napi_enable(&tp->napi);
   9009				mutex_unlock(&tp->control);
   9010			} else {
   9011				tp->rx_copybreak = val;
   9012			}
   9013		}
   9014		break;
   9015	default:
   9016		return -EOPNOTSUPP;
   9017	}
   9018
   9019	return 0;
   9020}
   9021
   9022static void rtl8152_get_ringparam(struct net_device *netdev,
   9023				  struct ethtool_ringparam *ring,
   9024				  struct kernel_ethtool_ringparam *kernel_ring,
   9025				  struct netlink_ext_ack *extack)
   9026{
   9027	struct r8152 *tp = netdev_priv(netdev);
   9028
   9029	ring->rx_max_pending = RTL8152_RX_MAX_PENDING;
   9030	ring->rx_pending = tp->rx_pending;
   9031}
   9032
   9033static int rtl8152_set_ringparam(struct net_device *netdev,
   9034				 struct ethtool_ringparam *ring,
   9035				 struct kernel_ethtool_ringparam *kernel_ring,
   9036				 struct netlink_ext_ack *extack)
   9037{
   9038	struct r8152 *tp = netdev_priv(netdev);
   9039
   9040	if (ring->rx_pending < (RTL8152_MAX_RX * 2))
   9041		return -EINVAL;
   9042
   9043	if (tp->rx_pending != ring->rx_pending) {
   9044		if (netdev->flags & IFF_UP) {
   9045			mutex_lock(&tp->control);
   9046			napi_disable(&tp->napi);
   9047			tp->rx_pending = ring->rx_pending;
   9048			napi_enable(&tp->napi);
   9049			mutex_unlock(&tp->control);
   9050		} else {
   9051			tp->rx_pending = ring->rx_pending;
   9052		}
   9053	}
   9054
   9055	return 0;
   9056}
   9057
   9058static void rtl8152_get_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause)
   9059{
   9060	struct r8152 *tp = netdev_priv(netdev);
   9061	u16 bmcr, lcladv, rmtadv;
   9062	u8 cap;
   9063
   9064	if (usb_autopm_get_interface(tp->intf) < 0)
   9065		return;
   9066
   9067	mutex_lock(&tp->control);
   9068
   9069	bmcr = r8152_mdio_read(tp, MII_BMCR);
   9070	lcladv = r8152_mdio_read(tp, MII_ADVERTISE);
   9071	rmtadv = r8152_mdio_read(tp, MII_LPA);
   9072
   9073	mutex_unlock(&tp->control);
   9074
   9075	usb_autopm_put_interface(tp->intf);
   9076
   9077	if (!(bmcr & BMCR_ANENABLE)) {
   9078		pause->autoneg = 0;
   9079		pause->rx_pause = 0;
   9080		pause->tx_pause = 0;
   9081		return;
   9082	}
   9083
   9084	pause->autoneg = 1;
   9085
   9086	cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
   9087
   9088	if (cap & FLOW_CTRL_RX)
   9089		pause->rx_pause = 1;
   9090
   9091	if (cap & FLOW_CTRL_TX)
   9092		pause->tx_pause = 1;
   9093}
   9094
   9095static int rtl8152_set_pauseparam(struct net_device *netdev, struct ethtool_pauseparam *pause)
   9096{
   9097	struct r8152 *tp = netdev_priv(netdev);
   9098	u16 old, new1;
   9099	u8 cap = 0;
   9100	int ret;
   9101
   9102	ret = usb_autopm_get_interface(tp->intf);
   9103	if (ret < 0)
   9104		return ret;
   9105
   9106	mutex_lock(&tp->control);
   9107
   9108	if (pause->autoneg && !(r8152_mdio_read(tp, MII_BMCR) & BMCR_ANENABLE)) {
   9109		ret = -EINVAL;
   9110		goto out;
   9111	}
   9112
   9113	if (pause->rx_pause)
   9114		cap |= FLOW_CTRL_RX;
   9115
   9116	if (pause->tx_pause)
   9117		cap |= FLOW_CTRL_TX;
   9118
   9119	old = r8152_mdio_read(tp, MII_ADVERTISE);
   9120	new1 = (old & ~(ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM)) | mii_advertise_flowctrl(cap);
   9121	if (old != new1)
   9122		r8152_mdio_write(tp, MII_ADVERTISE, new1);
   9123
   9124out:
   9125	mutex_unlock(&tp->control);
   9126	usb_autopm_put_interface(tp->intf);
   9127
   9128	return ret;
   9129}
   9130
   9131static const struct ethtool_ops ops = {
   9132	.supported_coalesce_params = ETHTOOL_COALESCE_USECS,
   9133	.get_drvinfo = rtl8152_get_drvinfo,
   9134	.get_link = ethtool_op_get_link,
   9135	.nway_reset = rtl8152_nway_reset,
   9136	.get_msglevel = rtl8152_get_msglevel,
   9137	.set_msglevel = rtl8152_set_msglevel,
   9138	.get_wol = rtl8152_get_wol,
   9139	.set_wol = rtl8152_set_wol,
   9140	.get_strings = rtl8152_get_strings,
   9141	.get_sset_count = rtl8152_get_sset_count,
   9142	.get_ethtool_stats = rtl8152_get_ethtool_stats,
   9143	.get_coalesce = rtl8152_get_coalesce,
   9144	.set_coalesce = rtl8152_set_coalesce,
   9145	.get_eee = rtl_ethtool_get_eee,
   9146	.set_eee = rtl_ethtool_set_eee,
   9147	.get_link_ksettings = rtl8152_get_link_ksettings,
   9148	.set_link_ksettings = rtl8152_set_link_ksettings,
   9149	.get_tunable = rtl8152_get_tunable,
   9150	.set_tunable = rtl8152_set_tunable,
   9151	.get_ringparam = rtl8152_get_ringparam,
   9152	.set_ringparam = rtl8152_set_ringparam,
   9153	.get_pauseparam = rtl8152_get_pauseparam,
   9154	.set_pauseparam = rtl8152_set_pauseparam,
   9155};
   9156
   9157static int rtl8152_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
   9158{
   9159	struct r8152 *tp = netdev_priv(netdev);
   9160	struct mii_ioctl_data *data = if_mii(rq);
   9161	int res;
   9162
   9163	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   9164		return -ENODEV;
   9165
   9166	res = usb_autopm_get_interface(tp->intf);
   9167	if (res < 0)
   9168		goto out;
   9169
   9170	switch (cmd) {
   9171	case SIOCGMIIPHY:
   9172		data->phy_id = R8152_PHY_ID; /* Internal PHY */
   9173		break;
   9174
   9175	case SIOCGMIIREG:
   9176		mutex_lock(&tp->control);
   9177		data->val_out = r8152_mdio_read(tp, data->reg_num);
   9178		mutex_unlock(&tp->control);
   9179		break;
   9180
   9181	case SIOCSMIIREG:
   9182		if (!capable(CAP_NET_ADMIN)) {
   9183			res = -EPERM;
   9184			break;
   9185		}
   9186		mutex_lock(&tp->control);
   9187		r8152_mdio_write(tp, data->reg_num, data->val_in);
   9188		mutex_unlock(&tp->control);
   9189		break;
   9190
   9191	default:
   9192		res = -EOPNOTSUPP;
   9193	}
   9194
   9195	usb_autopm_put_interface(tp->intf);
   9196
   9197out:
   9198	return res;
   9199}
   9200
   9201static int rtl8152_change_mtu(struct net_device *dev, int new_mtu)
   9202{
   9203	struct r8152 *tp = netdev_priv(dev);
   9204	int ret;
   9205
   9206	switch (tp->version) {
   9207	case RTL_VER_01:
   9208	case RTL_VER_02:
   9209	case RTL_VER_07:
   9210		dev->mtu = new_mtu;
   9211		return 0;
   9212	default:
   9213		break;
   9214	}
   9215
   9216	ret = usb_autopm_get_interface(tp->intf);
   9217	if (ret < 0)
   9218		return ret;
   9219
   9220	mutex_lock(&tp->control);
   9221
   9222	dev->mtu = new_mtu;
   9223
   9224	if (netif_running(dev)) {
   9225		if (tp->rtl_ops.change_mtu)
   9226			tp->rtl_ops.change_mtu(tp);
   9227
   9228		if (netif_carrier_ok(dev)) {
   9229			netif_stop_queue(dev);
   9230			napi_disable(&tp->napi);
   9231			tasklet_disable(&tp->tx_tl);
   9232			tp->rtl_ops.disable(tp);
   9233			tp->rtl_ops.enable(tp);
   9234			rtl_start_rx(tp);
   9235			tasklet_enable(&tp->tx_tl);
   9236			napi_enable(&tp->napi);
   9237			rtl8152_set_rx_mode(dev);
   9238			netif_wake_queue(dev);
   9239		}
   9240	}
   9241
   9242	mutex_unlock(&tp->control);
   9243
   9244	usb_autopm_put_interface(tp->intf);
   9245
   9246	return ret;
   9247}
   9248
   9249static const struct net_device_ops rtl8152_netdev_ops = {
   9250	.ndo_open		= rtl8152_open,
   9251	.ndo_stop		= rtl8152_close,
   9252	.ndo_eth_ioctl		= rtl8152_ioctl,
   9253	.ndo_start_xmit		= rtl8152_start_xmit,
   9254	.ndo_tx_timeout		= rtl8152_tx_timeout,
   9255	.ndo_set_features	= rtl8152_set_features,
   9256	.ndo_set_rx_mode	= rtl8152_set_rx_mode,
   9257	.ndo_set_mac_address	= rtl8152_set_mac_address,
   9258	.ndo_change_mtu		= rtl8152_change_mtu,
   9259	.ndo_validate_addr	= eth_validate_addr,
   9260	.ndo_features_check	= rtl8152_features_check,
   9261};
   9262
   9263static void rtl8152_unload(struct r8152 *tp)
   9264{
   9265	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   9266		return;
   9267
   9268	if (tp->version != RTL_VER_01)
   9269		r8152_power_cut_en(tp, true);
   9270}
   9271
   9272static void rtl8153_unload(struct r8152 *tp)
   9273{
   9274	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   9275		return;
   9276
   9277	r8153_power_cut_en(tp, false);
   9278}
   9279
   9280static void rtl8153b_unload(struct r8152 *tp)
   9281{
   9282	if (test_bit(RTL8152_UNPLUG, &tp->flags))
   9283		return;
   9284
   9285	r8153b_power_cut_en(tp, false);
   9286}
   9287
   9288static int rtl_ops_init(struct r8152 *tp)
   9289{
   9290	struct rtl_ops *ops = &tp->rtl_ops;
   9291	int ret = 0;
   9292
   9293	switch (tp->version) {
   9294	case RTL_VER_01:
   9295	case RTL_VER_02:
   9296	case RTL_VER_07:
   9297		ops->init		= r8152b_init;
   9298		ops->enable		= rtl8152_enable;
   9299		ops->disable		= rtl8152_disable;
   9300		ops->up			= rtl8152_up;
   9301		ops->down		= rtl8152_down;
   9302		ops->unload		= rtl8152_unload;
   9303		ops->eee_get		= r8152_get_eee;
   9304		ops->eee_set		= r8152_set_eee;
   9305		ops->in_nway		= rtl8152_in_nway;
   9306		ops->hw_phy_cfg		= r8152b_hw_phy_cfg;
   9307		ops->autosuspend_en	= rtl_runtime_suspend_enable;
   9308		tp->rx_buf_sz		= 16 * 1024;
   9309		tp->eee_en		= true;
   9310		tp->eee_adv		= MDIO_EEE_100TX;
   9311		break;
   9312
   9313	case RTL_VER_03:
   9314	case RTL_VER_04:
   9315	case RTL_VER_05:
   9316	case RTL_VER_06:
   9317		ops->init		= r8153_init;
   9318		ops->enable		= rtl8153_enable;
   9319		ops->disable		= rtl8153_disable;
   9320		ops->up			= rtl8153_up;
   9321		ops->down		= rtl8153_down;
   9322		ops->unload		= rtl8153_unload;
   9323		ops->eee_get		= r8153_get_eee;
   9324		ops->eee_set		= r8152_set_eee;
   9325		ops->in_nway		= rtl8153_in_nway;
   9326		ops->hw_phy_cfg		= r8153_hw_phy_cfg;
   9327		ops->autosuspend_en	= rtl8153_runtime_enable;
   9328		ops->change_mtu		= rtl8153_change_mtu;
   9329		if (tp->udev->speed < USB_SPEED_SUPER)
   9330			tp->rx_buf_sz	= 16 * 1024;
   9331		else
   9332			tp->rx_buf_sz	= 32 * 1024;
   9333		tp->eee_en		= true;
   9334		tp->eee_adv		= MDIO_EEE_1000T | MDIO_EEE_100TX;
   9335		break;
   9336
   9337	case RTL_VER_08:
   9338	case RTL_VER_09:
   9339		ops->init		= r8153b_init;
   9340		ops->enable		= rtl8153_enable;
   9341		ops->disable		= rtl8153_disable;
   9342		ops->up			= rtl8153b_up;
   9343		ops->down		= rtl8153b_down;
   9344		ops->unload		= rtl8153b_unload;
   9345		ops->eee_get		= r8153_get_eee;
   9346		ops->eee_set		= r8152_set_eee;
   9347		ops->in_nway		= rtl8153_in_nway;
   9348		ops->hw_phy_cfg		= r8153b_hw_phy_cfg;
   9349		ops->autosuspend_en	= rtl8153b_runtime_enable;
   9350		ops->change_mtu		= rtl8153_change_mtu;
   9351		tp->rx_buf_sz		= 32 * 1024;
   9352		tp->eee_en		= true;
   9353		tp->eee_adv		= MDIO_EEE_1000T | MDIO_EEE_100TX;
   9354		break;
   9355
   9356	case RTL_VER_11:
   9357		tp->eee_en		= true;
   9358		tp->eee_adv		= MDIO_EEE_1000T | MDIO_EEE_100TX;
   9359		fallthrough;
   9360	case RTL_VER_10:
   9361		ops->init		= r8156_init;
   9362		ops->enable		= rtl8156_enable;
   9363		ops->disable		= rtl8153_disable;
   9364		ops->up			= rtl8156_up;
   9365		ops->down		= rtl8156_down;
   9366		ops->unload		= rtl8153_unload;
   9367		ops->eee_get		= r8153_get_eee;
   9368		ops->eee_set		= r8152_set_eee;
   9369		ops->in_nway		= rtl8153_in_nway;
   9370		ops->hw_phy_cfg		= r8156_hw_phy_cfg;
   9371		ops->autosuspend_en	= rtl8156_runtime_enable;
   9372		ops->change_mtu		= rtl8156_change_mtu;
   9373		tp->rx_buf_sz		= 48 * 1024;
   9374		tp->support_2500full	= 1;
   9375		break;
   9376
   9377	case RTL_VER_12:
   9378	case RTL_VER_13:
   9379		tp->support_2500full	= 1;
   9380		fallthrough;
   9381	case RTL_VER_15:
   9382		tp->eee_en		= true;
   9383		tp->eee_adv		= MDIO_EEE_1000T | MDIO_EEE_100TX;
   9384		ops->init		= r8156b_init;
   9385		ops->enable		= rtl8156b_enable;
   9386		ops->disable		= rtl8153_disable;
   9387		ops->up			= rtl8156_up;
   9388		ops->down		= rtl8156_down;
   9389		ops->unload		= rtl8153_unload;
   9390		ops->eee_get		= r8153_get_eee;
   9391		ops->eee_set		= r8152_set_eee;
   9392		ops->in_nway		= rtl8153_in_nway;
   9393		ops->hw_phy_cfg		= r8156b_hw_phy_cfg;
   9394		ops->autosuspend_en	= rtl8156_runtime_enable;
   9395		ops->change_mtu		= rtl8156_change_mtu;
   9396		tp->rx_buf_sz		= 48 * 1024;
   9397		break;
   9398
   9399	case RTL_VER_14:
   9400		ops->init		= r8153c_init;
   9401		ops->enable		= rtl8153_enable;
   9402		ops->disable		= rtl8153_disable;
   9403		ops->up			= rtl8153c_up;
   9404		ops->down		= rtl8153b_down;
   9405		ops->unload		= rtl8153_unload;
   9406		ops->eee_get		= r8153_get_eee;
   9407		ops->eee_set		= r8152_set_eee;
   9408		ops->in_nway		= rtl8153_in_nway;
   9409		ops->hw_phy_cfg		= r8153c_hw_phy_cfg;
   9410		ops->autosuspend_en	= rtl8153c_runtime_enable;
   9411		ops->change_mtu		= rtl8153c_change_mtu;
   9412		tp->rx_buf_sz		= 32 * 1024;
   9413		tp->eee_en		= true;
   9414		tp->eee_adv		= MDIO_EEE_1000T | MDIO_EEE_100TX;
   9415		break;
   9416
   9417	default:
   9418		ret = -ENODEV;
   9419		dev_err(&tp->intf->dev, "Unknown Device\n");
   9420		break;
   9421	}
   9422
   9423	return ret;
   9424}
   9425
   9426#define FIRMWARE_8153A_2	"rtl_nic/rtl8153a-2.fw"
   9427#define FIRMWARE_8153A_3	"rtl_nic/rtl8153a-3.fw"
   9428#define FIRMWARE_8153A_4	"rtl_nic/rtl8153a-4.fw"
   9429#define FIRMWARE_8153B_2	"rtl_nic/rtl8153b-2.fw"
   9430#define FIRMWARE_8153C_1	"rtl_nic/rtl8153c-1.fw"
   9431#define FIRMWARE_8156A_2	"rtl_nic/rtl8156a-2.fw"
   9432#define FIRMWARE_8156B_2	"rtl_nic/rtl8156b-2.fw"
   9433
   9434MODULE_FIRMWARE(FIRMWARE_8153A_2);
   9435MODULE_FIRMWARE(FIRMWARE_8153A_3);
   9436MODULE_FIRMWARE(FIRMWARE_8153A_4);
   9437MODULE_FIRMWARE(FIRMWARE_8153B_2);
   9438MODULE_FIRMWARE(FIRMWARE_8153C_1);
   9439MODULE_FIRMWARE(FIRMWARE_8156A_2);
   9440MODULE_FIRMWARE(FIRMWARE_8156B_2);
   9441
   9442static int rtl_fw_init(struct r8152 *tp)
   9443{
   9444	struct rtl_fw *rtl_fw = &tp->rtl_fw;
   9445
   9446	switch (tp->version) {
   9447	case RTL_VER_04:
   9448		rtl_fw->fw_name		= FIRMWARE_8153A_2;
   9449		rtl_fw->pre_fw		= r8153_pre_firmware_1;
   9450		rtl_fw->post_fw		= r8153_post_firmware_1;
   9451		break;
   9452	case RTL_VER_05:
   9453		rtl_fw->fw_name		= FIRMWARE_8153A_3;
   9454		rtl_fw->pre_fw		= r8153_pre_firmware_2;
   9455		rtl_fw->post_fw		= r8153_post_firmware_2;
   9456		break;
   9457	case RTL_VER_06:
   9458		rtl_fw->fw_name		= FIRMWARE_8153A_4;
   9459		rtl_fw->post_fw		= r8153_post_firmware_3;
   9460		break;
   9461	case RTL_VER_09:
   9462		rtl_fw->fw_name		= FIRMWARE_8153B_2;
   9463		rtl_fw->pre_fw		= r8153b_pre_firmware_1;
   9464		rtl_fw->post_fw		= r8153b_post_firmware_1;
   9465		break;
   9466	case RTL_VER_11:
   9467		rtl_fw->fw_name		= FIRMWARE_8156A_2;
   9468		rtl_fw->post_fw		= r8156a_post_firmware_1;
   9469		break;
   9470	case RTL_VER_13:
   9471	case RTL_VER_15:
   9472		rtl_fw->fw_name		= FIRMWARE_8156B_2;
   9473		break;
   9474	case RTL_VER_14:
   9475		rtl_fw->fw_name		= FIRMWARE_8153C_1;
   9476		rtl_fw->pre_fw		= r8153b_pre_firmware_1;
   9477		rtl_fw->post_fw		= r8153c_post_firmware_1;
   9478		break;
   9479	default:
   9480		break;
   9481	}
   9482
   9483	return 0;
   9484}
   9485
   9486u8 rtl8152_get_version(struct usb_interface *intf)
   9487{
   9488	struct usb_device *udev = interface_to_usbdev(intf);
   9489	u32 ocp_data = 0;
   9490	__le32 *tmp;
   9491	u8 version;
   9492	int ret;
   9493
   9494	tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
   9495	if (!tmp)
   9496		return 0;
   9497
   9498	ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
   9499			      RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
   9500			      PLA_TCR0, MCU_TYPE_PLA, tmp, sizeof(*tmp), 500);
   9501	if (ret > 0)
   9502		ocp_data = (__le32_to_cpu(*tmp) >> 16) & VERSION_MASK;
   9503
   9504	kfree(tmp);
   9505
   9506	switch (ocp_data) {
   9507	case 0x4c00:
   9508		version = RTL_VER_01;
   9509		break;
   9510	case 0x4c10:
   9511		version = RTL_VER_02;
   9512		break;
   9513	case 0x5c00:
   9514		version = RTL_VER_03;
   9515		break;
   9516	case 0x5c10:
   9517		version = RTL_VER_04;
   9518		break;
   9519	case 0x5c20:
   9520		version = RTL_VER_05;
   9521		break;
   9522	case 0x5c30:
   9523		version = RTL_VER_06;
   9524		break;
   9525	case 0x4800:
   9526		version = RTL_VER_07;
   9527		break;
   9528	case 0x6000:
   9529		version = RTL_VER_08;
   9530		break;
   9531	case 0x6010:
   9532		version = RTL_VER_09;
   9533		break;
   9534	case 0x7010:
   9535		version = RTL_TEST_01;
   9536		break;
   9537	case 0x7020:
   9538		version = RTL_VER_10;
   9539		break;
   9540	case 0x7030:
   9541		version = RTL_VER_11;
   9542		break;
   9543	case 0x7400:
   9544		version = RTL_VER_12;
   9545		break;
   9546	case 0x7410:
   9547		version = RTL_VER_13;
   9548		break;
   9549	case 0x6400:
   9550		version = RTL_VER_14;
   9551		break;
   9552	case 0x7420:
   9553		version = RTL_VER_15;
   9554		break;
   9555	default:
   9556		version = RTL_VER_UNKNOWN;
   9557		dev_info(&intf->dev, "Unknown version 0x%04x\n", ocp_data);
   9558		break;
   9559	}
   9560
   9561	dev_dbg(&intf->dev, "Detected version 0x%04x\n", version);
   9562
   9563	return version;
   9564}
   9565EXPORT_SYMBOL_GPL(rtl8152_get_version);
   9566
   9567static bool rtl8152_supports_lenovo_macpassthru(struct usb_device *udev)
   9568{
   9569	int parent_vendor_id = le16_to_cpu(udev->parent->descriptor.idVendor);
   9570	int product_id = le16_to_cpu(udev->descriptor.idProduct);
   9571	int vendor_id = le16_to_cpu(udev->descriptor.idVendor);
   9572
   9573	if (vendor_id == VENDOR_ID_LENOVO) {
   9574		switch (product_id) {
   9575		case DEVICE_ID_THINKPAD_THUNDERBOLT3_DOCK_GEN2:
   9576		case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2:
   9577		case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN3:
   9578		case DEVICE_ID_THINKPAD_USB_C_DONGLE:
   9579			return 1;
   9580		}
   9581	} else if (vendor_id == VENDOR_ID_REALTEK && parent_vendor_id == VENDOR_ID_LENOVO) {
   9582		switch (product_id) {
   9583		case 0x8153:
   9584			return 1;
   9585		}
   9586	}
   9587	return 0;
   9588}
   9589
   9590static int rtl8152_probe(struct usb_interface *intf,
   9591			 const struct usb_device_id *id)
   9592{
   9593	struct usb_device *udev = interface_to_usbdev(intf);
   9594	u8 version = rtl8152_get_version(intf);
   9595	struct r8152 *tp;
   9596	struct net_device *netdev;
   9597	int ret;
   9598
   9599	if (version == RTL_VER_UNKNOWN)
   9600		return -ENODEV;
   9601
   9602	if (!rtl_vendor_mode(intf))
   9603		return -ENODEV;
   9604
   9605	usb_reset_device(udev);
   9606	netdev = alloc_etherdev(sizeof(struct r8152));
   9607	if (!netdev) {
   9608		dev_err(&intf->dev, "Out of memory\n");
   9609		return -ENOMEM;
   9610	}
   9611
   9612	SET_NETDEV_DEV(netdev, &intf->dev);
   9613	tp = netdev_priv(netdev);
   9614	tp->msg_enable = 0x7FFF;
   9615
   9616	tp->udev = udev;
   9617	tp->netdev = netdev;
   9618	tp->intf = intf;
   9619	tp->version = version;
   9620
   9621	tp->pipe_ctrl_in = usb_rcvctrlpipe(udev, 0);
   9622	tp->pipe_ctrl_out = usb_sndctrlpipe(udev, 0);
   9623	tp->pipe_in = usb_rcvbulkpipe(udev, 1);
   9624	tp->pipe_out = usb_sndbulkpipe(udev, 2);
   9625	tp->pipe_intr = usb_rcvintpipe(udev, 3);
   9626
   9627	switch (version) {
   9628	case RTL_VER_01:
   9629	case RTL_VER_02:
   9630	case RTL_VER_07:
   9631		tp->mii.supports_gmii = 0;
   9632		break;
   9633	default:
   9634		tp->mii.supports_gmii = 1;
   9635		break;
   9636	}
   9637
   9638	ret = rtl_ops_init(tp);
   9639	if (ret)
   9640		goto out;
   9641
   9642	rtl_fw_init(tp);
   9643
   9644	mutex_init(&tp->control);
   9645	INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t);
   9646	INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t);
   9647	tasklet_setup(&tp->tx_tl, bottom_half);
   9648	tasklet_disable(&tp->tx_tl);
   9649
   9650	netdev->netdev_ops = &rtl8152_netdev_ops;
   9651	netdev->watchdog_timeo = RTL8152_TX_TIMEOUT;
   9652
   9653	netdev->features |= NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG |
   9654			    NETIF_F_TSO | NETIF_F_FRAGLIST | NETIF_F_IPV6_CSUM |
   9655			    NETIF_F_TSO6 | NETIF_F_HW_VLAN_CTAG_RX |
   9656			    NETIF_F_HW_VLAN_CTAG_TX;
   9657	netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG |
   9658			      NETIF_F_TSO | NETIF_F_FRAGLIST |
   9659			      NETIF_F_IPV6_CSUM | NETIF_F_TSO6 |
   9660			      NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_TX;
   9661	netdev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
   9662				NETIF_F_HIGHDMA | NETIF_F_FRAGLIST |
   9663				NETIF_F_IPV6_CSUM | NETIF_F_TSO6;
   9664
   9665	if (tp->version == RTL_VER_01) {
   9666		netdev->features &= ~NETIF_F_RXCSUM;
   9667		netdev->hw_features &= ~NETIF_F_RXCSUM;
   9668	}
   9669
   9670	tp->lenovo_macpassthru = rtl8152_supports_lenovo_macpassthru(udev);
   9671
   9672	if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x3011 && udev->serial &&
   9673	    (!strcmp(udev->serial, "000001000000") ||
   9674	     !strcmp(udev->serial, "000002000000"))) {
   9675		dev_info(&udev->dev, "Dell TB16 Dock, disable RX aggregation");
   9676		tp->dell_tb_rx_agg_bug = 1;
   9677	}
   9678
   9679	netdev->ethtool_ops = &ops;
   9680	netif_set_tso_max_size(netdev, RTL_LIMITED_TSO_SIZE);
   9681
   9682	/* MTU range: 68 - 1500 or 9194 */
   9683	netdev->min_mtu = ETH_MIN_MTU;
   9684	switch (tp->version) {
   9685	case RTL_VER_03:
   9686	case RTL_VER_04:
   9687	case RTL_VER_05:
   9688	case RTL_VER_06:
   9689	case RTL_VER_08:
   9690	case RTL_VER_09:
   9691	case RTL_VER_14:
   9692		netdev->max_mtu = size_to_mtu(9 * 1024);
   9693		break;
   9694	case RTL_VER_10:
   9695	case RTL_VER_11:
   9696		netdev->max_mtu = size_to_mtu(15 * 1024);
   9697		break;
   9698	case RTL_VER_12:
   9699	case RTL_VER_13:
   9700	case RTL_VER_15:
   9701		netdev->max_mtu = size_to_mtu(16 * 1024);
   9702		break;
   9703	case RTL_VER_01:
   9704	case RTL_VER_02:
   9705	case RTL_VER_07:
   9706	default:
   9707		netdev->max_mtu = ETH_DATA_LEN;
   9708		break;
   9709	}
   9710
   9711	tp->mii.dev = netdev;
   9712	tp->mii.mdio_read = read_mii_word;
   9713	tp->mii.mdio_write = write_mii_word;
   9714	tp->mii.phy_id_mask = 0x3f;
   9715	tp->mii.reg_num_mask = 0x1f;
   9716	tp->mii.phy_id = R8152_PHY_ID;
   9717
   9718	tp->autoneg = AUTONEG_ENABLE;
   9719	tp->speed = SPEED_100;
   9720	tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL |
   9721			  RTL_ADVERTISED_100_HALF | RTL_ADVERTISED_100_FULL;
   9722	if (tp->mii.supports_gmii) {
   9723		if (tp->support_2500full &&
   9724		    tp->udev->speed >= USB_SPEED_SUPER) {
   9725			tp->speed = SPEED_2500;
   9726			tp->advertising |= RTL_ADVERTISED_2500_FULL;
   9727		} else {
   9728			tp->speed = SPEED_1000;
   9729		}
   9730		tp->advertising |= RTL_ADVERTISED_1000_FULL;
   9731	}
   9732	tp->duplex = DUPLEX_FULL;
   9733
   9734	tp->rx_copybreak = RTL8152_RXFG_HEADSZ;
   9735	tp->rx_pending = 10 * RTL8152_MAX_RX;
   9736
   9737	intf->needs_remote_wakeup = 1;
   9738
   9739	if (!rtl_can_wakeup(tp))
   9740		__rtl_set_wol(tp, 0);
   9741	else
   9742		tp->saved_wolopts = __rtl_get_wol(tp);
   9743
   9744	tp->rtl_ops.init(tp);
   9745#if IS_BUILTIN(CONFIG_USB_RTL8152)
   9746	/* Retry in case request_firmware() is not ready yet. */
   9747	tp->rtl_fw.retry = true;
   9748#endif
   9749	queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0);
   9750	set_ethernet_addr(tp, false);
   9751
   9752	usb_set_intfdata(intf, tp);
   9753
   9754	netif_napi_add_weight(netdev, &tp->napi, r8152_poll,
   9755			      tp->support_2500full ? 256 : 64);
   9756
   9757	ret = register_netdev(netdev);
   9758	if (ret != 0) {
   9759		dev_err(&intf->dev, "couldn't register the device\n");
   9760		goto out1;
   9761	}
   9762
   9763	if (tp->saved_wolopts)
   9764		device_set_wakeup_enable(&udev->dev, true);
   9765	else
   9766		device_set_wakeup_enable(&udev->dev, false);
   9767
   9768	netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION);
   9769
   9770	return 0;
   9771
   9772out1:
   9773	tasklet_kill(&tp->tx_tl);
   9774	usb_set_intfdata(intf, NULL);
   9775out:
   9776	free_netdev(netdev);
   9777	return ret;
   9778}
   9779
   9780static void rtl8152_disconnect(struct usb_interface *intf)
   9781{
   9782	struct r8152 *tp = usb_get_intfdata(intf);
   9783
   9784	usb_set_intfdata(intf, NULL);
   9785	if (tp) {
   9786		rtl_set_unplug(tp);
   9787
   9788		unregister_netdev(tp->netdev);
   9789		tasklet_kill(&tp->tx_tl);
   9790		cancel_delayed_work_sync(&tp->hw_phy_work);
   9791		if (tp->rtl_ops.unload)
   9792			tp->rtl_ops.unload(tp);
   9793		rtl8152_release_firmware(tp);
   9794		free_netdev(tp->netdev);
   9795	}
   9796}
   9797
   9798#define REALTEK_USB_DEVICE(vend, prod)	{ \
   9799	USB_DEVICE_INTERFACE_CLASS(vend, prod, USB_CLASS_VENDOR_SPEC), \
   9800}, \
   9801{ \
   9802	USB_DEVICE_AND_INTERFACE_INFO(vend, prod, USB_CLASS_COMM, \
   9803			USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), \
   9804}
   9805
   9806/* table of devices that work with this driver */
   9807static const struct usb_device_id rtl8152_table[] = {
   9808	/* Realtek */
   9809	REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8050),
   9810	REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8053),
   9811	REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8152),
   9812	REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8153),
   9813	REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8155),
   9814	REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8156),
   9815
   9816	/* Microsoft */
   9817	REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07ab),
   9818	REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07c6),
   9819	REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0927),
   9820	REALTEK_USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101),
   9821	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x304f),
   9822	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x3062),
   9823	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x3069),
   9824	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x3082),
   9825	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x7205),
   9826	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x720c),
   9827	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x7214),
   9828	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0x721e),
   9829	REALTEK_USB_DEVICE(VENDOR_ID_LENOVO,  0xa387),
   9830	REALTEK_USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041),
   9831	REALTEK_USB_DEVICE(VENDOR_ID_NVIDIA,  0x09ff),
   9832	REALTEK_USB_DEVICE(VENDOR_ID_TPLINK,  0x0601),
   9833	{}
   9834};
   9835
   9836MODULE_DEVICE_TABLE(usb, rtl8152_table);
   9837
   9838static struct usb_driver rtl8152_driver = {
   9839	.name =		MODULENAME,
   9840	.id_table =	rtl8152_table,
   9841	.probe =	rtl8152_probe,
   9842	.disconnect =	rtl8152_disconnect,
   9843	.suspend =	rtl8152_suspend,
   9844	.resume =	rtl8152_resume,
   9845	.reset_resume =	rtl8152_reset_resume,
   9846	.pre_reset =	rtl8152_pre_reset,
   9847	.post_reset =	rtl8152_post_reset,
   9848	.supports_autosuspend = 1,
   9849	.disable_hub_initiated_lpm = 1,
   9850};
   9851
   9852module_usb_driver(rtl8152_driver);
   9853
   9854MODULE_AUTHOR(DRIVER_AUTHOR);
   9855MODULE_DESCRIPTION(DRIVER_DESC);
   9856MODULE_LICENSE("GPL");
   9857MODULE_VERSION(DRIVER_VERSION);