Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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 "11"
33
34/* Information for net */
35#define NET_VERSION "11"
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_RMS 0xc016
47#define PLA_RXFIFO_CTRL0 0xc0a0
48#define PLA_RXFIFO_CTRL1 0xc0a4
49#define PLA_RXFIFO_CTRL2 0xc0a8
50#define PLA_DMY_REG0 0xc0b0
51#define PLA_FMC 0xc0b4
52#define PLA_CFG_WOL 0xc0b6
53#define PLA_TEREDO_CFG 0xc0bc
54#define PLA_TEREDO_WAKE_BASE 0xc0c4
55#define PLA_MAR 0xcd00
56#define PLA_BACKUP 0xd000
57#define PLA_BDC_CR 0xd1a0
58#define PLA_TEREDO_TIMER 0xd2cc
59#define PLA_REALWOW_TIMER 0xd2e8
60#define PLA_UPHY_TIMER 0xd388
61#define PLA_SUSPEND_FLAG 0xd38a
62#define PLA_INDICATE_FALG 0xd38c
63#define PLA_MACDBG_PRE 0xd38c /* RTL_VER_04 only */
64#define PLA_MACDBG_POST 0xd38e /* RTL_VER_04 only */
65#define PLA_EXTRA_STATUS 0xd398
66#define PLA_EFUSE_DATA 0xdd00
67#define PLA_EFUSE_CMD 0xdd02
68#define PLA_LEDSEL 0xdd90
69#define PLA_LED_FEATURE 0xdd92
70#define PLA_PHYAR 0xde00
71#define PLA_BOOT_CTRL 0xe004
72#define PLA_LWAKE_CTRL_REG 0xe007
73#define PLA_GPHY_INTR_IMR 0xe022
74#define PLA_EEE_CR 0xe040
75#define PLA_EEEP_CR 0xe080
76#define PLA_MAC_PWR_CTRL 0xe0c0
77#define PLA_MAC_PWR_CTRL2 0xe0ca
78#define PLA_MAC_PWR_CTRL3 0xe0cc
79#define PLA_MAC_PWR_CTRL4 0xe0ce
80#define PLA_WDT6_CTRL 0xe428
81#define PLA_TCR0 0xe610
82#define PLA_TCR1 0xe612
83#define PLA_MTPS 0xe615
84#define PLA_TXFIFO_CTRL 0xe618
85#define PLA_RSTTALLY 0xe800
86#define PLA_CR 0xe813
87#define PLA_CRWECR 0xe81c
88#define PLA_CONFIG12 0xe81e /* CONFIG1, CONFIG2 */
89#define PLA_CONFIG34 0xe820 /* CONFIG3, CONFIG4 */
90#define PLA_CONFIG5 0xe822
91#define PLA_PHY_PWR 0xe84c
92#define PLA_OOB_CTRL 0xe84f
93#define PLA_CPCR 0xe854
94#define PLA_MISC_0 0xe858
95#define PLA_MISC_1 0xe85a
96#define PLA_OCP_GPHY_BASE 0xe86c
97#define PLA_TALLYCNT 0xe890
98#define PLA_SFF_STS_7 0xe8de
99#define PLA_PHYSTATUS 0xe908
100#define PLA_CONFIG6 0xe90a /* CONFIG6 */
101#define PLA_BP_BA 0xfc26
102#define PLA_BP_0 0xfc28
103#define PLA_BP_1 0xfc2a
104#define PLA_BP_2 0xfc2c
105#define PLA_BP_3 0xfc2e
106#define PLA_BP_4 0xfc30
107#define PLA_BP_5 0xfc32
108#define PLA_BP_6 0xfc34
109#define PLA_BP_7 0xfc36
110#define PLA_BP_EN 0xfc38
111
112#define USB_USB2PHY 0xb41e
113#define USB_SSPHYLINK1 0xb426
114#define USB_SSPHYLINK2 0xb428
115#define USB_U2P3_CTRL 0xb460
116#define USB_CSR_DUMMY1 0xb464
117#define USB_CSR_DUMMY2 0xb466
118#define USB_DEV_STAT 0xb808
119#define USB_CONNECT_TIMER 0xcbf8
120#define USB_MSC_TIMER 0xcbfc
121#define USB_BURST_SIZE 0xcfc0
122#define USB_FW_FIX_EN0 0xcfca
123#define USB_FW_FIX_EN1 0xcfcc
124#define USB_LPM_CONFIG 0xcfd8
125#define USB_CSTMR 0xcfef /* RTL8153A */
126#define USB_FW_CTRL 0xd334 /* RTL8153B */
127#define USB_FC_TIMER 0xd340
128#define USB_USB_CTRL 0xd406
129#define USB_PHY_CTRL 0xd408
130#define USB_TX_AGG 0xd40a
131#define USB_RX_BUF_TH 0xd40c
132#define USB_USB_TIMER 0xd428
133#define USB_RX_EARLY_TIMEOUT 0xd42c
134#define USB_RX_EARLY_SIZE 0xd42e
135#define USB_PM_CTRL_STATUS 0xd432 /* RTL8153A */
136#define USB_RX_EXTRA_AGGR_TMR 0xd432 /* RTL8153B */
137#define USB_TX_DMA 0xd434
138#define USB_UPT_RXDMA_OWN 0xd437
139#define USB_TOLERANCE 0xd490
140#define USB_LPM_CTRL 0xd41a
141#define USB_BMU_RESET 0xd4b0
142#define USB_U1U2_TIMER 0xd4da
143#define USB_FW_TASK 0xd4e8 /* RTL8153B */
144#define USB_UPS_CTRL 0xd800
145#define USB_POWER_CUT 0xd80a
146#define USB_MISC_0 0xd81a
147#define USB_MISC_1 0xd81f
148#define USB_AFE_CTRL2 0xd824
149#define USB_UPS_CFG 0xd842
150#define USB_UPS_FLAGS 0xd848
151#define USB_WDT1_CTRL 0xe404
152#define USB_WDT11_CTRL 0xe43c
153#define USB_BP_BA PLA_BP_BA
154#define USB_BP_0 PLA_BP_0
155#define USB_BP_1 PLA_BP_1
156#define USB_BP_2 PLA_BP_2
157#define USB_BP_3 PLA_BP_3
158#define USB_BP_4 PLA_BP_4
159#define USB_BP_5 PLA_BP_5
160#define USB_BP_6 PLA_BP_6
161#define USB_BP_7 PLA_BP_7
162#define USB_BP_EN PLA_BP_EN /* RTL8153A */
163#define USB_BP_8 0xfc38 /* RTL8153B */
164#define USB_BP_9 0xfc3a
165#define USB_BP_10 0xfc3c
166#define USB_BP_11 0xfc3e
167#define USB_BP_12 0xfc40
168#define USB_BP_13 0xfc42
169#define USB_BP_14 0xfc44
170#define USB_BP_15 0xfc46
171#define USB_BP2_EN 0xfc48
172
173/* OCP Registers */
174#define OCP_ALDPS_CONFIG 0x2010
175#define OCP_EEE_CONFIG1 0x2080
176#define OCP_EEE_CONFIG2 0x2092
177#define OCP_EEE_CONFIG3 0x2094
178#define OCP_BASE_MII 0xa400
179#define OCP_EEE_AR 0xa41a
180#define OCP_EEE_DATA 0xa41c
181#define OCP_PHY_STATUS 0xa420
182#define OCP_NCTL_CFG 0xa42c
183#define OCP_POWER_CFG 0xa430
184#define OCP_EEE_CFG 0xa432
185#define OCP_SRAM_ADDR 0xa436
186#define OCP_SRAM_DATA 0xa438
187#define OCP_DOWN_SPEED 0xa442
188#define OCP_EEE_ABLE 0xa5c4
189#define OCP_EEE_ADV 0xa5d0
190#define OCP_EEE_LPABLE 0xa5d2
191#define OCP_PHY_STATE 0xa708 /* nway state for 8153 */
192#define OCP_PHY_PATCH_STAT 0xb800
193#define OCP_PHY_PATCH_CMD 0xb820
194#define OCP_PHY_LOCK 0xb82e
195#define OCP_ADC_IOFFSET 0xbcfc
196#define OCP_ADC_CFG 0xbc06
197#define OCP_SYSCLK_CFG 0xc416
198
199/* SRAM Register */
200#define SRAM_GREEN_CFG 0x8011
201#define SRAM_LPF_CFG 0x8012
202#define SRAM_10M_AMP1 0x8080
203#define SRAM_10M_AMP2 0x8082
204#define SRAM_IMPEDANCE 0x8084
205#define SRAM_PHY_LOCK 0xb82e
206
207/* PLA_RCR */
208#define RCR_AAP 0x00000001
209#define RCR_APM 0x00000002
210#define RCR_AM 0x00000004
211#define RCR_AB 0x00000008
212#define RCR_ACPT_ALL (RCR_AAP | RCR_APM | RCR_AM | RCR_AB)
213
214/* PLA_RXFIFO_CTRL0 */
215#define RXFIFO_THR1_NORMAL 0x00080002
216#define RXFIFO_THR1_OOB 0x01800003
217
218/* PLA_RXFIFO_CTRL1 */
219#define RXFIFO_THR2_FULL 0x00000060
220#define RXFIFO_THR2_HIGH 0x00000038
221#define RXFIFO_THR2_OOB 0x0000004a
222#define RXFIFO_THR2_NORMAL 0x00a0
223
224/* PLA_RXFIFO_CTRL2 */
225#define RXFIFO_THR3_FULL 0x00000078
226#define RXFIFO_THR3_HIGH 0x00000048
227#define RXFIFO_THR3_OOB 0x0000005a
228#define RXFIFO_THR3_NORMAL 0x0110
229
230/* PLA_TXFIFO_CTRL */
231#define TXFIFO_THR_NORMAL 0x00400008
232#define TXFIFO_THR_NORMAL2 0x01000008
233
234/* PLA_DMY_REG0 */
235#define ECM_ALDPS 0x0002
236
237/* PLA_FMC */
238#define FMC_FCR_MCU_EN 0x0001
239
240/* PLA_EEEP_CR */
241#define EEEP_CR_EEEP_TX 0x0002
242
243/* PLA_WDT6_CTRL */
244#define WDT6_SET_MODE 0x0010
245
246/* PLA_TCR0 */
247#define TCR0_TX_EMPTY 0x0800
248#define TCR0_AUTO_FIFO 0x0080
249
250/* PLA_TCR1 */
251#define VERSION_MASK 0x7cf0
252
253/* PLA_MTPS */
254#define MTPS_JUMBO (12 * 1024 / 64)
255#define MTPS_DEFAULT (6 * 1024 / 64)
256
257/* PLA_RSTTALLY */
258#define TALLY_RESET 0x0001
259
260/* PLA_CR */
261#define CR_RST 0x10
262#define CR_RE 0x08
263#define CR_TE 0x04
264
265/* PLA_CRWECR */
266#define CRWECR_NORAML 0x00
267#define CRWECR_CONFIG 0xc0
268
269/* PLA_OOB_CTRL */
270#define NOW_IS_OOB 0x80
271#define TXFIFO_EMPTY 0x20
272#define RXFIFO_EMPTY 0x10
273#define LINK_LIST_READY 0x02
274#define DIS_MCU_CLROOB 0x01
275#define FIFO_EMPTY (TXFIFO_EMPTY | RXFIFO_EMPTY)
276
277/* PLA_MISC_1 */
278#define RXDY_GATED_EN 0x0008
279
280/* PLA_SFF_STS_7 */
281#define RE_INIT_LL 0x8000
282#define MCU_BORW_EN 0x4000
283
284/* PLA_CPCR */
285#define CPCR_RX_VLAN 0x0040
286
287/* PLA_CFG_WOL */
288#define MAGIC_EN 0x0001
289
290/* PLA_TEREDO_CFG */
291#define TEREDO_SEL 0x8000
292#define TEREDO_WAKE_MASK 0x7f00
293#define TEREDO_RS_EVENT_MASK 0x00fe
294#define OOB_TEREDO_EN 0x0001
295
296/* PLA_BDC_CR */
297#define ALDPS_PROXY_MODE 0x0001
298
299/* PLA_EFUSE_CMD */
300#define EFUSE_READ_CMD BIT(15)
301#define EFUSE_DATA_BIT16 BIT(7)
302
303/* PLA_CONFIG34 */
304#define LINK_ON_WAKE_EN 0x0010
305#define LINK_OFF_WAKE_EN 0x0008
306
307/* PLA_CONFIG6 */
308#define LANWAKE_CLR_EN BIT(0)
309
310/* PLA_CONFIG5 */
311#define BWF_EN 0x0040
312#define MWF_EN 0x0020
313#define UWF_EN 0x0010
314#define LAN_WAKE_EN 0x0002
315
316/* PLA_LED_FEATURE */
317#define LED_MODE_MASK 0x0700
318
319/* PLA_PHY_PWR */
320#define TX_10M_IDLE_EN 0x0080
321#define PFM_PWM_SWITCH 0x0040
322#define TEST_IO_OFF BIT(4)
323
324/* PLA_MAC_PWR_CTRL */
325#define D3_CLK_GATED_EN 0x00004000
326#define MCU_CLK_RATIO 0x07010f07
327#define MCU_CLK_RATIO_MASK 0x0f0f0f0f
328#define ALDPS_SPDWN_RATIO 0x0f87
329
330/* PLA_MAC_PWR_CTRL2 */
331#define EEE_SPDWN_RATIO 0x8007
332#define MAC_CLK_SPDWN_EN BIT(15)
333
334/* PLA_MAC_PWR_CTRL3 */
335#define PLA_MCU_SPDWN_EN BIT(14)
336#define PKT_AVAIL_SPDWN_EN 0x0100
337#define SUSPEND_SPDWN_EN 0x0004
338#define U1U2_SPDWN_EN 0x0002
339#define L1_SPDWN_EN 0x0001
340
341/* PLA_MAC_PWR_CTRL4 */
342#define PWRSAVE_SPDWN_EN 0x1000
343#define RXDV_SPDWN_EN 0x0800
344#define TX10MIDLE_EN 0x0100
345#define TP100_SPDWN_EN 0x0020
346#define TP500_SPDWN_EN 0x0010
347#define TP1000_SPDWN_EN 0x0008
348#define EEE_SPDWN_EN 0x0001
349
350/* PLA_GPHY_INTR_IMR */
351#define GPHY_STS_MSK 0x0001
352#define SPEED_DOWN_MSK 0x0002
353#define SPDWN_RXDV_MSK 0x0004
354#define SPDWN_LINKCHG_MSK 0x0008
355
356/* PLA_PHYAR */
357#define PHYAR_FLAG 0x80000000
358
359/* PLA_EEE_CR */
360#define EEE_RX_EN 0x0001
361#define EEE_TX_EN 0x0002
362
363/* PLA_BOOT_CTRL */
364#define AUTOLOAD_DONE 0x0002
365
366/* PLA_LWAKE_CTRL_REG */
367#define LANWAKE_PIN BIT(7)
368
369/* PLA_SUSPEND_FLAG */
370#define LINK_CHG_EVENT BIT(0)
371
372/* PLA_INDICATE_FALG */
373#define UPCOMING_RUNTIME_D3 BIT(0)
374
375/* PLA_MACDBG_PRE and PLA_MACDBG_POST */
376#define DEBUG_OE BIT(0)
377#define DEBUG_LTSSM 0x0082
378
379/* PLA_EXTRA_STATUS */
380#define CUR_LINK_OK BIT(15)
381#define U3P3_CHECK_EN BIT(7) /* RTL_VER_05 only */
382#define LINK_CHANGE_FLAG BIT(8)
383#define POLL_LINK_CHG BIT(0)
384
385/* USB_USB2PHY */
386#define USB2PHY_SUSPEND 0x0001
387#define USB2PHY_L1 0x0002
388
389/* USB_SSPHYLINK1 */
390#define DELAY_PHY_PWR_CHG BIT(1)
391
392/* USB_SSPHYLINK2 */
393#define pwd_dn_scale_mask 0x3ffe
394#define pwd_dn_scale(x) ((x) << 1)
395
396/* USB_CSR_DUMMY1 */
397#define DYNAMIC_BURST 0x0001
398
399/* USB_CSR_DUMMY2 */
400#define EP4_FULL_FC 0x0001
401
402/* USB_DEV_STAT */
403#define STAT_SPEED_MASK 0x0006
404#define STAT_SPEED_HIGH 0x0000
405#define STAT_SPEED_FULL 0x0002
406
407/* USB_FW_FIX_EN0 */
408#define FW_FIX_SUSPEND BIT(14)
409
410/* USB_FW_FIX_EN1 */
411#define FW_IP_RESET_EN BIT(9)
412
413/* USB_LPM_CONFIG */
414#define LPM_U1U2_EN BIT(0)
415
416/* USB_TX_AGG */
417#define TX_AGG_MAX_THRESHOLD 0x03
418
419/* USB_RX_BUF_TH */
420#define RX_THR_SUPPER 0x0c350180
421#define RX_THR_HIGH 0x7a120180
422#define RX_THR_SLOW 0xffff0180
423#define RX_THR_B 0x00010001
424
425/* USB_TX_DMA */
426#define TEST_MODE_DISABLE 0x00000001
427#define TX_SIZE_ADJUST1 0x00000100
428
429/* USB_BMU_RESET */
430#define BMU_RESET_EP_IN 0x01
431#define BMU_RESET_EP_OUT 0x02
432
433/* USB_UPT_RXDMA_OWN */
434#define OWN_UPDATE BIT(0)
435#define OWN_CLEAR BIT(1)
436
437/* USB_FW_TASK */
438#define FC_PATCH_TASK BIT(1)
439
440/* USB_UPS_CTRL */
441#define POWER_CUT 0x0100
442
443/* USB_PM_CTRL_STATUS */
444#define RESUME_INDICATE 0x0001
445
446/* USB_CSTMR */
447#define FORCE_SUPER BIT(0)
448
449/* USB_FW_CTRL */
450#define FLOW_CTRL_PATCH_OPT BIT(1)
451
452/* USB_FC_TIMER */
453#define CTRL_TIMER_EN BIT(15)
454
455/* USB_USB_CTRL */
456#define RX_AGG_DISABLE 0x0010
457#define RX_ZERO_EN 0x0080
458
459/* USB_U2P3_CTRL */
460#define U2P3_ENABLE 0x0001
461
462/* USB_POWER_CUT */
463#define PWR_EN 0x0001
464#define PHASE2_EN 0x0008
465#define UPS_EN BIT(4)
466#define USP_PREWAKE BIT(5)
467
468/* USB_MISC_0 */
469#define PCUT_STATUS 0x0001
470
471/* USB_RX_EARLY_TIMEOUT */
472#define COALESCE_SUPER 85000U
473#define COALESCE_HIGH 250000U
474#define COALESCE_SLOW 524280U
475
476/* USB_WDT1_CTRL */
477#define WTD1_EN BIT(0)
478
479/* USB_WDT11_CTRL */
480#define TIMER11_EN 0x0001
481
482/* USB_LPM_CTRL */
483/* bit 4 ~ 5: fifo empty boundary */
484#define FIFO_EMPTY_1FB 0x30 /* 0x1fb * 64 = 32448 bytes */
485/* bit 2 ~ 3: LMP timer */
486#define LPM_TIMER_MASK 0x0c
487#define LPM_TIMER_500MS 0x04 /* 500 ms */
488#define LPM_TIMER_500US 0x0c /* 500 us */
489#define ROK_EXIT_LPM 0x02
490
491/* USB_AFE_CTRL2 */
492#define SEN_VAL_MASK 0xf800
493#define SEN_VAL_NORMAL 0xa000
494#define SEL_RXIDLE 0x0100
495
496/* USB_UPS_CFG */
497#define SAW_CNT_1MS_MASK 0x0fff
498
499/* USB_UPS_FLAGS */
500#define UPS_FLAGS_R_TUNE BIT(0)
501#define UPS_FLAGS_EN_10M_CKDIV BIT(1)
502#define UPS_FLAGS_250M_CKDIV BIT(2)
503#define UPS_FLAGS_EN_ALDPS BIT(3)
504#define UPS_FLAGS_CTAP_SHORT_DIS BIT(4)
505#define ups_flags_speed(x) ((x) << 16)
506#define UPS_FLAGS_EN_EEE BIT(20)
507#define UPS_FLAGS_EN_500M_EEE BIT(21)
508#define UPS_FLAGS_EN_EEE_CKDIV BIT(22)
509#define UPS_FLAGS_EEE_PLLOFF_100 BIT(23)
510#define UPS_FLAGS_EEE_PLLOFF_GIGA BIT(24)
511#define UPS_FLAGS_EEE_CMOD_LV_EN BIT(25)
512#define UPS_FLAGS_EN_GREEN BIT(26)
513#define UPS_FLAGS_EN_FLOW_CTR BIT(27)
514
515enum spd_duplex {
516 NWAY_10M_HALF,
517 NWAY_10M_FULL,
518 NWAY_100M_HALF,
519 NWAY_100M_FULL,
520 NWAY_1000M_FULL,
521 FORCE_10M_HALF,
522 FORCE_10M_FULL,
523 FORCE_100M_HALF,
524 FORCE_100M_FULL,
525};
526
527/* OCP_ALDPS_CONFIG */
528#define ENPWRSAVE 0x8000
529#define ENPDNPS 0x0200
530#define LINKENA 0x0100
531#define DIS_SDSAVE 0x0010
532
533/* OCP_PHY_STATUS */
534#define PHY_STAT_MASK 0x0007
535#define PHY_STAT_EXT_INIT 2
536#define PHY_STAT_LAN_ON 3
537#define PHY_STAT_PWRDN 5
538
539/* OCP_NCTL_CFG */
540#define PGA_RETURN_EN BIT(1)
541
542/* OCP_POWER_CFG */
543#define EEE_CLKDIV_EN 0x8000
544#define EN_ALDPS 0x0004
545#define EN_10M_PLLOFF 0x0001
546
547/* OCP_EEE_CONFIG1 */
548#define RG_TXLPI_MSK_HFDUP 0x8000
549#define RG_MATCLR_EN 0x4000
550#define EEE_10_CAP 0x2000
551#define EEE_NWAY_EN 0x1000
552#define TX_QUIET_EN 0x0200
553#define RX_QUIET_EN 0x0100
554#define sd_rise_time_mask 0x0070
555#define sd_rise_time(x) (min(x, 7) << 4) /* bit 4 ~ 6 */
556#define RG_RXLPI_MSK_HFDUP 0x0008
557#define SDFALLTIME 0x0007 /* bit 0 ~ 2 */
558
559/* OCP_EEE_CONFIG2 */
560#define RG_LPIHYS_NUM 0x7000 /* bit 12 ~ 15 */
561#define RG_DACQUIET_EN 0x0400
562#define RG_LDVQUIET_EN 0x0200
563#define RG_CKRSEL 0x0020
564#define RG_EEEPRG_EN 0x0010
565
566/* OCP_EEE_CONFIG3 */
567#define fast_snr_mask 0xff80
568#define fast_snr(x) (min(x, 0x1ff) << 7) /* bit 7 ~ 15 */
569#define RG_LFS_SEL 0x0060 /* bit 6 ~ 5 */
570#define MSK_PH 0x0006 /* bit 0 ~ 3 */
571
572/* OCP_EEE_AR */
573/* bit[15:14] function */
574#define FUN_ADDR 0x0000
575#define FUN_DATA 0x4000
576/* bit[4:0] device addr */
577
578/* OCP_EEE_CFG */
579#define CTAP_SHORT_EN 0x0040
580#define EEE10_EN 0x0010
581
582/* OCP_DOWN_SPEED */
583#define EN_EEE_CMODE BIT(14)
584#define EN_EEE_1000 BIT(13)
585#define EN_EEE_100 BIT(12)
586#define EN_10M_CLKDIV BIT(11)
587#define EN_10M_BGOFF 0x0080
588
589/* OCP_PHY_STATE */
590#define TXDIS_STATE 0x01
591#define ABD_STATE 0x02
592
593/* OCP_PHY_PATCH_STAT */
594#define PATCH_READY BIT(6)
595
596/* OCP_PHY_PATCH_CMD */
597#define PATCH_REQUEST BIT(4)
598
599/* OCP_PHY_LOCK */
600#define PATCH_LOCK BIT(0)
601
602/* OCP_ADC_CFG */
603#define CKADSEL_L 0x0100
604#define ADC_EN 0x0080
605#define EN_EMI_L 0x0040
606
607/* OCP_SYSCLK_CFG */
608#define clk_div_expo(x) (min(x, 5) << 8)
609
610/* SRAM_GREEN_CFG */
611#define GREEN_ETH_EN BIT(15)
612#define R_TUNE_EN BIT(11)
613
614/* SRAM_LPF_CFG */
615#define LPF_AUTO_TUNE 0x8000
616
617/* SRAM_10M_AMP1 */
618#define GDAC_IB_UPALL 0x0008
619
620/* SRAM_10M_AMP2 */
621#define AMP_DN 0x0200
622
623/* SRAM_IMPEDANCE */
624#define RX_DRIVING_MASK 0x6000
625
626/* SRAM_PHY_LOCK */
627#define PHY_PATCH_LOCK 0x0001
628
629/* MAC PASSTHRU */
630#define AD_MASK 0xfee0
631#define BND_MASK 0x0004
632#define BD_MASK 0x0001
633#define EFUSE 0xcfdb
634#define PASS_THRU_MASK 0x1
635
636#define BP4_SUPER_ONLY 0x1578 /* RTL_VER_04 only */
637
638enum rtl_register_content {
639 _1000bps = 0x10,
640 _100bps = 0x08,
641 _10bps = 0x04,
642 LINK_STATUS = 0x02,
643 FULL_DUP = 0x01,
644};
645
646#define RTL8152_MAX_TX 4
647#define RTL8152_MAX_RX 10
648#define INTBUFSIZE 2
649#define TX_ALIGN 4
650#define RX_ALIGN 8
651
652#define RTL8152_RX_MAX_PENDING 4096
653#define RTL8152_RXFG_HEADSZ 256
654
655#define INTR_LINK 0x0004
656
657#define RTL8153_MAX_PACKET 9216 /* 9K */
658#define RTL8153_MAX_MTU (RTL8153_MAX_PACKET - VLAN_ETH_HLEN - \
659 ETH_FCS_LEN)
660#define RTL8152_RMS (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN)
661#define RTL8153_RMS RTL8153_MAX_PACKET
662#define RTL8152_TX_TIMEOUT (5 * HZ)
663#define RTL8152_NAPI_WEIGHT 64
664#define rx_reserved_size(x) ((x) + VLAN_ETH_HLEN + ETH_FCS_LEN + \
665 sizeof(struct rx_desc) + RX_ALIGN)
666
667/* rtl8152 flags */
668enum rtl8152_flags {
669 RTL8152_UNPLUG = 0,
670 RTL8152_SET_RX_MODE,
671 WORK_ENABLE,
672 RTL8152_LINK_CHG,
673 SELECTIVE_SUSPEND,
674 PHY_RESET,
675 SCHEDULE_TASKLET,
676 GREEN_ETHERNET,
677 DELL_TB_RX_AGG_BUG,
678 LENOVO_MACPASSTHRU,
679};
680
681#define DEVICE_ID_THINKPAD_THUNDERBOLT3_DOCK_GEN2 0x3082
682#define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2 0xa387
683
684struct tally_counter {
685 __le64 tx_packets;
686 __le64 rx_packets;
687 __le64 tx_errors;
688 __le32 rx_errors;
689 __le16 rx_missed;
690 __le16 align_errors;
691 __le32 tx_one_collision;
692 __le32 tx_multi_collision;
693 __le64 rx_unicast;
694 __le64 rx_broadcast;
695 __le32 rx_multicast;
696 __le16 tx_aborted;
697 __le16 tx_underrun;
698};
699
700struct rx_desc {
701 __le32 opts1;
702#define RX_LEN_MASK 0x7fff
703
704 __le32 opts2;
705#define RD_UDP_CS BIT(23)
706#define RD_TCP_CS BIT(22)
707#define RD_IPV6_CS BIT(20)
708#define RD_IPV4_CS BIT(19)
709
710 __le32 opts3;
711#define IPF BIT(23) /* IP checksum fail */
712#define UDPF BIT(22) /* UDP checksum fail */
713#define TCPF BIT(21) /* TCP checksum fail */
714#define RX_VLAN_TAG BIT(16)
715
716 __le32 opts4;
717 __le32 opts5;
718 __le32 opts6;
719};
720
721struct tx_desc {
722 __le32 opts1;
723#define TX_FS BIT(31) /* First segment of a packet */
724#define TX_LS BIT(30) /* Final segment of a packet */
725#define GTSENDV4 BIT(28)
726#define GTSENDV6 BIT(27)
727#define GTTCPHO_SHIFT 18
728#define GTTCPHO_MAX 0x7fU
729#define TX_LEN_MAX 0x3ffffU
730
731 __le32 opts2;
732#define UDP_CS BIT(31) /* Calculate UDP/IP checksum */
733#define TCP_CS BIT(30) /* Calculate TCP/IP checksum */
734#define IPV4_CS BIT(29) /* Calculate IPv4 checksum */
735#define IPV6_CS BIT(28) /* Calculate IPv6 checksum */
736#define MSS_SHIFT 17
737#define MSS_MAX 0x7ffU
738#define TCPHO_SHIFT 17
739#define TCPHO_MAX 0x7ffU
740#define TX_VLAN_TAG BIT(16)
741};
742
743struct r8152;
744
745struct rx_agg {
746 struct list_head list, info_list;
747 struct urb *urb;
748 struct r8152 *context;
749 struct page *page;
750 void *buffer;
751};
752
753struct tx_agg {
754 struct list_head list;
755 struct urb *urb;
756 struct r8152 *context;
757 void *buffer;
758 void *head;
759 u32 skb_num;
760 u32 skb_len;
761};
762
763struct r8152 {
764 unsigned long flags;
765 struct usb_device *udev;
766 struct napi_struct napi;
767 struct usb_interface *intf;
768 struct net_device *netdev;
769 struct urb *intr_urb;
770 struct tx_agg tx_info[RTL8152_MAX_TX];
771 struct list_head rx_info, rx_used;
772 struct list_head rx_done, tx_free;
773 struct sk_buff_head tx_queue, rx_queue;
774 spinlock_t rx_lock, tx_lock;
775 struct delayed_work schedule, hw_phy_work;
776 struct mii_if_info mii;
777 struct mutex control; /* use for hw setting */
778#ifdef CONFIG_PM_SLEEP
779 struct notifier_block pm_notifier;
780#endif
781 struct tasklet_struct tx_tl;
782
783 struct rtl_ops {
784 void (*init)(struct r8152 *tp);
785 int (*enable)(struct r8152 *tp);
786 void (*disable)(struct r8152 *tp);
787 void (*up)(struct r8152 *tp);
788 void (*down)(struct r8152 *tp);
789 void (*unload)(struct r8152 *tp);
790 int (*eee_get)(struct r8152 *tp, struct ethtool_eee *eee);
791 int (*eee_set)(struct r8152 *tp, struct ethtool_eee *eee);
792 bool (*in_nway)(struct r8152 *tp);
793 void (*hw_phy_cfg)(struct r8152 *tp);
794 void (*autosuspend_en)(struct r8152 *tp, bool enable);
795 } rtl_ops;
796
797 struct ups_info {
798 u32 _10m_ckdiv:1;
799 u32 _250m_ckdiv:1;
800 u32 aldps:1;
801 u32 lite_mode:2;
802 u32 speed_duplex:4;
803 u32 eee:1;
804 u32 eee_lite:1;
805 u32 eee_ckdiv:1;
806 u32 eee_plloff_100:1;
807 u32 eee_plloff_giga:1;
808 u32 eee_cmod_lv:1;
809 u32 green:1;
810 u32 flow_control:1;
811 u32 ctap_short_off:1;
812 } ups_info;
813
814#define RTL_VER_SIZE 32
815
816 struct rtl_fw {
817 const char *fw_name;
818 const struct firmware *fw;
819
820 char version[RTL_VER_SIZE];
821 int (*pre_fw)(struct r8152 *tp);
822 int (*post_fw)(struct r8152 *tp);
823
824 bool retry;
825 } rtl_fw;
826
827 atomic_t rx_count;
828
829 bool eee_en;
830 int intr_interval;
831 u32 saved_wolopts;
832 u32 msg_enable;
833 u32 tx_qlen;
834 u32 coalesce;
835 u32 advertising;
836 u32 rx_buf_sz;
837 u32 rx_copybreak;
838 u32 rx_pending;
839
840 u16 ocp_base;
841 u16 speed;
842 u16 eee_adv;
843 u8 *intr_buff;
844 u8 version;
845 u8 duplex;
846 u8 autoneg;
847};
848
849/**
850 * struct fw_block - block type and total length
851 * @type: type of the current block, such as RTL_FW_END, RTL_FW_PLA,
852 * RTL_FW_USB and so on.
853 * @length: total length of the current block.
854 */
855struct fw_block {
856 __le32 type;
857 __le32 length;
858} __packed;
859
860/**
861 * struct fw_header - header of the firmware file
862 * @checksum: checksum of sha256 which is calculated from the whole file
863 * except the checksum field of the file. That is, calculate sha256
864 * from the version field to the end of the file.
865 * @version: version of this firmware.
866 * @blocks: the first firmware block of the file
867 */
868struct fw_header {
869 u8 checksum[32];
870 char version[RTL_VER_SIZE];
871 struct fw_block blocks[];
872} __packed;
873
874/**
875 * struct fw_mac - a firmware block used by RTL_FW_PLA and RTL_FW_USB.
876 * The layout of the firmware block is:
877 * <struct fw_mac> + <info> + <firmware data>.
878 * @blk_hdr: firmware descriptor (type, length)
879 * @fw_offset: offset of the firmware binary data. The start address of
880 * the data would be the address of struct fw_mac + @fw_offset.
881 * @fw_reg: the register to load the firmware. Depends on chip.
882 * @bp_ba_addr: the register to write break point base address. Depends on
883 * chip.
884 * @bp_ba_value: break point base address. Depends on chip.
885 * @bp_en_addr: the register to write break point enabled mask. Depends
886 * on chip.
887 * @bp_en_value: break point enabled mask. Depends on the firmware.
888 * @bp_start: the start register of break points. Depends on chip.
889 * @bp_num: the break point number which needs to be set for this firmware.
890 * Depends on the firmware.
891 * @bp: break points. Depends on firmware.
892 * @reserved: reserved space (unused)
893 * @fw_ver_reg: the register to store the fw version.
894 * @fw_ver_data: the firmware version of the current type.
895 * @info: additional information for debugging, and is followed by the
896 * binary data of firmware.
897 */
898struct fw_mac {
899 struct fw_block blk_hdr;
900 __le16 fw_offset;
901 __le16 fw_reg;
902 __le16 bp_ba_addr;
903 __le16 bp_ba_value;
904 __le16 bp_en_addr;
905 __le16 bp_en_value;
906 __le16 bp_start;
907 __le16 bp_num;
908 __le16 bp[16]; /* any value determined by firmware */
909 __le32 reserved;
910 __le16 fw_ver_reg;
911 u8 fw_ver_data;
912 char info[];
913} __packed;
914
915/**
916 * struct fw_phy_patch_key - a firmware block used by RTL_FW_PHY_START.
917 * This is used to set patch key when loading the firmware of PHY.
918 * @blk_hdr: firmware descriptor (type, length)
919 * @key_reg: the register to write the patch key.
920 * @key_data: patch key.
921 * @reserved: reserved space (unused)
922 */
923struct fw_phy_patch_key {
924 struct fw_block blk_hdr;
925 __le16 key_reg;
926 __le16 key_data;
927 __le32 reserved;
928} __packed;
929
930/**
931 * struct fw_phy_nc - a firmware block used by RTL_FW_PHY_NC.
932 * The layout of the firmware block is:
933 * <struct fw_phy_nc> + <info> + <firmware data>.
934 * @blk_hdr: firmware descriptor (type, length)
935 * @fw_offset: offset of the firmware binary data. The start address of
936 * the data would be the address of struct fw_phy_nc + @fw_offset.
937 * @fw_reg: the register to load the firmware. Depends on chip.
938 * @ba_reg: the register to write the base address. Depends on chip.
939 * @ba_data: base address. Depends on chip.
940 * @patch_en_addr: the register of enabling patch mode. Depends on chip.
941 * @patch_en_value: patch mode enabled mask. Depends on the firmware.
942 * @mode_reg: the regitster of switching the mode.
943 * @mode_pre: the mode needing to be set before loading the firmware.
944 * @mode_post: the mode to be set when finishing to load the firmware.
945 * @reserved: reserved space (unused)
946 * @bp_start: the start register of break points. Depends on chip.
947 * @bp_num: the break point number which needs to be set for this firmware.
948 * Depends on the firmware.
949 * @bp: break points. Depends on firmware.
950 * @info: additional information for debugging, and is followed by the
951 * binary data of firmware.
952 */
953struct fw_phy_nc {
954 struct fw_block blk_hdr;
955 __le16 fw_offset;
956 __le16 fw_reg;
957 __le16 ba_reg;
958 __le16 ba_data;
959 __le16 patch_en_addr;
960 __le16 patch_en_value;
961 __le16 mode_reg;
962 __le16 mode_pre;
963 __le16 mode_post;
964 __le16 reserved;
965 __le16 bp_start;
966 __le16 bp_num;
967 __le16 bp[4];
968 char info[];
969} __packed;
970
971enum rtl_fw_type {
972 RTL_FW_END = 0,
973 RTL_FW_PLA,
974 RTL_FW_USB,
975 RTL_FW_PHY_START,
976 RTL_FW_PHY_STOP,
977 RTL_FW_PHY_NC,
978};
979
980enum rtl_version {
981 RTL_VER_UNKNOWN = 0,
982 RTL_VER_01,
983 RTL_VER_02,
984 RTL_VER_03,
985 RTL_VER_04,
986 RTL_VER_05,
987 RTL_VER_06,
988 RTL_VER_07,
989 RTL_VER_08,
990 RTL_VER_09,
991 RTL_VER_MAX
992};
993
994enum tx_csum_stat {
995 TX_CSUM_SUCCESS = 0,
996 TX_CSUM_TSO,
997 TX_CSUM_NONE
998};
999
1000#define RTL_ADVERTISED_10_HALF BIT(0)
1001#define RTL_ADVERTISED_10_FULL BIT(1)
1002#define RTL_ADVERTISED_100_HALF BIT(2)
1003#define RTL_ADVERTISED_100_FULL BIT(3)
1004#define RTL_ADVERTISED_1000_HALF BIT(4)
1005#define RTL_ADVERTISED_1000_FULL BIT(5)
1006
1007/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
1008 * The RTL chips use a 64 element hash table based on the Ethernet CRC.
1009 */
1010static const int multicast_filter_limit = 32;
1011static unsigned int agg_buf_sz = 16384;
1012
1013#define RTL_LIMITED_TSO_SIZE (agg_buf_sz - sizeof(struct tx_desc) - \
1014 VLAN_ETH_HLEN - ETH_FCS_LEN)
1015
1016static
1017int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
1018{
1019 int ret;
1020 void *tmp;
1021
1022 tmp = kmalloc(size, GFP_KERNEL);
1023 if (!tmp)
1024 return -ENOMEM;
1025
1026 ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0),
1027 RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
1028 value, index, tmp, size, 500);
1029 if (ret < 0)
1030 memset(data, 0xff, size);
1031 else
1032 memcpy(data, tmp, size);
1033
1034 kfree(tmp);
1035
1036 return ret;
1037}
1038
1039static
1040int set_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
1041{
1042 int ret;
1043 void *tmp;
1044
1045 tmp = kmemdup(data, size, GFP_KERNEL);
1046 if (!tmp)
1047 return -ENOMEM;
1048
1049 ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0),
1050 RTL8152_REQ_SET_REGS, RTL8152_REQT_WRITE,
1051 value, index, tmp, size, 500);
1052
1053 kfree(tmp);
1054
1055 return ret;
1056}
1057
1058static void rtl_set_unplug(struct r8152 *tp)
1059{
1060 if (tp->udev->state == USB_STATE_NOTATTACHED) {
1061 set_bit(RTL8152_UNPLUG, &tp->flags);
1062 smp_mb__after_atomic();
1063 }
1064}
1065
1066static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size,
1067 void *data, u16 type)
1068{
1069 u16 limit = 64;
1070 int ret = 0;
1071
1072 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1073 return -ENODEV;
1074
1075 /* both size and indix must be 4 bytes align */
1076 if ((size & 3) || !size || (index & 3) || !data)
1077 return -EPERM;
1078
1079 if ((u32)index + (u32)size > 0xffff)
1080 return -EPERM;
1081
1082 while (size) {
1083 if (size > limit) {
1084 ret = get_registers(tp, index, type, limit, data);
1085 if (ret < 0)
1086 break;
1087
1088 index += limit;
1089 data += limit;
1090 size -= limit;
1091 } else {
1092 ret = get_registers(tp, index, type, size, data);
1093 if (ret < 0)
1094 break;
1095
1096 index += size;
1097 data += size;
1098 size = 0;
1099 break;
1100 }
1101 }
1102
1103 if (ret == -ENODEV)
1104 rtl_set_unplug(tp);
1105
1106 return ret;
1107}
1108
1109static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen,
1110 u16 size, void *data, u16 type)
1111{
1112 int ret;
1113 u16 byteen_start, byteen_end, byen;
1114 u16 limit = 512;
1115
1116 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1117 return -ENODEV;
1118
1119 /* both size and indix must be 4 bytes align */
1120 if ((size & 3) || !size || (index & 3) || !data)
1121 return -EPERM;
1122
1123 if ((u32)index + (u32)size > 0xffff)
1124 return -EPERM;
1125
1126 byteen_start = byteen & BYTE_EN_START_MASK;
1127 byteen_end = byteen & BYTE_EN_END_MASK;
1128
1129 byen = byteen_start | (byteen_start << 4);
1130 ret = set_registers(tp, index, type | byen, 4, data);
1131 if (ret < 0)
1132 goto error1;
1133
1134 index += 4;
1135 data += 4;
1136 size -= 4;
1137
1138 if (size) {
1139 size -= 4;
1140
1141 while (size) {
1142 if (size > limit) {
1143 ret = set_registers(tp, index,
1144 type | BYTE_EN_DWORD,
1145 limit, data);
1146 if (ret < 0)
1147 goto error1;
1148
1149 index += limit;
1150 data += limit;
1151 size -= limit;
1152 } else {
1153 ret = set_registers(tp, index,
1154 type | BYTE_EN_DWORD,
1155 size, data);
1156 if (ret < 0)
1157 goto error1;
1158
1159 index += size;
1160 data += size;
1161 size = 0;
1162 break;
1163 }
1164 }
1165
1166 byen = byteen_end | (byteen_end >> 4);
1167 ret = set_registers(tp, index, type | byen, 4, data);
1168 if (ret < 0)
1169 goto error1;
1170 }
1171
1172error1:
1173 if (ret == -ENODEV)
1174 rtl_set_unplug(tp);
1175
1176 return ret;
1177}
1178
1179static inline
1180int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data)
1181{
1182 return generic_ocp_read(tp, index, size, data, MCU_TYPE_PLA);
1183}
1184
1185static inline
1186int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data)
1187{
1188 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_PLA);
1189}
1190
1191static inline
1192int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, u16 size, void *data)
1193{
1194 return generic_ocp_write(tp, index, byteen, size, data, MCU_TYPE_USB);
1195}
1196
1197static u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index)
1198{
1199 __le32 data;
1200
1201 generic_ocp_read(tp, index, sizeof(data), &data, type);
1202
1203 return __le32_to_cpu(data);
1204}
1205
1206static void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data)
1207{
1208 __le32 tmp = __cpu_to_le32(data);
1209
1210 generic_ocp_write(tp, index, BYTE_EN_DWORD, sizeof(tmp), &tmp, type);
1211}
1212
1213static u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index)
1214{
1215 u32 data;
1216 __le32 tmp;
1217 u16 byen = BYTE_EN_WORD;
1218 u8 shift = index & 2;
1219
1220 index &= ~3;
1221 byen <<= shift;
1222
1223 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type | byen);
1224
1225 data = __le32_to_cpu(tmp);
1226 data >>= (shift * 8);
1227 data &= 0xffff;
1228
1229 return (u16)data;
1230}
1231
1232static void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data)
1233{
1234 u32 mask = 0xffff;
1235 __le32 tmp;
1236 u16 byen = BYTE_EN_WORD;
1237 u8 shift = index & 2;
1238
1239 data &= mask;
1240
1241 if (index & 2) {
1242 byen <<= shift;
1243 mask <<= (shift * 8);
1244 data <<= (shift * 8);
1245 index &= ~3;
1246 }
1247
1248 tmp = __cpu_to_le32(data);
1249
1250 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
1251}
1252
1253static u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index)
1254{
1255 u32 data;
1256 __le32 tmp;
1257 u8 shift = index & 3;
1258
1259 index &= ~3;
1260
1261 generic_ocp_read(tp, index, sizeof(tmp), &tmp, type);
1262
1263 data = __le32_to_cpu(tmp);
1264 data >>= (shift * 8);
1265 data &= 0xff;
1266
1267 return (u8)data;
1268}
1269
1270static void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data)
1271{
1272 u32 mask = 0xff;
1273 __le32 tmp;
1274 u16 byen = BYTE_EN_BYTE;
1275 u8 shift = index & 3;
1276
1277 data &= mask;
1278
1279 if (index & 3) {
1280 byen <<= shift;
1281 mask <<= (shift * 8);
1282 data <<= (shift * 8);
1283 index &= ~3;
1284 }
1285
1286 tmp = __cpu_to_le32(data);
1287
1288 generic_ocp_write(tp, index, byen, sizeof(tmp), &tmp, type);
1289}
1290
1291static u16 ocp_reg_read(struct r8152 *tp, u16 addr)
1292{
1293 u16 ocp_base, ocp_index;
1294
1295 ocp_base = addr & 0xf000;
1296 if (ocp_base != tp->ocp_base) {
1297 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base);
1298 tp->ocp_base = ocp_base;
1299 }
1300
1301 ocp_index = (addr & 0x0fff) | 0xb000;
1302 return ocp_read_word(tp, MCU_TYPE_PLA, ocp_index);
1303}
1304
1305static void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data)
1306{
1307 u16 ocp_base, ocp_index;
1308
1309 ocp_base = addr & 0xf000;
1310 if (ocp_base != tp->ocp_base) {
1311 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, ocp_base);
1312 tp->ocp_base = ocp_base;
1313 }
1314
1315 ocp_index = (addr & 0x0fff) | 0xb000;
1316 ocp_write_word(tp, MCU_TYPE_PLA, ocp_index, data);
1317}
1318
1319static inline void r8152_mdio_write(struct r8152 *tp, u32 reg_addr, u32 value)
1320{
1321 ocp_reg_write(tp, OCP_BASE_MII + reg_addr * 2, value);
1322}
1323
1324static inline int r8152_mdio_read(struct r8152 *tp, u32 reg_addr)
1325{
1326 return ocp_reg_read(tp, OCP_BASE_MII + reg_addr * 2);
1327}
1328
1329static void sram_write(struct r8152 *tp, u16 addr, u16 data)
1330{
1331 ocp_reg_write(tp, OCP_SRAM_ADDR, addr);
1332 ocp_reg_write(tp, OCP_SRAM_DATA, data);
1333}
1334
1335static u16 sram_read(struct r8152 *tp, u16 addr)
1336{
1337 ocp_reg_write(tp, OCP_SRAM_ADDR, addr);
1338 return ocp_reg_read(tp, OCP_SRAM_DATA);
1339}
1340
1341static int read_mii_word(struct net_device *netdev, int phy_id, int reg)
1342{
1343 struct r8152 *tp = netdev_priv(netdev);
1344 int ret;
1345
1346 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1347 return -ENODEV;
1348
1349 if (phy_id != R8152_PHY_ID)
1350 return -EINVAL;
1351
1352 ret = r8152_mdio_read(tp, reg);
1353
1354 return ret;
1355}
1356
1357static
1358void write_mii_word(struct net_device *netdev, int phy_id, int reg, int val)
1359{
1360 struct r8152 *tp = netdev_priv(netdev);
1361
1362 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1363 return;
1364
1365 if (phy_id != R8152_PHY_ID)
1366 return;
1367
1368 r8152_mdio_write(tp, reg, val);
1369}
1370
1371static int
1372r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags);
1373
1374static int
1375rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
1376 u32 advertising);
1377
1378static int rtl8152_set_mac_address(struct net_device *netdev, void *p)
1379{
1380 struct r8152 *tp = netdev_priv(netdev);
1381 struct sockaddr *addr = p;
1382 int ret = -EADDRNOTAVAIL;
1383
1384 if (!is_valid_ether_addr(addr->sa_data))
1385 goto out1;
1386
1387 ret = usb_autopm_get_interface(tp->intf);
1388 if (ret < 0)
1389 goto out1;
1390
1391 mutex_lock(&tp->control);
1392
1393 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
1394
1395 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
1396 pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data);
1397 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
1398
1399 mutex_unlock(&tp->control);
1400
1401 usb_autopm_put_interface(tp->intf);
1402out1:
1403 return ret;
1404}
1405
1406/* Devices containing proper chips can support a persistent
1407 * host system provided MAC address.
1408 * Examples of this are Dell TB15 and Dell WD15 docks
1409 */
1410static int vendor_mac_passthru_addr_read(struct r8152 *tp, struct sockaddr *sa)
1411{
1412 acpi_status status;
1413 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
1414 union acpi_object *obj;
1415 int ret = -EINVAL;
1416 u32 ocp_data;
1417 unsigned char buf[6];
1418 char *mac_obj_name;
1419 acpi_object_type mac_obj_type;
1420 int mac_strlen;
1421
1422 if (test_bit(LENOVO_MACPASSTHRU, &tp->flags)) {
1423 mac_obj_name = "\\MACA";
1424 mac_obj_type = ACPI_TYPE_STRING;
1425 mac_strlen = 0x16;
1426 } else {
1427 /* test for -AD variant of RTL8153 */
1428 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
1429 if ((ocp_data & AD_MASK) == 0x1000) {
1430 /* test for MAC address pass-through bit */
1431 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, EFUSE);
1432 if ((ocp_data & PASS_THRU_MASK) != 1) {
1433 netif_dbg(tp, probe, tp->netdev,
1434 "No efuse for RTL8153-AD MAC pass through\n");
1435 return -ENODEV;
1436 }
1437 } else {
1438 /* test for RTL8153-BND and RTL8153-BD */
1439 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
1440 if ((ocp_data & BND_MASK) == 0 && (ocp_data & BD_MASK) == 0) {
1441 netif_dbg(tp, probe, tp->netdev,
1442 "Invalid variant for MAC pass through\n");
1443 return -ENODEV;
1444 }
1445 }
1446
1447 mac_obj_name = "\\_SB.AMAC";
1448 mac_obj_type = ACPI_TYPE_BUFFER;
1449 mac_strlen = 0x17;
1450 }
1451
1452 /* returns _AUXMAC_#AABBCCDDEEFF# */
1453 status = acpi_evaluate_object(NULL, mac_obj_name, NULL, &buffer);
1454 obj = (union acpi_object *)buffer.pointer;
1455 if (!ACPI_SUCCESS(status))
1456 return -ENODEV;
1457 if (obj->type != mac_obj_type || obj->string.length != mac_strlen) {
1458 netif_warn(tp, probe, tp->netdev,
1459 "Invalid buffer for pass-thru MAC addr: (%d, %d)\n",
1460 obj->type, obj->string.length);
1461 goto amacout;
1462 }
1463
1464 if (strncmp(obj->string.pointer, "_AUXMAC_#", 9) != 0 ||
1465 strncmp(obj->string.pointer + 0x15, "#", 1) != 0) {
1466 netif_warn(tp, probe, tp->netdev,
1467 "Invalid header when reading pass-thru MAC addr\n");
1468 goto amacout;
1469 }
1470 ret = hex2bin(buf, obj->string.pointer + 9, 6);
1471 if (!(ret == 0 && is_valid_ether_addr(buf))) {
1472 netif_warn(tp, probe, tp->netdev,
1473 "Invalid MAC for pass-thru MAC addr: %d, %pM\n",
1474 ret, buf);
1475 ret = -EINVAL;
1476 goto amacout;
1477 }
1478 memcpy(sa->sa_data, buf, 6);
1479 netif_info(tp, probe, tp->netdev,
1480 "Using pass-thru MAC addr %pM\n", sa->sa_data);
1481
1482amacout:
1483 kfree(obj);
1484 return ret;
1485}
1486
1487static int determine_ethernet_addr(struct r8152 *tp, struct sockaddr *sa)
1488{
1489 struct net_device *dev = tp->netdev;
1490 int ret;
1491
1492 sa->sa_family = dev->type;
1493
1494 ret = eth_platform_get_mac_address(&tp->udev->dev, sa->sa_data);
1495 if (ret < 0) {
1496 if (tp->version == RTL_VER_01) {
1497 ret = pla_ocp_read(tp, PLA_IDR, 8, sa->sa_data);
1498 } else {
1499 /* if device doesn't support MAC pass through this will
1500 * be expected to be non-zero
1501 */
1502 ret = vendor_mac_passthru_addr_read(tp, sa);
1503 if (ret < 0)
1504 ret = pla_ocp_read(tp, PLA_BACKUP, 8,
1505 sa->sa_data);
1506 }
1507 }
1508
1509 if (ret < 0) {
1510 netif_err(tp, probe, dev, "Get ether addr fail\n");
1511 } else if (!is_valid_ether_addr(sa->sa_data)) {
1512 netif_err(tp, probe, dev, "Invalid ether addr %pM\n",
1513 sa->sa_data);
1514 eth_hw_addr_random(dev);
1515 ether_addr_copy(sa->sa_data, dev->dev_addr);
1516 netif_info(tp, probe, dev, "Random ether addr %pM\n",
1517 sa->sa_data);
1518 return 0;
1519 }
1520
1521 return ret;
1522}
1523
1524static int set_ethernet_addr(struct r8152 *tp)
1525{
1526 struct net_device *dev = tp->netdev;
1527 struct sockaddr sa;
1528 int ret;
1529
1530 ret = determine_ethernet_addr(tp, &sa);
1531 if (ret < 0)
1532 return ret;
1533
1534 if (tp->version == RTL_VER_01)
1535 ether_addr_copy(dev->dev_addr, sa.sa_data);
1536 else
1537 ret = rtl8152_set_mac_address(dev, &sa);
1538
1539 return ret;
1540}
1541
1542static void read_bulk_callback(struct urb *urb)
1543{
1544 struct net_device *netdev;
1545 int status = urb->status;
1546 struct rx_agg *agg;
1547 struct r8152 *tp;
1548 unsigned long flags;
1549
1550 agg = urb->context;
1551 if (!agg)
1552 return;
1553
1554 tp = agg->context;
1555 if (!tp)
1556 return;
1557
1558 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1559 return;
1560
1561 if (!test_bit(WORK_ENABLE, &tp->flags))
1562 return;
1563
1564 netdev = tp->netdev;
1565
1566 /* When link down, the driver would cancel all bulks. */
1567 /* This avoid the re-submitting bulk */
1568 if (!netif_carrier_ok(netdev))
1569 return;
1570
1571 usb_mark_last_busy(tp->udev);
1572
1573 switch (status) {
1574 case 0:
1575 if (urb->actual_length < ETH_ZLEN)
1576 break;
1577
1578 spin_lock_irqsave(&tp->rx_lock, flags);
1579 list_add_tail(&agg->list, &tp->rx_done);
1580 spin_unlock_irqrestore(&tp->rx_lock, flags);
1581 napi_schedule(&tp->napi);
1582 return;
1583 case -ESHUTDOWN:
1584 rtl_set_unplug(tp);
1585 netif_device_detach(tp->netdev);
1586 return;
1587 case -ENOENT:
1588 return; /* the urb is in unlink state */
1589 case -ETIME:
1590 if (net_ratelimit())
1591 netdev_warn(netdev, "maybe reset is needed?\n");
1592 break;
1593 default:
1594 if (net_ratelimit())
1595 netdev_warn(netdev, "Rx status %d\n", status);
1596 break;
1597 }
1598
1599 r8152_submit_rx(tp, agg, GFP_ATOMIC);
1600}
1601
1602static void write_bulk_callback(struct urb *urb)
1603{
1604 struct net_device_stats *stats;
1605 struct net_device *netdev;
1606 struct tx_agg *agg;
1607 struct r8152 *tp;
1608 unsigned long flags;
1609 int status = urb->status;
1610
1611 agg = urb->context;
1612 if (!agg)
1613 return;
1614
1615 tp = agg->context;
1616 if (!tp)
1617 return;
1618
1619 netdev = tp->netdev;
1620 stats = &netdev->stats;
1621 if (status) {
1622 if (net_ratelimit())
1623 netdev_warn(netdev, "Tx status %d\n", status);
1624 stats->tx_errors += agg->skb_num;
1625 } else {
1626 stats->tx_packets += agg->skb_num;
1627 stats->tx_bytes += agg->skb_len;
1628 }
1629
1630 spin_lock_irqsave(&tp->tx_lock, flags);
1631 list_add_tail(&agg->list, &tp->tx_free);
1632 spin_unlock_irqrestore(&tp->tx_lock, flags);
1633
1634 usb_autopm_put_interface_async(tp->intf);
1635
1636 if (!netif_carrier_ok(netdev))
1637 return;
1638
1639 if (!test_bit(WORK_ENABLE, &tp->flags))
1640 return;
1641
1642 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1643 return;
1644
1645 if (!skb_queue_empty(&tp->tx_queue))
1646 tasklet_schedule(&tp->tx_tl);
1647}
1648
1649static void intr_callback(struct urb *urb)
1650{
1651 struct r8152 *tp;
1652 __le16 *d;
1653 int status = urb->status;
1654 int res;
1655
1656 tp = urb->context;
1657 if (!tp)
1658 return;
1659
1660 if (!test_bit(WORK_ENABLE, &tp->flags))
1661 return;
1662
1663 if (test_bit(RTL8152_UNPLUG, &tp->flags))
1664 return;
1665
1666 switch (status) {
1667 case 0: /* success */
1668 break;
1669 case -ECONNRESET: /* unlink */
1670 case -ESHUTDOWN:
1671 netif_device_detach(tp->netdev);
1672 fallthrough;
1673 case -ENOENT:
1674 case -EPROTO:
1675 netif_info(tp, intr, tp->netdev,
1676 "Stop submitting intr, status %d\n", status);
1677 return;
1678 case -EOVERFLOW:
1679 netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n");
1680 goto resubmit;
1681 /* -EPIPE: should clear the halt */
1682 default:
1683 netif_info(tp, intr, tp->netdev, "intr status %d\n", status);
1684 goto resubmit;
1685 }
1686
1687 d = urb->transfer_buffer;
1688 if (INTR_LINK & __le16_to_cpu(d[0])) {
1689 if (!netif_carrier_ok(tp->netdev)) {
1690 set_bit(RTL8152_LINK_CHG, &tp->flags);
1691 schedule_delayed_work(&tp->schedule, 0);
1692 }
1693 } else {
1694 if (netif_carrier_ok(tp->netdev)) {
1695 netif_stop_queue(tp->netdev);
1696 set_bit(RTL8152_LINK_CHG, &tp->flags);
1697 schedule_delayed_work(&tp->schedule, 0);
1698 }
1699 }
1700
1701resubmit:
1702 res = usb_submit_urb(urb, GFP_ATOMIC);
1703 if (res == -ENODEV) {
1704 rtl_set_unplug(tp);
1705 netif_device_detach(tp->netdev);
1706 } else if (res) {
1707 netif_err(tp, intr, tp->netdev,
1708 "can't resubmit intr, status %d\n", res);
1709 }
1710}
1711
1712static inline void *rx_agg_align(void *data)
1713{
1714 return (void *)ALIGN((uintptr_t)data, RX_ALIGN);
1715}
1716
1717static inline void *tx_agg_align(void *data)
1718{
1719 return (void *)ALIGN((uintptr_t)data, TX_ALIGN);
1720}
1721
1722static void free_rx_agg(struct r8152 *tp, struct rx_agg *agg)
1723{
1724 list_del(&agg->info_list);
1725
1726 usb_free_urb(agg->urb);
1727 put_page(agg->page);
1728 kfree(agg);
1729
1730 atomic_dec(&tp->rx_count);
1731}
1732
1733static struct rx_agg *alloc_rx_agg(struct r8152 *tp, gfp_t mflags)
1734{
1735 struct net_device *netdev = tp->netdev;
1736 int node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1;
1737 unsigned int order = get_order(tp->rx_buf_sz);
1738 struct rx_agg *rx_agg;
1739 unsigned long flags;
1740
1741 rx_agg = kmalloc_node(sizeof(*rx_agg), mflags, node);
1742 if (!rx_agg)
1743 return NULL;
1744
1745 rx_agg->page = alloc_pages(mflags | __GFP_COMP, order);
1746 if (!rx_agg->page)
1747 goto free_rx;
1748
1749 rx_agg->buffer = page_address(rx_agg->page);
1750
1751 rx_agg->urb = usb_alloc_urb(0, mflags);
1752 if (!rx_agg->urb)
1753 goto free_buf;
1754
1755 rx_agg->context = tp;
1756
1757 INIT_LIST_HEAD(&rx_agg->list);
1758 INIT_LIST_HEAD(&rx_agg->info_list);
1759 spin_lock_irqsave(&tp->rx_lock, flags);
1760 list_add_tail(&rx_agg->info_list, &tp->rx_info);
1761 spin_unlock_irqrestore(&tp->rx_lock, flags);
1762
1763 atomic_inc(&tp->rx_count);
1764
1765 return rx_agg;
1766
1767free_buf:
1768 __free_pages(rx_agg->page, order);
1769free_rx:
1770 kfree(rx_agg);
1771 return NULL;
1772}
1773
1774static void free_all_mem(struct r8152 *tp)
1775{
1776 struct rx_agg *agg, *agg_next;
1777 unsigned long flags;
1778 int i;
1779
1780 spin_lock_irqsave(&tp->rx_lock, flags);
1781
1782 list_for_each_entry_safe(agg, agg_next, &tp->rx_info, info_list)
1783 free_rx_agg(tp, agg);
1784
1785 spin_unlock_irqrestore(&tp->rx_lock, flags);
1786
1787 WARN_ON(atomic_read(&tp->rx_count));
1788
1789 for (i = 0; i < RTL8152_MAX_TX; i++) {
1790 usb_free_urb(tp->tx_info[i].urb);
1791 tp->tx_info[i].urb = NULL;
1792
1793 kfree(tp->tx_info[i].buffer);
1794 tp->tx_info[i].buffer = NULL;
1795 tp->tx_info[i].head = NULL;
1796 }
1797
1798 usb_free_urb(tp->intr_urb);
1799 tp->intr_urb = NULL;
1800
1801 kfree(tp->intr_buff);
1802 tp->intr_buff = NULL;
1803}
1804
1805static int alloc_all_mem(struct r8152 *tp)
1806{
1807 struct net_device *netdev = tp->netdev;
1808 struct usb_interface *intf = tp->intf;
1809 struct usb_host_interface *alt = intf->cur_altsetting;
1810 struct usb_host_endpoint *ep_intr = alt->endpoint + 2;
1811 int node, i;
1812
1813 node = netdev->dev.parent ? dev_to_node(netdev->dev.parent) : -1;
1814
1815 spin_lock_init(&tp->rx_lock);
1816 spin_lock_init(&tp->tx_lock);
1817 INIT_LIST_HEAD(&tp->rx_info);
1818 INIT_LIST_HEAD(&tp->tx_free);
1819 INIT_LIST_HEAD(&tp->rx_done);
1820 skb_queue_head_init(&tp->tx_queue);
1821 skb_queue_head_init(&tp->rx_queue);
1822 atomic_set(&tp->rx_count, 0);
1823
1824 for (i = 0; i < RTL8152_MAX_RX; i++) {
1825 if (!alloc_rx_agg(tp, GFP_KERNEL))
1826 goto err1;
1827 }
1828
1829 for (i = 0; i < RTL8152_MAX_TX; i++) {
1830 struct urb *urb;
1831 u8 *buf;
1832
1833 buf = kmalloc_node(agg_buf_sz, GFP_KERNEL, node);
1834 if (!buf)
1835 goto err1;
1836
1837 if (buf != tx_agg_align(buf)) {
1838 kfree(buf);
1839 buf = kmalloc_node(agg_buf_sz + TX_ALIGN, GFP_KERNEL,
1840 node);
1841 if (!buf)
1842 goto err1;
1843 }
1844
1845 urb = usb_alloc_urb(0, GFP_KERNEL);
1846 if (!urb) {
1847 kfree(buf);
1848 goto err1;
1849 }
1850
1851 INIT_LIST_HEAD(&tp->tx_info[i].list);
1852 tp->tx_info[i].context = tp;
1853 tp->tx_info[i].urb = urb;
1854 tp->tx_info[i].buffer = buf;
1855 tp->tx_info[i].head = tx_agg_align(buf);
1856
1857 list_add_tail(&tp->tx_info[i].list, &tp->tx_free);
1858 }
1859
1860 tp->intr_urb = usb_alloc_urb(0, GFP_KERNEL);
1861 if (!tp->intr_urb)
1862 goto err1;
1863
1864 tp->intr_buff = kmalloc(INTBUFSIZE, GFP_KERNEL);
1865 if (!tp->intr_buff)
1866 goto err1;
1867
1868 tp->intr_interval = (int)ep_intr->desc.bInterval;
1869 usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3),
1870 tp->intr_buff, INTBUFSIZE, intr_callback,
1871 tp, tp->intr_interval);
1872
1873 return 0;
1874
1875err1:
1876 free_all_mem(tp);
1877 return -ENOMEM;
1878}
1879
1880static struct tx_agg *r8152_get_tx_agg(struct r8152 *tp)
1881{
1882 struct tx_agg *agg = NULL;
1883 unsigned long flags;
1884
1885 if (list_empty(&tp->tx_free))
1886 return NULL;
1887
1888 spin_lock_irqsave(&tp->tx_lock, flags);
1889 if (!list_empty(&tp->tx_free)) {
1890 struct list_head *cursor;
1891
1892 cursor = tp->tx_free.next;
1893 list_del_init(cursor);
1894 agg = list_entry(cursor, struct tx_agg, list);
1895 }
1896 spin_unlock_irqrestore(&tp->tx_lock, flags);
1897
1898 return agg;
1899}
1900
1901/* r8152_csum_workaround()
1902 * The hw limits the value of the transport offset. When the offset is out of
1903 * range, calculate the checksum by sw.
1904 */
1905static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb,
1906 struct sk_buff_head *list)
1907{
1908 if (skb_shinfo(skb)->gso_size) {
1909 netdev_features_t features = tp->netdev->features;
1910 struct sk_buff *segs, *seg, *next;
1911 struct sk_buff_head seg_list;
1912
1913 features &= ~(NETIF_F_SG | NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
1914 segs = skb_gso_segment(skb, features);
1915 if (IS_ERR(segs) || !segs)
1916 goto drop;
1917
1918 __skb_queue_head_init(&seg_list);
1919
1920 skb_list_walk_safe(segs, seg, next) {
1921 skb_mark_not_on_list(seg);
1922 __skb_queue_tail(&seg_list, seg);
1923 }
1924
1925 skb_queue_splice(&seg_list, list);
1926 dev_kfree_skb(skb);
1927 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
1928 if (skb_checksum_help(skb) < 0)
1929 goto drop;
1930
1931 __skb_queue_head(list, skb);
1932 } else {
1933 struct net_device_stats *stats;
1934
1935drop:
1936 stats = &tp->netdev->stats;
1937 stats->tx_dropped++;
1938 dev_kfree_skb(skb);
1939 }
1940}
1941
1942static inline void rtl_tx_vlan_tag(struct tx_desc *desc, struct sk_buff *skb)
1943{
1944 if (skb_vlan_tag_present(skb)) {
1945 u32 opts2;
1946
1947 opts2 = TX_VLAN_TAG | swab16(skb_vlan_tag_get(skb));
1948 desc->opts2 |= cpu_to_le32(opts2);
1949 }
1950}
1951
1952static inline void rtl_rx_vlan_tag(struct rx_desc *desc, struct sk_buff *skb)
1953{
1954 u32 opts2 = le32_to_cpu(desc->opts2);
1955
1956 if (opts2 & RX_VLAN_TAG)
1957 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
1958 swab16(opts2 & 0xffff));
1959}
1960
1961static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc,
1962 struct sk_buff *skb, u32 len, u32 transport_offset)
1963{
1964 u32 mss = skb_shinfo(skb)->gso_size;
1965 u32 opts1, opts2 = 0;
1966 int ret = TX_CSUM_SUCCESS;
1967
1968 WARN_ON_ONCE(len > TX_LEN_MAX);
1969
1970 opts1 = len | TX_FS | TX_LS;
1971
1972 if (mss) {
1973 if (transport_offset > GTTCPHO_MAX) {
1974 netif_warn(tp, tx_err, tp->netdev,
1975 "Invalid transport offset 0x%x for TSO\n",
1976 transport_offset);
1977 ret = TX_CSUM_TSO;
1978 goto unavailable;
1979 }
1980
1981 switch (vlan_get_protocol(skb)) {
1982 case htons(ETH_P_IP):
1983 opts1 |= GTSENDV4;
1984 break;
1985
1986 case htons(ETH_P_IPV6):
1987 if (skb_cow_head(skb, 0)) {
1988 ret = TX_CSUM_TSO;
1989 goto unavailable;
1990 }
1991 tcp_v6_gso_csum_prep(skb);
1992 opts1 |= GTSENDV6;
1993 break;
1994
1995 default:
1996 WARN_ON_ONCE(1);
1997 break;
1998 }
1999
2000 opts1 |= transport_offset << GTTCPHO_SHIFT;
2001 opts2 |= min(mss, MSS_MAX) << MSS_SHIFT;
2002 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
2003 u8 ip_protocol;
2004
2005 if (transport_offset > TCPHO_MAX) {
2006 netif_warn(tp, tx_err, tp->netdev,
2007 "Invalid transport offset 0x%x\n",
2008 transport_offset);
2009 ret = TX_CSUM_NONE;
2010 goto unavailable;
2011 }
2012
2013 switch (vlan_get_protocol(skb)) {
2014 case htons(ETH_P_IP):
2015 opts2 |= IPV4_CS;
2016 ip_protocol = ip_hdr(skb)->protocol;
2017 break;
2018
2019 case htons(ETH_P_IPV6):
2020 opts2 |= IPV6_CS;
2021 ip_protocol = ipv6_hdr(skb)->nexthdr;
2022 break;
2023
2024 default:
2025 ip_protocol = IPPROTO_RAW;
2026 break;
2027 }
2028
2029 if (ip_protocol == IPPROTO_TCP)
2030 opts2 |= TCP_CS;
2031 else if (ip_protocol == IPPROTO_UDP)
2032 opts2 |= UDP_CS;
2033 else
2034 WARN_ON_ONCE(1);
2035
2036 opts2 |= transport_offset << TCPHO_SHIFT;
2037 }
2038
2039 desc->opts2 = cpu_to_le32(opts2);
2040 desc->opts1 = cpu_to_le32(opts1);
2041
2042unavailable:
2043 return ret;
2044}
2045
2046static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg)
2047{
2048 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue;
2049 int remain, ret;
2050 u8 *tx_data;
2051
2052 __skb_queue_head_init(&skb_head);
2053 spin_lock(&tx_queue->lock);
2054 skb_queue_splice_init(tx_queue, &skb_head);
2055 spin_unlock(&tx_queue->lock);
2056
2057 tx_data = agg->head;
2058 agg->skb_num = 0;
2059 agg->skb_len = 0;
2060 remain = agg_buf_sz;
2061
2062 while (remain >= ETH_ZLEN + sizeof(struct tx_desc)) {
2063 struct tx_desc *tx_desc;
2064 struct sk_buff *skb;
2065 unsigned int len;
2066 u32 offset;
2067
2068 skb = __skb_dequeue(&skb_head);
2069 if (!skb)
2070 break;
2071
2072 len = skb->len + sizeof(*tx_desc);
2073
2074 if (len > remain) {
2075 __skb_queue_head(&skb_head, skb);
2076 break;
2077 }
2078
2079 tx_data = tx_agg_align(tx_data);
2080 tx_desc = (struct tx_desc *)tx_data;
2081
2082 offset = (u32)skb_transport_offset(skb);
2083
2084 if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) {
2085 r8152_csum_workaround(tp, skb, &skb_head);
2086 continue;
2087 }
2088
2089 rtl_tx_vlan_tag(tx_desc, skb);
2090
2091 tx_data += sizeof(*tx_desc);
2092
2093 len = skb->len;
2094 if (skb_copy_bits(skb, 0, tx_data, len) < 0) {
2095 struct net_device_stats *stats = &tp->netdev->stats;
2096
2097 stats->tx_dropped++;
2098 dev_kfree_skb_any(skb);
2099 tx_data -= sizeof(*tx_desc);
2100 continue;
2101 }
2102
2103 tx_data += len;
2104 agg->skb_len += len;
2105 agg->skb_num += skb_shinfo(skb)->gso_segs ?: 1;
2106
2107 dev_kfree_skb_any(skb);
2108
2109 remain = agg_buf_sz - (int)(tx_agg_align(tx_data) - agg->head);
2110
2111 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags))
2112 break;
2113 }
2114
2115 if (!skb_queue_empty(&skb_head)) {
2116 spin_lock(&tx_queue->lock);
2117 skb_queue_splice(&skb_head, tx_queue);
2118 spin_unlock(&tx_queue->lock);
2119 }
2120
2121 netif_tx_lock(tp->netdev);
2122
2123 if (netif_queue_stopped(tp->netdev) &&
2124 skb_queue_len(&tp->tx_queue) < tp->tx_qlen)
2125 netif_wake_queue(tp->netdev);
2126
2127 netif_tx_unlock(tp->netdev);
2128
2129 ret = usb_autopm_get_interface_async(tp->intf);
2130 if (ret < 0)
2131 goto out_tx_fill;
2132
2133 usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2),
2134 agg->head, (int)(tx_data - (u8 *)agg->head),
2135 (usb_complete_t)write_bulk_callback, agg);
2136
2137 ret = usb_submit_urb(agg->urb, GFP_ATOMIC);
2138 if (ret < 0)
2139 usb_autopm_put_interface_async(tp->intf);
2140
2141out_tx_fill:
2142 return ret;
2143}
2144
2145static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc)
2146{
2147 u8 checksum = CHECKSUM_NONE;
2148 u32 opts2, opts3;
2149
2150 if (!(tp->netdev->features & NETIF_F_RXCSUM))
2151 goto return_result;
2152
2153 opts2 = le32_to_cpu(rx_desc->opts2);
2154 opts3 = le32_to_cpu(rx_desc->opts3);
2155
2156 if (opts2 & RD_IPV4_CS) {
2157 if (opts3 & IPF)
2158 checksum = CHECKSUM_NONE;
2159 else if ((opts2 & RD_UDP_CS) && !(opts3 & UDPF))
2160 checksum = CHECKSUM_UNNECESSARY;
2161 else if ((opts2 & RD_TCP_CS) && !(opts3 & TCPF))
2162 checksum = CHECKSUM_UNNECESSARY;
2163 } else if (opts2 & RD_IPV6_CS) {
2164 if ((opts2 & RD_UDP_CS) && !(opts3 & UDPF))
2165 checksum = CHECKSUM_UNNECESSARY;
2166 else if ((opts2 & RD_TCP_CS) && !(opts3 & TCPF))
2167 checksum = CHECKSUM_UNNECESSARY;
2168 }
2169
2170return_result:
2171 return checksum;
2172}
2173
2174static inline bool rx_count_exceed(struct r8152 *tp)
2175{
2176 return atomic_read(&tp->rx_count) > RTL8152_MAX_RX;
2177}
2178
2179static inline int agg_offset(struct rx_agg *agg, void *addr)
2180{
2181 return (int)(addr - agg->buffer);
2182}
2183
2184static struct rx_agg *rtl_get_free_rx(struct r8152 *tp, gfp_t mflags)
2185{
2186 struct rx_agg *agg, *agg_next, *agg_free = NULL;
2187 unsigned long flags;
2188
2189 spin_lock_irqsave(&tp->rx_lock, flags);
2190
2191 list_for_each_entry_safe(agg, agg_next, &tp->rx_used, list) {
2192 if (page_count(agg->page) == 1) {
2193 if (!agg_free) {
2194 list_del_init(&agg->list);
2195 agg_free = agg;
2196 continue;
2197 }
2198 if (rx_count_exceed(tp)) {
2199 list_del_init(&agg->list);
2200 free_rx_agg(tp, agg);
2201 }
2202 break;
2203 }
2204 }
2205
2206 spin_unlock_irqrestore(&tp->rx_lock, flags);
2207
2208 if (!agg_free && atomic_read(&tp->rx_count) < tp->rx_pending)
2209 agg_free = alloc_rx_agg(tp, mflags);
2210
2211 return agg_free;
2212}
2213
2214static int rx_bottom(struct r8152 *tp, int budget)
2215{
2216 unsigned long flags;
2217 struct list_head *cursor, *next, rx_queue;
2218 int ret = 0, work_done = 0;
2219 struct napi_struct *napi = &tp->napi;
2220
2221 if (!skb_queue_empty(&tp->rx_queue)) {
2222 while (work_done < budget) {
2223 struct sk_buff *skb = __skb_dequeue(&tp->rx_queue);
2224 struct net_device *netdev = tp->netdev;
2225 struct net_device_stats *stats = &netdev->stats;
2226 unsigned int pkt_len;
2227
2228 if (!skb)
2229 break;
2230
2231 pkt_len = skb->len;
2232 napi_gro_receive(napi, skb);
2233 work_done++;
2234 stats->rx_packets++;
2235 stats->rx_bytes += pkt_len;
2236 }
2237 }
2238
2239 if (list_empty(&tp->rx_done))
2240 goto out1;
2241
2242 INIT_LIST_HEAD(&rx_queue);
2243 spin_lock_irqsave(&tp->rx_lock, flags);
2244 list_splice_init(&tp->rx_done, &rx_queue);
2245 spin_unlock_irqrestore(&tp->rx_lock, flags);
2246
2247 list_for_each_safe(cursor, next, &rx_queue) {
2248 struct rx_desc *rx_desc;
2249 struct rx_agg *agg, *agg_free;
2250 int len_used = 0;
2251 struct urb *urb;
2252 u8 *rx_data;
2253
2254 list_del_init(cursor);
2255
2256 agg = list_entry(cursor, struct rx_agg, list);
2257 urb = agg->urb;
2258 if (urb->actual_length < ETH_ZLEN)
2259 goto submit;
2260
2261 agg_free = rtl_get_free_rx(tp, GFP_ATOMIC);
2262
2263 rx_desc = agg->buffer;
2264 rx_data = agg->buffer;
2265 len_used += sizeof(struct rx_desc);
2266
2267 while (urb->actual_length > len_used) {
2268 struct net_device *netdev = tp->netdev;
2269 struct net_device_stats *stats = &netdev->stats;
2270 unsigned int pkt_len, rx_frag_head_sz;
2271 struct sk_buff *skb;
2272
2273 /* limite the skb numbers for rx_queue */
2274 if (unlikely(skb_queue_len(&tp->rx_queue) >= 1000))
2275 break;
2276
2277 pkt_len = le32_to_cpu(rx_desc->opts1) & RX_LEN_MASK;
2278 if (pkt_len < ETH_ZLEN)
2279 break;
2280
2281 len_used += pkt_len;
2282 if (urb->actual_length < len_used)
2283 break;
2284
2285 pkt_len -= ETH_FCS_LEN;
2286 rx_data += sizeof(struct rx_desc);
2287
2288 if (!agg_free || tp->rx_copybreak > pkt_len)
2289 rx_frag_head_sz = pkt_len;
2290 else
2291 rx_frag_head_sz = tp->rx_copybreak;
2292
2293 skb = napi_alloc_skb(napi, rx_frag_head_sz);
2294 if (!skb) {
2295 stats->rx_dropped++;
2296 goto find_next_rx;
2297 }
2298
2299 skb->ip_summed = r8152_rx_csum(tp, rx_desc);
2300 memcpy(skb->data, rx_data, rx_frag_head_sz);
2301 skb_put(skb, rx_frag_head_sz);
2302 pkt_len -= rx_frag_head_sz;
2303 rx_data += rx_frag_head_sz;
2304 if (pkt_len) {
2305 skb_add_rx_frag(skb, 0, agg->page,
2306 agg_offset(agg, rx_data),
2307 pkt_len,
2308 SKB_DATA_ALIGN(pkt_len));
2309 get_page(agg->page);
2310 }
2311
2312 skb->protocol = eth_type_trans(skb, netdev);
2313 rtl_rx_vlan_tag(rx_desc, skb);
2314 if (work_done < budget) {
2315 work_done++;
2316 stats->rx_packets++;
2317 stats->rx_bytes += skb->len;
2318 napi_gro_receive(napi, skb);
2319 } else {
2320 __skb_queue_tail(&tp->rx_queue, skb);
2321 }
2322
2323find_next_rx:
2324 rx_data = rx_agg_align(rx_data + pkt_len + ETH_FCS_LEN);
2325 rx_desc = (struct rx_desc *)rx_data;
2326 len_used = agg_offset(agg, rx_data);
2327 len_used += sizeof(struct rx_desc);
2328 }
2329
2330 WARN_ON(!agg_free && page_count(agg->page) > 1);
2331
2332 if (agg_free) {
2333 spin_lock_irqsave(&tp->rx_lock, flags);
2334 if (page_count(agg->page) == 1) {
2335 list_add(&agg_free->list, &tp->rx_used);
2336 } else {
2337 list_add_tail(&agg->list, &tp->rx_used);
2338 agg = agg_free;
2339 urb = agg->urb;
2340 }
2341 spin_unlock_irqrestore(&tp->rx_lock, flags);
2342 }
2343
2344submit:
2345 if (!ret) {
2346 ret = r8152_submit_rx(tp, agg, GFP_ATOMIC);
2347 } else {
2348 urb->actual_length = 0;
2349 list_add_tail(&agg->list, next);
2350 }
2351 }
2352
2353 if (!list_empty(&rx_queue)) {
2354 spin_lock_irqsave(&tp->rx_lock, flags);
2355 list_splice_tail(&rx_queue, &tp->rx_done);
2356 spin_unlock_irqrestore(&tp->rx_lock, flags);
2357 }
2358
2359out1:
2360 return work_done;
2361}
2362
2363static void tx_bottom(struct r8152 *tp)
2364{
2365 int res;
2366
2367 do {
2368 struct net_device *netdev = tp->netdev;
2369 struct tx_agg *agg;
2370
2371 if (skb_queue_empty(&tp->tx_queue))
2372 break;
2373
2374 agg = r8152_get_tx_agg(tp);
2375 if (!agg)
2376 break;
2377
2378 res = r8152_tx_agg_fill(tp, agg);
2379 if (!res)
2380 continue;
2381
2382 if (res == -ENODEV) {
2383 rtl_set_unplug(tp);
2384 netif_device_detach(netdev);
2385 } else {
2386 struct net_device_stats *stats = &netdev->stats;
2387 unsigned long flags;
2388
2389 netif_warn(tp, tx_err, netdev,
2390 "failed tx_urb %d\n", res);
2391 stats->tx_dropped += agg->skb_num;
2392
2393 spin_lock_irqsave(&tp->tx_lock, flags);
2394 list_add_tail(&agg->list, &tp->tx_free);
2395 spin_unlock_irqrestore(&tp->tx_lock, flags);
2396 }
2397 } while (res == 0);
2398}
2399
2400static void bottom_half(struct tasklet_struct *t)
2401{
2402 struct r8152 *tp = from_tasklet(tp, t, tx_tl);
2403
2404 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2405 return;
2406
2407 if (!test_bit(WORK_ENABLE, &tp->flags))
2408 return;
2409
2410 /* When link down, the driver would cancel all bulks. */
2411 /* This avoid the re-submitting bulk */
2412 if (!netif_carrier_ok(tp->netdev))
2413 return;
2414
2415 clear_bit(SCHEDULE_TASKLET, &tp->flags);
2416
2417 tx_bottom(tp);
2418}
2419
2420static int r8152_poll(struct napi_struct *napi, int budget)
2421{
2422 struct r8152 *tp = container_of(napi, struct r8152, napi);
2423 int work_done;
2424
2425 work_done = rx_bottom(tp, budget);
2426
2427 if (work_done < budget) {
2428 if (!napi_complete_done(napi, work_done))
2429 goto out;
2430 if (!list_empty(&tp->rx_done))
2431 napi_schedule(napi);
2432 }
2433
2434out:
2435 return work_done;
2436}
2437
2438static
2439int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags)
2440{
2441 int ret;
2442
2443 /* The rx would be stopped, so skip submitting */
2444 if (test_bit(RTL8152_UNPLUG, &tp->flags) ||
2445 !test_bit(WORK_ENABLE, &tp->flags) || !netif_carrier_ok(tp->netdev))
2446 return 0;
2447
2448 usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1),
2449 agg->buffer, tp->rx_buf_sz,
2450 (usb_complete_t)read_bulk_callback, agg);
2451
2452 ret = usb_submit_urb(agg->urb, mem_flags);
2453 if (ret == -ENODEV) {
2454 rtl_set_unplug(tp);
2455 netif_device_detach(tp->netdev);
2456 } else if (ret) {
2457 struct urb *urb = agg->urb;
2458 unsigned long flags;
2459
2460 urb->actual_length = 0;
2461 spin_lock_irqsave(&tp->rx_lock, flags);
2462 list_add_tail(&agg->list, &tp->rx_done);
2463 spin_unlock_irqrestore(&tp->rx_lock, flags);
2464
2465 netif_err(tp, rx_err, tp->netdev,
2466 "Couldn't submit rx[%p], ret = %d\n", agg, ret);
2467
2468 napi_schedule(&tp->napi);
2469 }
2470
2471 return ret;
2472}
2473
2474static void rtl_drop_queued_tx(struct r8152 *tp)
2475{
2476 struct net_device_stats *stats = &tp->netdev->stats;
2477 struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue;
2478 struct sk_buff *skb;
2479
2480 if (skb_queue_empty(tx_queue))
2481 return;
2482
2483 __skb_queue_head_init(&skb_head);
2484 spin_lock_bh(&tx_queue->lock);
2485 skb_queue_splice_init(tx_queue, &skb_head);
2486 spin_unlock_bh(&tx_queue->lock);
2487
2488 while ((skb = __skb_dequeue(&skb_head))) {
2489 dev_kfree_skb(skb);
2490 stats->tx_dropped++;
2491 }
2492}
2493
2494static void rtl8152_tx_timeout(struct net_device *netdev, unsigned int txqueue)
2495{
2496 struct r8152 *tp = netdev_priv(netdev);
2497
2498 netif_warn(tp, tx_err, netdev, "Tx timeout\n");
2499
2500 usb_queue_reset_device(tp->intf);
2501}
2502
2503static void rtl8152_set_rx_mode(struct net_device *netdev)
2504{
2505 struct r8152 *tp = netdev_priv(netdev);
2506
2507 if (netif_carrier_ok(netdev)) {
2508 set_bit(RTL8152_SET_RX_MODE, &tp->flags);
2509 schedule_delayed_work(&tp->schedule, 0);
2510 }
2511}
2512
2513static void _rtl8152_set_rx_mode(struct net_device *netdev)
2514{
2515 struct r8152 *tp = netdev_priv(netdev);
2516 u32 mc_filter[2]; /* Multicast hash filter */
2517 __le32 tmp[2];
2518 u32 ocp_data;
2519
2520 netif_stop_queue(netdev);
2521 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
2522 ocp_data &= ~RCR_ACPT_ALL;
2523 ocp_data |= RCR_AB | RCR_APM;
2524
2525 if (netdev->flags & IFF_PROMISC) {
2526 /* Unconditionally log net taps. */
2527 netif_notice(tp, link, netdev, "Promiscuous mode enabled\n");
2528 ocp_data |= RCR_AM | RCR_AAP;
2529 mc_filter[1] = 0xffffffff;
2530 mc_filter[0] = 0xffffffff;
2531 } else if ((netdev_mc_count(netdev) > multicast_filter_limit) ||
2532 (netdev->flags & IFF_ALLMULTI)) {
2533 /* Too many to filter perfectly -- accept all multicasts. */
2534 ocp_data |= RCR_AM;
2535 mc_filter[1] = 0xffffffff;
2536 mc_filter[0] = 0xffffffff;
2537 } else {
2538 struct netdev_hw_addr *ha;
2539
2540 mc_filter[1] = 0;
2541 mc_filter[0] = 0;
2542 netdev_for_each_mc_addr(ha, netdev) {
2543 int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
2544
2545 mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
2546 ocp_data |= RCR_AM;
2547 }
2548 }
2549
2550 tmp[0] = __cpu_to_le32(swab32(mc_filter[1]));
2551 tmp[1] = __cpu_to_le32(swab32(mc_filter[0]));
2552
2553 pla_ocp_write(tp, PLA_MAR, BYTE_EN_DWORD, sizeof(tmp), tmp);
2554 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
2555 netif_wake_queue(netdev);
2556}
2557
2558static netdev_features_t
2559rtl8152_features_check(struct sk_buff *skb, struct net_device *dev,
2560 netdev_features_t features)
2561{
2562 u32 mss = skb_shinfo(skb)->gso_size;
2563 int max_offset = mss ? GTTCPHO_MAX : TCPHO_MAX;
2564 int offset = skb_transport_offset(skb);
2565
2566 if ((mss || skb->ip_summed == CHECKSUM_PARTIAL) && offset > max_offset)
2567 features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
2568 else if ((skb->len + sizeof(struct tx_desc)) > agg_buf_sz)
2569 features &= ~NETIF_F_GSO_MASK;
2570
2571 return features;
2572}
2573
2574static netdev_tx_t rtl8152_start_xmit(struct sk_buff *skb,
2575 struct net_device *netdev)
2576{
2577 struct r8152 *tp = netdev_priv(netdev);
2578
2579 skb_tx_timestamp(skb);
2580
2581 skb_queue_tail(&tp->tx_queue, skb);
2582
2583 if (!list_empty(&tp->tx_free)) {
2584 if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
2585 set_bit(SCHEDULE_TASKLET, &tp->flags);
2586 schedule_delayed_work(&tp->schedule, 0);
2587 } else {
2588 usb_mark_last_busy(tp->udev);
2589 tasklet_schedule(&tp->tx_tl);
2590 }
2591 } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) {
2592 netif_stop_queue(netdev);
2593 }
2594
2595 return NETDEV_TX_OK;
2596}
2597
2598static void r8152b_reset_packet_filter(struct r8152 *tp)
2599{
2600 u32 ocp_data;
2601
2602 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC);
2603 ocp_data &= ~FMC_FCR_MCU_EN;
2604 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data);
2605 ocp_data |= FMC_FCR_MCU_EN;
2606 ocp_write_word(tp, MCU_TYPE_PLA, PLA_FMC, ocp_data);
2607}
2608
2609static void rtl8152_nic_reset(struct r8152 *tp)
2610{
2611 int i;
2612
2613 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, CR_RST);
2614
2615 for (i = 0; i < 1000; i++) {
2616 if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST))
2617 break;
2618 usleep_range(100, 400);
2619 }
2620}
2621
2622static void set_tx_qlen(struct r8152 *tp)
2623{
2624 struct net_device *netdev = tp->netdev;
2625
2626 tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN +
2627 sizeof(struct tx_desc));
2628}
2629
2630static inline u8 rtl8152_get_speed(struct r8152 *tp)
2631{
2632 return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS);
2633}
2634
2635static void rtl_eee_plus_en(struct r8152 *tp, bool enable)
2636{
2637 u32 ocp_data;
2638
2639 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR);
2640 if (enable)
2641 ocp_data |= EEEP_CR_EEEP_TX;
2642 else
2643 ocp_data &= ~EEEP_CR_EEEP_TX;
2644 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEEP_CR, ocp_data);
2645}
2646
2647static void rtl_set_eee_plus(struct r8152 *tp)
2648{
2649 if (rtl8152_get_speed(tp) & _10bps)
2650 rtl_eee_plus_en(tp, true);
2651 else
2652 rtl_eee_plus_en(tp, false);
2653}
2654
2655static void rxdy_gated_en(struct r8152 *tp, bool enable)
2656{
2657 u32 ocp_data;
2658
2659 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1);
2660 if (enable)
2661 ocp_data |= RXDY_GATED_EN;
2662 else
2663 ocp_data &= ~RXDY_GATED_EN;
2664 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data);
2665}
2666
2667static int rtl_start_rx(struct r8152 *tp)
2668{
2669 struct rx_agg *agg, *agg_next;
2670 struct list_head tmp_list;
2671 unsigned long flags;
2672 int ret = 0, i = 0;
2673
2674 INIT_LIST_HEAD(&tmp_list);
2675
2676 spin_lock_irqsave(&tp->rx_lock, flags);
2677
2678 INIT_LIST_HEAD(&tp->rx_done);
2679 INIT_LIST_HEAD(&tp->rx_used);
2680
2681 list_splice_init(&tp->rx_info, &tmp_list);
2682
2683 spin_unlock_irqrestore(&tp->rx_lock, flags);
2684
2685 list_for_each_entry_safe(agg, agg_next, &tmp_list, info_list) {
2686 INIT_LIST_HEAD(&agg->list);
2687
2688 /* Only RTL8152_MAX_RX rx_agg need to be submitted. */
2689 if (++i > RTL8152_MAX_RX) {
2690 spin_lock_irqsave(&tp->rx_lock, flags);
2691 list_add_tail(&agg->list, &tp->rx_used);
2692 spin_unlock_irqrestore(&tp->rx_lock, flags);
2693 } else if (unlikely(ret < 0)) {
2694 spin_lock_irqsave(&tp->rx_lock, flags);
2695 list_add_tail(&agg->list, &tp->rx_done);
2696 spin_unlock_irqrestore(&tp->rx_lock, flags);
2697 } else {
2698 ret = r8152_submit_rx(tp, agg, GFP_KERNEL);
2699 }
2700 }
2701
2702 spin_lock_irqsave(&tp->rx_lock, flags);
2703 WARN_ON(!list_empty(&tp->rx_info));
2704 list_splice(&tmp_list, &tp->rx_info);
2705 spin_unlock_irqrestore(&tp->rx_lock, flags);
2706
2707 return ret;
2708}
2709
2710static int rtl_stop_rx(struct r8152 *tp)
2711{
2712 struct rx_agg *agg, *agg_next;
2713 struct list_head tmp_list;
2714 unsigned long flags;
2715
2716 INIT_LIST_HEAD(&tmp_list);
2717
2718 /* The usb_kill_urb() couldn't be used in atomic.
2719 * Therefore, move the list of rx_info to a tmp one.
2720 * Then, list_for_each_entry_safe could be used without
2721 * spin lock.
2722 */
2723
2724 spin_lock_irqsave(&tp->rx_lock, flags);
2725 list_splice_init(&tp->rx_info, &tmp_list);
2726 spin_unlock_irqrestore(&tp->rx_lock, flags);
2727
2728 list_for_each_entry_safe(agg, agg_next, &tmp_list, info_list) {
2729 /* At least RTL8152_MAX_RX rx_agg have the page_count being
2730 * equal to 1, so the other ones could be freed safely.
2731 */
2732 if (page_count(agg->page) > 1)
2733 free_rx_agg(tp, agg);
2734 else
2735 usb_kill_urb(agg->urb);
2736 }
2737
2738 /* Move back the list of temp to the rx_info */
2739 spin_lock_irqsave(&tp->rx_lock, flags);
2740 WARN_ON(!list_empty(&tp->rx_info));
2741 list_splice(&tmp_list, &tp->rx_info);
2742 spin_unlock_irqrestore(&tp->rx_lock, flags);
2743
2744 while (!skb_queue_empty(&tp->rx_queue))
2745 dev_kfree_skb(__skb_dequeue(&tp->rx_queue));
2746
2747 return 0;
2748}
2749
2750static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp)
2751{
2752 ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN,
2753 OWN_UPDATE | OWN_CLEAR);
2754}
2755
2756static int rtl_enable(struct r8152 *tp)
2757{
2758 u32 ocp_data;
2759
2760 r8152b_reset_packet_filter(tp);
2761
2762 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR);
2763 ocp_data |= CR_RE | CR_TE;
2764 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data);
2765
2766 switch (tp->version) {
2767 case RTL_VER_08:
2768 case RTL_VER_09:
2769 r8153b_rx_agg_chg_indicate(tp);
2770 break;
2771 default:
2772 break;
2773 }
2774
2775 rxdy_gated_en(tp, false);
2776
2777 return 0;
2778}
2779
2780static int rtl8152_enable(struct r8152 *tp)
2781{
2782 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2783 return -ENODEV;
2784
2785 set_tx_qlen(tp);
2786 rtl_set_eee_plus(tp);
2787
2788 return rtl_enable(tp);
2789}
2790
2791static void r8153_set_rx_early_timeout(struct r8152 *tp)
2792{
2793 u32 ocp_data = tp->coalesce / 8;
2794
2795 switch (tp->version) {
2796 case RTL_VER_03:
2797 case RTL_VER_04:
2798 case RTL_VER_05:
2799 case RTL_VER_06:
2800 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
2801 ocp_data);
2802 break;
2803
2804 case RTL_VER_08:
2805 case RTL_VER_09:
2806 /* The RTL8153B uses USB_RX_EXTRA_AGGR_TMR for rx timeout
2807 * primarily. For USB_RX_EARLY_TIMEOUT, we fix it to 128ns.
2808 */
2809 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_TIMEOUT,
2810 128 / 8);
2811 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EXTRA_AGGR_TMR,
2812 ocp_data);
2813 break;
2814
2815 default:
2816 break;
2817 }
2818}
2819
2820static void r8153_set_rx_early_size(struct r8152 *tp)
2821{
2822 u32 ocp_data = tp->rx_buf_sz - rx_reserved_size(tp->netdev->mtu);
2823
2824 switch (tp->version) {
2825 case RTL_VER_03:
2826 case RTL_VER_04:
2827 case RTL_VER_05:
2828 case RTL_VER_06:
2829 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
2830 ocp_data / 4);
2831 break;
2832 case RTL_VER_08:
2833 case RTL_VER_09:
2834 ocp_write_word(tp, MCU_TYPE_USB, USB_RX_EARLY_SIZE,
2835 ocp_data / 8);
2836 break;
2837 default:
2838 WARN_ON_ONCE(1);
2839 break;
2840 }
2841}
2842
2843static int rtl8153_enable(struct r8152 *tp)
2844{
2845 if (test_bit(RTL8152_UNPLUG, &tp->flags))
2846 return -ENODEV;
2847
2848 set_tx_qlen(tp);
2849 rtl_set_eee_plus(tp);
2850 r8153_set_rx_early_timeout(tp);
2851 r8153_set_rx_early_size(tp);
2852
2853 if (tp->version == RTL_VER_09) {
2854 u32 ocp_data;
2855
2856 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
2857 ocp_data &= ~FC_PATCH_TASK;
2858 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
2859 usleep_range(1000, 2000);
2860 ocp_data |= FC_PATCH_TASK;
2861 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
2862 }
2863
2864 return rtl_enable(tp);
2865}
2866
2867static void rtl_disable(struct r8152 *tp)
2868{
2869 u32 ocp_data;
2870 int i;
2871
2872 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
2873 rtl_drop_queued_tx(tp);
2874 return;
2875 }
2876
2877 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
2878 ocp_data &= ~RCR_ACPT_ALL;
2879 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
2880
2881 rtl_drop_queued_tx(tp);
2882
2883 for (i = 0; i < RTL8152_MAX_TX; i++)
2884 usb_kill_urb(tp->tx_info[i].urb);
2885
2886 rxdy_gated_en(tp, true);
2887
2888 for (i = 0; i < 1000; i++) {
2889 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
2890 if ((ocp_data & FIFO_EMPTY) == FIFO_EMPTY)
2891 break;
2892 usleep_range(1000, 2000);
2893 }
2894
2895 for (i = 0; i < 1000; i++) {
2896 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY)
2897 break;
2898 usleep_range(1000, 2000);
2899 }
2900
2901 rtl_stop_rx(tp);
2902
2903 rtl8152_nic_reset(tp);
2904}
2905
2906static void r8152_power_cut_en(struct r8152 *tp, bool enable)
2907{
2908 u32 ocp_data;
2909
2910 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL);
2911 if (enable)
2912 ocp_data |= POWER_CUT;
2913 else
2914 ocp_data &= ~POWER_CUT;
2915 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data);
2916
2917 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS);
2918 ocp_data &= ~RESUME_INDICATE;
2919 ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data);
2920}
2921
2922static void rtl_rx_vlan_en(struct r8152 *tp, bool enable)
2923{
2924 u32 ocp_data;
2925
2926 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR);
2927 if (enable)
2928 ocp_data |= CPCR_RX_VLAN;
2929 else
2930 ocp_data &= ~CPCR_RX_VLAN;
2931 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data);
2932}
2933
2934static int rtl8152_set_features(struct net_device *dev,
2935 netdev_features_t features)
2936{
2937 netdev_features_t changed = features ^ dev->features;
2938 struct r8152 *tp = netdev_priv(dev);
2939 int ret;
2940
2941 ret = usb_autopm_get_interface(tp->intf);
2942 if (ret < 0)
2943 goto out;
2944
2945 mutex_lock(&tp->control);
2946
2947 if (changed & NETIF_F_HW_VLAN_CTAG_RX) {
2948 if (features & NETIF_F_HW_VLAN_CTAG_RX)
2949 rtl_rx_vlan_en(tp, true);
2950 else
2951 rtl_rx_vlan_en(tp, false);
2952 }
2953
2954 mutex_unlock(&tp->control);
2955
2956 usb_autopm_put_interface(tp->intf);
2957
2958out:
2959 return ret;
2960}
2961
2962#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
2963
2964static u32 __rtl_get_wol(struct r8152 *tp)
2965{
2966 u32 ocp_data;
2967 u32 wolopts = 0;
2968
2969 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
2970 if (ocp_data & LINK_ON_WAKE_EN)
2971 wolopts |= WAKE_PHY;
2972
2973 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5);
2974 if (ocp_data & UWF_EN)
2975 wolopts |= WAKE_UCAST;
2976 if (ocp_data & BWF_EN)
2977 wolopts |= WAKE_BCAST;
2978 if (ocp_data & MWF_EN)
2979 wolopts |= WAKE_MCAST;
2980
2981 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL);
2982 if (ocp_data & MAGIC_EN)
2983 wolopts |= WAKE_MAGIC;
2984
2985 return wolopts;
2986}
2987
2988static void __rtl_set_wol(struct r8152 *tp, u32 wolopts)
2989{
2990 u32 ocp_data;
2991
2992 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
2993
2994 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
2995 ocp_data &= ~LINK_ON_WAKE_EN;
2996 if (wolopts & WAKE_PHY)
2997 ocp_data |= LINK_ON_WAKE_EN;
2998 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
2999
3000 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5);
3001 ocp_data &= ~(UWF_EN | BWF_EN | MWF_EN);
3002 if (wolopts & WAKE_UCAST)
3003 ocp_data |= UWF_EN;
3004 if (wolopts & WAKE_BCAST)
3005 ocp_data |= BWF_EN;
3006 if (wolopts & WAKE_MCAST)
3007 ocp_data |= MWF_EN;
3008 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data);
3009
3010 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
3011
3012 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL);
3013 ocp_data &= ~MAGIC_EN;
3014 if (wolopts & WAKE_MAGIC)
3015 ocp_data |= MAGIC_EN;
3016 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data);
3017
3018 if (wolopts & WAKE_ANY)
3019 device_set_wakeup_enable(&tp->udev->dev, true);
3020 else
3021 device_set_wakeup_enable(&tp->udev->dev, false);
3022}
3023
3024static void r8153_mac_clk_spd(struct r8152 *tp, bool enable)
3025{
3026 /* MAC clock speed down */
3027 if (enable) {
3028 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL,
3029 ALDPS_SPDWN_RATIO);
3030 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2,
3031 EEE_SPDWN_RATIO);
3032 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3,
3033 PKT_AVAIL_SPDWN_EN | SUSPEND_SPDWN_EN |
3034 U1U2_SPDWN_EN | L1_SPDWN_EN);
3035 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4,
3036 PWRSAVE_SPDWN_EN | RXDV_SPDWN_EN | TX10MIDLE_EN |
3037 TP100_SPDWN_EN | TP500_SPDWN_EN | EEE_SPDWN_EN |
3038 TP1000_SPDWN_EN);
3039 } else {
3040 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, 0);
3041 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, 0);
3042 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, 0);
3043 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL4, 0);
3044 }
3045}
3046
3047static void r8153_u1u2en(struct r8152 *tp, bool enable)
3048{
3049 u8 u1u2[8];
3050
3051 if (enable)
3052 memset(u1u2, 0xff, sizeof(u1u2));
3053 else
3054 memset(u1u2, 0x00, sizeof(u1u2));
3055
3056 usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2);
3057}
3058
3059static void r8153b_u1u2en(struct r8152 *tp, bool enable)
3060{
3061 u32 ocp_data;
3062
3063 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG);
3064 if (enable)
3065 ocp_data |= LPM_U1U2_EN;
3066 else
3067 ocp_data &= ~LPM_U1U2_EN;
3068
3069 ocp_write_word(tp, MCU_TYPE_USB, USB_LPM_CONFIG, ocp_data);
3070}
3071
3072static void r8153_u2p3en(struct r8152 *tp, bool enable)
3073{
3074 u32 ocp_data;
3075
3076 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL);
3077 if (enable)
3078 ocp_data |= U2P3_ENABLE;
3079 else
3080 ocp_data &= ~U2P3_ENABLE;
3081 ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data);
3082}
3083
3084static void r8153b_ups_flags(struct r8152 *tp)
3085{
3086 u32 ups_flags = 0;
3087
3088 if (tp->ups_info.green)
3089 ups_flags |= UPS_FLAGS_EN_GREEN;
3090
3091 if (tp->ups_info.aldps)
3092 ups_flags |= UPS_FLAGS_EN_ALDPS;
3093
3094 if (tp->ups_info.eee)
3095 ups_flags |= UPS_FLAGS_EN_EEE;
3096
3097 if (tp->ups_info.flow_control)
3098 ups_flags |= UPS_FLAGS_EN_FLOW_CTR;
3099
3100 if (tp->ups_info.eee_ckdiv)
3101 ups_flags |= UPS_FLAGS_EN_EEE_CKDIV;
3102
3103 if (tp->ups_info.eee_cmod_lv)
3104 ups_flags |= UPS_FLAGS_EEE_CMOD_LV_EN;
3105
3106 if (tp->ups_info._10m_ckdiv)
3107 ups_flags |= UPS_FLAGS_EN_10M_CKDIV;
3108
3109 if (tp->ups_info.eee_plloff_100)
3110 ups_flags |= UPS_FLAGS_EEE_PLLOFF_100;
3111
3112 if (tp->ups_info.eee_plloff_giga)
3113 ups_flags |= UPS_FLAGS_EEE_PLLOFF_GIGA;
3114
3115 if (tp->ups_info._250m_ckdiv)
3116 ups_flags |= UPS_FLAGS_250M_CKDIV;
3117
3118 if (tp->ups_info.ctap_short_off)
3119 ups_flags |= UPS_FLAGS_CTAP_SHORT_DIS;
3120
3121 switch (tp->ups_info.speed_duplex) {
3122 case NWAY_10M_HALF:
3123 ups_flags |= ups_flags_speed(1);
3124 break;
3125 case NWAY_10M_FULL:
3126 ups_flags |= ups_flags_speed(2);
3127 break;
3128 case NWAY_100M_HALF:
3129 ups_flags |= ups_flags_speed(3);
3130 break;
3131 case NWAY_100M_FULL:
3132 ups_flags |= ups_flags_speed(4);
3133 break;
3134 case NWAY_1000M_FULL:
3135 ups_flags |= ups_flags_speed(5);
3136 break;
3137 case FORCE_10M_HALF:
3138 ups_flags |= ups_flags_speed(6);
3139 break;
3140 case FORCE_10M_FULL:
3141 ups_flags |= ups_flags_speed(7);
3142 break;
3143 case FORCE_100M_HALF:
3144 ups_flags |= ups_flags_speed(8);
3145 break;
3146 case FORCE_100M_FULL:
3147 ups_flags |= ups_flags_speed(9);
3148 break;
3149 default:
3150 break;
3151 }
3152
3153 ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
3154}
3155
3156static void rtl_green_en(struct r8152 *tp, bool enable)
3157{
3158 u16 data;
3159
3160 data = sram_read(tp, SRAM_GREEN_CFG);
3161 if (enable)
3162 data |= GREEN_ETH_EN;
3163 else
3164 data &= ~GREEN_ETH_EN;
3165 sram_write(tp, SRAM_GREEN_CFG, data);
3166
3167 tp->ups_info.green = enable;
3168}
3169
3170static void r8153b_green_en(struct r8152 *tp, bool enable)
3171{
3172 if (enable) {
3173 sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */
3174 sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */
3175 sram_write(tp, 0x805d, 0x0022); /* 1000M short abiq&ldvbias */
3176 } else {
3177 sram_write(tp, 0x8045, 0x2444); /* 10M abiq&ldvbias */
3178 sram_write(tp, 0x804d, 0x2444); /* 100M short abiq&ldvbias */
3179 sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */
3180 }
3181
3182 rtl_green_en(tp, true);
3183}
3184
3185static u16 r8153_phy_status(struct r8152 *tp, u16 desired)
3186{
3187 u16 data;
3188 int i;
3189
3190 for (i = 0; i < 500; i++) {
3191 data = ocp_reg_read(tp, OCP_PHY_STATUS);
3192 data &= PHY_STAT_MASK;
3193 if (desired) {
3194 if (data == desired)
3195 break;
3196 } else if (data == PHY_STAT_LAN_ON || data == PHY_STAT_PWRDN ||
3197 data == PHY_STAT_EXT_INIT) {
3198 break;
3199 }
3200
3201 msleep(20);
3202 if (test_bit(RTL8152_UNPLUG, &tp->flags))
3203 break;
3204 }
3205
3206 return data;
3207}
3208
3209static void r8153b_ups_en(struct r8152 *tp, bool enable)
3210{
3211 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_POWER_CUT);
3212
3213 if (enable) {
3214 r8153b_ups_flags(tp);
3215
3216 ocp_data |= UPS_EN | USP_PREWAKE | PHASE2_EN;
3217 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3218
3219 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff);
3220 ocp_data |= BIT(0);
3221 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
3222 } else {
3223 ocp_data &= ~(UPS_EN | USP_PREWAKE);
3224 ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3225
3226 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, 0xcfff);
3227 ocp_data &= ~BIT(0);
3228 ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
3229
3230 if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
3231 int i;
3232
3233 for (i = 0; i < 500; i++) {
3234 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
3235 AUTOLOAD_DONE)
3236 break;
3237 msleep(20);
3238 }
3239
3240 tp->rtl_ops.hw_phy_cfg(tp);
3241
3242 rtl8152_set_speed(tp, tp->autoneg, tp->speed,
3243 tp->duplex, tp->advertising);
3244 }
3245 }
3246}
3247
3248static void r8153_power_cut_en(struct r8152 *tp, bool enable)
3249{
3250 u32 ocp_data;
3251
3252 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT);
3253 if (enable)
3254 ocp_data |= PWR_EN | PHASE2_EN;
3255 else
3256 ocp_data &= ~(PWR_EN | PHASE2_EN);
3257 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3258
3259 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
3260 ocp_data &= ~PCUT_STATUS;
3261 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
3262}
3263
3264static void r8153b_power_cut_en(struct r8152 *tp, bool enable)
3265{
3266 u32 ocp_data;
3267
3268 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_POWER_CUT);
3269 if (enable)
3270 ocp_data |= PWR_EN | PHASE2_EN;
3271 else
3272 ocp_data &= ~PWR_EN;
3273 ocp_write_word(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
3274
3275 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
3276 ocp_data &= ~PCUT_STATUS;
3277 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
3278}
3279
3280static void r8153_queue_wake(struct r8152 *tp, bool enable)
3281{
3282 u32 ocp_data;
3283
3284 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG);
3285 if (enable)
3286 ocp_data |= UPCOMING_RUNTIME_D3;
3287 else
3288 ocp_data &= ~UPCOMING_RUNTIME_D3;
3289 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data);
3290
3291 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG);
3292 ocp_data &= ~LINK_CHG_EVENT;
3293 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data);
3294
3295 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
3296 ocp_data &= ~LINK_CHANGE_FLAG;
3297 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
3298}
3299
3300static bool rtl_can_wakeup(struct r8152 *tp)
3301{
3302 struct usb_device *udev = tp->udev;
3303
3304 return (udev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_WAKEUP);
3305}
3306
3307static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable)
3308{
3309 if (enable) {
3310 u32 ocp_data;
3311
3312 __rtl_set_wol(tp, WAKE_ANY);
3313
3314 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
3315
3316 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
3317 ocp_data |= LINK_OFF_WAKE_EN;
3318 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
3319
3320 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
3321 } else {
3322 u32 ocp_data;
3323
3324 __rtl_set_wol(tp, tp->saved_wolopts);
3325
3326 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG);
3327
3328 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34);
3329 ocp_data &= ~LINK_OFF_WAKE_EN;
3330 ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data);
3331
3332 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
3333 }
3334}
3335
3336static void rtl8153_runtime_enable(struct r8152 *tp, bool enable)
3337{
3338 if (enable) {
3339 r8153_u1u2en(tp, false);
3340 r8153_u2p3en(tp, false);
3341 r8153_mac_clk_spd(tp, true);
3342 rtl_runtime_suspend_enable(tp, true);
3343 } else {
3344 rtl_runtime_suspend_enable(tp, false);
3345 r8153_mac_clk_spd(tp, false);
3346
3347 switch (tp->version) {
3348 case RTL_VER_03:
3349 case RTL_VER_04:
3350 break;
3351 case RTL_VER_05:
3352 case RTL_VER_06:
3353 default:
3354 r8153_u2p3en(tp, true);
3355 break;
3356 }
3357
3358 r8153_u1u2en(tp, true);
3359 }
3360}
3361
3362static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable)
3363{
3364 if (enable) {
3365 r8153_queue_wake(tp, true);
3366 r8153b_u1u2en(tp, false);
3367 r8153_u2p3en(tp, false);
3368 rtl_runtime_suspend_enable(tp, true);
3369 r8153b_ups_en(tp, true);
3370 } else {
3371 r8153b_ups_en(tp, false);
3372 r8153_queue_wake(tp, false);
3373 rtl_runtime_suspend_enable(tp, false);
3374 if (tp->udev->speed >= USB_SPEED_SUPER)
3375 r8153b_u1u2en(tp, true);
3376 }
3377}
3378
3379static void r8153_teredo_off(struct r8152 *tp)
3380{
3381 u32 ocp_data;
3382
3383 switch (tp->version) {
3384 case RTL_VER_01:
3385 case RTL_VER_02:
3386 case RTL_VER_03:
3387 case RTL_VER_04:
3388 case RTL_VER_05:
3389 case RTL_VER_06:
3390 case RTL_VER_07:
3391 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG);
3392 ocp_data &= ~(TEREDO_SEL | TEREDO_RS_EVENT_MASK |
3393 OOB_TEREDO_EN);
3394 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data);
3395 break;
3396
3397 case RTL_VER_08:
3398 case RTL_VER_09:
3399 /* The bit 0 ~ 7 are relative with teredo settings. They are
3400 * W1C (write 1 to clear), so set all 1 to disable it.
3401 */
3402 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, 0xff);
3403 break;
3404
3405 default:
3406 break;
3407 }
3408
3409 ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE);
3410 ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0);
3411 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0);
3412}
3413
3414static void rtl_reset_bmu(struct r8152 *tp)
3415{
3416 u32 ocp_data;
3417
3418 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_BMU_RESET);
3419 ocp_data &= ~(BMU_RESET_EP_IN | BMU_RESET_EP_OUT);
3420 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
3421 ocp_data |= BMU_RESET_EP_IN | BMU_RESET_EP_OUT;
3422 ocp_write_byte(tp, MCU_TYPE_USB, USB_BMU_RESET, ocp_data);
3423}
3424
3425/* Clear the bp to stop the firmware before loading a new one */
3426static void rtl_clear_bp(struct r8152 *tp, u16 type)
3427{
3428 switch (tp->version) {
3429 case RTL_VER_01:
3430 case RTL_VER_02:
3431 case RTL_VER_07:
3432 break;
3433 case RTL_VER_03:
3434 case RTL_VER_04:
3435 case RTL_VER_05:
3436 case RTL_VER_06:
3437 ocp_write_byte(tp, type, PLA_BP_EN, 0);
3438 break;
3439 case RTL_VER_08:
3440 case RTL_VER_09:
3441 default:
3442 if (type == MCU_TYPE_USB) {
3443 ocp_write_byte(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
3444
3445 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_8, 0);
3446 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_9, 0);
3447 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_10, 0);
3448 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_11, 0);
3449 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_12, 0);
3450 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_13, 0);
3451 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_14, 0);
3452 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_15, 0);
3453 } else {
3454 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0);
3455 }
3456 break;
3457 }
3458
3459 ocp_write_word(tp, type, PLA_BP_0, 0);
3460 ocp_write_word(tp, type, PLA_BP_1, 0);
3461 ocp_write_word(tp, type, PLA_BP_2, 0);
3462 ocp_write_word(tp, type, PLA_BP_3, 0);
3463 ocp_write_word(tp, type, PLA_BP_4, 0);
3464 ocp_write_word(tp, type, PLA_BP_5, 0);
3465 ocp_write_word(tp, type, PLA_BP_6, 0);
3466 ocp_write_word(tp, type, PLA_BP_7, 0);
3467
3468 /* wait 3 ms to make sure the firmware is stopped */
3469 usleep_range(3000, 6000);
3470 ocp_write_word(tp, type, PLA_BP_BA, 0);
3471}
3472
3473static int rtl_phy_patch_request(struct r8152 *tp, bool request, bool wait)
3474{
3475 u16 data, check;
3476 int i;
3477
3478 data = ocp_reg_read(tp, OCP_PHY_PATCH_CMD);
3479 if (request) {
3480 data |= PATCH_REQUEST;
3481 check = 0;
3482 } else {
3483 data &= ~PATCH_REQUEST;
3484 check = PATCH_READY;
3485 }
3486 ocp_reg_write(tp, OCP_PHY_PATCH_CMD, data);
3487
3488 for (i = 0; wait && i < 5000; i++) {
3489 u32 ocp_data;
3490
3491 usleep_range(1000, 2000);
3492 ocp_data = ocp_reg_read(tp, OCP_PHY_PATCH_STAT);
3493 if ((ocp_data & PATCH_READY) ^ check)
3494 break;
3495 }
3496
3497 if (request && wait &&
3498 !(ocp_reg_read(tp, OCP_PHY_PATCH_STAT) & PATCH_READY)) {
3499 dev_err(&tp->intf->dev, "PHY patch request fail\n");
3500 rtl_phy_patch_request(tp, false, false);
3501 return -ETIME;
3502 } else {
3503 return 0;
3504 }
3505}
3506
3507static void rtl_patch_key_set(struct r8152 *tp, u16 key_addr, u16 patch_key)
3508{
3509 if (patch_key && key_addr) {
3510 sram_write(tp, key_addr, patch_key);
3511 sram_write(tp, SRAM_PHY_LOCK, PHY_PATCH_LOCK);
3512 } else if (key_addr) {
3513 u16 data;
3514
3515 sram_write(tp, 0x0000, 0x0000);
3516
3517 data = ocp_reg_read(tp, OCP_PHY_LOCK);
3518 data &= ~PATCH_LOCK;
3519 ocp_reg_write(tp, OCP_PHY_LOCK, data);
3520
3521 sram_write(tp, key_addr, 0x0000);
3522 } else {
3523 WARN_ON_ONCE(1);
3524 }
3525}
3526
3527static int
3528rtl_pre_ram_code(struct r8152 *tp, u16 key_addr, u16 patch_key, bool wait)
3529{
3530 if (rtl_phy_patch_request(tp, true, wait))
3531 return -ETIME;
3532
3533 rtl_patch_key_set(tp, key_addr, patch_key);
3534
3535 return 0;
3536}
3537
3538static int rtl_post_ram_code(struct r8152 *tp, u16 key_addr, bool wait)
3539{
3540 rtl_patch_key_set(tp, key_addr, 0);
3541
3542 rtl_phy_patch_request(tp, false, wait);
3543
3544 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
3545
3546 return 0;
3547}
3548
3549static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy)
3550{
3551 u32 length;
3552 u16 fw_offset, fw_reg, ba_reg, patch_en_addr, mode_reg, bp_start;
3553 bool rc = false;
3554
3555 switch (tp->version) {
3556 case RTL_VER_04:
3557 case RTL_VER_05:
3558 case RTL_VER_06:
3559 fw_reg = 0xa014;
3560 ba_reg = 0xa012;
3561 patch_en_addr = 0xa01a;
3562 mode_reg = 0xb820;
3563 bp_start = 0xa000;
3564 break;
3565 default:
3566 goto out;
3567 }
3568
3569 fw_offset = __le16_to_cpu(phy->fw_offset);
3570 if (fw_offset < sizeof(*phy)) {
3571 dev_err(&tp->intf->dev, "fw_offset too small\n");
3572 goto out;
3573 }
3574
3575 length = __le32_to_cpu(phy->blk_hdr.length);
3576 if (length < fw_offset) {
3577 dev_err(&tp->intf->dev, "invalid fw_offset\n");
3578 goto out;
3579 }
3580
3581 length -= __le16_to_cpu(phy->fw_offset);
3582 if (!length || (length & 1)) {
3583 dev_err(&tp->intf->dev, "invalid block length\n");
3584 goto out;
3585 }
3586
3587 if (__le16_to_cpu(phy->fw_reg) != fw_reg) {
3588 dev_err(&tp->intf->dev, "invalid register to load firmware\n");
3589 goto out;
3590 }
3591
3592 if (__le16_to_cpu(phy->ba_reg) != ba_reg) {
3593 dev_err(&tp->intf->dev, "invalid base address register\n");
3594 goto out;
3595 }
3596
3597 if (__le16_to_cpu(phy->patch_en_addr) != patch_en_addr) {
3598 dev_err(&tp->intf->dev,
3599 "invalid patch mode enabled register\n");
3600 goto out;
3601 }
3602
3603 if (__le16_to_cpu(phy->mode_reg) != mode_reg) {
3604 dev_err(&tp->intf->dev,
3605 "invalid register to switch the mode\n");
3606 goto out;
3607 }
3608
3609 if (__le16_to_cpu(phy->bp_start) != bp_start) {
3610 dev_err(&tp->intf->dev,
3611 "invalid start register of break point\n");
3612 goto out;
3613 }
3614
3615 if (__le16_to_cpu(phy->bp_num) > 4) {
3616 dev_err(&tp->intf->dev, "invalid break point number\n");
3617 goto out;
3618 }
3619
3620 rc = true;
3621out:
3622 return rc;
3623}
3624
3625static bool rtl8152_is_fw_mac_ok(struct r8152 *tp, struct fw_mac *mac)
3626{
3627 u16 fw_reg, bp_ba_addr, bp_en_addr, bp_start, fw_offset;
3628 bool rc = false;
3629 u32 length, type;
3630 int i, max_bp;
3631
3632 type = __le32_to_cpu(mac->blk_hdr.type);
3633 if (type == RTL_FW_PLA) {
3634 switch (tp->version) {
3635 case RTL_VER_01:
3636 case RTL_VER_02:
3637 case RTL_VER_07:
3638 fw_reg = 0xf800;
3639 bp_ba_addr = PLA_BP_BA;
3640 bp_en_addr = 0;
3641 bp_start = PLA_BP_0;
3642 max_bp = 8;
3643 break;
3644 case RTL_VER_03:
3645 case RTL_VER_04:
3646 case RTL_VER_05:
3647 case RTL_VER_06:
3648 case RTL_VER_08:
3649 case RTL_VER_09:
3650 fw_reg = 0xf800;
3651 bp_ba_addr = PLA_BP_BA;
3652 bp_en_addr = PLA_BP_EN;
3653 bp_start = PLA_BP_0;
3654 max_bp = 8;
3655 break;
3656 default:
3657 goto out;
3658 }
3659 } else if (type == RTL_FW_USB) {
3660 switch (tp->version) {
3661 case RTL_VER_03:
3662 case RTL_VER_04:
3663 case RTL_VER_05:
3664 case RTL_VER_06:
3665 fw_reg = 0xf800;
3666 bp_ba_addr = USB_BP_BA;
3667 bp_en_addr = USB_BP_EN;
3668 bp_start = USB_BP_0;
3669 max_bp = 8;
3670 break;
3671 case RTL_VER_08:
3672 case RTL_VER_09:
3673 fw_reg = 0xe600;
3674 bp_ba_addr = USB_BP_BA;
3675 bp_en_addr = USB_BP2_EN;
3676 bp_start = USB_BP_0;
3677 max_bp = 16;
3678 break;
3679 case RTL_VER_01:
3680 case RTL_VER_02:
3681 case RTL_VER_07:
3682 default:
3683 goto out;
3684 }
3685 } else {
3686 goto out;
3687 }
3688
3689 fw_offset = __le16_to_cpu(mac->fw_offset);
3690 if (fw_offset < sizeof(*mac)) {
3691 dev_err(&tp->intf->dev, "fw_offset too small\n");
3692 goto out;
3693 }
3694
3695 length = __le32_to_cpu(mac->blk_hdr.length);
3696 if (length < fw_offset) {
3697 dev_err(&tp->intf->dev, "invalid fw_offset\n");
3698 goto out;
3699 }
3700
3701 length -= fw_offset;
3702 if (length < 4 || (length & 3)) {
3703 dev_err(&tp->intf->dev, "invalid block length\n");
3704 goto out;
3705 }
3706
3707 if (__le16_to_cpu(mac->fw_reg) != fw_reg) {
3708 dev_err(&tp->intf->dev, "invalid register to load firmware\n");
3709 goto out;
3710 }
3711
3712 if (__le16_to_cpu(mac->bp_ba_addr) != bp_ba_addr) {
3713 dev_err(&tp->intf->dev, "invalid base address register\n");
3714 goto out;
3715 }
3716
3717 if (__le16_to_cpu(mac->bp_en_addr) != bp_en_addr) {
3718 dev_err(&tp->intf->dev, "invalid enabled mask register\n");
3719 goto out;
3720 }
3721
3722 if (__le16_to_cpu(mac->bp_start) != bp_start) {
3723 dev_err(&tp->intf->dev,
3724 "invalid start register of break point\n");
3725 goto out;
3726 }
3727
3728 if (__le16_to_cpu(mac->bp_num) > max_bp) {
3729 dev_err(&tp->intf->dev, "invalid break point number\n");
3730 goto out;
3731 }
3732
3733 for (i = __le16_to_cpu(mac->bp_num); i < max_bp; i++) {
3734 if (mac->bp[i]) {
3735 dev_err(&tp->intf->dev, "unused bp%u is not zero\n", i);
3736 goto out;
3737 }
3738 }
3739
3740 rc = true;
3741out:
3742 return rc;
3743}
3744
3745/* Verify the checksum for the firmware file. It is calculated from the version
3746 * field to the end of the file. Compare the result with the checksum field to
3747 * make sure the file is correct.
3748 */
3749static long rtl8152_fw_verify_checksum(struct r8152 *tp,
3750 struct fw_header *fw_hdr, size_t size)
3751{
3752 unsigned char checksum[sizeof(fw_hdr->checksum)];
3753 struct crypto_shash *alg;
3754 struct shash_desc *sdesc;
3755 size_t len;
3756 long rc;
3757
3758 alg = crypto_alloc_shash("sha256", 0, 0);
3759 if (IS_ERR(alg)) {
3760 rc = PTR_ERR(alg);
3761 goto out;
3762 }
3763
3764 if (crypto_shash_digestsize(alg) != sizeof(fw_hdr->checksum)) {
3765 rc = -EFAULT;
3766 dev_err(&tp->intf->dev, "digestsize incorrect (%u)\n",
3767 crypto_shash_digestsize(alg));
3768 goto free_shash;
3769 }
3770
3771 len = sizeof(*sdesc) + crypto_shash_descsize(alg);
3772 sdesc = kmalloc(len, GFP_KERNEL);
3773 if (!sdesc) {
3774 rc = -ENOMEM;
3775 goto free_shash;
3776 }
3777 sdesc->tfm = alg;
3778
3779 len = size - sizeof(fw_hdr->checksum);
3780 rc = crypto_shash_digest(sdesc, fw_hdr->version, len, checksum);
3781 kfree(sdesc);
3782 if (rc)
3783 goto free_shash;
3784
3785 if (memcmp(fw_hdr->checksum, checksum, sizeof(fw_hdr->checksum))) {
3786 dev_err(&tp->intf->dev, "checksum fail\n");
3787 rc = -EFAULT;
3788 }
3789
3790free_shash:
3791 crypto_free_shash(alg);
3792out:
3793 return rc;
3794}
3795
3796static long rtl8152_check_firmware(struct r8152 *tp, struct rtl_fw *rtl_fw)
3797{
3798 const struct firmware *fw = rtl_fw->fw;
3799 struct fw_header *fw_hdr = (struct fw_header *)fw->data;
3800 struct fw_mac *pla = NULL, *usb = NULL;
3801 struct fw_phy_patch_key *start = NULL;
3802 struct fw_phy_nc *phy_nc = NULL;
3803 struct fw_block *stop = NULL;
3804 long ret = -EFAULT;
3805 int i;
3806
3807 if (fw->size < sizeof(*fw_hdr)) {
3808 dev_err(&tp->intf->dev, "file too small\n");
3809 goto fail;
3810 }
3811
3812 ret = rtl8152_fw_verify_checksum(tp, fw_hdr, fw->size);
3813 if (ret)
3814 goto fail;
3815
3816 ret = -EFAULT;
3817
3818 for (i = sizeof(*fw_hdr); i < fw->size;) {
3819 struct fw_block *block = (struct fw_block *)&fw->data[i];
3820 u32 type;
3821
3822 if ((i + sizeof(*block)) > fw->size)
3823 goto fail;
3824
3825 type = __le32_to_cpu(block->type);
3826 switch (type) {
3827 case RTL_FW_END:
3828 if (__le32_to_cpu(block->length) != sizeof(*block))
3829 goto fail;
3830 goto fw_end;
3831 case RTL_FW_PLA:
3832 if (pla) {
3833 dev_err(&tp->intf->dev,
3834 "multiple PLA firmware encountered");
3835 goto fail;
3836 }
3837
3838 pla = (struct fw_mac *)block;
3839 if (!rtl8152_is_fw_mac_ok(tp, pla)) {
3840 dev_err(&tp->intf->dev,
3841 "check PLA firmware failed\n");
3842 goto fail;
3843 }
3844 break;
3845 case RTL_FW_USB:
3846 if (usb) {
3847 dev_err(&tp->intf->dev,
3848 "multiple USB firmware encountered");
3849 goto fail;
3850 }
3851
3852 usb = (struct fw_mac *)block;
3853 if (!rtl8152_is_fw_mac_ok(tp, usb)) {
3854 dev_err(&tp->intf->dev,
3855 "check USB firmware failed\n");
3856 goto fail;
3857 }
3858 break;
3859 case RTL_FW_PHY_START:
3860 if (start || phy_nc || stop) {
3861 dev_err(&tp->intf->dev,
3862 "check PHY_START fail\n");
3863 goto fail;
3864 }
3865
3866 if (__le32_to_cpu(block->length) != sizeof(*start)) {
3867 dev_err(&tp->intf->dev,
3868 "Invalid length for PHY_START\n");
3869 goto fail;
3870 }
3871
3872 start = (struct fw_phy_patch_key *)block;
3873 break;
3874 case RTL_FW_PHY_STOP:
3875 if (stop || !start) {
3876 dev_err(&tp->intf->dev,
3877 "Check PHY_STOP fail\n");
3878 goto fail;
3879 }
3880
3881 if (__le32_to_cpu(block->length) != sizeof(*block)) {
3882 dev_err(&tp->intf->dev,
3883 "Invalid length for PHY_STOP\n");
3884 goto fail;
3885 }
3886
3887 stop = block;
3888 break;
3889 case RTL_FW_PHY_NC:
3890 if (!start || stop) {
3891 dev_err(&tp->intf->dev,
3892 "check PHY_NC fail\n");
3893 goto fail;
3894 }
3895
3896 if (phy_nc) {
3897 dev_err(&tp->intf->dev,
3898 "multiple PHY NC encountered\n");
3899 goto fail;
3900 }
3901
3902 phy_nc = (struct fw_phy_nc *)block;
3903 if (!rtl8152_is_fw_phy_nc_ok(tp, phy_nc)) {
3904 dev_err(&tp->intf->dev,
3905 "check PHY NC firmware failed\n");
3906 goto fail;
3907 }
3908
3909 break;
3910 default:
3911 dev_warn(&tp->intf->dev, "Unknown type %u is found\n",
3912 type);
3913 break;
3914 }
3915
3916 /* next block */
3917 i += ALIGN(__le32_to_cpu(block->length), 8);
3918 }
3919
3920fw_end:
3921 if ((phy_nc || start) && !stop) {
3922 dev_err(&tp->intf->dev, "without PHY_STOP\n");
3923 goto fail;
3924 }
3925
3926 return 0;
3927fail:
3928 return ret;
3929}
3930
3931static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy)
3932{
3933 u16 mode_reg, bp_index;
3934 u32 length, i, num;
3935 __le16 *data;
3936
3937 mode_reg = __le16_to_cpu(phy->mode_reg);
3938 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_pre));
3939 sram_write(tp, __le16_to_cpu(phy->ba_reg),
3940 __le16_to_cpu(phy->ba_data));
3941
3942 length = __le32_to_cpu(phy->blk_hdr.length);
3943 length -= __le16_to_cpu(phy->fw_offset);
3944 num = length / 2;
3945 data = (__le16 *)((u8 *)phy + __le16_to_cpu(phy->fw_offset));
3946
3947 ocp_reg_write(tp, OCP_SRAM_ADDR, __le16_to_cpu(phy->fw_reg));
3948 for (i = 0; i < num; i++)
3949 ocp_reg_write(tp, OCP_SRAM_DATA, __le16_to_cpu(data[i]));
3950
3951 sram_write(tp, __le16_to_cpu(phy->patch_en_addr),
3952 __le16_to_cpu(phy->patch_en_value));
3953
3954 bp_index = __le16_to_cpu(phy->bp_start);
3955 num = __le16_to_cpu(phy->bp_num);
3956 for (i = 0; i < num; i++) {
3957 sram_write(tp, bp_index, __le16_to_cpu(phy->bp[i]));
3958 bp_index += 2;
3959 }
3960
3961 sram_write(tp, mode_reg, __le16_to_cpu(phy->mode_post));
3962
3963 dev_dbg(&tp->intf->dev, "successfully applied %s\n", phy->info);
3964}
3965
3966static void rtl8152_fw_mac_apply(struct r8152 *tp, struct fw_mac *mac)
3967{
3968 u16 bp_en_addr, bp_index, type, bp_num, fw_ver_reg;
3969 u32 length;
3970 u8 *data;
3971 int i;
3972
3973 switch (__le32_to_cpu(mac->blk_hdr.type)) {
3974 case RTL_FW_PLA:
3975 type = MCU_TYPE_PLA;
3976 break;
3977 case RTL_FW_USB:
3978 type = MCU_TYPE_USB;
3979 break;
3980 default:
3981 return;
3982 }
3983
3984 rtl_clear_bp(tp, type);
3985
3986 /* Enable backup/restore of MACDBG. This is required after clearing PLA
3987 * break points and before applying the PLA firmware.
3988 */
3989 if (tp->version == RTL_VER_04 && type == MCU_TYPE_PLA &&
3990 !(ocp_read_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST) & DEBUG_OE)) {
3991 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_PRE, DEBUG_LTSSM);
3992 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MACDBG_POST, DEBUG_LTSSM);
3993 }
3994
3995 length = __le32_to_cpu(mac->blk_hdr.length);
3996 length -= __le16_to_cpu(mac->fw_offset);
3997
3998 data = (u8 *)mac;
3999 data += __le16_to_cpu(mac->fw_offset);
4000
4001 generic_ocp_write(tp, __le16_to_cpu(mac->fw_reg), 0xff, length, data,
4002 type);
4003
4004 ocp_write_word(tp, type, __le16_to_cpu(mac->bp_ba_addr),
4005 __le16_to_cpu(mac->bp_ba_value));
4006
4007 bp_index = __le16_to_cpu(mac->bp_start);
4008 bp_num = __le16_to_cpu(mac->bp_num);
4009 for (i = 0; i < bp_num; i++) {
4010 ocp_write_word(tp, type, bp_index, __le16_to_cpu(mac->bp[i]));
4011 bp_index += 2;
4012 }
4013
4014 bp_en_addr = __le16_to_cpu(mac->bp_en_addr);
4015 if (bp_en_addr)
4016 ocp_write_word(tp, type, bp_en_addr,
4017 __le16_to_cpu(mac->bp_en_value));
4018
4019 fw_ver_reg = __le16_to_cpu(mac->fw_ver_reg);
4020 if (fw_ver_reg)
4021 ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg,
4022 mac->fw_ver_data);
4023
4024 dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info);
4025}
4026
4027static void rtl8152_apply_firmware(struct r8152 *tp, bool power_cut)
4028{
4029 struct rtl_fw *rtl_fw = &tp->rtl_fw;
4030 const struct firmware *fw;
4031 struct fw_header *fw_hdr;
4032 struct fw_phy_patch_key *key;
4033 u16 key_addr = 0;
4034 int i;
4035
4036 if (IS_ERR_OR_NULL(rtl_fw->fw))
4037 return;
4038
4039 fw = rtl_fw->fw;
4040 fw_hdr = (struct fw_header *)fw->data;
4041
4042 if (rtl_fw->pre_fw)
4043 rtl_fw->pre_fw(tp);
4044
4045 for (i = offsetof(struct fw_header, blocks); i < fw->size;) {
4046 struct fw_block *block = (struct fw_block *)&fw->data[i];
4047
4048 switch (__le32_to_cpu(block->type)) {
4049 case RTL_FW_END:
4050 goto post_fw;
4051 case RTL_FW_PLA:
4052 case RTL_FW_USB:
4053 rtl8152_fw_mac_apply(tp, (struct fw_mac *)block);
4054 break;
4055 case RTL_FW_PHY_START:
4056 key = (struct fw_phy_patch_key *)block;
4057 key_addr = __le16_to_cpu(key->key_reg);
4058 rtl_pre_ram_code(tp, key_addr, __le16_to_cpu(key->key_data), !power_cut);
4059 break;
4060 case RTL_FW_PHY_STOP:
4061 WARN_ON(!key_addr);
4062 rtl_post_ram_code(tp, key_addr, !power_cut);
4063 break;
4064 case RTL_FW_PHY_NC:
4065 rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block);
4066 break;
4067 default:
4068 break;
4069 }
4070
4071 i += ALIGN(__le32_to_cpu(block->length), 8);
4072 }
4073
4074post_fw:
4075 if (rtl_fw->post_fw)
4076 rtl_fw->post_fw(tp);
4077
4078 strscpy(rtl_fw->version, fw_hdr->version, RTL_VER_SIZE);
4079 dev_info(&tp->intf->dev, "load %s successfully\n", rtl_fw->version);
4080}
4081
4082static void rtl8152_release_firmware(struct r8152 *tp)
4083{
4084 struct rtl_fw *rtl_fw = &tp->rtl_fw;
4085
4086 if (!IS_ERR_OR_NULL(rtl_fw->fw)) {
4087 release_firmware(rtl_fw->fw);
4088 rtl_fw->fw = NULL;
4089 }
4090}
4091
4092static int rtl8152_request_firmware(struct r8152 *tp)
4093{
4094 struct rtl_fw *rtl_fw = &tp->rtl_fw;
4095 long rc;
4096
4097 if (rtl_fw->fw || !rtl_fw->fw_name) {
4098 dev_info(&tp->intf->dev, "skip request firmware\n");
4099 rc = 0;
4100 goto result;
4101 }
4102
4103 rc = request_firmware(&rtl_fw->fw, rtl_fw->fw_name, &tp->intf->dev);
4104 if (rc < 0)
4105 goto result;
4106
4107 rc = rtl8152_check_firmware(tp, rtl_fw);
4108 if (rc < 0)
4109 release_firmware(rtl_fw->fw);
4110
4111result:
4112 if (rc) {
4113 rtl_fw->fw = ERR_PTR(rc);
4114
4115 dev_warn(&tp->intf->dev,
4116 "unable to load firmware patch %s (%ld)\n",
4117 rtl_fw->fw_name, rc);
4118 }
4119
4120 return rc;
4121}
4122
4123static void r8152_aldps_en(struct r8152 *tp, bool enable)
4124{
4125 if (enable) {
4126 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS |
4127 LINKENA | DIS_SDSAVE);
4128 } else {
4129 ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA |
4130 DIS_SDSAVE);
4131 msleep(20);
4132 }
4133}
4134
4135static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg)
4136{
4137 ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev);
4138 ocp_reg_write(tp, OCP_EEE_DATA, reg);
4139 ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev);
4140}
4141
4142static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg)
4143{
4144 u16 data;
4145
4146 r8152_mmd_indirect(tp, dev, reg);
4147 data = ocp_reg_read(tp, OCP_EEE_DATA);
4148 ocp_reg_write(tp, OCP_EEE_AR, 0x0000);
4149
4150 return data;
4151}
4152
4153static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data)
4154{
4155 r8152_mmd_indirect(tp, dev, reg);
4156 ocp_reg_write(tp, OCP_EEE_DATA, data);
4157 ocp_reg_write(tp, OCP_EEE_AR, 0x0000);
4158}
4159
4160static void r8152_eee_en(struct r8152 *tp, bool enable)
4161{
4162 u16 config1, config2, config3;
4163 u32 ocp_data;
4164
4165 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR);
4166 config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask;
4167 config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2);
4168 config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask;
4169
4170 if (enable) {
4171 ocp_data |= EEE_RX_EN | EEE_TX_EN;
4172 config1 |= EEE_10_CAP | EEE_NWAY_EN | TX_QUIET_EN | RX_QUIET_EN;
4173 config1 |= sd_rise_time(1);
4174 config2 |= RG_DACQUIET_EN | RG_LDVQUIET_EN;
4175 config3 |= fast_snr(42);
4176 } else {
4177 ocp_data &= ~(EEE_RX_EN | EEE_TX_EN);
4178 config1 &= ~(EEE_10_CAP | EEE_NWAY_EN | TX_QUIET_EN |
4179 RX_QUIET_EN);
4180 config1 |= sd_rise_time(7);
4181 config2 &= ~(RG_DACQUIET_EN | RG_LDVQUIET_EN);
4182 config3 |= fast_snr(511);
4183 }
4184
4185 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data);
4186 ocp_reg_write(tp, OCP_EEE_CONFIG1, config1);
4187 ocp_reg_write(tp, OCP_EEE_CONFIG2, config2);
4188 ocp_reg_write(tp, OCP_EEE_CONFIG3, config3);
4189}
4190
4191static void r8153_eee_en(struct r8152 *tp, bool enable)
4192{
4193 u32 ocp_data;
4194 u16 config;
4195
4196 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR);
4197 config = ocp_reg_read(tp, OCP_EEE_CFG);
4198
4199 if (enable) {
4200 ocp_data |= EEE_RX_EN | EEE_TX_EN;
4201 config |= EEE10_EN;
4202 } else {
4203 ocp_data &= ~(EEE_RX_EN | EEE_TX_EN);
4204 config &= ~EEE10_EN;
4205 }
4206
4207 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data);
4208 ocp_reg_write(tp, OCP_EEE_CFG, config);
4209
4210 tp->ups_info.eee = enable;
4211}
4212
4213static void rtl_eee_enable(struct r8152 *tp, bool enable)
4214{
4215 switch (tp->version) {
4216 case RTL_VER_01:
4217 case RTL_VER_02:
4218 case RTL_VER_07:
4219 if (enable) {
4220 r8152_eee_en(tp, true);
4221 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV,
4222 tp->eee_adv);
4223 } else {
4224 r8152_eee_en(tp, false);
4225 r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, 0);
4226 }
4227 break;
4228 case RTL_VER_03:
4229 case RTL_VER_04:
4230 case RTL_VER_05:
4231 case RTL_VER_06:
4232 case RTL_VER_08:
4233 case RTL_VER_09:
4234 if (enable) {
4235 r8153_eee_en(tp, true);
4236 ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv);
4237 } else {
4238 r8153_eee_en(tp, false);
4239 ocp_reg_write(tp, OCP_EEE_ADV, 0);
4240 }
4241 break;
4242 default:
4243 break;
4244 }
4245}
4246
4247static void r8152b_enable_fc(struct r8152 *tp)
4248{
4249 u16 anar;
4250
4251 anar = r8152_mdio_read(tp, MII_ADVERTISE);
4252 anar |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
4253 r8152_mdio_write(tp, MII_ADVERTISE, anar);
4254
4255 tp->ups_info.flow_control = true;
4256}
4257
4258static void rtl8152_disable(struct r8152 *tp)
4259{
4260 r8152_aldps_en(tp, false);
4261 rtl_disable(tp);
4262 r8152_aldps_en(tp, true);
4263}
4264
4265static void r8152b_hw_phy_cfg(struct r8152 *tp)
4266{
4267 rtl8152_apply_firmware(tp, false);
4268 rtl_eee_enable(tp, tp->eee_en);
4269 r8152_aldps_en(tp, true);
4270 r8152b_enable_fc(tp);
4271
4272 set_bit(PHY_RESET, &tp->flags);
4273}
4274
4275static void wait_oob_link_list_ready(struct r8152 *tp)
4276{
4277 u32 ocp_data;
4278 int i;
4279
4280 for (i = 0; i < 1000; i++) {
4281 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4282 if (ocp_data & LINK_LIST_READY)
4283 break;
4284 usleep_range(1000, 2000);
4285 }
4286}
4287
4288static void r8152b_exit_oob(struct r8152 *tp)
4289{
4290 u32 ocp_data;
4291
4292 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4293 ocp_data &= ~RCR_ACPT_ALL;
4294 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4295
4296 rxdy_gated_en(tp, true);
4297 r8153_teredo_off(tp);
4298 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML);
4299 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00);
4300
4301 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4302 ocp_data &= ~NOW_IS_OOB;
4303 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4304
4305 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4306 ocp_data &= ~MCU_BORW_EN;
4307 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4308
4309 wait_oob_link_list_ready(tp);
4310
4311 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4312 ocp_data |= RE_INIT_LL;
4313 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4314
4315 wait_oob_link_list_ready(tp);
4316
4317 rtl8152_nic_reset(tp);
4318
4319 /* rx share fifo credit full threshold */
4320 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL);
4321
4322 if (tp->udev->speed == USB_SPEED_FULL ||
4323 tp->udev->speed == USB_SPEED_LOW) {
4324 /* rx share fifo credit near full threshold */
4325 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1,
4326 RXFIFO_THR2_FULL);
4327 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2,
4328 RXFIFO_THR3_FULL);
4329 } else {
4330 /* rx share fifo credit near full threshold */
4331 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1,
4332 RXFIFO_THR2_HIGH);
4333 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2,
4334 RXFIFO_THR3_HIGH);
4335 }
4336
4337 /* TX share fifo free credit full threshold */
4338 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL);
4339
4340 ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD);
4341 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH);
4342 ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA,
4343 TEST_MODE_DISABLE | TX_SIZE_ADJUST1);
4344
4345 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
4346
4347 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
4348
4349 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
4350 ocp_data |= TCR0_AUTO_FIFO;
4351 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data);
4352}
4353
4354static void r8152b_enter_oob(struct r8152 *tp)
4355{
4356 u32 ocp_data;
4357
4358 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4359 ocp_data &= ~NOW_IS_OOB;
4360 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4361
4362 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_OOB);
4363 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB);
4364 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB);
4365
4366 rtl_disable(tp);
4367
4368 wait_oob_link_list_ready(tp);
4369
4370 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4371 ocp_data |= RE_INIT_LL;
4372 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4373
4374 wait_oob_link_list_ready(tp);
4375
4376 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS);
4377
4378 rtl_rx_vlan_en(tp, true);
4379
4380 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR);
4381 ocp_data |= ALDPS_PROXY_MODE;
4382 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data);
4383
4384 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4385 ocp_data |= NOW_IS_OOB | DIS_MCU_CLROOB;
4386 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4387
4388 rxdy_gated_en(tp, false);
4389
4390 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4391 ocp_data |= RCR_APM | RCR_AM | RCR_AB;
4392 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4393}
4394
4395static int r8153_pre_firmware_1(struct r8152 *tp)
4396{
4397 int i;
4398
4399 /* Wait till the WTD timer is ready. It would take at most 104 ms. */
4400 for (i = 0; i < 104; i++) {
4401 u32 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_WDT1_CTRL);
4402
4403 if (!(ocp_data & WTD1_EN))
4404 break;
4405 usleep_range(1000, 2000);
4406 }
4407
4408 return 0;
4409}
4410
4411static int r8153_post_firmware_1(struct r8152 *tp)
4412{
4413 /* set USB_BP_4 to support USB_SPEED_SUPER only */
4414 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER)
4415 ocp_write_word(tp, MCU_TYPE_USB, USB_BP_4, BP4_SUPER_ONLY);
4416
4417 /* reset UPHY timer to 36 ms */
4418 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16);
4419
4420 return 0;
4421}
4422
4423static int r8153_pre_firmware_2(struct r8152 *tp)
4424{
4425 u32 ocp_data;
4426
4427 r8153_pre_firmware_1(tp);
4428
4429 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0);
4430 ocp_data &= ~FW_FIX_SUSPEND;
4431 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data);
4432
4433 return 0;
4434}
4435
4436static int r8153_post_firmware_2(struct r8152 *tp)
4437{
4438 u32 ocp_data;
4439
4440 /* enable bp0 if support USB_SPEED_SUPER only */
4441 if (ocp_read_byte(tp, MCU_TYPE_USB, USB_CSTMR) & FORCE_SUPER) {
4442 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN);
4443 ocp_data |= BIT(0);
4444 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data);
4445 }
4446
4447 /* reset UPHY timer to 36 ms */
4448 ocp_write_word(tp, MCU_TYPE_PLA, PLA_UPHY_TIMER, 36000 / 16);
4449
4450 /* enable U3P3 check, set the counter to 4 */
4451 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, U3P3_CHECK_EN | 4);
4452
4453 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0);
4454 ocp_data |= FW_FIX_SUSPEND;
4455 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN0, ocp_data);
4456
4457 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
4458 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
4459 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
4460
4461 return 0;
4462}
4463
4464static int r8153_post_firmware_3(struct r8152 *tp)
4465{
4466 u32 ocp_data;
4467
4468 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
4469 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
4470 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
4471
4472 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
4473 ocp_data |= FW_IP_RESET_EN;
4474 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
4475
4476 return 0;
4477}
4478
4479static int r8153b_pre_firmware_1(struct r8152 *tp)
4480{
4481 /* enable fc timer and set timer to 1 second. */
4482 ocp_write_word(tp, MCU_TYPE_USB, USB_FC_TIMER,
4483 CTRL_TIMER_EN | (1000 / 8));
4484
4485 return 0;
4486}
4487
4488static int r8153b_post_firmware_1(struct r8152 *tp)
4489{
4490 u32 ocp_data;
4491
4492 /* enable bp0 for RTL8153-BND */
4493 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_MISC_1);
4494 if (ocp_data & BND_MASK) {
4495 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BP_EN);
4496 ocp_data |= BIT(0);
4497 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_EN, ocp_data);
4498 }
4499
4500 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_CTRL);
4501 ocp_data |= FLOW_CTRL_PATCH_OPT;
4502 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_CTRL, ocp_data);
4503
4504 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_TASK);
4505 ocp_data |= FC_PATCH_TASK;
4506 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_TASK, ocp_data);
4507
4508 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1);
4509 ocp_data |= FW_IP_RESET_EN;
4510 ocp_write_word(tp, MCU_TYPE_USB, USB_FW_FIX_EN1, ocp_data);
4511
4512 return 0;
4513}
4514
4515static void r8153_aldps_en(struct r8152 *tp, bool enable)
4516{
4517 u16 data;
4518
4519 data = ocp_reg_read(tp, OCP_POWER_CFG);
4520 if (enable) {
4521 data |= EN_ALDPS;
4522 ocp_reg_write(tp, OCP_POWER_CFG, data);
4523 } else {
4524 int i;
4525
4526 data &= ~EN_ALDPS;
4527 ocp_reg_write(tp, OCP_POWER_CFG, data);
4528 for (i = 0; i < 20; i++) {
4529 usleep_range(1000, 2000);
4530 if (ocp_read_word(tp, MCU_TYPE_PLA, 0xe000) & 0x0100)
4531 break;
4532 }
4533 }
4534
4535 tp->ups_info.aldps = enable;
4536}
4537
4538static void r8153_hw_phy_cfg(struct r8152 *tp)
4539{
4540 u32 ocp_data;
4541 u16 data;
4542
4543 /* disable ALDPS before updating the PHY parameters */
4544 r8153_aldps_en(tp, false);
4545
4546 /* disable EEE before updating the PHY parameters */
4547 rtl_eee_enable(tp, false);
4548
4549 rtl8152_apply_firmware(tp, false);
4550
4551 if (tp->version == RTL_VER_03) {
4552 data = ocp_reg_read(tp, OCP_EEE_CFG);
4553 data &= ~CTAP_SHORT_EN;
4554 ocp_reg_write(tp, OCP_EEE_CFG, data);
4555 }
4556
4557 data = ocp_reg_read(tp, OCP_POWER_CFG);
4558 data |= EEE_CLKDIV_EN;
4559 ocp_reg_write(tp, OCP_POWER_CFG, data);
4560
4561 data = ocp_reg_read(tp, OCP_DOWN_SPEED);
4562 data |= EN_10M_BGOFF;
4563 ocp_reg_write(tp, OCP_DOWN_SPEED, data);
4564 data = ocp_reg_read(tp, OCP_POWER_CFG);
4565 data |= EN_10M_PLLOFF;
4566 ocp_reg_write(tp, OCP_POWER_CFG, data);
4567 sram_write(tp, SRAM_IMPEDANCE, 0x0b13);
4568
4569 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
4570 ocp_data |= PFM_PWM_SWITCH;
4571 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
4572
4573 /* Enable LPF corner auto tune */
4574 sram_write(tp, SRAM_LPF_CFG, 0xf70f);
4575
4576 /* Adjust 10M Amplitude */
4577 sram_write(tp, SRAM_10M_AMP1, 0x00af);
4578 sram_write(tp, SRAM_10M_AMP2, 0x0208);
4579
4580 if (tp->eee_en)
4581 rtl_eee_enable(tp, true);
4582
4583 r8153_aldps_en(tp, true);
4584 r8152b_enable_fc(tp);
4585
4586 switch (tp->version) {
4587 case RTL_VER_03:
4588 case RTL_VER_04:
4589 break;
4590 case RTL_VER_05:
4591 case RTL_VER_06:
4592 default:
4593 r8153_u2p3en(tp, true);
4594 break;
4595 }
4596
4597 set_bit(PHY_RESET, &tp->flags);
4598}
4599
4600static u32 r8152_efuse_read(struct r8152 *tp, u8 addr)
4601{
4602 u32 ocp_data;
4603
4604 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD, EFUSE_READ_CMD | addr);
4605 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_CMD);
4606 ocp_data = (ocp_data & EFUSE_DATA_BIT16) << 9; /* data of bit16 */
4607 ocp_data |= ocp_read_word(tp, MCU_TYPE_PLA, PLA_EFUSE_DATA);
4608
4609 return ocp_data;
4610}
4611
4612static void r8153b_hw_phy_cfg(struct r8152 *tp)
4613{
4614 u32 ocp_data;
4615 u16 data;
4616
4617 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0);
4618 if (ocp_data & PCUT_STATUS) {
4619 ocp_data &= ~PCUT_STATUS;
4620 ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
4621 }
4622
4623 /* disable ALDPS before updating the PHY parameters */
4624 r8153_aldps_en(tp, false);
4625
4626 /* disable EEE before updating the PHY parameters */
4627 rtl_eee_enable(tp, false);
4628
4629 /* U1/U2/L1 idle timer. 500 us */
4630 ocp_write_word(tp, MCU_TYPE_USB, USB_U1U2_TIMER, 500);
4631
4632 data = r8153_phy_status(tp, 0);
4633
4634 switch (data) {
4635 case PHY_STAT_PWRDN:
4636 case PHY_STAT_EXT_INIT:
4637 rtl8152_apply_firmware(tp, true);
4638
4639 data = r8152_mdio_read(tp, MII_BMCR);
4640 data &= ~BMCR_PDOWN;
4641 r8152_mdio_write(tp, MII_BMCR, data);
4642 break;
4643 case PHY_STAT_LAN_ON:
4644 default:
4645 rtl8152_apply_firmware(tp, false);
4646 break;
4647 }
4648
4649 r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
4650
4651 data = sram_read(tp, SRAM_GREEN_CFG);
4652 data |= R_TUNE_EN;
4653 sram_write(tp, SRAM_GREEN_CFG, data);
4654 data = ocp_reg_read(tp, OCP_NCTL_CFG);
4655 data |= PGA_RETURN_EN;
4656 ocp_reg_write(tp, OCP_NCTL_CFG, data);
4657
4658 /* ADC Bias Calibration:
4659 * read efuse offset 0x7d to get a 17-bit data. Remove the dummy/fake
4660 * bit (bit3) to rebuild the real 16-bit data. Write the data to the
4661 * ADC ioffset.
4662 */
4663 ocp_data = r8152_efuse_read(tp, 0x7d);
4664 data = (u16)(((ocp_data & 0x1fff0) >> 1) | (ocp_data & 0x7));
4665 if (data != 0xffff)
4666 ocp_reg_write(tp, OCP_ADC_IOFFSET, data);
4667
4668 /* ups mode tx-link-pulse timing adjustment:
4669 * rg_saw_cnt = OCP reg 0xC426 Bit[13:0]
4670 * swr_cnt_1ms_ini = 16000000 / rg_saw_cnt
4671 */
4672 ocp_data = ocp_reg_read(tp, 0xc426);
4673 ocp_data &= 0x3fff;
4674 if (ocp_data) {
4675 u32 swr_cnt_1ms_ini;
4676
4677 swr_cnt_1ms_ini = (16000000 / ocp_data) & SAW_CNT_1MS_MASK;
4678 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CFG);
4679 ocp_data = (ocp_data & ~SAW_CNT_1MS_MASK) | swr_cnt_1ms_ini;
4680 ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CFG, ocp_data);
4681 }
4682
4683 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
4684 ocp_data |= PFM_PWM_SWITCH;
4685 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
4686
4687 /* Advnace EEE */
4688 if (!rtl_phy_patch_request(tp, true, true)) {
4689 data = ocp_reg_read(tp, OCP_POWER_CFG);
4690 data |= EEE_CLKDIV_EN;
4691 ocp_reg_write(tp, OCP_POWER_CFG, data);
4692 tp->ups_info.eee_ckdiv = true;
4693
4694 data = ocp_reg_read(tp, OCP_DOWN_SPEED);
4695 data |= EN_EEE_CMODE | EN_EEE_1000 | EN_10M_CLKDIV;
4696 ocp_reg_write(tp, OCP_DOWN_SPEED, data);
4697 tp->ups_info.eee_cmod_lv = true;
4698 tp->ups_info._10m_ckdiv = true;
4699 tp->ups_info.eee_plloff_giga = true;
4700
4701 ocp_reg_write(tp, OCP_SYSCLK_CFG, 0);
4702 ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5));
4703 tp->ups_info._250m_ckdiv = true;
4704
4705 rtl_phy_patch_request(tp, false, true);
4706 }
4707
4708 if (tp->eee_en)
4709 rtl_eee_enable(tp, true);
4710
4711 r8153_aldps_en(tp, true);
4712 r8152b_enable_fc(tp);
4713
4714 set_bit(PHY_RESET, &tp->flags);
4715}
4716
4717static void r8153_first_init(struct r8152 *tp)
4718{
4719 u32 ocp_data;
4720
4721 r8153_mac_clk_spd(tp, false);
4722 rxdy_gated_en(tp, true);
4723 r8153_teredo_off(tp);
4724
4725 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4726 ocp_data &= ~RCR_ACPT_ALL;
4727 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4728
4729 rtl8152_nic_reset(tp);
4730 rtl_reset_bmu(tp);
4731
4732 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4733 ocp_data &= ~NOW_IS_OOB;
4734 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4735
4736 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4737 ocp_data &= ~MCU_BORW_EN;
4738 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4739
4740 wait_oob_link_list_ready(tp);
4741
4742 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4743 ocp_data |= RE_INIT_LL;
4744 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4745
4746 wait_oob_link_list_ready(tp);
4747
4748 rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
4749
4750 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
4751 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);
4752 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO);
4753
4754 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
4755 ocp_data |= TCR0_AUTO_FIFO;
4756 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TCR0, ocp_data);
4757
4758 rtl8152_nic_reset(tp);
4759
4760 /* rx share fifo credit full threshold */
4761 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL);
4762 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_NORMAL);
4763 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_NORMAL);
4764 /* TX share fifo free credit full threshold */
4765 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TXFIFO_CTRL, TXFIFO_THR_NORMAL2);
4766}
4767
4768static void r8153_enter_oob(struct r8152 *tp)
4769{
4770 u32 ocp_data;
4771
4772 r8153_mac_clk_spd(tp, true);
4773
4774 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4775 ocp_data &= ~NOW_IS_OOB;
4776 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4777
4778 rtl_disable(tp);
4779 rtl_reset_bmu(tp);
4780
4781 wait_oob_link_list_ready(tp);
4782
4783 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7);
4784 ocp_data |= RE_INIT_LL;
4785 ocp_write_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7, ocp_data);
4786
4787 wait_oob_link_list_ready(tp);
4788
4789 ocp_data = tp->netdev->mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
4790 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, ocp_data);
4791
4792 switch (tp->version) {
4793 case RTL_VER_03:
4794 case RTL_VER_04:
4795 case RTL_VER_05:
4796 case RTL_VER_06:
4797 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG);
4798 ocp_data &= ~TEREDO_WAKE_MASK;
4799 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data);
4800 break;
4801
4802 case RTL_VER_08:
4803 case RTL_VER_09:
4804 /* Clear teredo wake event. bit[15:8] is the teredo wakeup
4805 * type. Set it to zero. bits[7:0] are the W1C bits about
4806 * the events. Set them to all 1 to clear them.
4807 */
4808 ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_WAKE_BASE, 0x00ff);
4809 break;
4810
4811 default:
4812 break;
4813 }
4814
4815 rtl_rx_vlan_en(tp, true);
4816
4817 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_BDC_CR);
4818 ocp_data |= ALDPS_PROXY_MODE;
4819 ocp_write_word(tp, MCU_TYPE_PLA, PLA_BDC_CR, ocp_data);
4820
4821 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL);
4822 ocp_data |= NOW_IS_OOB | DIS_MCU_CLROOB;
4823 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data);
4824
4825 rxdy_gated_en(tp, false);
4826
4827 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
4828 ocp_data |= RCR_APM | RCR_AM | RCR_AB;
4829 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
4830}
4831
4832static void rtl8153_disable(struct r8152 *tp)
4833{
4834 r8153_aldps_en(tp, false);
4835 rtl_disable(tp);
4836 rtl_reset_bmu(tp);
4837 r8153_aldps_en(tp, true);
4838}
4839
4840static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
4841 u32 advertising)
4842{
4843 u16 bmcr;
4844 int ret = 0;
4845
4846 if (autoneg == AUTONEG_DISABLE) {
4847 if (duplex != DUPLEX_HALF && duplex != DUPLEX_FULL)
4848 return -EINVAL;
4849
4850 switch (speed) {
4851 case SPEED_10:
4852 bmcr = BMCR_SPEED10;
4853 if (duplex == DUPLEX_FULL) {
4854 bmcr |= BMCR_FULLDPLX;
4855 tp->ups_info.speed_duplex = FORCE_10M_FULL;
4856 } else {
4857 tp->ups_info.speed_duplex = FORCE_10M_HALF;
4858 }
4859 break;
4860 case SPEED_100:
4861 bmcr = BMCR_SPEED100;
4862 if (duplex == DUPLEX_FULL) {
4863 bmcr |= BMCR_FULLDPLX;
4864 tp->ups_info.speed_duplex = FORCE_100M_FULL;
4865 } else {
4866 tp->ups_info.speed_duplex = FORCE_100M_HALF;
4867 }
4868 break;
4869 case SPEED_1000:
4870 if (tp->mii.supports_gmii) {
4871 bmcr = BMCR_SPEED1000 | BMCR_FULLDPLX;
4872 tp->ups_info.speed_duplex = NWAY_1000M_FULL;
4873 break;
4874 }
4875 fallthrough;
4876 default:
4877 ret = -EINVAL;
4878 goto out;
4879 }
4880
4881 if (duplex == DUPLEX_FULL)
4882 tp->mii.full_duplex = 1;
4883 else
4884 tp->mii.full_duplex = 0;
4885
4886 tp->mii.force_media = 1;
4887 } else {
4888 u16 anar, tmp1;
4889 u32 support;
4890
4891 support = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL |
4892 RTL_ADVERTISED_100_HALF | RTL_ADVERTISED_100_FULL;
4893
4894 if (tp->mii.supports_gmii)
4895 support |= RTL_ADVERTISED_1000_FULL;
4896
4897 if (!(advertising & support))
4898 return -EINVAL;
4899
4900 anar = r8152_mdio_read(tp, MII_ADVERTISE);
4901 tmp1 = anar & ~(ADVERTISE_10HALF | ADVERTISE_10FULL |
4902 ADVERTISE_100HALF | ADVERTISE_100FULL);
4903 if (advertising & RTL_ADVERTISED_10_HALF) {
4904 tmp1 |= ADVERTISE_10HALF;
4905 tp->ups_info.speed_duplex = NWAY_10M_HALF;
4906 }
4907 if (advertising & RTL_ADVERTISED_10_FULL) {
4908 tmp1 |= ADVERTISE_10FULL;
4909 tp->ups_info.speed_duplex = NWAY_10M_FULL;
4910 }
4911
4912 if (advertising & RTL_ADVERTISED_100_HALF) {
4913 tmp1 |= ADVERTISE_100HALF;
4914 tp->ups_info.speed_duplex = NWAY_100M_HALF;
4915 }
4916 if (advertising & RTL_ADVERTISED_100_FULL) {
4917 tmp1 |= ADVERTISE_100FULL;
4918 tp->ups_info.speed_duplex = NWAY_100M_FULL;
4919 }
4920
4921 if (anar != tmp1) {
4922 r8152_mdio_write(tp, MII_ADVERTISE, tmp1);
4923 tp->mii.advertising = tmp1;
4924 }
4925
4926 if (tp->mii.supports_gmii) {
4927 u16 gbcr;
4928
4929 gbcr = r8152_mdio_read(tp, MII_CTRL1000);
4930 tmp1 = gbcr & ~(ADVERTISE_1000FULL |
4931 ADVERTISE_1000HALF);
4932
4933 if (advertising & RTL_ADVERTISED_1000_FULL) {
4934 tmp1 |= ADVERTISE_1000FULL;
4935 tp->ups_info.speed_duplex = NWAY_1000M_FULL;
4936 }
4937
4938 if (gbcr != tmp1)
4939 r8152_mdio_write(tp, MII_CTRL1000, tmp1);
4940 }
4941
4942 bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
4943
4944 tp->mii.force_media = 0;
4945 }
4946
4947 if (test_and_clear_bit(PHY_RESET, &tp->flags))
4948 bmcr |= BMCR_RESET;
4949
4950 r8152_mdio_write(tp, MII_BMCR, bmcr);
4951
4952 if (bmcr & BMCR_RESET) {
4953 int i;
4954
4955 for (i = 0; i < 50; i++) {
4956 msleep(20);
4957 if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0)
4958 break;
4959 }
4960 }
4961
4962out:
4963 return ret;
4964}
4965
4966static void rtl8152_up(struct r8152 *tp)
4967{
4968 if (test_bit(RTL8152_UNPLUG, &tp->flags))
4969 return;
4970
4971 r8152_aldps_en(tp, false);
4972 r8152b_exit_oob(tp);
4973 r8152_aldps_en(tp, true);
4974}
4975
4976static void rtl8152_down(struct r8152 *tp)
4977{
4978 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
4979 rtl_drop_queued_tx(tp);
4980 return;
4981 }
4982
4983 r8152_power_cut_en(tp, false);
4984 r8152_aldps_en(tp, false);
4985 r8152b_enter_oob(tp);
4986 r8152_aldps_en(tp, true);
4987}
4988
4989static void rtl8153_up(struct r8152 *tp)
4990{
4991 u32 ocp_data;
4992
4993 if (test_bit(RTL8152_UNPLUG, &tp->flags))
4994 return;
4995
4996 r8153_u1u2en(tp, false);
4997 r8153_u2p3en(tp, false);
4998 r8153_aldps_en(tp, false);
4999 r8153_first_init(tp);
5000
5001 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
5002 ocp_data |= LANWAKE_CLR_EN;
5003 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
5004
5005 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG);
5006 ocp_data &= ~LANWAKE_PIN;
5007 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data);
5008
5009 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1);
5010 ocp_data &= ~DELAY_PHY_PWR_CHG;
5011 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK1, ocp_data);
5012
5013 r8153_aldps_en(tp, true);
5014
5015 switch (tp->version) {
5016 case RTL_VER_03:
5017 case RTL_VER_04:
5018 break;
5019 case RTL_VER_05:
5020 case RTL_VER_06:
5021 default:
5022 r8153_u2p3en(tp, true);
5023 break;
5024 }
5025
5026 r8153_u1u2en(tp, true);
5027}
5028
5029static void rtl8153_down(struct r8152 *tp)
5030{
5031 u32 ocp_data;
5032
5033 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
5034 rtl_drop_queued_tx(tp);
5035 return;
5036 }
5037
5038 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
5039 ocp_data &= ~LANWAKE_CLR_EN;
5040 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
5041
5042 r8153_u1u2en(tp, false);
5043 r8153_u2p3en(tp, false);
5044 r8153_power_cut_en(tp, false);
5045 r8153_aldps_en(tp, false);
5046 r8153_enter_oob(tp);
5047 r8153_aldps_en(tp, true);
5048}
5049
5050static void rtl8153b_up(struct r8152 *tp)
5051{
5052 u32 ocp_data;
5053
5054 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5055 return;
5056
5057 r8153b_u1u2en(tp, false);
5058 r8153_u2p3en(tp, false);
5059 r8153_aldps_en(tp, false);
5060
5061 r8153_first_init(tp);
5062 ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_B);
5063
5064 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
5065 ocp_data &= ~PLA_MCU_SPDWN_EN;
5066 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
5067
5068 r8153_aldps_en(tp, true);
5069
5070 if (tp->udev->speed >= USB_SPEED_SUPER)
5071 r8153b_u1u2en(tp, true);
5072}
5073
5074static void rtl8153b_down(struct r8152 *tp)
5075{
5076 u32 ocp_data;
5077
5078 if (test_bit(RTL8152_UNPLUG, &tp->flags)) {
5079 rtl_drop_queued_tx(tp);
5080 return;
5081 }
5082
5083 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
5084 ocp_data |= PLA_MCU_SPDWN_EN;
5085 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
5086
5087 r8153b_u1u2en(tp, false);
5088 r8153_u2p3en(tp, false);
5089 r8153b_power_cut_en(tp, false);
5090 r8153_aldps_en(tp, false);
5091 r8153_enter_oob(tp);
5092 r8153_aldps_en(tp, true);
5093}
5094
5095static bool rtl8152_in_nway(struct r8152 *tp)
5096{
5097 u16 nway_state;
5098
5099 ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, 0x2000);
5100 tp->ocp_base = 0x2000;
5101 ocp_write_byte(tp, MCU_TYPE_PLA, 0xb014, 0x4c); /* phy state */
5102 nway_state = ocp_read_word(tp, MCU_TYPE_PLA, 0xb01a);
5103
5104 /* bit 15: TXDIS_STATE, bit 14: ABD_STATE */
5105 if (nway_state & 0xc000)
5106 return false;
5107 else
5108 return true;
5109}
5110
5111static bool rtl8153_in_nway(struct r8152 *tp)
5112{
5113 u16 phy_state = ocp_reg_read(tp, OCP_PHY_STATE) & 0xff;
5114
5115 if (phy_state == TXDIS_STATE || phy_state == ABD_STATE)
5116 return false;
5117 else
5118 return true;
5119}
5120
5121static void set_carrier(struct r8152 *tp)
5122{
5123 struct net_device *netdev = tp->netdev;
5124 struct napi_struct *napi = &tp->napi;
5125 u8 speed;
5126
5127 speed = rtl8152_get_speed(tp);
5128
5129 if (speed & LINK_STATUS) {
5130 if (!netif_carrier_ok(netdev)) {
5131 tp->rtl_ops.enable(tp);
5132 netif_stop_queue(netdev);
5133 napi_disable(napi);
5134 netif_carrier_on(netdev);
5135 rtl_start_rx(tp);
5136 clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
5137 _rtl8152_set_rx_mode(netdev);
5138 napi_enable(&tp->napi);
5139 netif_wake_queue(netdev);
5140 netif_info(tp, link, netdev, "carrier on\n");
5141 } else if (netif_queue_stopped(netdev) &&
5142 skb_queue_len(&tp->tx_queue) < tp->tx_qlen) {
5143 netif_wake_queue(netdev);
5144 }
5145 } else {
5146 if (netif_carrier_ok(netdev)) {
5147 netif_carrier_off(netdev);
5148 tasklet_disable(&tp->tx_tl);
5149 napi_disable(napi);
5150 tp->rtl_ops.disable(tp);
5151 napi_enable(napi);
5152 tasklet_enable(&tp->tx_tl);
5153 netif_info(tp, link, netdev, "carrier off\n");
5154 }
5155 }
5156}
5157
5158static void rtl_work_func_t(struct work_struct *work)
5159{
5160 struct r8152 *tp = container_of(work, struct r8152, schedule.work);
5161
5162 /* If the device is unplugged or !netif_running(), the workqueue
5163 * doesn't need to wake the device, and could return directly.
5164 */
5165 if (test_bit(RTL8152_UNPLUG, &tp->flags) || !netif_running(tp->netdev))
5166 return;
5167
5168 if (usb_autopm_get_interface(tp->intf) < 0)
5169 return;
5170
5171 if (!test_bit(WORK_ENABLE, &tp->flags))
5172 goto out1;
5173
5174 if (!mutex_trylock(&tp->control)) {
5175 schedule_delayed_work(&tp->schedule, 0);
5176 goto out1;
5177 }
5178
5179 if (test_and_clear_bit(RTL8152_LINK_CHG, &tp->flags))
5180 set_carrier(tp);
5181
5182 if (test_and_clear_bit(RTL8152_SET_RX_MODE, &tp->flags))
5183 _rtl8152_set_rx_mode(tp->netdev);
5184
5185 /* don't schedule tasket before linking */
5186 if (test_and_clear_bit(SCHEDULE_TASKLET, &tp->flags) &&
5187 netif_carrier_ok(tp->netdev))
5188 tasklet_schedule(&tp->tx_tl);
5189
5190 mutex_unlock(&tp->control);
5191
5192out1:
5193 usb_autopm_put_interface(tp->intf);
5194}
5195
5196static void rtl_hw_phy_work_func_t(struct work_struct *work)
5197{
5198 struct r8152 *tp = container_of(work, struct r8152, hw_phy_work.work);
5199
5200 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5201 return;
5202
5203 if (usb_autopm_get_interface(tp->intf) < 0)
5204 return;
5205
5206 mutex_lock(&tp->control);
5207
5208 if (rtl8152_request_firmware(tp) == -ENODEV && tp->rtl_fw.retry) {
5209 tp->rtl_fw.retry = false;
5210 tp->rtl_fw.fw = NULL;
5211
5212 /* Delay execution in case request_firmware() is not ready yet.
5213 */
5214 queue_delayed_work(system_long_wq, &tp->hw_phy_work, HZ * 10);
5215 goto ignore_once;
5216 }
5217
5218 tp->rtl_ops.hw_phy_cfg(tp);
5219
5220 rtl8152_set_speed(tp, tp->autoneg, tp->speed, tp->duplex,
5221 tp->advertising);
5222
5223ignore_once:
5224 mutex_unlock(&tp->control);
5225
5226 usb_autopm_put_interface(tp->intf);
5227}
5228
5229#ifdef CONFIG_PM_SLEEP
5230static int rtl_notifier(struct notifier_block *nb, unsigned long action,
5231 void *data)
5232{
5233 struct r8152 *tp = container_of(nb, struct r8152, pm_notifier);
5234
5235 switch (action) {
5236 case PM_HIBERNATION_PREPARE:
5237 case PM_SUSPEND_PREPARE:
5238 usb_autopm_get_interface(tp->intf);
5239 break;
5240
5241 case PM_POST_HIBERNATION:
5242 case PM_POST_SUSPEND:
5243 usb_autopm_put_interface(tp->intf);
5244 break;
5245
5246 case PM_POST_RESTORE:
5247 case PM_RESTORE_PREPARE:
5248 default:
5249 break;
5250 }
5251
5252 return NOTIFY_DONE;
5253}
5254#endif
5255
5256static int rtl8152_open(struct net_device *netdev)
5257{
5258 struct r8152 *tp = netdev_priv(netdev);
5259 int res = 0;
5260
5261 if (work_busy(&tp->hw_phy_work.work) & WORK_BUSY_PENDING) {
5262 cancel_delayed_work_sync(&tp->hw_phy_work);
5263 rtl_hw_phy_work_func_t(&tp->hw_phy_work.work);
5264 }
5265
5266 res = alloc_all_mem(tp);
5267 if (res)
5268 goto out;
5269
5270 res = usb_autopm_get_interface(tp->intf);
5271 if (res < 0)
5272 goto out_free;
5273
5274 mutex_lock(&tp->control);
5275
5276 tp->rtl_ops.up(tp);
5277
5278 netif_carrier_off(netdev);
5279 netif_start_queue(netdev);
5280 set_bit(WORK_ENABLE, &tp->flags);
5281
5282 res = usb_submit_urb(tp->intr_urb, GFP_KERNEL);
5283 if (res) {
5284 if (res == -ENODEV)
5285 netif_device_detach(tp->netdev);
5286 netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n",
5287 res);
5288 goto out_unlock;
5289 }
5290 napi_enable(&tp->napi);
5291 tasklet_enable(&tp->tx_tl);
5292
5293 mutex_unlock(&tp->control);
5294
5295 usb_autopm_put_interface(tp->intf);
5296#ifdef CONFIG_PM_SLEEP
5297 tp->pm_notifier.notifier_call = rtl_notifier;
5298 register_pm_notifier(&tp->pm_notifier);
5299#endif
5300 return 0;
5301
5302out_unlock:
5303 mutex_unlock(&tp->control);
5304 usb_autopm_put_interface(tp->intf);
5305out_free:
5306 free_all_mem(tp);
5307out:
5308 return res;
5309}
5310
5311static int rtl8152_close(struct net_device *netdev)
5312{
5313 struct r8152 *tp = netdev_priv(netdev);
5314 int res = 0;
5315
5316#ifdef CONFIG_PM_SLEEP
5317 unregister_pm_notifier(&tp->pm_notifier);
5318#endif
5319 tasklet_disable(&tp->tx_tl);
5320 clear_bit(WORK_ENABLE, &tp->flags);
5321 usb_kill_urb(tp->intr_urb);
5322 cancel_delayed_work_sync(&tp->schedule);
5323 napi_disable(&tp->napi);
5324 netif_stop_queue(netdev);
5325
5326 res = usb_autopm_get_interface(tp->intf);
5327 if (res < 0 || test_bit(RTL8152_UNPLUG, &tp->flags)) {
5328 rtl_drop_queued_tx(tp);
5329 rtl_stop_rx(tp);
5330 } else {
5331 mutex_lock(&tp->control);
5332
5333 tp->rtl_ops.down(tp);
5334
5335 mutex_unlock(&tp->control);
5336
5337 usb_autopm_put_interface(tp->intf);
5338 }
5339
5340 free_all_mem(tp);
5341
5342 return res;
5343}
5344
5345static void rtl_tally_reset(struct r8152 *tp)
5346{
5347 u32 ocp_data;
5348
5349 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY);
5350 ocp_data |= TALLY_RESET;
5351 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
5352}
5353
5354static void r8152b_init(struct r8152 *tp)
5355{
5356 u32 ocp_data;
5357 u16 data;
5358
5359 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5360 return;
5361
5362 data = r8152_mdio_read(tp, MII_BMCR);
5363 if (data & BMCR_PDOWN) {
5364 data &= ~BMCR_PDOWN;
5365 r8152_mdio_write(tp, MII_BMCR, data);
5366 }
5367
5368 r8152_aldps_en(tp, false);
5369
5370 if (tp->version == RTL_VER_01) {
5371 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
5372 ocp_data &= ~LED_MODE_MASK;
5373 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data);
5374 }
5375
5376 r8152_power_cut_en(tp, false);
5377
5378 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
5379 ocp_data |= TX_10M_IDLE_EN | PFM_PWM_SWITCH;
5380 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
5381 ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL);
5382 ocp_data &= ~MCU_CLK_RATIO_MASK;
5383 ocp_data |= MCU_CLK_RATIO | D3_CLK_GATED_EN;
5384 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ocp_data);
5385 ocp_data = GPHY_STS_MSK | SPEED_DOWN_MSK |
5386 SPDWN_RXDV_MSK | SPDWN_LINKCHG_MSK;
5387 ocp_write_word(tp, MCU_TYPE_PLA, PLA_GPHY_INTR_IMR, ocp_data);
5388
5389 rtl_tally_reset(tp);
5390
5391 /* enable rx aggregation */
5392 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
5393 ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
5394 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
5395}
5396
5397static void r8153_init(struct r8152 *tp)
5398{
5399 u32 ocp_data;
5400 u16 data;
5401 int i;
5402
5403 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5404 return;
5405
5406 r8153_u1u2en(tp, false);
5407
5408 for (i = 0; i < 500; i++) {
5409 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
5410 AUTOLOAD_DONE)
5411 break;
5412
5413 msleep(20);
5414 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5415 break;
5416 }
5417
5418 data = r8153_phy_status(tp, 0);
5419
5420 if (tp->version == RTL_VER_03 || tp->version == RTL_VER_04 ||
5421 tp->version == RTL_VER_05)
5422 ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L);
5423
5424 data = r8152_mdio_read(tp, MII_BMCR);
5425 if (data & BMCR_PDOWN) {
5426 data &= ~BMCR_PDOWN;
5427 r8152_mdio_write(tp, MII_BMCR, data);
5428 }
5429
5430 data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
5431
5432 r8153_u2p3en(tp, false);
5433
5434 if (tp->version == RTL_VER_04) {
5435 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2);
5436 ocp_data &= ~pwd_dn_scale_mask;
5437 ocp_data |= pwd_dn_scale(96);
5438 ocp_write_word(tp, MCU_TYPE_USB, USB_SSPHYLINK2, ocp_data);
5439
5440 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_USB2PHY);
5441 ocp_data |= USB2PHY_L1 | USB2PHY_SUSPEND;
5442 ocp_write_byte(tp, MCU_TYPE_USB, USB_USB2PHY, ocp_data);
5443 } else if (tp->version == RTL_VER_05) {
5444 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0);
5445 ocp_data &= ~ECM_ALDPS;
5446 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_DMY_REG0, ocp_data);
5447
5448 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1);
5449 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
5450 ocp_data &= ~DYNAMIC_BURST;
5451 else
5452 ocp_data |= DYNAMIC_BURST;
5453 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data);
5454 } else if (tp->version == RTL_VER_06) {
5455 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1);
5456 if (ocp_read_word(tp, MCU_TYPE_USB, USB_BURST_SIZE) == 0)
5457 ocp_data &= ~DYNAMIC_BURST;
5458 else
5459 ocp_data |= DYNAMIC_BURST;
5460 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY1, ocp_data);
5461
5462 r8153_queue_wake(tp, false);
5463
5464 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
5465 if (rtl8152_get_speed(tp) & LINK_STATUS)
5466 ocp_data |= CUR_LINK_OK;
5467 else
5468 ocp_data &= ~CUR_LINK_OK;
5469 ocp_data |= POLL_LINK_CHG;
5470 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
5471 }
5472
5473 ocp_data = ocp_read_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2);
5474 ocp_data |= EP4_FULL_FC;
5475 ocp_write_byte(tp, MCU_TYPE_USB, USB_CSR_DUMMY2, ocp_data);
5476
5477 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL);
5478 ocp_data &= ~TIMER11_EN;
5479 ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data);
5480
5481 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE);
5482 ocp_data &= ~LED_MODE_MASK;
5483 ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data);
5484
5485 ocp_data = FIFO_EMPTY_1FB | ROK_EXIT_LPM;
5486 if (tp->version == RTL_VER_04 && tp->udev->speed < USB_SPEED_SUPER)
5487 ocp_data |= LPM_TIMER_500MS;
5488 else
5489 ocp_data |= LPM_TIMER_500US;
5490 ocp_write_byte(tp, MCU_TYPE_USB, USB_LPM_CTRL, ocp_data);
5491
5492 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2);
5493 ocp_data &= ~SEN_VAL_MASK;
5494 ocp_data |= SEN_VAL_NORMAL | SEL_RXIDLE;
5495 ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data);
5496
5497 ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001);
5498
5499 r8153_power_cut_en(tp, false);
5500 rtl_runtime_suspend_enable(tp, false);
5501 r8153_u1u2en(tp, true);
5502 r8153_mac_clk_spd(tp, false);
5503 usb_enable_lpm(tp->udev);
5504
5505 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6);
5506 ocp_data |= LANWAKE_CLR_EN;
5507 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG6, ocp_data);
5508
5509 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG);
5510 ocp_data &= ~LANWAKE_PIN;
5511 ocp_write_byte(tp, MCU_TYPE_PLA, PLA_LWAKE_CTRL_REG, ocp_data);
5512
5513 /* rx aggregation */
5514 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
5515 ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
5516 if (test_bit(DELL_TB_RX_AGG_BUG, &tp->flags))
5517 ocp_data |= RX_AGG_DISABLE;
5518
5519 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
5520
5521 rtl_tally_reset(tp);
5522
5523 switch (tp->udev->speed) {
5524 case USB_SPEED_SUPER:
5525 case USB_SPEED_SUPER_PLUS:
5526 tp->coalesce = COALESCE_SUPER;
5527 break;
5528 case USB_SPEED_HIGH:
5529 tp->coalesce = COALESCE_HIGH;
5530 break;
5531 default:
5532 tp->coalesce = COALESCE_SLOW;
5533 break;
5534 }
5535}
5536
5537static void r8153b_init(struct r8152 *tp)
5538{
5539 u32 ocp_data;
5540 u16 data;
5541 int i;
5542
5543 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5544 return;
5545
5546 r8153b_u1u2en(tp, false);
5547
5548 for (i = 0; i < 500; i++) {
5549 if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) &
5550 AUTOLOAD_DONE)
5551 break;
5552
5553 msleep(20);
5554 if (test_bit(RTL8152_UNPLUG, &tp->flags))
5555 break;
5556 }
5557
5558 data = r8153_phy_status(tp, 0);
5559
5560 data = r8152_mdio_read(tp, MII_BMCR);
5561 if (data & BMCR_PDOWN) {
5562 data &= ~BMCR_PDOWN;
5563 r8152_mdio_write(tp, MII_BMCR, data);
5564 }
5565
5566 data = r8153_phy_status(tp, PHY_STAT_LAN_ON);
5567
5568 r8153_u2p3en(tp, false);
5569
5570 /* MSC timer = 0xfff * 8ms = 32760 ms */
5571 ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
5572
5573 r8153b_power_cut_en(tp, false);
5574 r8153b_ups_en(tp, false);
5575 r8153_queue_wake(tp, false);
5576 rtl_runtime_suspend_enable(tp, false);
5577
5578 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
5579 if (rtl8152_get_speed(tp) & LINK_STATUS)
5580 ocp_data |= CUR_LINK_OK;
5581 else
5582 ocp_data &= ~CUR_LINK_OK;
5583 ocp_data |= POLL_LINK_CHG;
5584 ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
5585
5586 if (tp->udev->speed >= USB_SPEED_SUPER)
5587 r8153b_u1u2en(tp, true);
5588
5589 usb_enable_lpm(tp->udev);
5590
5591 /* MAC clock speed down */
5592 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2);
5593 ocp_data |= MAC_CLK_SPDWN_EN;
5594 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, ocp_data);
5595
5596 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
5597 ocp_data &= ~PLA_MCU_SPDWN_EN;
5598 ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3, ocp_data);
5599
5600 if (tp->version == RTL_VER_09) {
5601 /* Disable Test IO for 32QFN */
5602 if (ocp_read_byte(tp, MCU_TYPE_PLA, 0xdc00) & BIT(5)) {
5603 ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR);
5604 ocp_data |= TEST_IO_OFF;
5605 ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
5606 }
5607 }
5608
5609 set_bit(GREEN_ETHERNET, &tp->flags);
5610
5611 /* rx aggregation */
5612 ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
5613 ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
5614 ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
5615
5616 rtl_tally_reset(tp);
5617
5618 tp->coalesce = 15000; /* 15 us */
5619}
5620
5621static int rtl8152_pre_reset(struct usb_interface *intf)
5622{
5623 struct r8152 *tp = usb_get_intfdata(intf);
5624 struct net_device *netdev;
5625
5626 if (!tp)
5627 return 0;
5628
5629 netdev = tp->netdev;
5630 if (!netif_running(netdev))
5631 return 0;
5632
5633 netif_stop_queue(netdev);
5634 tasklet_disable(&tp->tx_tl);
5635 clear_bit(WORK_ENABLE, &tp->flags);
5636 usb_kill_urb(tp->intr_urb);
5637 cancel_delayed_work_sync(&tp->schedule);
5638 napi_disable(&tp->napi);
5639 if (netif_carrier_ok(netdev)) {
5640 mutex_lock(&tp->control);
5641 tp->rtl_ops.disable(tp);
5642 mutex_unlock(&tp->control);
5643 }
5644
5645 return 0;
5646}
5647
5648static int rtl8152_post_reset(struct usb_interface *intf)
5649{
5650 struct r8152 *tp = usb_get_intfdata(intf);
5651 struct net_device *netdev;
5652 struct sockaddr sa;
5653
5654 if (!tp)
5655 return 0;
5656
5657 /* reset the MAC adddress in case of policy change */
5658 if (determine_ethernet_addr(tp, &sa) >= 0) {
5659 rtnl_lock();
5660 dev_set_mac_address (tp->netdev, &sa, NULL);
5661 rtnl_unlock();
5662 }
5663
5664 netdev = tp->netdev;
5665 if (!netif_running(netdev))
5666 return 0;
5667
5668 set_bit(WORK_ENABLE, &tp->flags);
5669 if (netif_carrier_ok(netdev)) {
5670 mutex_lock(&tp->control);
5671 tp->rtl_ops.enable(tp);
5672 rtl_start_rx(tp);
5673 _rtl8152_set_rx_mode(netdev);
5674 mutex_unlock(&tp->control);
5675 }
5676
5677 napi_enable(&tp->napi);
5678 tasklet_enable(&tp->tx_tl);
5679 netif_wake_queue(netdev);
5680 usb_submit_urb(tp->intr_urb, GFP_KERNEL);
5681
5682 if (!list_empty(&tp->rx_done))
5683 napi_schedule(&tp->napi);
5684
5685 return 0;
5686}
5687
5688static bool delay_autosuspend(struct r8152 *tp)
5689{
5690 bool sw_linking = !!netif_carrier_ok(tp->netdev);
5691 bool hw_linking = !!(rtl8152_get_speed(tp) & LINK_STATUS);
5692
5693 /* This means a linking change occurs and the driver doesn't detect it,
5694 * yet. If the driver has disabled tx/rx and hw is linking on, the
5695 * device wouldn't wake up by receiving any packet.
5696 */
5697 if (work_busy(&tp->schedule.work) || sw_linking != hw_linking)
5698 return true;
5699
5700 /* If the linking down is occurred by nway, the device may miss the
5701 * linking change event. And it wouldn't wake when linking on.
5702 */
5703 if (!sw_linking && tp->rtl_ops.in_nway(tp))
5704 return true;
5705 else if (!skb_queue_empty(&tp->tx_queue))
5706 return true;
5707 else
5708 return false;
5709}
5710
5711static int rtl8152_runtime_resume(struct r8152 *tp)
5712{
5713 struct net_device *netdev = tp->netdev;
5714
5715 if (netif_running(netdev) && netdev->flags & IFF_UP) {
5716 struct napi_struct *napi = &tp->napi;
5717
5718 tp->rtl_ops.autosuspend_en(tp, false);
5719 napi_disable(napi);
5720 set_bit(WORK_ENABLE, &tp->flags);
5721
5722 if (netif_carrier_ok(netdev)) {
5723 if (rtl8152_get_speed(tp) & LINK_STATUS) {
5724 rtl_start_rx(tp);
5725 } else {
5726 netif_carrier_off(netdev);
5727 tp->rtl_ops.disable(tp);
5728 netif_info(tp, link, netdev, "linking down\n");
5729 }
5730 }
5731
5732 napi_enable(napi);
5733 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5734 smp_mb__after_atomic();
5735
5736 if (!list_empty(&tp->rx_done))
5737 napi_schedule(&tp->napi);
5738
5739 usb_submit_urb(tp->intr_urb, GFP_NOIO);
5740 } else {
5741 if (netdev->flags & IFF_UP)
5742 tp->rtl_ops.autosuspend_en(tp, false);
5743
5744 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5745 }
5746
5747 return 0;
5748}
5749
5750static int rtl8152_system_resume(struct r8152 *tp)
5751{
5752 struct net_device *netdev = tp->netdev;
5753
5754 netif_device_attach(netdev);
5755
5756 if (netif_running(netdev) && (netdev->flags & IFF_UP)) {
5757 tp->rtl_ops.up(tp);
5758 netif_carrier_off(netdev);
5759 set_bit(WORK_ENABLE, &tp->flags);
5760 usb_submit_urb(tp->intr_urb, GFP_NOIO);
5761 }
5762
5763 return 0;
5764}
5765
5766static int rtl8152_runtime_suspend(struct r8152 *tp)
5767{
5768 struct net_device *netdev = tp->netdev;
5769 int ret = 0;
5770
5771 if (!tp->rtl_ops.autosuspend_en)
5772 return -EBUSY;
5773
5774 set_bit(SELECTIVE_SUSPEND, &tp->flags);
5775 smp_mb__after_atomic();
5776
5777 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) {
5778 u32 rcr = 0;
5779
5780 if (netif_carrier_ok(netdev)) {
5781 u32 ocp_data;
5782
5783 rcr = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR);
5784 ocp_data = rcr & ~RCR_ACPT_ALL;
5785 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data);
5786 rxdy_gated_en(tp, true);
5787 ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA,
5788 PLA_OOB_CTRL);
5789 if (!(ocp_data & RXFIFO_EMPTY)) {
5790 rxdy_gated_en(tp, false);
5791 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr);
5792 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5793 smp_mb__after_atomic();
5794 ret = -EBUSY;
5795 goto out1;
5796 }
5797 }
5798
5799 clear_bit(WORK_ENABLE, &tp->flags);
5800 usb_kill_urb(tp->intr_urb);
5801
5802 tp->rtl_ops.autosuspend_en(tp, true);
5803
5804 if (netif_carrier_ok(netdev)) {
5805 struct napi_struct *napi = &tp->napi;
5806
5807 napi_disable(napi);
5808 rtl_stop_rx(tp);
5809 rxdy_gated_en(tp, false);
5810 ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr);
5811 napi_enable(napi);
5812 }
5813
5814 if (delay_autosuspend(tp)) {
5815 rtl8152_runtime_resume(tp);
5816 ret = -EBUSY;
5817 }
5818 }
5819
5820out1:
5821 return ret;
5822}
5823
5824static int rtl8152_system_suspend(struct r8152 *tp)
5825{
5826 struct net_device *netdev = tp->netdev;
5827
5828 netif_device_detach(netdev);
5829
5830 if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) {
5831 struct napi_struct *napi = &tp->napi;
5832
5833 clear_bit(WORK_ENABLE, &tp->flags);
5834 usb_kill_urb(tp->intr_urb);
5835 tasklet_disable(&tp->tx_tl);
5836 napi_disable(napi);
5837 cancel_delayed_work_sync(&tp->schedule);
5838 tp->rtl_ops.down(tp);
5839 napi_enable(napi);
5840 tasklet_enable(&tp->tx_tl);
5841 }
5842
5843 return 0;
5844}
5845
5846static int rtl8152_suspend(struct usb_interface *intf, pm_message_t message)
5847{
5848 struct r8152 *tp = usb_get_intfdata(intf);
5849 int ret;
5850
5851 mutex_lock(&tp->control);
5852
5853 if (PMSG_IS_AUTO(message))
5854 ret = rtl8152_runtime_suspend(tp);
5855 else
5856 ret = rtl8152_system_suspend(tp);
5857
5858 mutex_unlock(&tp->control);
5859
5860 return ret;
5861}
5862
5863static int rtl8152_resume(struct usb_interface *intf)
5864{
5865 struct r8152 *tp = usb_get_intfdata(intf);
5866 int ret;
5867
5868 mutex_lock(&tp->control);
5869
5870 if (test_bit(SELECTIVE_SUSPEND, &tp->flags))
5871 ret = rtl8152_runtime_resume(tp);
5872 else
5873 ret = rtl8152_system_resume(tp);
5874
5875 mutex_unlock(&tp->control);
5876
5877 return ret;
5878}
5879
5880static int rtl8152_reset_resume(struct usb_interface *intf)
5881{
5882 struct r8152 *tp = usb_get_intfdata(intf);
5883
5884 clear_bit(SELECTIVE_SUSPEND, &tp->flags);
5885 tp->rtl_ops.init(tp);
5886 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0);
5887 set_ethernet_addr(tp);
5888 return rtl8152_resume(intf);
5889}
5890
5891static void rtl8152_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
5892{
5893 struct r8152 *tp = netdev_priv(dev);
5894
5895 if (usb_autopm_get_interface(tp->intf) < 0)
5896 return;
5897
5898 if (!rtl_can_wakeup(tp)) {
5899 wol->supported = 0;
5900 wol->wolopts = 0;
5901 } else {
5902 mutex_lock(&tp->control);
5903 wol->supported = WAKE_ANY;
5904 wol->wolopts = __rtl_get_wol(tp);
5905 mutex_unlock(&tp->control);
5906 }
5907
5908 usb_autopm_put_interface(tp->intf);
5909}
5910
5911static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
5912{
5913 struct r8152 *tp = netdev_priv(dev);
5914 int ret;
5915
5916 if (!rtl_can_wakeup(tp))
5917 return -EOPNOTSUPP;
5918
5919 if (wol->wolopts & ~WAKE_ANY)
5920 return -EINVAL;
5921
5922 ret = usb_autopm_get_interface(tp->intf);
5923 if (ret < 0)
5924 goto out_set_wol;
5925
5926 mutex_lock(&tp->control);
5927
5928 __rtl_set_wol(tp, wol->wolopts);
5929 tp->saved_wolopts = wol->wolopts & WAKE_ANY;
5930
5931 mutex_unlock(&tp->control);
5932
5933 usb_autopm_put_interface(tp->intf);
5934
5935out_set_wol:
5936 return ret;
5937}
5938
5939static u32 rtl8152_get_msglevel(struct net_device *dev)
5940{
5941 struct r8152 *tp = netdev_priv(dev);
5942
5943 return tp->msg_enable;
5944}
5945
5946static void rtl8152_set_msglevel(struct net_device *dev, u32 value)
5947{
5948 struct r8152 *tp = netdev_priv(dev);
5949
5950 tp->msg_enable = value;
5951}
5952
5953static void rtl8152_get_drvinfo(struct net_device *netdev,
5954 struct ethtool_drvinfo *info)
5955{
5956 struct r8152 *tp = netdev_priv(netdev);
5957
5958 strlcpy(info->driver, MODULENAME, sizeof(info->driver));
5959 strlcpy(info->version, DRIVER_VERSION, sizeof(info->version));
5960 usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info));
5961 if (!IS_ERR_OR_NULL(tp->rtl_fw.fw))
5962 strlcpy(info->fw_version, tp->rtl_fw.version,
5963 sizeof(info->fw_version));
5964}
5965
5966static
5967int rtl8152_get_link_ksettings(struct net_device *netdev,
5968 struct ethtool_link_ksettings *cmd)
5969{
5970 struct r8152 *tp = netdev_priv(netdev);
5971 int ret;
5972
5973 if (!tp->mii.mdio_read)
5974 return -EOPNOTSUPP;
5975
5976 ret = usb_autopm_get_interface(tp->intf);
5977 if (ret < 0)
5978 goto out;
5979
5980 mutex_lock(&tp->control);
5981
5982 mii_ethtool_get_link_ksettings(&tp->mii, cmd);
5983
5984 mutex_unlock(&tp->control);
5985
5986 usb_autopm_put_interface(tp->intf);
5987
5988out:
5989 return ret;
5990}
5991
5992static int rtl8152_set_link_ksettings(struct net_device *dev,
5993 const struct ethtool_link_ksettings *cmd)
5994{
5995 struct r8152 *tp = netdev_priv(dev);
5996 u32 advertising = 0;
5997 int ret;
5998
5999 ret = usb_autopm_get_interface(tp->intf);
6000 if (ret < 0)
6001 goto out;
6002
6003 if (test_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT,
6004 cmd->link_modes.advertising))
6005 advertising |= RTL_ADVERTISED_10_HALF;
6006
6007 if (test_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
6008 cmd->link_modes.advertising))
6009 advertising |= RTL_ADVERTISED_10_FULL;
6010
6011 if (test_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT,
6012 cmd->link_modes.advertising))
6013 advertising |= RTL_ADVERTISED_100_HALF;
6014
6015 if (test_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
6016 cmd->link_modes.advertising))
6017 advertising |= RTL_ADVERTISED_100_FULL;
6018
6019 if (test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
6020 cmd->link_modes.advertising))
6021 advertising |= RTL_ADVERTISED_1000_HALF;
6022
6023 if (test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
6024 cmd->link_modes.advertising))
6025 advertising |= RTL_ADVERTISED_1000_FULL;
6026
6027 mutex_lock(&tp->control);
6028
6029 ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed,
6030 cmd->base.duplex, advertising);
6031 if (!ret) {
6032 tp->autoneg = cmd->base.autoneg;
6033 tp->speed = cmd->base.speed;
6034 tp->duplex = cmd->base.duplex;
6035 tp->advertising = advertising;
6036 }
6037
6038 mutex_unlock(&tp->control);
6039
6040 usb_autopm_put_interface(tp->intf);
6041
6042out:
6043 return ret;
6044}
6045
6046static const char rtl8152_gstrings[][ETH_GSTRING_LEN] = {
6047 "tx_packets",
6048 "rx_packets",
6049 "tx_errors",
6050 "rx_errors",
6051 "rx_missed",
6052 "align_errors",
6053 "tx_single_collisions",
6054 "tx_multi_collisions",
6055 "rx_unicast",
6056 "rx_broadcast",
6057 "rx_multicast",
6058 "tx_aborted",
6059 "tx_underrun",
6060};
6061
6062static int rtl8152_get_sset_count(struct net_device *dev, int sset)
6063{
6064 switch (sset) {
6065 case ETH_SS_STATS:
6066 return ARRAY_SIZE(rtl8152_gstrings);
6067 default:
6068 return -EOPNOTSUPP;
6069 }
6070}
6071
6072static void rtl8152_get_ethtool_stats(struct net_device *dev,
6073 struct ethtool_stats *stats, u64 *data)
6074{
6075 struct r8152 *tp = netdev_priv(dev);
6076 struct tally_counter tally;
6077
6078 if (usb_autopm_get_interface(tp->intf) < 0)
6079 return;
6080
6081 generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA);
6082
6083 usb_autopm_put_interface(tp->intf);
6084
6085 data[0] = le64_to_cpu(tally.tx_packets);
6086 data[1] = le64_to_cpu(tally.rx_packets);
6087 data[2] = le64_to_cpu(tally.tx_errors);
6088 data[3] = le32_to_cpu(tally.rx_errors);
6089 data[4] = le16_to_cpu(tally.rx_missed);
6090 data[5] = le16_to_cpu(tally.align_errors);
6091 data[6] = le32_to_cpu(tally.tx_one_collision);
6092 data[7] = le32_to_cpu(tally.tx_multi_collision);
6093 data[8] = le64_to_cpu(tally.rx_unicast);
6094 data[9] = le64_to_cpu(tally.rx_broadcast);
6095 data[10] = le32_to_cpu(tally.rx_multicast);
6096 data[11] = le16_to_cpu(tally.tx_aborted);
6097 data[12] = le16_to_cpu(tally.tx_underrun);
6098}
6099
6100static void rtl8152_get_strings(struct net_device *dev, u32 stringset, u8 *data)
6101{
6102 switch (stringset) {
6103 case ETH_SS_STATS:
6104 memcpy(data, *rtl8152_gstrings, sizeof(rtl8152_gstrings));
6105 break;
6106 }
6107}
6108
6109static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee)
6110{
6111 u32 lp, adv, supported = 0;
6112 u16 val;
6113
6114 val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
6115 supported = mmd_eee_cap_to_ethtool_sup_t(val);
6116
6117 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV);
6118 adv = mmd_eee_adv_to_ethtool_adv_t(val);
6119
6120 val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE);
6121 lp = mmd_eee_adv_to_ethtool_adv_t(val);
6122
6123 eee->eee_enabled = tp->eee_en;
6124 eee->eee_active = !!(supported & adv & lp);
6125 eee->supported = supported;
6126 eee->advertised = tp->eee_adv;
6127 eee->lp_advertised = lp;
6128
6129 return 0;
6130}
6131
6132static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee)
6133{
6134 u16 val = ethtool_adv_to_mmd_eee_adv_t(eee->advertised);
6135
6136 tp->eee_en = eee->eee_enabled;
6137 tp->eee_adv = val;
6138
6139 rtl_eee_enable(tp, tp->eee_en);
6140
6141 return 0;
6142}
6143
6144static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee)
6145{
6146 u32 lp, adv, supported = 0;
6147 u16 val;
6148
6149 val = ocp_reg_read(tp, OCP_EEE_ABLE);
6150 supported = mmd_eee_cap_to_ethtool_sup_t(val);
6151
6152 val = ocp_reg_read(tp, OCP_EEE_ADV);
6153 adv = mmd_eee_adv_to_ethtool_adv_t(val);
6154
6155 val = ocp_reg_read(tp, OCP_EEE_LPABLE);
6156 lp = mmd_eee_adv_to_ethtool_adv_t(val);
6157
6158 eee->eee_enabled = tp->eee_en;
6159 eee->eee_active = !!(supported & adv & lp);
6160 eee->supported = supported;
6161 eee->advertised = tp->eee_adv;
6162 eee->lp_advertised = lp;
6163
6164 return 0;
6165}
6166
6167static int
6168rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata)
6169{
6170 struct r8152 *tp = netdev_priv(net);
6171 int ret;
6172
6173 if (!tp->rtl_ops.eee_get) {
6174 ret = -EOPNOTSUPP;
6175 goto out;
6176 }
6177
6178 ret = usb_autopm_get_interface(tp->intf);
6179 if (ret < 0)
6180 goto out;
6181
6182 mutex_lock(&tp->control);
6183
6184 ret = tp->rtl_ops.eee_get(tp, edata);
6185
6186 mutex_unlock(&tp->control);
6187
6188 usb_autopm_put_interface(tp->intf);
6189
6190out:
6191 return ret;
6192}
6193
6194static int
6195rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *edata)
6196{
6197 struct r8152 *tp = netdev_priv(net);
6198 int ret;
6199
6200 if (!tp->rtl_ops.eee_set) {
6201 ret = -EOPNOTSUPP;
6202 goto out;
6203 }
6204
6205 ret = usb_autopm_get_interface(tp->intf);
6206 if (ret < 0)
6207 goto out;
6208
6209 mutex_lock(&tp->control);
6210
6211 ret = tp->rtl_ops.eee_set(tp, edata);
6212 if (!ret)
6213 ret = mii_nway_restart(&tp->mii);
6214
6215 mutex_unlock(&tp->control);
6216
6217 usb_autopm_put_interface(tp->intf);
6218
6219out:
6220 return ret;
6221}
6222
6223static int rtl8152_nway_reset(struct net_device *dev)
6224{
6225 struct r8152 *tp = netdev_priv(dev);
6226 int ret;
6227
6228 ret = usb_autopm_get_interface(tp->intf);
6229 if (ret < 0)
6230 goto out;
6231
6232 mutex_lock(&tp->control);
6233
6234 ret = mii_nway_restart(&tp->mii);
6235
6236 mutex_unlock(&tp->control);
6237
6238 usb_autopm_put_interface(tp->intf);
6239
6240out:
6241 return ret;
6242}
6243
6244static int rtl8152_get_coalesce(struct net_device *netdev,
6245 struct ethtool_coalesce *coalesce)
6246{
6247 struct r8152 *tp = netdev_priv(netdev);
6248
6249 switch (tp->version) {
6250 case RTL_VER_01:
6251 case RTL_VER_02:
6252 case RTL_VER_07:
6253 return -EOPNOTSUPP;
6254 default:
6255 break;
6256 }
6257
6258 coalesce->rx_coalesce_usecs = tp->coalesce;
6259
6260 return 0;
6261}
6262
6263static int rtl8152_set_coalesce(struct net_device *netdev,
6264 struct ethtool_coalesce *coalesce)
6265{
6266 struct r8152 *tp = netdev_priv(netdev);
6267 int ret;
6268
6269 switch (tp->version) {
6270 case RTL_VER_01:
6271 case RTL_VER_02:
6272 case RTL_VER_07:
6273 return -EOPNOTSUPP;
6274 default:
6275 break;
6276 }
6277
6278 if (coalesce->rx_coalesce_usecs > COALESCE_SLOW)
6279 return -EINVAL;
6280
6281 ret = usb_autopm_get_interface(tp->intf);
6282 if (ret < 0)
6283 return ret;
6284
6285 mutex_lock(&tp->control);
6286
6287 if (tp->coalesce != coalesce->rx_coalesce_usecs) {
6288 tp->coalesce = coalesce->rx_coalesce_usecs;
6289
6290 if (netif_running(netdev) && netif_carrier_ok(netdev)) {
6291 netif_stop_queue(netdev);
6292 napi_disable(&tp->napi);
6293 tp->rtl_ops.disable(tp);
6294 tp->rtl_ops.enable(tp);
6295 rtl_start_rx(tp);
6296 clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
6297 _rtl8152_set_rx_mode(netdev);
6298 napi_enable(&tp->napi);
6299 netif_wake_queue(netdev);
6300 }
6301 }
6302
6303 mutex_unlock(&tp->control);
6304
6305 usb_autopm_put_interface(tp->intf);
6306
6307 return ret;
6308}
6309
6310static int rtl8152_get_tunable(struct net_device *netdev,
6311 const struct ethtool_tunable *tunable, void *d)
6312{
6313 struct r8152 *tp = netdev_priv(netdev);
6314
6315 switch (tunable->id) {
6316 case ETHTOOL_RX_COPYBREAK:
6317 *(u32 *)d = tp->rx_copybreak;
6318 break;
6319 default:
6320 return -EOPNOTSUPP;
6321 }
6322
6323 return 0;
6324}
6325
6326static int rtl8152_set_tunable(struct net_device *netdev,
6327 const struct ethtool_tunable *tunable,
6328 const void *d)
6329{
6330 struct r8152 *tp = netdev_priv(netdev);
6331 u32 val;
6332
6333 switch (tunable->id) {
6334 case ETHTOOL_RX_COPYBREAK:
6335 val = *(u32 *)d;
6336 if (val < ETH_ZLEN) {
6337 netif_err(tp, rx_err, netdev,
6338 "Invalid rx copy break value\n");
6339 return -EINVAL;
6340 }
6341
6342 if (tp->rx_copybreak != val) {
6343 if (netdev->flags & IFF_UP) {
6344 mutex_lock(&tp->control);
6345 napi_disable(&tp->napi);
6346 tp->rx_copybreak = val;
6347 napi_enable(&tp->napi);
6348 mutex_unlock(&tp->control);
6349 } else {
6350 tp->rx_copybreak = val;
6351 }
6352 }
6353 break;
6354 default:
6355 return -EOPNOTSUPP;
6356 }
6357
6358 return 0;
6359}
6360
6361static void rtl8152_get_ringparam(struct net_device *netdev,
6362 struct ethtool_ringparam *ring)
6363{
6364 struct r8152 *tp = netdev_priv(netdev);
6365
6366 ring->rx_max_pending = RTL8152_RX_MAX_PENDING;
6367 ring->rx_pending = tp->rx_pending;
6368}
6369
6370static int rtl8152_set_ringparam(struct net_device *netdev,
6371 struct ethtool_ringparam *ring)
6372{
6373 struct r8152 *tp = netdev_priv(netdev);
6374
6375 if (ring->rx_pending < (RTL8152_MAX_RX * 2))
6376 return -EINVAL;
6377
6378 if (tp->rx_pending != ring->rx_pending) {
6379 if (netdev->flags & IFF_UP) {
6380 mutex_lock(&tp->control);
6381 napi_disable(&tp->napi);
6382 tp->rx_pending = ring->rx_pending;
6383 napi_enable(&tp->napi);
6384 mutex_unlock(&tp->control);
6385 } else {
6386 tp->rx_pending = ring->rx_pending;
6387 }
6388 }
6389
6390 return 0;
6391}
6392
6393static const struct ethtool_ops ops = {
6394 .supported_coalesce_params = ETHTOOL_COALESCE_USECS,
6395 .get_drvinfo = rtl8152_get_drvinfo,
6396 .get_link = ethtool_op_get_link,
6397 .nway_reset = rtl8152_nway_reset,
6398 .get_msglevel = rtl8152_get_msglevel,
6399 .set_msglevel = rtl8152_set_msglevel,
6400 .get_wol = rtl8152_get_wol,
6401 .set_wol = rtl8152_set_wol,
6402 .get_strings = rtl8152_get_strings,
6403 .get_sset_count = rtl8152_get_sset_count,
6404 .get_ethtool_stats = rtl8152_get_ethtool_stats,
6405 .get_coalesce = rtl8152_get_coalesce,
6406 .set_coalesce = rtl8152_set_coalesce,
6407 .get_eee = rtl_ethtool_get_eee,
6408 .set_eee = rtl_ethtool_set_eee,
6409 .get_link_ksettings = rtl8152_get_link_ksettings,
6410 .set_link_ksettings = rtl8152_set_link_ksettings,
6411 .get_tunable = rtl8152_get_tunable,
6412 .set_tunable = rtl8152_set_tunable,
6413 .get_ringparam = rtl8152_get_ringparam,
6414 .set_ringparam = rtl8152_set_ringparam,
6415};
6416
6417static int rtl8152_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
6418{
6419 struct r8152 *tp = netdev_priv(netdev);
6420 struct mii_ioctl_data *data = if_mii(rq);
6421 int res;
6422
6423 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6424 return -ENODEV;
6425
6426 res = usb_autopm_get_interface(tp->intf);
6427 if (res < 0)
6428 goto out;
6429
6430 switch (cmd) {
6431 case SIOCGMIIPHY:
6432 data->phy_id = R8152_PHY_ID; /* Internal PHY */
6433 break;
6434
6435 case SIOCGMIIREG:
6436 mutex_lock(&tp->control);
6437 data->val_out = r8152_mdio_read(tp, data->reg_num);
6438 mutex_unlock(&tp->control);
6439 break;
6440
6441 case SIOCSMIIREG:
6442 if (!capable(CAP_NET_ADMIN)) {
6443 res = -EPERM;
6444 break;
6445 }
6446 mutex_lock(&tp->control);
6447 r8152_mdio_write(tp, data->reg_num, data->val_in);
6448 mutex_unlock(&tp->control);
6449 break;
6450
6451 default:
6452 res = -EOPNOTSUPP;
6453 }
6454
6455 usb_autopm_put_interface(tp->intf);
6456
6457out:
6458 return res;
6459}
6460
6461static int rtl8152_change_mtu(struct net_device *dev, int new_mtu)
6462{
6463 struct r8152 *tp = netdev_priv(dev);
6464 int ret;
6465
6466 switch (tp->version) {
6467 case RTL_VER_01:
6468 case RTL_VER_02:
6469 case RTL_VER_07:
6470 dev->mtu = new_mtu;
6471 return 0;
6472 default:
6473 break;
6474 }
6475
6476 ret = usb_autopm_get_interface(tp->intf);
6477 if (ret < 0)
6478 return ret;
6479
6480 mutex_lock(&tp->control);
6481
6482 dev->mtu = new_mtu;
6483
6484 if (netif_running(dev)) {
6485 u32 rms = new_mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
6486
6487 ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, rms);
6488
6489 if (netif_carrier_ok(dev))
6490 r8153_set_rx_early_size(tp);
6491 }
6492
6493 mutex_unlock(&tp->control);
6494
6495 usb_autopm_put_interface(tp->intf);
6496
6497 return ret;
6498}
6499
6500static const struct net_device_ops rtl8152_netdev_ops = {
6501 .ndo_open = rtl8152_open,
6502 .ndo_stop = rtl8152_close,
6503 .ndo_do_ioctl = rtl8152_ioctl,
6504 .ndo_start_xmit = rtl8152_start_xmit,
6505 .ndo_tx_timeout = rtl8152_tx_timeout,
6506 .ndo_set_features = rtl8152_set_features,
6507 .ndo_set_rx_mode = rtl8152_set_rx_mode,
6508 .ndo_set_mac_address = rtl8152_set_mac_address,
6509 .ndo_change_mtu = rtl8152_change_mtu,
6510 .ndo_validate_addr = eth_validate_addr,
6511 .ndo_features_check = rtl8152_features_check,
6512};
6513
6514static void rtl8152_unload(struct r8152 *tp)
6515{
6516 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6517 return;
6518
6519 if (tp->version != RTL_VER_01)
6520 r8152_power_cut_en(tp, true);
6521}
6522
6523static void rtl8153_unload(struct r8152 *tp)
6524{
6525 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6526 return;
6527
6528 r8153_power_cut_en(tp, false);
6529}
6530
6531static void rtl8153b_unload(struct r8152 *tp)
6532{
6533 if (test_bit(RTL8152_UNPLUG, &tp->flags))
6534 return;
6535
6536 r8153b_power_cut_en(tp, false);
6537}
6538
6539static int rtl_ops_init(struct r8152 *tp)
6540{
6541 struct rtl_ops *ops = &tp->rtl_ops;
6542 int ret = 0;
6543
6544 switch (tp->version) {
6545 case RTL_VER_01:
6546 case RTL_VER_02:
6547 case RTL_VER_07:
6548 ops->init = r8152b_init;
6549 ops->enable = rtl8152_enable;
6550 ops->disable = rtl8152_disable;
6551 ops->up = rtl8152_up;
6552 ops->down = rtl8152_down;
6553 ops->unload = rtl8152_unload;
6554 ops->eee_get = r8152_get_eee;
6555 ops->eee_set = r8152_set_eee;
6556 ops->in_nway = rtl8152_in_nway;
6557 ops->hw_phy_cfg = r8152b_hw_phy_cfg;
6558 ops->autosuspend_en = rtl_runtime_suspend_enable;
6559 tp->rx_buf_sz = 16 * 1024;
6560 tp->eee_en = true;
6561 tp->eee_adv = MDIO_EEE_100TX;
6562 break;
6563
6564 case RTL_VER_03:
6565 case RTL_VER_04:
6566 case RTL_VER_05:
6567 case RTL_VER_06:
6568 ops->init = r8153_init;
6569 ops->enable = rtl8153_enable;
6570 ops->disable = rtl8153_disable;
6571 ops->up = rtl8153_up;
6572 ops->down = rtl8153_down;
6573 ops->unload = rtl8153_unload;
6574 ops->eee_get = r8153_get_eee;
6575 ops->eee_set = r8152_set_eee;
6576 ops->in_nway = rtl8153_in_nway;
6577 ops->hw_phy_cfg = r8153_hw_phy_cfg;
6578 ops->autosuspend_en = rtl8153_runtime_enable;
6579 tp->rx_buf_sz = 32 * 1024;
6580 tp->eee_en = true;
6581 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
6582 break;
6583
6584 case RTL_VER_08:
6585 case RTL_VER_09:
6586 ops->init = r8153b_init;
6587 ops->enable = rtl8153_enable;
6588 ops->disable = rtl8153_disable;
6589 ops->up = rtl8153b_up;
6590 ops->down = rtl8153b_down;
6591 ops->unload = rtl8153b_unload;
6592 ops->eee_get = r8153_get_eee;
6593 ops->eee_set = r8152_set_eee;
6594 ops->in_nway = rtl8153_in_nway;
6595 ops->hw_phy_cfg = r8153b_hw_phy_cfg;
6596 ops->autosuspend_en = rtl8153b_runtime_enable;
6597 tp->rx_buf_sz = 32 * 1024;
6598 tp->eee_en = true;
6599 tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
6600 break;
6601
6602 default:
6603 ret = -ENODEV;
6604 dev_err(&tp->intf->dev, "Unknown Device\n");
6605 break;
6606 }
6607
6608 return ret;
6609}
6610
6611#define FIRMWARE_8153A_2 "rtl_nic/rtl8153a-2.fw"
6612#define FIRMWARE_8153A_3 "rtl_nic/rtl8153a-3.fw"
6613#define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
6614#define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
6615
6616MODULE_FIRMWARE(FIRMWARE_8153A_2);
6617MODULE_FIRMWARE(FIRMWARE_8153A_3);
6618MODULE_FIRMWARE(FIRMWARE_8153A_4);
6619MODULE_FIRMWARE(FIRMWARE_8153B_2);
6620
6621static int rtl_fw_init(struct r8152 *tp)
6622{
6623 struct rtl_fw *rtl_fw = &tp->rtl_fw;
6624
6625 switch (tp->version) {
6626 case RTL_VER_04:
6627 rtl_fw->fw_name = FIRMWARE_8153A_2;
6628 rtl_fw->pre_fw = r8153_pre_firmware_1;
6629 rtl_fw->post_fw = r8153_post_firmware_1;
6630 break;
6631 case RTL_VER_05:
6632 rtl_fw->fw_name = FIRMWARE_8153A_3;
6633 rtl_fw->pre_fw = r8153_pre_firmware_2;
6634 rtl_fw->post_fw = r8153_post_firmware_2;
6635 break;
6636 case RTL_VER_06:
6637 rtl_fw->fw_name = FIRMWARE_8153A_4;
6638 rtl_fw->post_fw = r8153_post_firmware_3;
6639 break;
6640 case RTL_VER_09:
6641 rtl_fw->fw_name = FIRMWARE_8153B_2;
6642 rtl_fw->pre_fw = r8153b_pre_firmware_1;
6643 rtl_fw->post_fw = r8153b_post_firmware_1;
6644 break;
6645 default:
6646 break;
6647 }
6648
6649 return 0;
6650}
6651
6652u8 rtl8152_get_version(struct usb_interface *intf)
6653{
6654 struct usb_device *udev = interface_to_usbdev(intf);
6655 u32 ocp_data = 0;
6656 __le32 *tmp;
6657 u8 version;
6658 int ret;
6659
6660 tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
6661 if (!tmp)
6662 return 0;
6663
6664 ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
6665 RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
6666 PLA_TCR0, MCU_TYPE_PLA, tmp, sizeof(*tmp), 500);
6667 if (ret > 0)
6668 ocp_data = (__le32_to_cpu(*tmp) >> 16) & VERSION_MASK;
6669
6670 kfree(tmp);
6671
6672 switch (ocp_data) {
6673 case 0x4c00:
6674 version = RTL_VER_01;
6675 break;
6676 case 0x4c10:
6677 version = RTL_VER_02;
6678 break;
6679 case 0x5c00:
6680 version = RTL_VER_03;
6681 break;
6682 case 0x5c10:
6683 version = RTL_VER_04;
6684 break;
6685 case 0x5c20:
6686 version = RTL_VER_05;
6687 break;
6688 case 0x5c30:
6689 version = RTL_VER_06;
6690 break;
6691 case 0x4800:
6692 version = RTL_VER_07;
6693 break;
6694 case 0x6000:
6695 version = RTL_VER_08;
6696 break;
6697 case 0x6010:
6698 version = RTL_VER_09;
6699 break;
6700 default:
6701 version = RTL_VER_UNKNOWN;
6702 dev_info(&intf->dev, "Unknown version 0x%04x\n", ocp_data);
6703 break;
6704 }
6705
6706 dev_dbg(&intf->dev, "Detected version 0x%04x\n", version);
6707
6708 return version;
6709}
6710EXPORT_SYMBOL_GPL(rtl8152_get_version);
6711
6712static int rtl8152_probe(struct usb_interface *intf,
6713 const struct usb_device_id *id)
6714{
6715 struct usb_device *udev = interface_to_usbdev(intf);
6716 u8 version = rtl8152_get_version(intf);
6717 struct r8152 *tp;
6718 struct net_device *netdev;
6719 int ret;
6720
6721 if (version == RTL_VER_UNKNOWN)
6722 return -ENODEV;
6723
6724 if (udev->actconfig->desc.bConfigurationValue != 1) {
6725 usb_driver_set_configuration(udev, 1);
6726 return -ENODEV;
6727 }
6728
6729 if (intf->cur_altsetting->desc.bNumEndpoints < 3)
6730 return -ENODEV;
6731
6732 usb_reset_device(udev);
6733 netdev = alloc_etherdev(sizeof(struct r8152));
6734 if (!netdev) {
6735 dev_err(&intf->dev, "Out of memory\n");
6736 return -ENOMEM;
6737 }
6738
6739 SET_NETDEV_DEV(netdev, &intf->dev);
6740 tp = netdev_priv(netdev);
6741 tp->msg_enable = 0x7FFF;
6742
6743 tp->udev = udev;
6744 tp->netdev = netdev;
6745 tp->intf = intf;
6746 tp->version = version;
6747
6748 switch (version) {
6749 case RTL_VER_01:
6750 case RTL_VER_02:
6751 case RTL_VER_07:
6752 tp->mii.supports_gmii = 0;
6753 break;
6754 default:
6755 tp->mii.supports_gmii = 1;
6756 break;
6757 }
6758
6759 ret = rtl_ops_init(tp);
6760 if (ret)
6761 goto out;
6762
6763 rtl_fw_init(tp);
6764
6765 mutex_init(&tp->control);
6766 INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t);
6767 INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t);
6768 tasklet_setup(&tp->tx_tl, bottom_half);
6769 tasklet_disable(&tp->tx_tl);
6770
6771 netdev->netdev_ops = &rtl8152_netdev_ops;
6772 netdev->watchdog_timeo = RTL8152_TX_TIMEOUT;
6773
6774 netdev->features |= NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG |
6775 NETIF_F_TSO | NETIF_F_FRAGLIST | NETIF_F_IPV6_CSUM |
6776 NETIF_F_TSO6 | NETIF_F_HW_VLAN_CTAG_RX |
6777 NETIF_F_HW_VLAN_CTAG_TX;
6778 netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG |
6779 NETIF_F_TSO | NETIF_F_FRAGLIST |
6780 NETIF_F_IPV6_CSUM | NETIF_F_TSO6 |
6781 NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_TX;
6782 netdev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
6783 NETIF_F_HIGHDMA | NETIF_F_FRAGLIST |
6784 NETIF_F_IPV6_CSUM | NETIF_F_TSO6;
6785
6786 if (tp->version == RTL_VER_01) {
6787 netdev->features &= ~NETIF_F_RXCSUM;
6788 netdev->hw_features &= ~NETIF_F_RXCSUM;
6789 }
6790
6791 if (le16_to_cpu(udev->descriptor.idVendor) == VENDOR_ID_LENOVO) {
6792 switch (le16_to_cpu(udev->descriptor.idProduct)) {
6793 case DEVICE_ID_THINKPAD_THUNDERBOLT3_DOCK_GEN2:
6794 case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2:
6795 set_bit(LENOVO_MACPASSTHRU, &tp->flags);
6796 }
6797 }
6798
6799 if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x3011 && udev->serial &&
6800 (!strcmp(udev->serial, "000001000000") ||
6801 !strcmp(udev->serial, "000002000000"))) {
6802 dev_info(&udev->dev, "Dell TB16 Dock, disable RX aggregation");
6803 set_bit(DELL_TB_RX_AGG_BUG, &tp->flags);
6804 }
6805
6806 netdev->ethtool_ops = &ops;
6807 netif_set_gso_max_size(netdev, RTL_LIMITED_TSO_SIZE);
6808
6809 /* MTU range: 68 - 1500 or 9194 */
6810 netdev->min_mtu = ETH_MIN_MTU;
6811 switch (tp->version) {
6812 case RTL_VER_01:
6813 case RTL_VER_02:
6814 netdev->max_mtu = ETH_DATA_LEN;
6815 break;
6816 default:
6817 netdev->max_mtu = RTL8153_MAX_MTU;
6818 break;
6819 }
6820
6821 tp->mii.dev = netdev;
6822 tp->mii.mdio_read = read_mii_word;
6823 tp->mii.mdio_write = write_mii_word;
6824 tp->mii.phy_id_mask = 0x3f;
6825 tp->mii.reg_num_mask = 0x1f;
6826 tp->mii.phy_id = R8152_PHY_ID;
6827
6828 tp->autoneg = AUTONEG_ENABLE;
6829 tp->speed = SPEED_100;
6830 tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL |
6831 RTL_ADVERTISED_100_HALF | RTL_ADVERTISED_100_FULL;
6832 if (tp->mii.supports_gmii) {
6833 tp->speed = SPEED_1000;
6834 tp->advertising |= RTL_ADVERTISED_1000_FULL;
6835 }
6836 tp->duplex = DUPLEX_FULL;
6837
6838 tp->rx_copybreak = RTL8152_RXFG_HEADSZ;
6839 tp->rx_pending = 10 * RTL8152_MAX_RX;
6840
6841 intf->needs_remote_wakeup = 1;
6842
6843 if (!rtl_can_wakeup(tp))
6844 __rtl_set_wol(tp, 0);
6845 else
6846 tp->saved_wolopts = __rtl_get_wol(tp);
6847
6848 tp->rtl_ops.init(tp);
6849#if IS_BUILTIN(CONFIG_USB_RTL8152)
6850 /* Retry in case request_firmware() is not ready yet. */
6851 tp->rtl_fw.retry = true;
6852#endif
6853 queue_delayed_work(system_long_wq, &tp->hw_phy_work, 0);
6854 set_ethernet_addr(tp);
6855
6856 usb_set_intfdata(intf, tp);
6857 netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT);
6858
6859 ret = register_netdev(netdev);
6860 if (ret != 0) {
6861 dev_err(&intf->dev, "couldn't register the device\n");
6862 goto out1;
6863 }
6864
6865 if (tp->saved_wolopts)
6866 device_set_wakeup_enable(&udev->dev, true);
6867 else
6868 device_set_wakeup_enable(&udev->dev, false);
6869
6870 netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION);
6871
6872 return 0;
6873
6874out1:
6875 tasklet_kill(&tp->tx_tl);
6876 usb_set_intfdata(intf, NULL);
6877out:
6878 free_netdev(netdev);
6879 return ret;
6880}
6881
6882static void rtl8152_disconnect(struct usb_interface *intf)
6883{
6884 struct r8152 *tp = usb_get_intfdata(intf);
6885
6886 usb_set_intfdata(intf, NULL);
6887 if (tp) {
6888 rtl_set_unplug(tp);
6889
6890 unregister_netdev(tp->netdev);
6891 tasklet_kill(&tp->tx_tl);
6892 cancel_delayed_work_sync(&tp->hw_phy_work);
6893 tp->rtl_ops.unload(tp);
6894 rtl8152_release_firmware(tp);
6895 free_netdev(tp->netdev);
6896 }
6897}
6898
6899#define REALTEK_USB_DEVICE(vend, prod) \
6900 .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \
6901 USB_DEVICE_ID_MATCH_INT_CLASS, \
6902 .idVendor = (vend), \
6903 .idProduct = (prod), \
6904 .bInterfaceClass = USB_CLASS_VENDOR_SPEC \
6905}, \
6906{ \
6907 .match_flags = USB_DEVICE_ID_MATCH_INT_INFO | \
6908 USB_DEVICE_ID_MATCH_DEVICE, \
6909 .idVendor = (vend), \
6910 .idProduct = (prod), \
6911 .bInterfaceClass = USB_CLASS_COMM, \
6912 .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, \
6913 .bInterfaceProtocol = USB_CDC_PROTO_NONE
6914
6915/* table of devices that work with this driver */
6916static const struct usb_device_id rtl8152_table[] = {
6917 {REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8050)},
6918 {REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8152)},
6919 {REALTEK_USB_DEVICE(VENDOR_ID_REALTEK, 0x8153)},
6920 {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07ab)},
6921 {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07c6)},
6922 {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0927)},
6923 {REALTEK_USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101)},
6924 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x304f)},
6925 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3062)},
6926 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3069)},
6927 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3082)},
6928 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7205)},
6929 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720c)},
6930 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7214)},
6931 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x721e)},
6932 {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0xa387)},
6933 {REALTEK_USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041)},
6934 {REALTEK_USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff)},
6935 {REALTEK_USB_DEVICE(VENDOR_ID_TPLINK, 0x0601)},
6936 {}
6937};
6938
6939MODULE_DEVICE_TABLE(usb, rtl8152_table);
6940
6941static struct usb_driver rtl8152_driver = {
6942 .name = MODULENAME,
6943 .id_table = rtl8152_table,
6944 .probe = rtl8152_probe,
6945 .disconnect = rtl8152_disconnect,
6946 .suspend = rtl8152_suspend,
6947 .resume = rtl8152_resume,
6948 .reset_resume = rtl8152_reset_resume,
6949 .pre_reset = rtl8152_pre_reset,
6950 .post_reset = rtl8152_post_reset,
6951 .supports_autosuspend = 1,
6952 .disable_hub_initiated_lpm = 1,
6953};
6954
6955module_usb_driver(rtl8152_driver);
6956
6957MODULE_AUTHOR(DRIVER_AUTHOR);
6958MODULE_DESCRIPTION(DRIVER_DESC);
6959MODULE_LICENSE("GPL");
6960MODULE_VERSION(DRIVER_VERSION);