1
2
3
4
5
6
7
8
9
10
11
12#include <linux/module.h>
13#include <linux/pci.h>
14#include <linux/netdevice.h>
15#include <linux/etherdevice.h>
16#include <linux/clk.h>
17#include <linux/delay.h>
18#include <linux/ethtool.h>
19#include <linux/phy.h>
20#include <linux/if_vlan.h>
21#include <linux/in.h>
22#include <linux/io.h>
23#include <linux/ip.h>
24#include <linux/tcp.h>
25#include <linux/interrupt.h>
26#include <linux/dma-mapping.h>
27#include <linux/pm_runtime.h>
28#include <linux/bitfield.h>
29#include <linux/prefetch.h>
30#include <linux/ipv6.h>
31#include <asm/unaligned.h>
32#include <net/ip6_checksum.h>
33
34#include "r8169.h"
35#include "r8169_firmware.h"
36
37#define MODULENAME "r8169"
38
39#define FIRMWARE_8168D_1 "rtl_nic/rtl8168d-1.fw"
40#define FIRMWARE_8168D_2 "rtl_nic/rtl8168d-2.fw"
41#define FIRMWARE_8168E_1 "rtl_nic/rtl8168e-1.fw"
42#define FIRMWARE_8168E_2 "rtl_nic/rtl8168e-2.fw"
43#define FIRMWARE_8168E_3 "rtl_nic/rtl8168e-3.fw"
44#define FIRMWARE_8168F_1 "rtl_nic/rtl8168f-1.fw"
45#define FIRMWARE_8168F_2 "rtl_nic/rtl8168f-2.fw"
46#define FIRMWARE_8105E_1 "rtl_nic/rtl8105e-1.fw"
47#define FIRMWARE_8402_1 "rtl_nic/rtl8402-1.fw"
48#define FIRMWARE_8411_1 "rtl_nic/rtl8411-1.fw"
49#define FIRMWARE_8411_2 "rtl_nic/rtl8411-2.fw"
50#define FIRMWARE_8106E_1 "rtl_nic/rtl8106e-1.fw"
51#define FIRMWARE_8106E_2 "rtl_nic/rtl8106e-2.fw"
52#define FIRMWARE_8168G_2 "rtl_nic/rtl8168g-2.fw"
53#define FIRMWARE_8168G_3 "rtl_nic/rtl8168g-3.fw"
54#define FIRMWARE_8168H_1 "rtl_nic/rtl8168h-1.fw"
55#define FIRMWARE_8168H_2 "rtl_nic/rtl8168h-2.fw"
56#define FIRMWARE_8168FP_3 "rtl_nic/rtl8168fp-3.fw"
57#define FIRMWARE_8107E_1 "rtl_nic/rtl8107e-1.fw"
58#define FIRMWARE_8107E_2 "rtl_nic/rtl8107e-2.fw"
59#define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw"
60#define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw"
61
62
63
64#define MC_FILTER_LIMIT 32
65
66#define TX_DMA_BURST 7
67#define InterFrameGap 0x03
68
69#define R8169_REGS_SIZE 256
70#define R8169_RX_BUF_SIZE (SZ_16K - 1)
71#define NUM_TX_DESC 256
72#define NUM_RX_DESC 256
73#define R8169_TX_RING_BYTES (NUM_TX_DESC * sizeof(struct TxDesc))
74#define R8169_RX_RING_BYTES (NUM_RX_DESC * sizeof(struct RxDesc))
75
76#define OCP_STD_PHY_BASE 0xa400
77
78#define RTL_CFG_NO_GBIT 1
79
80
81#define RTL_W8(tp, reg, val8) writeb((val8), tp->mmio_addr + (reg))
82#define RTL_W16(tp, reg, val16) writew((val16), tp->mmio_addr + (reg))
83#define RTL_W32(tp, reg, val32) writel((val32), tp->mmio_addr + (reg))
84#define RTL_R8(tp, reg) readb(tp->mmio_addr + (reg))
85#define RTL_R16(tp, reg) readw(tp->mmio_addr + (reg))
86#define RTL_R32(tp, reg) readl(tp->mmio_addr + (reg))
87
88#define JUMBO_4K (4 * SZ_1K - VLAN_ETH_HLEN - ETH_FCS_LEN)
89#define JUMBO_6K (6 * SZ_1K - VLAN_ETH_HLEN - ETH_FCS_LEN)
90#define JUMBO_7K (7 * SZ_1K - VLAN_ETH_HLEN - ETH_FCS_LEN)
91#define JUMBO_9K (9 * SZ_1K - VLAN_ETH_HLEN - ETH_FCS_LEN)
92
93static const struct {
94 const char *name;
95 const char *fw_name;
96} rtl_chip_infos[] = {
97
98 [RTL_GIGA_MAC_VER_02] = {"RTL8169s" },
99 [RTL_GIGA_MAC_VER_03] = {"RTL8110s" },
100 [RTL_GIGA_MAC_VER_04] = {"RTL8169sb/8110sb" },
101 [RTL_GIGA_MAC_VER_05] = {"RTL8169sc/8110sc" },
102 [RTL_GIGA_MAC_VER_06] = {"RTL8169sc/8110sc" },
103
104 [RTL_GIGA_MAC_VER_07] = {"RTL8102e" },
105 [RTL_GIGA_MAC_VER_08] = {"RTL8102e" },
106 [RTL_GIGA_MAC_VER_09] = {"RTL8102e/RTL8103e" },
107 [RTL_GIGA_MAC_VER_10] = {"RTL8101e" },
108 [RTL_GIGA_MAC_VER_11] = {"RTL8168b/8111b" },
109 [RTL_GIGA_MAC_VER_12] = {"RTL8168b/8111b" },
110 [RTL_GIGA_MAC_VER_13] = {"RTL8101e/RTL8100e" },
111 [RTL_GIGA_MAC_VER_14] = {"RTL8401" },
112 [RTL_GIGA_MAC_VER_16] = {"RTL8101e" },
113 [RTL_GIGA_MAC_VER_17] = {"RTL8168b/8111b" },
114 [RTL_GIGA_MAC_VER_18] = {"RTL8168cp/8111cp" },
115 [RTL_GIGA_MAC_VER_19] = {"RTL8168c/8111c" },
116 [RTL_GIGA_MAC_VER_20] = {"RTL8168c/8111c" },
117 [RTL_GIGA_MAC_VER_21] = {"RTL8168c/8111c" },
118 [RTL_GIGA_MAC_VER_22] = {"RTL8168c/8111c" },
119 [RTL_GIGA_MAC_VER_23] = {"RTL8168cp/8111cp" },
120 [RTL_GIGA_MAC_VER_24] = {"RTL8168cp/8111cp" },
121 [RTL_GIGA_MAC_VER_25] = {"RTL8168d/8111d", FIRMWARE_8168D_1},
122 [RTL_GIGA_MAC_VER_26] = {"RTL8168d/8111d", FIRMWARE_8168D_2},
123 [RTL_GIGA_MAC_VER_27] = {"RTL8168dp/8111dp" },
124 [RTL_GIGA_MAC_VER_28] = {"RTL8168dp/8111dp" },
125 [RTL_GIGA_MAC_VER_29] = {"RTL8105e", FIRMWARE_8105E_1},
126 [RTL_GIGA_MAC_VER_30] = {"RTL8105e", FIRMWARE_8105E_1},
127 [RTL_GIGA_MAC_VER_31] = {"RTL8168dp/8111dp" },
128 [RTL_GIGA_MAC_VER_32] = {"RTL8168e/8111e", FIRMWARE_8168E_1},
129 [RTL_GIGA_MAC_VER_33] = {"RTL8168e/8111e", FIRMWARE_8168E_2},
130 [RTL_GIGA_MAC_VER_34] = {"RTL8168evl/8111evl", FIRMWARE_8168E_3},
131 [RTL_GIGA_MAC_VER_35] = {"RTL8168f/8111f", FIRMWARE_8168F_1},
132 [RTL_GIGA_MAC_VER_36] = {"RTL8168f/8111f", FIRMWARE_8168F_2},
133 [RTL_GIGA_MAC_VER_37] = {"RTL8402", FIRMWARE_8402_1 },
134 [RTL_GIGA_MAC_VER_38] = {"RTL8411", FIRMWARE_8411_1 },
135 [RTL_GIGA_MAC_VER_39] = {"RTL8106e", FIRMWARE_8106E_1},
136 [RTL_GIGA_MAC_VER_40] = {"RTL8168g/8111g", FIRMWARE_8168G_2},
137 [RTL_GIGA_MAC_VER_41] = {"RTL8168g/8111g" },
138 [RTL_GIGA_MAC_VER_42] = {"RTL8168gu/8111gu", FIRMWARE_8168G_3},
139 [RTL_GIGA_MAC_VER_43] = {"RTL8106eus", FIRMWARE_8106E_2},
140 [RTL_GIGA_MAC_VER_44] = {"RTL8411b", FIRMWARE_8411_2 },
141 [RTL_GIGA_MAC_VER_45] = {"RTL8168h/8111h", FIRMWARE_8168H_1},
142 [RTL_GIGA_MAC_VER_46] = {"RTL8168h/8111h", FIRMWARE_8168H_2},
143 [RTL_GIGA_MAC_VER_47] = {"RTL8107e", FIRMWARE_8107E_1},
144 [RTL_GIGA_MAC_VER_48] = {"RTL8107e", FIRMWARE_8107E_2},
145 [RTL_GIGA_MAC_VER_49] = {"RTL8168ep/8111ep" },
146 [RTL_GIGA_MAC_VER_50] = {"RTL8168ep/8111ep" },
147 [RTL_GIGA_MAC_VER_51] = {"RTL8168ep/8111ep" },
148 [RTL_GIGA_MAC_VER_52] = {"RTL8168fp/RTL8117", FIRMWARE_8168FP_3},
149 [RTL_GIGA_MAC_VER_53] = {"RTL8168fp/RTL8117", },
150 [RTL_GIGA_MAC_VER_60] = {"RTL8125A" },
151 [RTL_GIGA_MAC_VER_61] = {"RTL8125A", FIRMWARE_8125A_3},
152
153 [RTL_GIGA_MAC_VER_63] = {"RTL8125B", FIRMWARE_8125B_2},
154};
155
156static const struct pci_device_id rtl8169_pci_tbl[] = {
157 { PCI_VDEVICE(REALTEK, 0x2502) },
158 { PCI_VDEVICE(REALTEK, 0x2600) },
159 { PCI_VDEVICE(REALTEK, 0x8129) },
160 { PCI_VDEVICE(REALTEK, 0x8136), RTL_CFG_NO_GBIT },
161 { PCI_VDEVICE(REALTEK, 0x8161) },
162 { PCI_VDEVICE(REALTEK, 0x8167) },
163 { PCI_VDEVICE(REALTEK, 0x8168) },
164 { PCI_VDEVICE(NCUBE, 0x8168) },
165 { PCI_VDEVICE(REALTEK, 0x8169) },
166 { PCI_VENDOR_ID_DLINK, 0x4300,
167 PCI_VENDOR_ID_DLINK, 0x4b10, 0, 0 },
168 { PCI_VDEVICE(DLINK, 0x4300) },
169 { PCI_VDEVICE(DLINK, 0x4302) },
170 { PCI_VDEVICE(AT, 0xc107) },
171 { PCI_VDEVICE(USR, 0x0116) },
172 { PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, 0x0024 },
173 { 0x0001, 0x8168, PCI_ANY_ID, 0x2410 },
174 { PCI_VDEVICE(REALTEK, 0x8125) },
175 { PCI_VDEVICE(REALTEK, 0x3000) },
176 {}
177};
178
179MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
180
181enum rtl_registers {
182 MAC0 = 0,
183 MAC4 = 4,
184 MAR0 = 8,
185 CounterAddrLow = 0x10,
186 CounterAddrHigh = 0x14,
187 TxDescStartAddrLow = 0x20,
188 TxDescStartAddrHigh = 0x24,
189 TxHDescStartAddrLow = 0x28,
190 TxHDescStartAddrHigh = 0x2c,
191 FLASH = 0x30,
192 ERSR = 0x36,
193 ChipCmd = 0x37,
194 TxPoll = 0x38,
195 IntrMask = 0x3c,
196 IntrStatus = 0x3e,
197
198 TxConfig = 0x40,
199#define TXCFG_AUTO_FIFO (1 << 7)
200#define TXCFG_EMPTY (1 << 11)
201
202 RxConfig = 0x44,
203#define RX128_INT_EN (1 << 15)
204#define RX_MULTI_EN (1 << 14)
205#define RXCFG_FIFO_SHIFT 13
206
207#define RX_FIFO_THRESH (7 << RXCFG_FIFO_SHIFT)
208#define RX_EARLY_OFF (1 << 11)
209#define RXCFG_DMA_SHIFT 8
210
211#define RX_DMA_BURST (7 << RXCFG_DMA_SHIFT)
212
213 Cfg9346 = 0x50,
214 Config0 = 0x51,
215 Config1 = 0x52,
216 Config2 = 0x53,
217#define PME_SIGNAL (1 << 5)
218
219 Config3 = 0x54,
220 Config4 = 0x55,
221 Config5 = 0x56,
222 PHYAR = 0x60,
223 PHYstatus = 0x6c,
224 RxMaxSize = 0xda,
225 CPlusCmd = 0xe0,
226 IntrMitigate = 0xe2,
227
228#define RTL_COALESCE_TX_USECS GENMASK(15, 12)
229#define RTL_COALESCE_TX_FRAMES GENMASK(11, 8)
230#define RTL_COALESCE_RX_USECS GENMASK(7, 4)
231#define RTL_COALESCE_RX_FRAMES GENMASK(3, 0)
232
233#define RTL_COALESCE_T_MAX 0x0fU
234#define RTL_COALESCE_FRAME_MAX (RTL_COALESCE_T_MAX * 4)
235
236 RxDescAddrLow = 0xe4,
237 RxDescAddrHigh = 0xe8,
238 EarlyTxThres = 0xec,
239
240#define NoEarlyTx 0x3f
241
242 MaxTxPacketSize = 0xec,
243
244#define TxPacketMax (8064 >> 7)
245#define EarlySize 0x27
246
247 FuncEvent = 0xf0,
248 FuncEventMask = 0xf4,
249 FuncPresetState = 0xf8,
250 IBCR0 = 0xf8,
251 IBCR2 = 0xf9,
252 IBIMR0 = 0xfa,
253 IBISR0 = 0xfb,
254 FuncForceEvent = 0xfc,
255};
256
257enum rtl8168_8101_registers {
258 CSIDR = 0x64,
259 CSIAR = 0x68,
260#define CSIAR_FLAG 0x80000000
261#define CSIAR_WRITE_CMD 0x80000000
262#define CSIAR_BYTE_ENABLE 0x0000f000
263#define CSIAR_ADDR_MASK 0x00000fff
264 PMCH = 0x6f,
265#define D3COLD_NO_PLL_DOWN BIT(7)
266#define D3HOT_NO_PLL_DOWN BIT(6)
267#define D3_NO_PLL_DOWN (BIT(7) | BIT(6))
268 EPHYAR = 0x80,
269#define EPHYAR_FLAG 0x80000000
270#define EPHYAR_WRITE_CMD 0x80000000
271#define EPHYAR_REG_MASK 0x1f
272#define EPHYAR_REG_SHIFT 16
273#define EPHYAR_DATA_MASK 0xffff
274 DLLPR = 0xd0,
275#define PFM_EN (1 << 6)
276#define TX_10M_PS_EN (1 << 7)
277 DBG_REG = 0xd1,
278#define FIX_NAK_1 (1 << 4)
279#define FIX_NAK_2 (1 << 3)
280 TWSI = 0xd2,
281 MCU = 0xd3,
282#define NOW_IS_OOB (1 << 7)
283#define TX_EMPTY (1 << 5)
284#define RX_EMPTY (1 << 4)
285#define RXTX_EMPTY (TX_EMPTY | RX_EMPTY)
286#define EN_NDP (1 << 3)
287#define EN_OOB_RESET (1 << 2)
288#define LINK_LIST_RDY (1 << 1)
289 EFUSEAR = 0xdc,
290#define EFUSEAR_FLAG 0x80000000
291#define EFUSEAR_WRITE_CMD 0x80000000
292#define EFUSEAR_READ_CMD 0x00000000
293#define EFUSEAR_REG_MASK 0x03ff
294#define EFUSEAR_REG_SHIFT 8
295#define EFUSEAR_DATA_MASK 0xff
296 MISC_1 = 0xf2,
297#define PFM_D3COLD_EN (1 << 6)
298};
299
300enum rtl8168_registers {
301 LED_FREQ = 0x1a,
302 EEE_LED = 0x1b,
303 ERIDR = 0x70,
304 ERIAR = 0x74,
305#define ERIAR_FLAG 0x80000000
306#define ERIAR_WRITE_CMD 0x80000000
307#define ERIAR_READ_CMD 0x00000000
308#define ERIAR_ADDR_BYTE_ALIGN 4
309#define ERIAR_TYPE_SHIFT 16
310#define ERIAR_EXGMAC (0x00 << ERIAR_TYPE_SHIFT)
311#define ERIAR_MSIX (0x01 << ERIAR_TYPE_SHIFT)
312#define ERIAR_ASF (0x02 << ERIAR_TYPE_SHIFT)
313#define ERIAR_OOB (0x02 << ERIAR_TYPE_SHIFT)
314#define ERIAR_MASK_SHIFT 12
315#define ERIAR_MASK_0001 (0x1 << ERIAR_MASK_SHIFT)
316#define ERIAR_MASK_0011 (0x3 << ERIAR_MASK_SHIFT)
317#define ERIAR_MASK_0100 (0x4 << ERIAR_MASK_SHIFT)
318#define ERIAR_MASK_0101 (0x5 << ERIAR_MASK_SHIFT)
319#define ERIAR_MASK_1111 (0xf << ERIAR_MASK_SHIFT)
320 EPHY_RXER_NUM = 0x7c,
321 OCPDR = 0xb0,
322#define OCPDR_WRITE_CMD 0x80000000
323#define OCPDR_READ_CMD 0x00000000
324#define OCPDR_REG_MASK 0x7f
325#define OCPDR_GPHY_REG_SHIFT 16
326#define OCPDR_DATA_MASK 0xffff
327 OCPAR = 0xb4,
328#define OCPAR_FLAG 0x80000000
329#define OCPAR_GPHY_WRITE_CMD 0x8000f060
330#define OCPAR_GPHY_READ_CMD 0x0000f060
331 GPHY_OCP = 0xb8,
332 RDSAR1 = 0xd0,
333 MISC = 0xf0,
334#define TXPLA_RST (1 << 29)
335#define DISABLE_LAN_EN (1 << 23)
336#define PWM_EN (1 << 22)
337#define RXDV_GATED_EN (1 << 19)
338#define EARLY_TALLY_EN (1 << 16)
339};
340
341enum rtl8125_registers {
342 IntrMask_8125 = 0x38,
343 IntrStatus_8125 = 0x3c,
344 TxPoll_8125 = 0x90,
345 MAC0_BKP = 0x19e0,
346 EEE_TXIDLE_TIMER_8125 = 0x6048,
347};
348
349#define RX_VLAN_INNER_8125 BIT(22)
350#define RX_VLAN_OUTER_8125 BIT(23)
351#define RX_VLAN_8125 (RX_VLAN_INNER_8125 | RX_VLAN_OUTER_8125)
352
353#define RX_FETCH_DFLT_8125 (8 << 27)
354
355enum rtl_register_content {
356
357 SYSErr = 0x8000,
358 PCSTimeout = 0x4000,
359 SWInt = 0x0100,
360 TxDescUnavail = 0x0080,
361 RxFIFOOver = 0x0040,
362 LinkChg = 0x0020,
363 RxOverflow = 0x0010,
364 TxErr = 0x0008,
365 TxOK = 0x0004,
366 RxErr = 0x0002,
367 RxOK = 0x0001,
368
369
370 RxRWT = (1 << 22),
371 RxRES = (1 << 21),
372 RxRUNT = (1 << 20),
373 RxCRC = (1 << 19),
374
375
376 StopReq = 0x80,
377 CmdReset = 0x10,
378 CmdRxEnb = 0x08,
379 CmdTxEnb = 0x04,
380 RxBufEmpty = 0x01,
381
382
383 HPQ = 0x80,
384 NPQ = 0x40,
385 FSWInt = 0x01,
386
387
388 Cfg9346_Lock = 0x00,
389 Cfg9346_Unlock = 0xc0,
390
391
392 AcceptErr = 0x20,
393 AcceptRunt = 0x10,
394#define RX_CONFIG_ACCEPT_ERR_MASK 0x30
395 AcceptBroadcast = 0x08,
396 AcceptMulticast = 0x04,
397 AcceptMyPhys = 0x02,
398 AcceptAllPhys = 0x01,
399#define RX_CONFIG_ACCEPT_OK_MASK 0x0f
400#define RX_CONFIG_ACCEPT_MASK 0x3f
401
402
403 TxInterFrameGapShift = 24,
404 TxDMAShift = 8,
405
406
407 LEDS1 = (1 << 7),
408 LEDS0 = (1 << 6),
409 Speed_down = (1 << 4),
410 MEMMAP = (1 << 3),
411 IOMAP = (1 << 2),
412 VPD = (1 << 1),
413 PMEnable = (1 << 0),
414
415
416 ClkReqEn = (1 << 7),
417 MSIEnable = (1 << 5),
418 PCI_Clock_66MHz = 0x01,
419 PCI_Clock_33MHz = 0x00,
420
421
422 MagicPacket = (1 << 5),
423 LinkUp = (1 << 4),
424 Jumbo_En0 = (1 << 2),
425 Rdy_to_L23 = (1 << 1),
426 Beacon_en = (1 << 0),
427
428
429 Jumbo_En1 = (1 << 1),
430
431
432 BWF = (1 << 6),
433 MWF = (1 << 5),
434 UWF = (1 << 4),
435 Spi_en = (1 << 3),
436 LanWake = (1 << 1),
437 PMEStatus = (1 << 0),
438 ASPM_en = (1 << 0),
439
440
441 EnableBist = (1 << 15),
442 Mac_dbgo_oe = (1 << 14),
443 EnAnaPLL = (1 << 14),
444 Normal_mode = (1 << 13),
445 Force_half_dup = (1 << 12),
446 Force_rxflow_en = (1 << 11),
447 Force_txflow_en = (1 << 10),
448 Cxpl_dbg_sel = (1 << 9),
449 ASF = (1 << 8),
450 PktCntrDisable = (1 << 7),
451 Mac_dbgo_sel = 0x001c,
452 RxVlan = (1 << 6),
453 RxChkSum = (1 << 5),
454 PCIDAC = (1 << 4),
455 PCIMulRW = (1 << 3),
456#define INTT_MASK GENMASK(1, 0)
457#define CPCMD_MASK (Normal_mode | RxVlan | RxChkSum | INTT_MASK)
458
459
460 TBI_Enable = 0x80,
461 TxFlowCtrl = 0x40,
462 RxFlowCtrl = 0x20,
463 _1000bpsF = 0x10,
464 _100bps = 0x08,
465 _10bps = 0x04,
466 LinkStatus = 0x02,
467 FullDup = 0x01,
468
469
470 CounterReset = 0x1,
471
472
473 CounterDump = 0x8,
474
475
476 MagicPacket_v2 = (1 << 16),
477};
478
479enum rtl_desc_bit {
480
481 DescOwn = (1 << 31),
482 RingEnd = (1 << 30),
483 FirstFrag = (1 << 29),
484 LastFrag = (1 << 28),
485};
486
487
488enum rtl_tx_desc_bit {
489
490 TD_LSO = (1 << 27),
491#define TD_MSS_MAX 0x07ffu
492
493
494 TxVlanTag = (1 << 17),
495};
496
497
498enum rtl_tx_desc_bit_0 {
499
500#define TD0_MSS_SHIFT 16
501 TD0_TCP_CS = (1 << 16),
502 TD0_UDP_CS = (1 << 17),
503 TD0_IP_CS = (1 << 18),
504};
505
506
507enum rtl_tx_desc_bit_1 {
508
509 TD1_GTSENV4 = (1 << 26),
510 TD1_GTSENV6 = (1 << 25),
511#define GTTCPHO_SHIFT 18
512#define GTTCPHO_MAX 0x7f
513
514
515#define TCPHO_SHIFT 18
516#define TCPHO_MAX 0x3ff
517#define TD1_MSS_SHIFT 18
518 TD1_IPv6_CS = (1 << 28),
519 TD1_IPv4_CS = (1 << 29),
520 TD1_TCP_CS = (1 << 30),
521 TD1_UDP_CS = (1 << 31),
522};
523
524enum rtl_rx_desc_bit {
525
526 PID1 = (1 << 18),
527 PID0 = (1 << 17),
528
529#define RxProtoUDP (PID1)
530#define RxProtoTCP (PID0)
531#define RxProtoIP (PID1 | PID0)
532#define RxProtoMask RxProtoIP
533
534 IPFail = (1 << 16),
535 UDPFail = (1 << 15),
536 TCPFail = (1 << 14),
537
538#define RxCSFailMask (IPFail | UDPFail | TCPFail)
539
540 RxVlanTag = (1 << 16),
541};
542
543#define RTL_GSO_MAX_SIZE_V1 32000
544#define RTL_GSO_MAX_SEGS_V1 24
545#define RTL_GSO_MAX_SIZE_V2 64000
546#define RTL_GSO_MAX_SEGS_V2 64
547
548struct TxDesc {
549 __le32 opts1;
550 __le32 opts2;
551 __le64 addr;
552};
553
554struct RxDesc {
555 __le32 opts1;
556 __le32 opts2;
557 __le64 addr;
558};
559
560struct ring_info {
561 struct sk_buff *skb;
562 u32 len;
563};
564
565struct rtl8169_counters {
566 __le64 tx_packets;
567 __le64 rx_packets;
568 __le64 tx_errors;
569 __le32 rx_errors;
570 __le16 rx_missed;
571 __le16 align_errors;
572 __le32 tx_one_collision;
573 __le32 tx_multi_collision;
574 __le64 rx_unicast;
575 __le64 rx_broadcast;
576 __le32 rx_multicast;
577 __le16 tx_aborted;
578 __le16 tx_underun;
579};
580
581struct rtl8169_tc_offsets {
582 bool inited;
583 __le64 tx_errors;
584 __le32 tx_multi_collision;
585 __le16 tx_aborted;
586 __le16 rx_missed;
587};
588
589enum rtl_flag {
590 RTL_FLAG_TASK_ENABLED = 0,
591 RTL_FLAG_TASK_RESET_PENDING,
592 RTL_FLAG_MAX
593};
594
595enum rtl_dash_type {
596 RTL_DASH_NONE,
597 RTL_DASH_DP,
598 RTL_DASH_EP,
599};
600
601struct rtl8169_private {
602 void __iomem *mmio_addr;
603 struct pci_dev *pci_dev;
604 struct net_device *dev;
605 struct phy_device *phydev;
606 struct napi_struct napi;
607 enum mac_version mac_version;
608 enum rtl_dash_type dash_type;
609 u32 cur_rx;
610 u32 cur_tx;
611 u32 dirty_tx;
612 struct TxDesc *TxDescArray;
613 struct RxDesc *RxDescArray;
614 dma_addr_t TxPhyAddr;
615 dma_addr_t RxPhyAddr;
616 struct page *Rx_databuff[NUM_RX_DESC];
617 struct ring_info tx_skb[NUM_TX_DESC];
618 u16 cp_cmd;
619 u32 irq_mask;
620 struct clk *clk;
621
622 struct {
623 DECLARE_BITMAP(flags, RTL_FLAG_MAX);
624 struct work_struct work;
625 } wk;
626
627 unsigned supports_gmii:1;
628 unsigned aspm_manageable:1;
629 dma_addr_t counters_phys_addr;
630 struct rtl8169_counters *counters;
631 struct rtl8169_tc_offsets tc_offset;
632 u32 saved_wolopts;
633 int eee_adv;
634
635 const char *fw_name;
636 struct rtl_fw *rtl_fw;
637
638 u32 ocp_base;
639};
640
641typedef void (*rtl_generic_fct)(struct rtl8169_private *tp);
642
643MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
644MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
645MODULE_SOFTDEP("pre: realtek");
646MODULE_LICENSE("GPL");
647MODULE_FIRMWARE(FIRMWARE_8168D_1);
648MODULE_FIRMWARE(FIRMWARE_8168D_2);
649MODULE_FIRMWARE(FIRMWARE_8168E_1);
650MODULE_FIRMWARE(FIRMWARE_8168E_2);
651MODULE_FIRMWARE(FIRMWARE_8168E_3);
652MODULE_FIRMWARE(FIRMWARE_8105E_1);
653MODULE_FIRMWARE(FIRMWARE_8168F_1);
654MODULE_FIRMWARE(FIRMWARE_8168F_2);
655MODULE_FIRMWARE(FIRMWARE_8402_1);
656MODULE_FIRMWARE(FIRMWARE_8411_1);
657MODULE_FIRMWARE(FIRMWARE_8411_2);
658MODULE_FIRMWARE(FIRMWARE_8106E_1);
659MODULE_FIRMWARE(FIRMWARE_8106E_2);
660MODULE_FIRMWARE(FIRMWARE_8168G_2);
661MODULE_FIRMWARE(FIRMWARE_8168G_3);
662MODULE_FIRMWARE(FIRMWARE_8168H_1);
663MODULE_FIRMWARE(FIRMWARE_8168H_2);
664MODULE_FIRMWARE(FIRMWARE_8168FP_3);
665MODULE_FIRMWARE(FIRMWARE_8107E_1);
666MODULE_FIRMWARE(FIRMWARE_8107E_2);
667MODULE_FIRMWARE(FIRMWARE_8125A_3);
668MODULE_FIRMWARE(FIRMWARE_8125B_2);
669
670static inline struct device *tp_to_dev(struct rtl8169_private *tp)
671{
672 return &tp->pci_dev->dev;
673}
674
675static void rtl_lock_config_regs(struct rtl8169_private *tp)
676{
677 RTL_W8(tp, Cfg9346, Cfg9346_Lock);
678}
679
680static void rtl_unlock_config_regs(struct rtl8169_private *tp)
681{
682 RTL_W8(tp, Cfg9346, Cfg9346_Unlock);
683}
684
685static void rtl_pci_commit(struct rtl8169_private *tp)
686{
687
688 RTL_R8(tp, ChipCmd);
689}
690
691static bool rtl_is_8125(struct rtl8169_private *tp)
692{
693 return tp->mac_version >= RTL_GIGA_MAC_VER_60;
694}
695
696static bool rtl_is_8168evl_up(struct rtl8169_private *tp)
697{
698 return tp->mac_version >= RTL_GIGA_MAC_VER_34 &&
699 tp->mac_version != RTL_GIGA_MAC_VER_39 &&
700 tp->mac_version <= RTL_GIGA_MAC_VER_53;
701}
702
703static bool rtl_supports_eee(struct rtl8169_private *tp)
704{
705 return tp->mac_version >= RTL_GIGA_MAC_VER_34 &&
706 tp->mac_version != RTL_GIGA_MAC_VER_37 &&
707 tp->mac_version != RTL_GIGA_MAC_VER_39;
708}
709
710static void rtl_read_mac_from_reg(struct rtl8169_private *tp, u8 *mac, int reg)
711{
712 int i;
713
714 for (i = 0; i < ETH_ALEN; i++)
715 mac[i] = RTL_R8(tp, reg + i);
716}
717
718struct rtl_cond {
719 bool (*check)(struct rtl8169_private *);
720 const char *msg;
721};
722
723static bool rtl_loop_wait(struct rtl8169_private *tp, const struct rtl_cond *c,
724 unsigned long usecs, int n, bool high)
725{
726 int i;
727
728 for (i = 0; i < n; i++) {
729 if (c->check(tp) == high)
730 return true;
731 fsleep(usecs);
732 }
733
734 if (net_ratelimit())
735 netdev_err(tp->dev, "%s == %d (loop: %d, delay: %lu).\n",
736 c->msg, !high, n, usecs);
737 return false;
738}
739
740static bool rtl_loop_wait_high(struct rtl8169_private *tp,
741 const struct rtl_cond *c,
742 unsigned long d, int n)
743{
744 return rtl_loop_wait(tp, c, d, n, true);
745}
746
747static bool rtl_loop_wait_low(struct rtl8169_private *tp,
748 const struct rtl_cond *c,
749 unsigned long d, int n)
750{
751 return rtl_loop_wait(tp, c, d, n, false);
752}
753
754#define DECLARE_RTL_COND(name) \
755static bool name ## _check(struct rtl8169_private *); \
756 \
757static const struct rtl_cond name = { \
758 .check = name ## _check, \
759 .msg = #name \
760}; \
761 \
762static bool name ## _check(struct rtl8169_private *tp)
763
764static void r8168fp_adjust_ocp_cmd(struct rtl8169_private *tp, u32 *cmd, int type)
765{
766
767 if (type == ERIAR_OOB &&
768 (tp->mac_version == RTL_GIGA_MAC_VER_52 ||
769 tp->mac_version == RTL_GIGA_MAC_VER_53))
770 *cmd |= 0xf70 << 18;
771}
772
773DECLARE_RTL_COND(rtl_eriar_cond)
774{
775 return RTL_R32(tp, ERIAR) & ERIAR_FLAG;
776}
777
778static void _rtl_eri_write(struct rtl8169_private *tp, int addr, u32 mask,
779 u32 val, int type)
780{
781 u32 cmd = ERIAR_WRITE_CMD | type | mask | addr;
782
783 if (WARN(addr & 3 || !mask, "addr: 0x%x, mask: 0x%08x\n", addr, mask))
784 return;
785
786 RTL_W32(tp, ERIDR, val);
787 r8168fp_adjust_ocp_cmd(tp, &cmd, type);
788 RTL_W32(tp, ERIAR, cmd);
789
790 rtl_loop_wait_low(tp, &rtl_eriar_cond, 100, 100);
791}
792
793static void rtl_eri_write(struct rtl8169_private *tp, int addr, u32 mask,
794 u32 val)
795{
796 _rtl_eri_write(tp, addr, mask, val, ERIAR_EXGMAC);
797}
798
799static u32 _rtl_eri_read(struct rtl8169_private *tp, int addr, int type)
800{
801 u32 cmd = ERIAR_READ_CMD | type | ERIAR_MASK_1111 | addr;
802
803 r8168fp_adjust_ocp_cmd(tp, &cmd, type);
804 RTL_W32(tp, ERIAR, cmd);
805
806 return rtl_loop_wait_high(tp, &rtl_eriar_cond, 100, 100) ?
807 RTL_R32(tp, ERIDR) : ~0;
808}
809
810static u32 rtl_eri_read(struct rtl8169_private *tp, int addr)
811{
812 return _rtl_eri_read(tp, addr, ERIAR_EXGMAC);
813}
814
815static void rtl_w0w1_eri(struct rtl8169_private *tp, int addr, u32 p, u32 m)
816{
817 u32 val = rtl_eri_read(tp, addr);
818
819 rtl_eri_write(tp, addr, ERIAR_MASK_1111, (val & ~m) | p);
820}
821
822static void rtl_eri_set_bits(struct rtl8169_private *tp, int addr, u32 p)
823{
824 rtl_w0w1_eri(tp, addr, p, 0);
825}
826
827static void rtl_eri_clear_bits(struct rtl8169_private *tp, int addr, u32 m)
828{
829 rtl_w0w1_eri(tp, addr, 0, m);
830}
831
832static bool rtl_ocp_reg_failure(u32 reg)
833{
834 return WARN_ONCE(reg & 0xffff0001, "Invalid ocp reg %x!\n", reg);
835}
836
837DECLARE_RTL_COND(rtl_ocp_gphy_cond)
838{
839 return RTL_R32(tp, GPHY_OCP) & OCPAR_FLAG;
840}
841
842static void r8168_phy_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data)
843{
844 if (rtl_ocp_reg_failure(reg))
845 return;
846
847 RTL_W32(tp, GPHY_OCP, OCPAR_FLAG | (reg << 15) | data);
848
849 rtl_loop_wait_low(tp, &rtl_ocp_gphy_cond, 25, 10);
850}
851
852static int r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg)
853{
854 if (rtl_ocp_reg_failure(reg))
855 return 0;
856
857 RTL_W32(tp, GPHY_OCP, reg << 15);
858
859 return rtl_loop_wait_high(tp, &rtl_ocp_gphy_cond, 25, 10) ?
860 (RTL_R32(tp, GPHY_OCP) & 0xffff) : -ETIMEDOUT;
861}
862
863static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data)
864{
865 if (rtl_ocp_reg_failure(reg))
866 return;
867
868 RTL_W32(tp, OCPDR, OCPAR_FLAG | (reg << 15) | data);
869}
870
871static u16 r8168_mac_ocp_read(struct rtl8169_private *tp, u32 reg)
872{
873 if (rtl_ocp_reg_failure(reg))
874 return 0;
875
876 RTL_W32(tp, OCPDR, reg << 15);
877
878 return RTL_R32(tp, OCPDR);
879}
880
881static void r8168_mac_ocp_modify(struct rtl8169_private *tp, u32 reg, u16 mask,
882 u16 set)
883{
884 u16 data = r8168_mac_ocp_read(tp, reg);
885
886 r8168_mac_ocp_write(tp, reg, (data & ~mask) | set);
887}
888
889
890
891
892static void rtl8168g_phy_suspend_quirk(struct rtl8169_private *tp, int value)
893{
894 switch (tp->mac_version) {
895 case RTL_GIGA_MAC_VER_40:
896 case RTL_GIGA_MAC_VER_41:
897 case RTL_GIGA_MAC_VER_49:
898 if (value & BMCR_RESET || !(value & BMCR_PDOWN))
899 rtl_eri_set_bits(tp, 0x1a8, 0xfc000000);
900 else
901 rtl_eri_clear_bits(tp, 0x1a8, 0xfc000000);
902 break;
903 default:
904 break;
905 }
906};
907
908static void r8168g_mdio_write(struct rtl8169_private *tp, int reg, int value)
909{
910 if (reg == 0x1f) {
911 tp->ocp_base = value ? value << 4 : OCP_STD_PHY_BASE;
912 return;
913 }
914
915 if (tp->ocp_base != OCP_STD_PHY_BASE)
916 reg -= 0x10;
917
918 if (tp->ocp_base == OCP_STD_PHY_BASE && reg == MII_BMCR)
919 rtl8168g_phy_suspend_quirk(tp, value);
920
921 r8168_phy_ocp_write(tp, tp->ocp_base + reg * 2, value);
922}
923
924static int r8168g_mdio_read(struct rtl8169_private *tp, int reg)
925{
926 if (reg == 0x1f)
927 return tp->ocp_base == OCP_STD_PHY_BASE ? 0 : tp->ocp_base >> 4;
928
929 if (tp->ocp_base != OCP_STD_PHY_BASE)
930 reg -= 0x10;
931
932 return r8168_phy_ocp_read(tp, tp->ocp_base + reg * 2);
933}
934
935static void mac_mcu_write(struct rtl8169_private *tp, int reg, int value)
936{
937 if (reg == 0x1f) {
938 tp->ocp_base = value << 4;
939 return;
940 }
941
942 r8168_mac_ocp_write(tp, tp->ocp_base + reg, value);
943}
944
945static int mac_mcu_read(struct rtl8169_private *tp, int reg)
946{
947 return r8168_mac_ocp_read(tp, tp->ocp_base + reg);
948}
949
950DECLARE_RTL_COND(rtl_phyar_cond)
951{
952 return RTL_R32(tp, PHYAR) & 0x80000000;
953}
954
955static void r8169_mdio_write(struct rtl8169_private *tp, int reg, int value)
956{
957 RTL_W32(tp, PHYAR, 0x80000000 | (reg & 0x1f) << 16 | (value & 0xffff));
958
959 rtl_loop_wait_low(tp, &rtl_phyar_cond, 25, 20);
960
961
962
963
964 udelay(20);
965}
966
967static int r8169_mdio_read(struct rtl8169_private *tp, int reg)
968{
969 int value;
970
971 RTL_W32(tp, PHYAR, 0x0 | (reg & 0x1f) << 16);
972
973 value = rtl_loop_wait_high(tp, &rtl_phyar_cond, 25, 20) ?
974 RTL_R32(tp, PHYAR) & 0xffff : -ETIMEDOUT;
975
976
977
978
979
980 udelay(20);
981
982 return value;
983}
984
985DECLARE_RTL_COND(rtl_ocpar_cond)
986{
987 return RTL_R32(tp, OCPAR) & OCPAR_FLAG;
988}
989
990static void r8168dp_1_mdio_access(struct rtl8169_private *tp, int reg, u32 data)
991{
992 RTL_W32(tp, OCPDR, data | ((reg & OCPDR_REG_MASK) << OCPDR_GPHY_REG_SHIFT));
993 RTL_W32(tp, OCPAR, OCPAR_GPHY_WRITE_CMD);
994 RTL_W32(tp, EPHY_RXER_NUM, 0);
995
996 rtl_loop_wait_low(tp, &rtl_ocpar_cond, 1000, 100);
997}
998
999static void r8168dp_1_mdio_write(struct rtl8169_private *tp, int reg, int value)
1000{
1001 r8168dp_1_mdio_access(tp, reg,
1002 OCPDR_WRITE_CMD | (value & OCPDR_DATA_MASK));
1003}
1004
1005static int r8168dp_1_mdio_read(struct rtl8169_private *tp, int reg)
1006{
1007 r8168dp_1_mdio_access(tp, reg, OCPDR_READ_CMD);
1008
1009 mdelay(1);
1010 RTL_W32(tp, OCPAR, OCPAR_GPHY_READ_CMD);
1011 RTL_W32(tp, EPHY_RXER_NUM, 0);
1012
1013 return rtl_loop_wait_high(tp, &rtl_ocpar_cond, 1000, 100) ?
1014 RTL_R32(tp, OCPDR) & OCPDR_DATA_MASK : -ETIMEDOUT;
1015}
1016
1017#define R8168DP_1_MDIO_ACCESS_BIT 0x00020000
1018
1019static void r8168dp_2_mdio_start(struct rtl8169_private *tp)
1020{
1021 RTL_W32(tp, 0xd0, RTL_R32(tp, 0xd0) & ~R8168DP_1_MDIO_ACCESS_BIT);
1022}
1023
1024static void r8168dp_2_mdio_stop(struct rtl8169_private *tp)
1025{
1026 RTL_W32(tp, 0xd0, RTL_R32(tp, 0xd0) | R8168DP_1_MDIO_ACCESS_BIT);
1027}
1028
1029static void r8168dp_2_mdio_write(struct rtl8169_private *tp, int reg, int value)
1030{
1031 r8168dp_2_mdio_start(tp);
1032
1033 r8169_mdio_write(tp, reg, value);
1034
1035 r8168dp_2_mdio_stop(tp);
1036}
1037
1038static int r8168dp_2_mdio_read(struct rtl8169_private *tp, int reg)
1039{
1040 int value;
1041
1042
1043 if (reg == MII_PHYSID2)
1044 return 0xc912;
1045
1046 r8168dp_2_mdio_start(tp);
1047
1048 value = r8169_mdio_read(tp, reg);
1049
1050 r8168dp_2_mdio_stop(tp);
1051
1052 return value;
1053}
1054
1055static void rtl_writephy(struct rtl8169_private *tp, int location, int val)
1056{
1057 switch (tp->mac_version) {
1058 case RTL_GIGA_MAC_VER_27:
1059 r8168dp_1_mdio_write(tp, location, val);
1060 break;
1061 case RTL_GIGA_MAC_VER_28:
1062 case RTL_GIGA_MAC_VER_31:
1063 r8168dp_2_mdio_write(tp, location, val);
1064 break;
1065 case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_63:
1066 r8168g_mdio_write(tp, location, val);
1067 break;
1068 default:
1069 r8169_mdio_write(tp, location, val);
1070 break;
1071 }
1072}
1073
1074static int rtl_readphy(struct rtl8169_private *tp, int location)
1075{
1076 switch (tp->mac_version) {
1077 case RTL_GIGA_MAC_VER_27:
1078 return r8168dp_1_mdio_read(tp, location);
1079 case RTL_GIGA_MAC_VER_28:
1080 case RTL_GIGA_MAC_VER_31:
1081 return r8168dp_2_mdio_read(tp, location);
1082 case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_63:
1083 return r8168g_mdio_read(tp, location);
1084 default:
1085 return r8169_mdio_read(tp, location);
1086 }
1087}
1088
1089DECLARE_RTL_COND(rtl_ephyar_cond)
1090{
1091 return RTL_R32(tp, EPHYAR) & EPHYAR_FLAG;
1092}
1093
1094static void rtl_ephy_write(struct rtl8169_private *tp, int reg_addr, int value)
1095{
1096 RTL_W32(tp, EPHYAR, EPHYAR_WRITE_CMD | (value & EPHYAR_DATA_MASK) |
1097 (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
1098
1099 rtl_loop_wait_low(tp, &rtl_ephyar_cond, 10, 100);
1100
1101 udelay(10);
1102}
1103
1104static u16 rtl_ephy_read(struct rtl8169_private *tp, int reg_addr)
1105{
1106 RTL_W32(tp, EPHYAR, (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
1107
1108 return rtl_loop_wait_high(tp, &rtl_ephyar_cond, 10, 100) ?
1109 RTL_R32(tp, EPHYAR) & EPHYAR_DATA_MASK : ~0;
1110}
1111
1112static u32 r8168dp_ocp_read(struct rtl8169_private *tp, u16 reg)
1113{
1114 RTL_W32(tp, OCPAR, 0x0fu << 12 | (reg & 0x0fff));
1115 return rtl_loop_wait_high(tp, &rtl_ocpar_cond, 100, 20) ?
1116 RTL_R32(tp, OCPDR) : ~0;
1117}
1118
1119static u32 r8168ep_ocp_read(struct rtl8169_private *tp, u16 reg)
1120{
1121 return _rtl_eri_read(tp, reg, ERIAR_OOB);
1122}
1123
1124static void r8168dp_ocp_write(struct rtl8169_private *tp, u8 mask, u16 reg,
1125 u32 data)
1126{
1127 RTL_W32(tp, OCPDR, data);
1128 RTL_W32(tp, OCPAR, OCPAR_FLAG | ((u32)mask & 0x0f) << 12 | (reg & 0x0fff));
1129 rtl_loop_wait_low(tp, &rtl_ocpar_cond, 100, 20);
1130}
1131
1132static void r8168ep_ocp_write(struct rtl8169_private *tp, u8 mask, u16 reg,
1133 u32 data)
1134{
1135 _rtl_eri_write(tp, reg, ((u32)mask & 0x0f) << ERIAR_MASK_SHIFT,
1136 data, ERIAR_OOB);
1137}
1138
1139static void r8168dp_oob_notify(struct rtl8169_private *tp, u8 cmd)
1140{
1141 rtl_eri_write(tp, 0xe8, ERIAR_MASK_0001, cmd);
1142
1143 r8168dp_ocp_write(tp, 0x1, 0x30, 0x00000001);
1144}
1145
1146#define OOB_CMD_RESET 0x00
1147#define OOB_CMD_DRIVER_START 0x05
1148#define OOB_CMD_DRIVER_STOP 0x06
1149
1150static u16 rtl8168_get_ocp_reg(struct rtl8169_private *tp)
1151{
1152 return (tp->mac_version == RTL_GIGA_MAC_VER_31) ? 0xb8 : 0x10;
1153}
1154
1155DECLARE_RTL_COND(rtl_dp_ocp_read_cond)
1156{
1157 u16 reg;
1158
1159 reg = rtl8168_get_ocp_reg(tp);
1160
1161 return r8168dp_ocp_read(tp, reg) & 0x00000800;
1162}
1163
1164DECLARE_RTL_COND(rtl_ep_ocp_read_cond)
1165{
1166 return r8168ep_ocp_read(tp, 0x124) & 0x00000001;
1167}
1168
1169DECLARE_RTL_COND(rtl_ocp_tx_cond)
1170{
1171 return RTL_R8(tp, IBISR0) & 0x20;
1172}
1173
1174static void rtl8168ep_stop_cmac(struct rtl8169_private *tp)
1175{
1176 RTL_W8(tp, IBCR2, RTL_R8(tp, IBCR2) & ~0x01);
1177 rtl_loop_wait_high(tp, &rtl_ocp_tx_cond, 50000, 2000);
1178 RTL_W8(tp, IBISR0, RTL_R8(tp, IBISR0) | 0x20);
1179 RTL_W8(tp, IBCR0, RTL_R8(tp, IBCR0) & ~0x01);
1180}
1181
1182static void rtl8168dp_driver_start(struct rtl8169_private *tp)
1183{
1184 r8168dp_oob_notify(tp, OOB_CMD_DRIVER_START);
1185 rtl_loop_wait_high(tp, &rtl_dp_ocp_read_cond, 10000, 10);
1186}
1187
1188static void rtl8168ep_driver_start(struct rtl8169_private *tp)
1189{
1190 r8168ep_ocp_write(tp, 0x01, 0x180, OOB_CMD_DRIVER_START);
1191 r8168ep_ocp_write(tp, 0x01, 0x30, r8168ep_ocp_read(tp, 0x30) | 0x01);
1192 rtl_loop_wait_high(tp, &rtl_ep_ocp_read_cond, 10000, 10);
1193}
1194
1195static void rtl8168_driver_start(struct rtl8169_private *tp)
1196{
1197 if (tp->dash_type == RTL_DASH_DP)
1198 rtl8168dp_driver_start(tp);
1199 else
1200 rtl8168ep_driver_start(tp);
1201}
1202
1203static void rtl8168dp_driver_stop(struct rtl8169_private *tp)
1204{
1205 r8168dp_oob_notify(tp, OOB_CMD_DRIVER_STOP);
1206 rtl_loop_wait_low(tp, &rtl_dp_ocp_read_cond, 10000, 10);
1207}
1208
1209static void rtl8168ep_driver_stop(struct rtl8169_private *tp)
1210{
1211 rtl8168ep_stop_cmac(tp);
1212 r8168ep_ocp_write(tp, 0x01, 0x180, OOB_CMD_DRIVER_STOP);
1213 r8168ep_ocp_write(tp, 0x01, 0x30, r8168ep_ocp_read(tp, 0x30) | 0x01);
1214 rtl_loop_wait_low(tp, &rtl_ep_ocp_read_cond, 10000, 10);
1215}
1216
1217static void rtl8168_driver_stop(struct rtl8169_private *tp)
1218{
1219 if (tp->dash_type == RTL_DASH_DP)
1220 rtl8168dp_driver_stop(tp);
1221 else
1222 rtl8168ep_driver_stop(tp);
1223}
1224
1225static bool r8168dp_check_dash(struct rtl8169_private *tp)
1226{
1227 u16 reg = rtl8168_get_ocp_reg(tp);
1228
1229 return r8168dp_ocp_read(tp, reg) & BIT(15);
1230}
1231
1232static bool r8168ep_check_dash(struct rtl8169_private *tp)
1233{
1234 return r8168ep_ocp_read(tp, 0x128) & BIT(0);
1235}
1236
1237static enum rtl_dash_type rtl_check_dash(struct rtl8169_private *tp)
1238{
1239 switch (tp->mac_version) {
1240 case RTL_GIGA_MAC_VER_27:
1241 case RTL_GIGA_MAC_VER_28:
1242 case RTL_GIGA_MAC_VER_31:
1243 return r8168dp_check_dash(tp) ? RTL_DASH_DP : RTL_DASH_NONE;
1244 case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_53:
1245 return r8168ep_check_dash(tp) ? RTL_DASH_EP : RTL_DASH_NONE;
1246 default:
1247 return RTL_DASH_NONE;
1248 }
1249}
1250
1251static void rtl_set_d3_pll_down(struct rtl8169_private *tp, bool enable)
1252{
1253 switch (tp->mac_version) {
1254 case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26:
1255 case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30:
1256 case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_37:
1257 case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_63:
1258 if (enable)
1259 RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~D3_NO_PLL_DOWN);
1260 else
1261 RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) | D3_NO_PLL_DOWN);
1262 break;
1263 default:
1264 break;
1265 }
1266}
1267
1268static void rtl_reset_packet_filter(struct rtl8169_private *tp)
1269{
1270 rtl_eri_clear_bits(tp, 0xdc, BIT(0));
1271 rtl_eri_set_bits(tp, 0xdc, BIT(0));
1272}
1273
1274DECLARE_RTL_COND(rtl_efusear_cond)
1275{
1276 return RTL_R32(tp, EFUSEAR) & EFUSEAR_FLAG;
1277}
1278
1279u8 rtl8168d_efuse_read(struct rtl8169_private *tp, int reg_addr)
1280{
1281 RTL_W32(tp, EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
1282
1283 return rtl_loop_wait_high(tp, &rtl_efusear_cond, 100, 300) ?
1284 RTL_R32(tp, EFUSEAR) & EFUSEAR_DATA_MASK : ~0;
1285}
1286
1287static u32 rtl_get_events(struct rtl8169_private *tp)
1288{
1289 if (rtl_is_8125(tp))
1290 return RTL_R32(tp, IntrStatus_8125);
1291 else
1292 return RTL_R16(tp, IntrStatus);
1293}
1294
1295static void rtl_ack_events(struct rtl8169_private *tp, u32 bits)
1296{
1297 if (rtl_is_8125(tp))
1298 RTL_W32(tp, IntrStatus_8125, bits);
1299 else
1300 RTL_W16(tp, IntrStatus, bits);
1301}
1302
1303static void rtl_irq_disable(struct rtl8169_private *tp)
1304{
1305 if (rtl_is_8125(tp))
1306 RTL_W32(tp, IntrMask_8125, 0);
1307 else
1308 RTL_W16(tp, IntrMask, 0);
1309}
1310
1311static void rtl_irq_enable(struct rtl8169_private *tp)
1312{
1313 if (rtl_is_8125(tp))
1314 RTL_W32(tp, IntrMask_8125, tp->irq_mask);
1315 else
1316 RTL_W16(tp, IntrMask, tp->irq_mask);
1317}
1318
1319static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp)
1320{
1321 rtl_irq_disable(tp);
1322 rtl_ack_events(tp, 0xffffffff);
1323 rtl_pci_commit(tp);
1324}
1325
1326static void rtl_link_chg_patch(struct rtl8169_private *tp)
1327{
1328 struct phy_device *phydev = tp->phydev;
1329
1330 if (tp->mac_version == RTL_GIGA_MAC_VER_34 ||
1331 tp->mac_version == RTL_GIGA_MAC_VER_38) {
1332 if (phydev->speed == SPEED_1000) {
1333 rtl_eri_write(tp, 0x1bc, ERIAR_MASK_1111, 0x00000011);
1334 rtl_eri_write(tp, 0x1dc, ERIAR_MASK_1111, 0x00000005);
1335 } else if (phydev->speed == SPEED_100) {
1336 rtl_eri_write(tp, 0x1bc, ERIAR_MASK_1111, 0x0000001f);
1337 rtl_eri_write(tp, 0x1dc, ERIAR_MASK_1111, 0x00000005);
1338 } else {
1339 rtl_eri_write(tp, 0x1bc, ERIAR_MASK_1111, 0x0000001f);
1340 rtl_eri_write(tp, 0x1dc, ERIAR_MASK_1111, 0x0000003f);
1341 }
1342 rtl_reset_packet_filter(tp);
1343 } else if (tp->mac_version == RTL_GIGA_MAC_VER_35 ||
1344 tp->mac_version == RTL_GIGA_MAC_VER_36) {
1345 if (phydev->speed == SPEED_1000) {
1346 rtl_eri_write(tp, 0x1bc, ERIAR_MASK_1111, 0x00000011);
1347 rtl_eri_write(tp, 0x1dc, ERIAR_MASK_1111, 0x00000005);
1348 } else {
1349 rtl_eri_write(tp, 0x1bc, ERIAR_MASK_1111, 0x0000001f);
1350 rtl_eri_write(tp, 0x1dc, ERIAR_MASK_1111, 0x0000003f);
1351 }
1352 } else if (tp->mac_version == RTL_GIGA_MAC_VER_37) {
1353 if (phydev->speed == SPEED_10) {
1354 rtl_eri_write(tp, 0x1d0, ERIAR_MASK_0011, 0x4d02);
1355 rtl_eri_write(tp, 0x1dc, ERIAR_MASK_0011, 0x0060a);
1356 } else {
1357 rtl_eri_write(tp, 0x1d0, ERIAR_MASK_0011, 0x0000);
1358 }
1359 }
1360}
1361
1362#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
1363
1364static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1365{
1366 struct rtl8169_private *tp = netdev_priv(dev);
1367
1368 wol->supported = WAKE_ANY;
1369 wol->wolopts = tp->saved_wolopts;
1370}
1371
1372static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts)
1373{
1374 static const struct {
1375 u32 opt;
1376 u16 reg;
1377 u8 mask;
1378 } cfg[] = {
1379 { WAKE_PHY, Config3, LinkUp },
1380 { WAKE_UCAST, Config5, UWF },
1381 { WAKE_BCAST, Config5, BWF },
1382 { WAKE_MCAST, Config5, MWF },
1383 { WAKE_ANY, Config5, LanWake },
1384 { WAKE_MAGIC, Config3, MagicPacket }
1385 };
1386 unsigned int i, tmp = ARRAY_SIZE(cfg);
1387 u8 options;
1388
1389 rtl_unlock_config_regs(tp);
1390
1391 if (rtl_is_8168evl_up(tp)) {
1392 tmp--;
1393 if (wolopts & WAKE_MAGIC)
1394 rtl_eri_set_bits(tp, 0x0dc, MagicPacket_v2);
1395 else
1396 rtl_eri_clear_bits(tp, 0x0dc, MagicPacket_v2);
1397 } else if (rtl_is_8125(tp)) {
1398 tmp--;
1399 if (wolopts & WAKE_MAGIC)
1400 r8168_mac_ocp_modify(tp, 0xc0b6, 0, BIT(0));
1401 else
1402 r8168_mac_ocp_modify(tp, 0xc0b6, BIT(0), 0);
1403 }
1404
1405 for (i = 0; i < tmp; i++) {
1406 options = RTL_R8(tp, cfg[i].reg) & ~cfg[i].mask;
1407 if (wolopts & cfg[i].opt)
1408 options |= cfg[i].mask;
1409 RTL_W8(tp, cfg[i].reg, options);
1410 }
1411
1412 switch (tp->mac_version) {
1413 case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06:
1414 options = RTL_R8(tp, Config1) & ~PMEnable;
1415 if (wolopts)
1416 options |= PMEnable;
1417 RTL_W8(tp, Config1, options);
1418 break;
1419 case RTL_GIGA_MAC_VER_34:
1420 case RTL_GIGA_MAC_VER_37:
1421 case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_63:
1422 options = RTL_R8(tp, Config2) & ~PME_SIGNAL;
1423 if (wolopts)
1424 options |= PME_SIGNAL;
1425 RTL_W8(tp, Config2, options);
1426 break;
1427 default:
1428 break;
1429 }
1430
1431 rtl_lock_config_regs(tp);
1432
1433 device_set_wakeup_enable(tp_to_dev(tp), wolopts);
1434 rtl_set_d3_pll_down(tp, !wolopts);
1435 tp->dev->wol_enabled = wolopts ? 1 : 0;
1436}
1437
1438static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1439{
1440 struct rtl8169_private *tp = netdev_priv(dev);
1441
1442 if (wol->wolopts & ~WAKE_ANY)
1443 return -EINVAL;
1444
1445 tp->saved_wolopts = wol->wolopts;
1446 __rtl8169_set_wol(tp, tp->saved_wolopts);
1447
1448 return 0;
1449}
1450
1451static void rtl8169_get_drvinfo(struct net_device *dev,
1452 struct ethtool_drvinfo *info)
1453{
1454 struct rtl8169_private *tp = netdev_priv(dev);
1455 struct rtl_fw *rtl_fw = tp->rtl_fw;
1456
1457 strlcpy(info->driver, MODULENAME, sizeof(info->driver));
1458 strlcpy(info->bus_info, pci_name(tp->pci_dev), sizeof(info->bus_info));
1459 BUILD_BUG_ON(sizeof(info->fw_version) < sizeof(rtl_fw->version));
1460 if (rtl_fw)
1461 strlcpy(info->fw_version, rtl_fw->version,
1462 sizeof(info->fw_version));
1463}
1464
1465static int rtl8169_get_regs_len(struct net_device *dev)
1466{
1467 return R8169_REGS_SIZE;
1468}
1469
1470static netdev_features_t rtl8169_fix_features(struct net_device *dev,
1471 netdev_features_t features)
1472{
1473 struct rtl8169_private *tp = netdev_priv(dev);
1474
1475 if (dev->mtu > TD_MSS_MAX)
1476 features &= ~NETIF_F_ALL_TSO;
1477
1478 if (dev->mtu > ETH_DATA_LEN &&
1479 tp->mac_version > RTL_GIGA_MAC_VER_06)
1480 features &= ~(NETIF_F_CSUM_MASK | NETIF_F_ALL_TSO);
1481
1482 return features;
1483}
1484
1485static void rtl_set_rx_config_features(struct rtl8169_private *tp,
1486 netdev_features_t features)
1487{
1488 u32 rx_config = RTL_R32(tp, RxConfig);
1489
1490 if (features & NETIF_F_RXALL)
1491 rx_config |= RX_CONFIG_ACCEPT_ERR_MASK;
1492 else
1493 rx_config &= ~RX_CONFIG_ACCEPT_ERR_MASK;
1494
1495 if (rtl_is_8125(tp)) {
1496 if (features & NETIF_F_HW_VLAN_CTAG_RX)
1497 rx_config |= RX_VLAN_8125;
1498 else
1499 rx_config &= ~RX_VLAN_8125;
1500 }
1501
1502 RTL_W32(tp, RxConfig, rx_config);
1503}
1504
1505static int rtl8169_set_features(struct net_device *dev,
1506 netdev_features_t features)
1507{
1508 struct rtl8169_private *tp = netdev_priv(dev);
1509
1510 rtl_set_rx_config_features(tp, features);
1511
1512 if (features & NETIF_F_RXCSUM)
1513 tp->cp_cmd |= RxChkSum;
1514 else
1515 tp->cp_cmd &= ~RxChkSum;
1516
1517 if (!rtl_is_8125(tp)) {
1518 if (features & NETIF_F_HW_VLAN_CTAG_RX)
1519 tp->cp_cmd |= RxVlan;
1520 else
1521 tp->cp_cmd &= ~RxVlan;
1522 }
1523
1524 RTL_W16(tp, CPlusCmd, tp->cp_cmd);
1525 rtl_pci_commit(tp);
1526
1527 return 0;
1528}
1529
1530static inline u32 rtl8169_tx_vlan_tag(struct sk_buff *skb)
1531{
1532 return (skb_vlan_tag_present(skb)) ?
1533 TxVlanTag | swab16(skb_vlan_tag_get(skb)) : 0x00;
1534}
1535
1536static void rtl8169_rx_vlan_tag(struct RxDesc *desc, struct sk_buff *skb)
1537{
1538 u32 opts2 = le32_to_cpu(desc->opts2);
1539
1540 if (opts2 & RxVlanTag)
1541 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff));
1542}
1543
1544static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1545 void *p)
1546{
1547 struct rtl8169_private *tp = netdev_priv(dev);
1548 u32 __iomem *data = tp->mmio_addr;
1549 u32 *dw = p;
1550 int i;
1551
1552 for (i = 0; i < R8169_REGS_SIZE; i += 4)
1553 memcpy_fromio(dw++, data++, 4);
1554}
1555
1556static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
1557 "tx_packets",
1558 "rx_packets",
1559 "tx_errors",
1560 "rx_errors",
1561 "rx_missed",
1562 "align_errors",
1563 "tx_single_collisions",
1564 "tx_multi_collisions",
1565 "unicast",
1566 "broadcast",
1567 "multicast",
1568 "tx_aborted",
1569 "tx_underrun",
1570};
1571
1572static int rtl8169_get_sset_count(struct net_device *dev, int sset)
1573{
1574 switch (sset) {
1575 case ETH_SS_STATS:
1576 return ARRAY_SIZE(rtl8169_gstrings);
1577 default:
1578 return -EOPNOTSUPP;
1579 }
1580}
1581
1582DECLARE_RTL_COND(rtl_counters_cond)
1583{
1584 return RTL_R32(tp, CounterAddrLow) & (CounterReset | CounterDump);
1585}
1586
1587static void rtl8169_do_counters(struct rtl8169_private *tp, u32 counter_cmd)
1588{
1589 dma_addr_t paddr = tp->counters_phys_addr;
1590 u32 cmd;
1591
1592 RTL_W32(tp, CounterAddrHigh, (u64)paddr >> 32);
1593 rtl_pci_commit(tp);
1594 cmd = (u64)paddr & DMA_BIT_MASK(32);
1595 RTL_W32(tp, CounterAddrLow, cmd);
1596 RTL_W32(tp, CounterAddrLow, cmd | counter_cmd);
1597
1598 rtl_loop_wait_low(tp, &rtl_counters_cond, 10, 1000);
1599}
1600
1601static void rtl8169_update_counters(struct rtl8169_private *tp)
1602{
1603 u8 val = RTL_R8(tp, ChipCmd);
1604
1605
1606
1607
1608
1609 if (val & CmdRxEnb && val != 0xff)
1610 rtl8169_do_counters(tp, CounterDump);
1611}
1612
1613static void rtl8169_init_counter_offsets(struct rtl8169_private *tp)
1614{
1615 struct rtl8169_counters *counters = tp->counters;
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632 if (tp->tc_offset.inited)
1633 return;
1634
1635 if (tp->mac_version >= RTL_GIGA_MAC_VER_19) {
1636 rtl8169_do_counters(tp, CounterReset);
1637 } else {
1638 rtl8169_update_counters(tp);
1639 tp->tc_offset.tx_errors = counters->tx_errors;
1640 tp->tc_offset.tx_multi_collision = counters->tx_multi_collision;
1641 tp->tc_offset.tx_aborted = counters->tx_aborted;
1642 tp->tc_offset.rx_missed = counters->rx_missed;
1643 }
1644
1645 tp->tc_offset.inited = true;
1646}
1647
1648static void rtl8169_get_ethtool_stats(struct net_device *dev,
1649 struct ethtool_stats *stats, u64 *data)
1650{
1651 struct rtl8169_private *tp = netdev_priv(dev);
1652 struct rtl8169_counters *counters;
1653
1654 counters = tp->counters;
1655 rtl8169_update_counters(tp);
1656
1657 data[0] = le64_to_cpu(counters->tx_packets);
1658 data[1] = le64_to_cpu(counters->rx_packets);
1659 data[2] = le64_to_cpu(counters->tx_errors);
1660 data[3] = le32_to_cpu(counters->rx_errors);
1661 data[4] = le16_to_cpu(counters->rx_missed);
1662 data[5] = le16_to_cpu(counters->align_errors);
1663 data[6] = le32_to_cpu(counters->tx_one_collision);
1664 data[7] = le32_to_cpu(counters->tx_multi_collision);
1665 data[8] = le64_to_cpu(counters->rx_unicast);
1666 data[9] = le64_to_cpu(counters->rx_broadcast);
1667 data[10] = le32_to_cpu(counters->rx_multicast);
1668 data[11] = le16_to_cpu(counters->tx_aborted);
1669 data[12] = le16_to_cpu(counters->tx_underun);
1670}
1671
1672static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
1673{
1674 switch(stringset) {
1675 case ETH_SS_STATS:
1676 memcpy(data, *rtl8169_gstrings, sizeof(rtl8169_gstrings));
1677 break;
1678 }
1679}
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710struct rtl_coalesce_info {
1711 u32 speed;
1712 u32 scale_nsecs[4];
1713};
1714
1715
1716#define COALESCE_DELAY(d) { (d), 8 * (d), 16 * (d), 32 * (d) }
1717
1718static const struct rtl_coalesce_info rtl_coalesce_info_8169[] = {
1719 { SPEED_1000, COALESCE_DELAY(320) },
1720 { SPEED_100, COALESCE_DELAY(2560) },
1721 { SPEED_10, COALESCE_DELAY(40960) },
1722 { 0 },
1723};
1724
1725static const struct rtl_coalesce_info rtl_coalesce_info_8168_8136[] = {
1726 { SPEED_1000, COALESCE_DELAY(5000) },
1727 { SPEED_100, COALESCE_DELAY(2560) },
1728 { SPEED_10, COALESCE_DELAY(40960) },
1729 { 0 },
1730};
1731#undef COALESCE_DELAY
1732
1733
1734static const struct rtl_coalesce_info *
1735rtl_coalesce_info(struct rtl8169_private *tp)
1736{
1737 const struct rtl_coalesce_info *ci;
1738
1739 if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
1740 ci = rtl_coalesce_info_8169;
1741 else
1742 ci = rtl_coalesce_info_8168_8136;
1743
1744
1745 if (tp->phydev->speed == SPEED_UNKNOWN)
1746 return ci;
1747
1748 for (; ci->speed; ci++) {
1749 if (tp->phydev->speed == ci->speed)
1750 return ci;
1751 }
1752
1753 return ERR_PTR(-ELNRNG);
1754}
1755
1756static int rtl_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
1757{
1758 struct rtl8169_private *tp = netdev_priv(dev);
1759 const struct rtl_coalesce_info *ci;
1760 u32 scale, c_us, c_fr;
1761 u16 intrmit;
1762
1763 if (rtl_is_8125(tp))
1764 return -EOPNOTSUPP;
1765
1766 memset(ec, 0, sizeof(*ec));
1767
1768
1769 ci = rtl_coalesce_info(tp);
1770 if (IS_ERR(ci))
1771 return PTR_ERR(ci);
1772
1773 scale = ci->scale_nsecs[tp->cp_cmd & INTT_MASK];
1774
1775 intrmit = RTL_R16(tp, IntrMitigate);
1776
1777 c_us = FIELD_GET(RTL_COALESCE_TX_USECS, intrmit);
1778 ec->tx_coalesce_usecs = DIV_ROUND_UP(c_us * scale, 1000);
1779
1780 c_fr = FIELD_GET(RTL_COALESCE_TX_FRAMES, intrmit);
1781
1782 ec->tx_max_coalesced_frames = (c_us || c_fr) ? c_fr * 4 : 1;
1783
1784 c_us = FIELD_GET(RTL_COALESCE_RX_USECS, intrmit);
1785 ec->rx_coalesce_usecs = DIV_ROUND_UP(c_us * scale, 1000);
1786
1787 c_fr = FIELD_GET(RTL_COALESCE_RX_FRAMES, intrmit);
1788 ec->rx_max_coalesced_frames = (c_us || c_fr) ? c_fr * 4 : 1;
1789
1790 return 0;
1791}
1792
1793
1794static int rtl_coalesce_choose_scale(struct rtl8169_private *tp, u32 usec,
1795 u16 *cp01)
1796{
1797 const struct rtl_coalesce_info *ci;
1798 u16 i;
1799
1800 ci = rtl_coalesce_info(tp);
1801 if (IS_ERR(ci))
1802 return PTR_ERR(ci);
1803
1804 for (i = 0; i < 4; i++) {
1805 if (usec <= ci->scale_nsecs[i] * RTL_COALESCE_T_MAX / 1000U) {
1806 *cp01 = i;
1807 return ci->scale_nsecs[i];
1808 }
1809 }
1810
1811 return -ERANGE;
1812}
1813
1814static int rtl_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
1815{
1816 struct rtl8169_private *tp = netdev_priv(dev);
1817 u32 tx_fr = ec->tx_max_coalesced_frames;
1818 u32 rx_fr = ec->rx_max_coalesced_frames;
1819 u32 coal_usec_max, units;
1820 u16 w = 0, cp01 = 0;
1821 int scale;
1822
1823 if (rtl_is_8125(tp))
1824 return -EOPNOTSUPP;
1825
1826 if (rx_fr > RTL_COALESCE_FRAME_MAX || tx_fr > RTL_COALESCE_FRAME_MAX)
1827 return -ERANGE;
1828
1829 coal_usec_max = max(ec->rx_coalesce_usecs, ec->tx_coalesce_usecs);
1830 scale = rtl_coalesce_choose_scale(tp, coal_usec_max, &cp01);
1831 if (scale < 0)
1832 return scale;
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844 if (rx_fr == 1)
1845 rx_fr = 0;
1846 if (tx_fr == 1)
1847 tx_fr = 0;
1848
1849
1850 if ((tx_fr && !ec->tx_coalesce_usecs) ||
1851 (rx_fr && !ec->rx_coalesce_usecs))
1852 return -EINVAL;
1853
1854 w |= FIELD_PREP(RTL_COALESCE_TX_FRAMES, DIV_ROUND_UP(tx_fr, 4));
1855 w |= FIELD_PREP(RTL_COALESCE_RX_FRAMES, DIV_ROUND_UP(rx_fr, 4));
1856
1857 units = DIV_ROUND_UP(ec->tx_coalesce_usecs * 1000U, scale);
1858 w |= FIELD_PREP(RTL_COALESCE_TX_USECS, units);
1859 units = DIV_ROUND_UP(ec->rx_coalesce_usecs * 1000U, scale);
1860 w |= FIELD_PREP(RTL_COALESCE_RX_USECS, units);
1861
1862 RTL_W16(tp, IntrMitigate, w);
1863
1864
1865 if (rtl_is_8168evl_up(tp)) {
1866 if (!rx_fr && !tx_fr)
1867
1868 tp->cp_cmd |= PktCntrDisable;
1869 else
1870 tp->cp_cmd &= ~PktCntrDisable;
1871 }
1872
1873 tp->cp_cmd = (tp->cp_cmd & ~INTT_MASK) | cp01;
1874 RTL_W16(tp, CPlusCmd, tp->cp_cmd);
1875 rtl_pci_commit(tp);
1876
1877 return 0;
1878}
1879
1880static int rtl8169_get_eee(struct net_device *dev, struct ethtool_eee *data)
1881{
1882 struct rtl8169_private *tp = netdev_priv(dev);
1883
1884 if (!rtl_supports_eee(tp))
1885 return -EOPNOTSUPP;
1886
1887 return phy_ethtool_get_eee(tp->phydev, data);
1888}
1889
1890static int rtl8169_set_eee(struct net_device *dev, struct ethtool_eee *data)
1891{
1892 struct rtl8169_private *tp = netdev_priv(dev);
1893 int ret;
1894
1895 if (!rtl_supports_eee(tp))
1896 return -EOPNOTSUPP;
1897
1898 ret = phy_ethtool_set_eee(tp->phydev, data);
1899
1900 if (!ret)
1901 tp->eee_adv = phy_read_mmd(dev->phydev, MDIO_MMD_AN,
1902 MDIO_AN_EEE_ADV);
1903 return ret;
1904}
1905
1906static const struct ethtool_ops rtl8169_ethtool_ops = {
1907 .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
1908 ETHTOOL_COALESCE_MAX_FRAMES,
1909 .get_drvinfo = rtl8169_get_drvinfo,
1910 .get_regs_len = rtl8169_get_regs_len,
1911 .get_link = ethtool_op_get_link,
1912 .get_coalesce = rtl_get_coalesce,
1913 .set_coalesce = rtl_set_coalesce,
1914 .get_regs = rtl8169_get_regs,
1915 .get_wol = rtl8169_get_wol,
1916 .set_wol = rtl8169_set_wol,
1917 .get_strings = rtl8169_get_strings,
1918 .get_sset_count = rtl8169_get_sset_count,
1919 .get_ethtool_stats = rtl8169_get_ethtool_stats,
1920 .get_ts_info = ethtool_op_get_ts_info,
1921 .nway_reset = phy_ethtool_nway_reset,
1922 .get_eee = rtl8169_get_eee,
1923 .set_eee = rtl8169_set_eee,
1924 .get_link_ksettings = phy_ethtool_get_link_ksettings,
1925 .set_link_ksettings = phy_ethtool_set_link_ksettings,
1926};
1927
1928static void rtl_enable_eee(struct rtl8169_private *tp)
1929{
1930 struct phy_device *phydev = tp->phydev;
1931 int adv;
1932
1933
1934 if (tp->eee_adv >= 0)
1935 adv = tp->eee_adv;
1936 else
1937 adv = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE);
1938
1939 if (adv >= 0)
1940 phy_write_mmd(phydev, MDIO_MMD_AN, MDIO_AN_EEE_ADV, adv);
1941}
1942
1943static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
1944{
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956 static const struct rtl_mac_info {
1957 u16 mask;
1958 u16 val;
1959 enum mac_version ver;
1960 } mac_info[] = {
1961
1962 { 0x7cf, 0x641, RTL_GIGA_MAC_VER_63 },
1963
1964
1965 { 0x7cf, 0x608, RTL_GIGA_MAC_VER_60 },
1966 { 0x7c8, 0x608, RTL_GIGA_MAC_VER_61 },
1967
1968
1969 { 0x7cf, 0x54b, RTL_GIGA_MAC_VER_53 },
1970 { 0x7cf, 0x54a, RTL_GIGA_MAC_VER_52 },
1971
1972
1973 { 0x7cf, 0x502, RTL_GIGA_MAC_VER_51 },
1974 { 0x7cf, 0x501, RTL_GIGA_MAC_VER_50 },
1975 { 0x7cf, 0x500, RTL_GIGA_MAC_VER_49 },
1976
1977
1978 { 0x7cf, 0x541, RTL_GIGA_MAC_VER_46 },
1979 { 0x7cf, 0x540, RTL_GIGA_MAC_VER_45 },
1980
1981
1982 { 0x7cf, 0x5c8, RTL_GIGA_MAC_VER_44 },
1983 { 0x7cf, 0x509, RTL_GIGA_MAC_VER_42 },
1984 { 0x7cf, 0x4c1, RTL_GIGA_MAC_VER_41 },
1985 { 0x7cf, 0x4c0, RTL_GIGA_MAC_VER_40 },
1986
1987
1988 { 0x7c8, 0x488, RTL_GIGA_MAC_VER_38 },
1989 { 0x7cf, 0x481, RTL_GIGA_MAC_VER_36 },
1990 { 0x7cf, 0x480, RTL_GIGA_MAC_VER_35 },
1991
1992
1993 { 0x7c8, 0x2c8, RTL_GIGA_MAC_VER_34 },
1994 { 0x7cf, 0x2c1, RTL_GIGA_MAC_VER_32 },
1995 { 0x7c8, 0x2c0, RTL_GIGA_MAC_VER_33 },
1996
1997
1998 { 0x7cf, 0x281, RTL_GIGA_MAC_VER_25 },
1999 { 0x7c8, 0x280, RTL_GIGA_MAC_VER_26 },
2000
2001
2002
2003
2004
2005
2006
2007 { 0x7cf, 0x28a, RTL_GIGA_MAC_VER_28 },
2008 { 0x7cf, 0x28b, RTL_GIGA_MAC_VER_31 },
2009
2010
2011 { 0x7cf, 0x3c9, RTL_GIGA_MAC_VER_23 },
2012 { 0x7cf, 0x3c8, RTL_GIGA_MAC_VER_18 },
2013 { 0x7c8, 0x3c8, RTL_GIGA_MAC_VER_24 },
2014 { 0x7cf, 0x3c0, RTL_GIGA_MAC_VER_19 },
2015 { 0x7cf, 0x3c2, RTL_GIGA_MAC_VER_20 },
2016 { 0x7cf, 0x3c3, RTL_GIGA_MAC_VER_21 },
2017 { 0x7c8, 0x3c0, RTL_GIGA_MAC_VER_22 },
2018
2019
2020 { 0x7cf, 0x380, RTL_GIGA_MAC_VER_12 },
2021 { 0x7c8, 0x380, RTL_GIGA_MAC_VER_17 },
2022 { 0x7c8, 0x300, RTL_GIGA_MAC_VER_11 },
2023
2024
2025 { 0x7c8, 0x448, RTL_GIGA_MAC_VER_39 },
2026 { 0x7c8, 0x440, RTL_GIGA_MAC_VER_37 },
2027 { 0x7cf, 0x409, RTL_GIGA_MAC_VER_29 },
2028 { 0x7c8, 0x408, RTL_GIGA_MAC_VER_30 },
2029 { 0x7cf, 0x349, RTL_GIGA_MAC_VER_08 },
2030 { 0x7cf, 0x249, RTL_GIGA_MAC_VER_08 },
2031 { 0x7cf, 0x348, RTL_GIGA_MAC_VER_07 },
2032 { 0x7cf, 0x248, RTL_GIGA_MAC_VER_07 },
2033 { 0x7cf, 0x340, RTL_GIGA_MAC_VER_13 },
2034 { 0x7cf, 0x240, RTL_GIGA_MAC_VER_14 },
2035 { 0x7cf, 0x343, RTL_GIGA_MAC_VER_10 },
2036 { 0x7cf, 0x342, RTL_GIGA_MAC_VER_16 },
2037 { 0x7c8, 0x348, RTL_GIGA_MAC_VER_09 },
2038 { 0x7c8, 0x248, RTL_GIGA_MAC_VER_09 },
2039 { 0x7c8, 0x340, RTL_GIGA_MAC_VER_16 },
2040
2041
2042
2043
2044
2045
2046
2047
2048 { 0xfc8, 0x980, RTL_GIGA_MAC_VER_06 },
2049 { 0xfc8, 0x180, RTL_GIGA_MAC_VER_05 },
2050 { 0xfc8, 0x100, RTL_GIGA_MAC_VER_04 },
2051 { 0xfc8, 0x040, RTL_GIGA_MAC_VER_03 },
2052 { 0xfc8, 0x008, RTL_GIGA_MAC_VER_02 },
2053
2054
2055 { 0x000, 0x000, RTL_GIGA_MAC_NONE }
2056 };
2057 const struct rtl_mac_info *p = mac_info;
2058 enum mac_version ver;
2059
2060 while ((xid & p->mask) != p->val)
2061 p++;
2062 ver = p->ver;
2063
2064 if (ver != RTL_GIGA_MAC_NONE && !gmii) {
2065 if (ver == RTL_GIGA_MAC_VER_42)
2066 ver = RTL_GIGA_MAC_VER_43;
2067 else if (ver == RTL_GIGA_MAC_VER_45)
2068 ver = RTL_GIGA_MAC_VER_47;
2069 else if (ver == RTL_GIGA_MAC_VER_46)
2070 ver = RTL_GIGA_MAC_VER_48;
2071 }
2072
2073 return ver;
2074}
2075
2076static void rtl_release_firmware(struct rtl8169_private *tp)
2077{
2078 if (tp->rtl_fw) {
2079 rtl_fw_release_firmware(tp->rtl_fw);
2080 kfree(tp->rtl_fw);
2081 tp->rtl_fw = NULL;
2082 }
2083}
2084
2085void r8169_apply_firmware(struct rtl8169_private *tp)
2086{
2087 int val;
2088
2089
2090 if (tp->rtl_fw) {
2091 rtl_fw_write_firmware(tp, tp->rtl_fw);
2092
2093 tp->ocp_base = OCP_STD_PHY_BASE;
2094
2095
2096 phy_read_poll_timeout(tp->phydev, MII_BMCR, val,
2097 !(val & BMCR_RESET),
2098 50000, 600000, true);
2099 }
2100}
2101
2102static void rtl8168_config_eee_mac(struct rtl8169_private *tp)
2103{
2104
2105 if (tp->mac_version != RTL_GIGA_MAC_VER_38)
2106 RTL_W8(tp, EEE_LED, RTL_R8(tp, EEE_LED) & ~0x07);
2107
2108 rtl_eri_set_bits(tp, 0x1b0, 0x0003);
2109}
2110
2111static void rtl8125a_config_eee_mac(struct rtl8169_private *tp)
2112{
2113 r8168_mac_ocp_modify(tp, 0xe040, 0, BIT(1) | BIT(0));
2114 r8168_mac_ocp_modify(tp, 0xeb62, 0, BIT(2) | BIT(1));
2115}
2116
2117static void rtl8125_set_eee_txidle_timer(struct rtl8169_private *tp)
2118{
2119 RTL_W16(tp, EEE_TXIDLE_TIMER_8125, tp->dev->mtu + ETH_HLEN + 0x20);
2120}
2121
2122static void rtl8125b_config_eee_mac(struct rtl8169_private *tp)
2123{
2124 rtl8125_set_eee_txidle_timer(tp);
2125 r8168_mac_ocp_modify(tp, 0xe040, 0, BIT(1) | BIT(0));
2126}
2127
2128static void rtl_rar_exgmac_set(struct rtl8169_private *tp, const u8 *addr)
2129{
2130 rtl_eri_write(tp, 0xe0, ERIAR_MASK_1111, get_unaligned_le32(addr));
2131 rtl_eri_write(tp, 0xe4, ERIAR_MASK_1111, get_unaligned_le16(addr + 4));
2132 rtl_eri_write(tp, 0xf0, ERIAR_MASK_1111, get_unaligned_le16(addr) << 16);
2133 rtl_eri_write(tp, 0xf4, ERIAR_MASK_1111, get_unaligned_le32(addr + 2));
2134}
2135
2136u16 rtl8168h_2_get_adc_bias_ioffset(struct rtl8169_private *tp)
2137{
2138 u16 data1, data2, ioffset;
2139
2140 r8168_mac_ocp_write(tp, 0xdd02, 0x807d);
2141 data1 = r8168_mac_ocp_read(tp, 0xdd02);
2142 data2 = r8168_mac_ocp_read(tp, 0xdd00);
2143
2144 ioffset = (data2 >> 1) & 0x7ff8;
2145 ioffset |= data2 & 0x0007;
2146 if (data1 & BIT(7))
2147 ioffset |= BIT(15);
2148
2149 return ioffset;
2150}
2151
2152static void rtl_schedule_task(struct rtl8169_private *tp, enum rtl_flag flag)
2153{
2154 set_bit(flag, tp->wk.flags);
2155 schedule_work(&tp->wk.work);
2156}
2157
2158static void rtl8169_init_phy(struct rtl8169_private *tp)
2159{
2160 r8169_hw_phy_config(tp, tp->phydev, tp->mac_version);
2161
2162 if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
2163 pci_write_config_byte(tp->pci_dev, PCI_LATENCY_TIMER, 0x40);
2164 pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
2165
2166 RTL_W8(tp, 0x82, 0x01);
2167 }
2168
2169 if (tp->mac_version == RTL_GIGA_MAC_VER_05 &&
2170 tp->pci_dev->subsystem_vendor == PCI_VENDOR_ID_GIGABYTE &&
2171 tp->pci_dev->subsystem_device == 0xe000)
2172 phy_write_paged(tp->phydev, 0x0001, 0x10, 0xf01b);
2173
2174
2175 phy_speed_up(tp->phydev);
2176
2177 if (rtl_supports_eee(tp))
2178 rtl_enable_eee(tp);
2179
2180 genphy_soft_reset(tp->phydev);
2181}
2182
2183static void rtl_rar_set(struct rtl8169_private *tp, const u8 *addr)
2184{
2185 rtl_unlock_config_regs(tp);
2186
2187 RTL_W32(tp, MAC4, get_unaligned_le16(addr + 4));
2188 rtl_pci_commit(tp);
2189
2190 RTL_W32(tp, MAC0, get_unaligned_le32(addr));
2191 rtl_pci_commit(tp);
2192
2193 if (tp->mac_version == RTL_GIGA_MAC_VER_34)
2194 rtl_rar_exgmac_set(tp, addr);
2195
2196 rtl_lock_config_regs(tp);
2197}
2198
2199static int rtl_set_mac_address(struct net_device *dev, void *p)
2200{
2201 struct rtl8169_private *tp = netdev_priv(dev);
2202 int ret;
2203
2204 ret = eth_mac_addr(dev, p);
2205 if (ret)
2206 return ret;
2207
2208 rtl_rar_set(tp, dev->dev_addr);
2209
2210 return 0;
2211}
2212
2213static void rtl_wol_enable_rx(struct rtl8169_private *tp)
2214{
2215 if (tp->mac_version >= RTL_GIGA_MAC_VER_25)
2216 RTL_W32(tp, RxConfig, RTL_R32(tp, RxConfig) |
2217 AcceptBroadcast | AcceptMulticast | AcceptMyPhys);
2218}
2219
2220static void rtl_prepare_power_down(struct rtl8169_private *tp)
2221{
2222 if (tp->dash_type != RTL_DASH_NONE)
2223 return;
2224
2225 if (tp->mac_version == RTL_GIGA_MAC_VER_32 ||
2226 tp->mac_version == RTL_GIGA_MAC_VER_33)
2227 rtl_ephy_write(tp, 0x19, 0xff64);
2228
2229 if (device_may_wakeup(tp_to_dev(tp))) {
2230 phy_speed_down(tp->phydev, false);
2231 rtl_wol_enable_rx(tp);
2232 }
2233}
2234
2235static void rtl_init_rxcfg(struct rtl8169_private *tp)
2236{
2237 switch (tp->mac_version) {
2238 case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06:
2239 case RTL_GIGA_MAC_VER_10 ... RTL_GIGA_MAC_VER_17:
2240 RTL_W32(tp, RxConfig, RX_FIFO_THRESH | RX_DMA_BURST);
2241 break;
2242 case RTL_GIGA_MAC_VER_18 ... RTL_GIGA_MAC_VER_24:
2243 case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_36:
2244 case RTL_GIGA_MAC_VER_38:
2245 RTL_W32(tp, RxConfig, RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST);
2246 break;
2247 case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_53:
2248 RTL_W32(tp, RxConfig, RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST | RX_EARLY_OFF);
2249 break;
2250 case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_63:
2251 RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST);
2252 break;
2253 default:
2254 RTL_W32(tp, RxConfig, RX128_INT_EN | RX_DMA_BURST);
2255 break;
2256 }
2257}
2258
2259static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
2260{
2261 tp->dirty_tx = tp->cur_tx = tp->cur_rx = 0;
2262}
2263
2264static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp)
2265{
2266 RTL_W8(tp, Config3, RTL_R8(tp, Config3) | Jumbo_En0);
2267 RTL_W8(tp, Config4, RTL_R8(tp, Config4) | Jumbo_En1);
2268}
2269
2270static void r8168c_hw_jumbo_disable(struct rtl8169_private *tp)
2271{
2272 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Jumbo_En0);
2273 RTL_W8(tp, Config4, RTL_R8(tp, Config4) & ~Jumbo_En1);
2274}
2275
2276static void r8168dp_hw_jumbo_enable(struct rtl8169_private *tp)
2277{
2278 RTL_W8(tp, Config3, RTL_R8(tp, Config3) | Jumbo_En0);
2279}
2280
2281static void r8168dp_hw_jumbo_disable(struct rtl8169_private *tp)
2282{
2283 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Jumbo_En0);
2284}
2285
2286static void r8168e_hw_jumbo_enable(struct rtl8169_private *tp)
2287{
2288 RTL_W8(tp, MaxTxPacketSize, 0x24);
2289 RTL_W8(tp, Config3, RTL_R8(tp, Config3) | Jumbo_En0);
2290 RTL_W8(tp, Config4, RTL_R8(tp, Config4) | 0x01);
2291}
2292
2293static void r8168e_hw_jumbo_disable(struct rtl8169_private *tp)
2294{
2295 RTL_W8(tp, MaxTxPacketSize, 0x3f);
2296 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Jumbo_En0);
2297 RTL_W8(tp, Config4, RTL_R8(tp, Config4) & ~0x01);
2298}
2299
2300static void r8168b_1_hw_jumbo_enable(struct rtl8169_private *tp)
2301{
2302 RTL_W8(tp, Config4, RTL_R8(tp, Config4) | (1 << 0));
2303}
2304
2305static void r8168b_1_hw_jumbo_disable(struct rtl8169_private *tp)
2306{
2307 RTL_W8(tp, Config4, RTL_R8(tp, Config4) & ~(1 << 0));
2308}
2309
2310static void rtl_jumbo_config(struct rtl8169_private *tp)
2311{
2312 bool jumbo = tp->dev->mtu > ETH_DATA_LEN;
2313 int readrq = 4096;
2314
2315 rtl_unlock_config_regs(tp);
2316 switch (tp->mac_version) {
2317 case RTL_GIGA_MAC_VER_12:
2318 case RTL_GIGA_MAC_VER_17:
2319 if (jumbo) {
2320 readrq = 512;
2321 r8168b_1_hw_jumbo_enable(tp);
2322 } else {
2323 r8168b_1_hw_jumbo_disable(tp);
2324 }
2325 break;
2326 case RTL_GIGA_MAC_VER_18 ... RTL_GIGA_MAC_VER_26:
2327 if (jumbo) {
2328 readrq = 512;
2329 r8168c_hw_jumbo_enable(tp);
2330 } else {
2331 r8168c_hw_jumbo_disable(tp);
2332 }
2333 break;
2334 case RTL_GIGA_MAC_VER_27 ... RTL_GIGA_MAC_VER_28:
2335 if (jumbo)
2336 r8168dp_hw_jumbo_enable(tp);
2337 else
2338 r8168dp_hw_jumbo_disable(tp);
2339 break;
2340 case RTL_GIGA_MAC_VER_31 ... RTL_GIGA_MAC_VER_33:
2341 if (jumbo)
2342 r8168e_hw_jumbo_enable(tp);
2343 else
2344 r8168e_hw_jumbo_disable(tp);
2345 break;
2346 default:
2347 break;
2348 }
2349 rtl_lock_config_regs(tp);
2350
2351 if (pci_is_pcie(tp->pci_dev) && tp->supports_gmii)
2352 pcie_set_readrq(tp->pci_dev, readrq);
2353
2354
2355 linkmode_mod_bit(ETHTOOL_LINK_MODE_Pause_BIT,
2356 tp->phydev->advertising, !jumbo);
2357 linkmode_mod_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT,
2358 tp->phydev->advertising, !jumbo);
2359 phy_start_aneg(tp->phydev);
2360}
2361
2362DECLARE_RTL_COND(rtl_chipcmd_cond)
2363{
2364 return RTL_R8(tp, ChipCmd) & CmdReset;
2365}
2366
2367static void rtl_hw_reset(struct rtl8169_private *tp)
2368{
2369 RTL_W8(tp, ChipCmd, CmdReset);
2370
2371 rtl_loop_wait_low(tp, &rtl_chipcmd_cond, 100, 100);
2372}
2373
2374static void rtl_request_firmware(struct rtl8169_private *tp)
2375{
2376 struct rtl_fw *rtl_fw;
2377
2378
2379 if (tp->rtl_fw || !tp->fw_name)
2380 return;
2381
2382 rtl_fw = kzalloc(sizeof(*rtl_fw), GFP_KERNEL);
2383 if (!rtl_fw)
2384 return;
2385
2386 rtl_fw->phy_write = rtl_writephy;
2387 rtl_fw->phy_read = rtl_readphy;
2388 rtl_fw->mac_mcu_write = mac_mcu_write;
2389 rtl_fw->mac_mcu_read = mac_mcu_read;
2390 rtl_fw->fw_name = tp->fw_name;
2391 rtl_fw->dev = tp_to_dev(tp);
2392
2393 if (rtl_fw_request_firmware(rtl_fw))
2394 kfree(rtl_fw);
2395 else
2396 tp->rtl_fw = rtl_fw;
2397}
2398
2399static void rtl_rx_close(struct rtl8169_private *tp)
2400{
2401 RTL_W32(tp, RxConfig, RTL_R32(tp, RxConfig) & ~RX_CONFIG_ACCEPT_MASK);
2402}
2403
2404DECLARE_RTL_COND(rtl_npq_cond)
2405{
2406 return RTL_R8(tp, TxPoll) & NPQ;
2407}
2408
2409DECLARE_RTL_COND(rtl_txcfg_empty_cond)
2410{
2411 return RTL_R32(tp, TxConfig) & TXCFG_EMPTY;
2412}
2413
2414DECLARE_RTL_COND(rtl_rxtx_empty_cond)
2415{
2416 return (RTL_R8(tp, MCU) & RXTX_EMPTY) == RXTX_EMPTY;
2417}
2418
2419DECLARE_RTL_COND(rtl_rxtx_empty_cond_2)
2420{
2421
2422 return (RTL_R16(tp, IntrMitigate) & 0x0103) == 0x0103;
2423}
2424
2425static void rtl_wait_txrx_fifo_empty(struct rtl8169_private *tp)
2426{
2427 switch (tp->mac_version) {
2428 case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_53:
2429 rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 42);
2430 rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42);
2431 break;
2432 case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_61:
2433 rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42);
2434 break;
2435 case RTL_GIGA_MAC_VER_63:
2436 RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
2437 rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42);
2438 rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond_2, 100, 42);
2439 break;
2440 default:
2441 break;
2442 }
2443}
2444
2445static void rtl_enable_rxdvgate(struct rtl8169_private *tp)
2446{
2447 RTL_W32(tp, MISC, RTL_R32(tp, MISC) | RXDV_GATED_EN);
2448 fsleep(2000);
2449 rtl_wait_txrx_fifo_empty(tp);
2450}
2451
2452static void rtl_set_tx_config_registers(struct rtl8169_private *tp)
2453{
2454 u32 val = TX_DMA_BURST << TxDMAShift |
2455 InterFrameGap << TxInterFrameGapShift;
2456
2457 if (rtl_is_8168evl_up(tp))
2458 val |= TXCFG_AUTO_FIFO;
2459
2460 RTL_W32(tp, TxConfig, val);
2461}
2462
2463static void rtl_set_rx_max_size(struct rtl8169_private *tp)
2464{
2465
2466 RTL_W16(tp, RxMaxSize, R8169_RX_BUF_SIZE + 1);
2467}
2468
2469static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp)
2470{
2471
2472
2473
2474
2475
2476 RTL_W32(tp, TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
2477 RTL_W32(tp, TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
2478 RTL_W32(tp, RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
2479 RTL_W32(tp, RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
2480}
2481
2482static void rtl8169_set_magic_reg(struct rtl8169_private *tp)
2483{
2484 u32 val;
2485
2486 if (tp->mac_version == RTL_GIGA_MAC_VER_05)
2487 val = 0x000fff00;
2488 else if (tp->mac_version == RTL_GIGA_MAC_VER_06)
2489 val = 0x00ffff00;
2490 else
2491 return;
2492
2493 if (RTL_R8(tp, Config2) & PCI_Clock_66MHz)
2494 val |= 0xff;
2495
2496 RTL_W32(tp, 0x7c, val);
2497}
2498
2499static void rtl_set_rx_mode(struct net_device *dev)
2500{
2501 u32 rx_mode = AcceptBroadcast | AcceptMyPhys | AcceptMulticast;
2502
2503 u32 mc_filter[2] = { 0xffffffff, 0xffffffff };
2504 struct rtl8169_private *tp = netdev_priv(dev);
2505 u32 tmp;
2506
2507 if (dev->flags & IFF_PROMISC) {
2508 rx_mode |= AcceptAllPhys;
2509 } else if (netdev_mc_count(dev) > MC_FILTER_LIMIT ||
2510 dev->flags & IFF_ALLMULTI ||
2511 tp->mac_version == RTL_GIGA_MAC_VER_35) {
2512
2513 } else if (netdev_mc_empty(dev)) {
2514 rx_mode &= ~AcceptMulticast;
2515 } else {
2516 struct netdev_hw_addr *ha;
2517
2518 mc_filter[1] = mc_filter[0] = 0;
2519 netdev_for_each_mc_addr(ha, dev) {
2520 u32 bit_nr = eth_hw_addr_crc(ha) >> 26;
2521 mc_filter[bit_nr >> 5] |= BIT(bit_nr & 31);
2522 }
2523
2524 if (tp->mac_version > RTL_GIGA_MAC_VER_06) {
2525 tmp = mc_filter[0];
2526 mc_filter[0] = swab32(mc_filter[1]);
2527 mc_filter[1] = swab32(tmp);
2528 }
2529 }
2530
2531 RTL_W32(tp, MAR0 + 4, mc_filter[1]);
2532 RTL_W32(tp, MAR0 + 0, mc_filter[0]);
2533
2534 tmp = RTL_R32(tp, RxConfig);
2535 RTL_W32(tp, RxConfig, (tmp & ~RX_CONFIG_ACCEPT_OK_MASK) | rx_mode);
2536}
2537
2538DECLARE_RTL_COND(rtl_csiar_cond)
2539{
2540 return RTL_R32(tp, CSIAR) & CSIAR_FLAG;
2541}
2542
2543static void rtl_csi_write(struct rtl8169_private *tp, int addr, int value)
2544{
2545 u32 func = PCI_FUNC(tp->pci_dev->devfn);
2546
2547 RTL_W32(tp, CSIDR, value);
2548 RTL_W32(tp, CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
2549 CSIAR_BYTE_ENABLE | func << 16);
2550
2551 rtl_loop_wait_low(tp, &rtl_csiar_cond, 10, 100);
2552}
2553
2554static u32 rtl_csi_read(struct rtl8169_private *tp, int addr)
2555{
2556 u32 func = PCI_FUNC(tp->pci_dev->devfn);
2557
2558 RTL_W32(tp, CSIAR, (addr & CSIAR_ADDR_MASK) | func << 16 |
2559 CSIAR_BYTE_ENABLE);
2560
2561 return rtl_loop_wait_high(tp, &rtl_csiar_cond, 10, 100) ?
2562 RTL_R32(tp, CSIDR) : ~0;
2563}
2564
2565static void rtl_csi_access_enable(struct rtl8169_private *tp, u8 val)
2566{
2567 struct pci_dev *pdev = tp->pci_dev;
2568 u32 csi;
2569
2570
2571
2572
2573
2574 if (pdev->cfg_size > 0x070f &&
2575 pci_write_config_byte(pdev, 0x070f, val) == PCIBIOS_SUCCESSFUL)
2576 return;
2577
2578 netdev_notice_once(tp->dev,
2579 "No native access to PCI extended config space, falling back to CSI\n");
2580 csi = rtl_csi_read(tp, 0x070c) & 0x00ffffff;
2581 rtl_csi_write(tp, 0x070c, csi | val << 24);
2582}
2583
2584static void rtl_set_def_aspm_entry_latency(struct rtl8169_private *tp)
2585{
2586 rtl_csi_access_enable(tp, 0x27);
2587}
2588
2589struct ephy_info {
2590 unsigned int offset;
2591 u16 mask;
2592 u16 bits;
2593};
2594
2595static void __rtl_ephy_init(struct rtl8169_private *tp,
2596 const struct ephy_info *e, int len)
2597{
2598 u16 w;
2599
2600 while (len-- > 0) {
2601 w = (rtl_ephy_read(tp, e->offset) & ~e->mask) | e->bits;
2602 rtl_ephy_write(tp, e->offset, w);
2603 e++;
2604 }
2605}
2606
2607#define rtl_ephy_init(tp, a) __rtl_ephy_init(tp, a, ARRAY_SIZE(a))
2608
2609static void rtl_disable_clock_request(struct rtl8169_private *tp)
2610{
2611 pcie_capability_clear_word(tp->pci_dev, PCI_EXP_LNKCTL,
2612 PCI_EXP_LNKCTL_CLKREQ_EN);
2613}
2614
2615static void rtl_enable_clock_request(struct rtl8169_private *tp)
2616{
2617 pcie_capability_set_word(tp->pci_dev, PCI_EXP_LNKCTL,
2618 PCI_EXP_LNKCTL_CLKREQ_EN);
2619}
2620
2621static void rtl_pcie_state_l2l3_disable(struct rtl8169_private *tp)
2622{
2623
2624 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Rdy_to_L23);
2625}
2626
2627static void rtl_hw_aspm_clkreq_enable(struct rtl8169_private *tp, bool enable)
2628{
2629
2630 if (enable && tp->aspm_manageable) {
2631 RTL_W8(tp, Config5, RTL_R8(tp, Config5) | ASPM_en);
2632 RTL_W8(tp, Config2, RTL_R8(tp, Config2) | ClkReqEn);
2633 } else {
2634 RTL_W8(tp, Config2, RTL_R8(tp, Config2) & ~ClkReqEn);
2635 RTL_W8(tp, Config5, RTL_R8(tp, Config5) & ~ASPM_en);
2636 }
2637
2638 udelay(10);
2639}
2640
2641static void rtl_set_fifo_size(struct rtl8169_private *tp, u16 rx_stat,
2642 u16 tx_stat, u16 rx_dyn, u16 tx_dyn)
2643{
2644
2645
2646
2647 rtl_eri_write(tp, 0xc8, ERIAR_MASK_1111, (rx_stat << 16) | rx_dyn);
2648 rtl_eri_write(tp, 0xe8, ERIAR_MASK_1111, (tx_stat << 16) | tx_dyn);
2649}
2650
2651static void rtl8168g_set_pause_thresholds(struct rtl8169_private *tp,
2652 u8 low, u8 high)
2653{
2654
2655 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, low);
2656 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, high);
2657}
2658
2659static void rtl_hw_start_8168b(struct rtl8169_private *tp)
2660{
2661 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
2662}
2663
2664static void __rtl_hw_start_8168cp(struct rtl8169_private *tp)
2665{
2666 RTL_W8(tp, Config1, RTL_R8(tp, Config1) | Speed_down);
2667
2668 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
2669
2670 rtl_disable_clock_request(tp);
2671}
2672
2673static void rtl_hw_start_8168cp_1(struct rtl8169_private *tp)
2674{
2675 static const struct ephy_info e_info_8168cp[] = {
2676 { 0x01, 0, 0x0001 },
2677 { 0x02, 0x0800, 0x1000 },
2678 { 0x03, 0, 0x0042 },
2679 { 0x06, 0x0080, 0x0000 },
2680 { 0x07, 0, 0x2000 }
2681 };
2682
2683 rtl_set_def_aspm_entry_latency(tp);
2684
2685 rtl_ephy_init(tp, e_info_8168cp);
2686
2687 __rtl_hw_start_8168cp(tp);
2688}
2689
2690static void rtl_hw_start_8168cp_2(struct rtl8169_private *tp)
2691{
2692 rtl_set_def_aspm_entry_latency(tp);
2693
2694 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
2695}
2696
2697static void rtl_hw_start_8168cp_3(struct rtl8169_private *tp)
2698{
2699 rtl_set_def_aspm_entry_latency(tp);
2700
2701 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
2702
2703
2704 RTL_W8(tp, DBG_REG, 0x20);
2705}
2706
2707static void rtl_hw_start_8168c_1(struct rtl8169_private *tp)
2708{
2709 static const struct ephy_info e_info_8168c_1[] = {
2710 { 0x02, 0x0800, 0x1000 },
2711 { 0x03, 0, 0x0002 },
2712 { 0x06, 0x0080, 0x0000 }
2713 };
2714
2715 rtl_set_def_aspm_entry_latency(tp);
2716
2717 RTL_W8(tp, DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
2718
2719 rtl_ephy_init(tp, e_info_8168c_1);
2720
2721 __rtl_hw_start_8168cp(tp);
2722}
2723
2724static void rtl_hw_start_8168c_2(struct rtl8169_private *tp)
2725{
2726 static const struct ephy_info e_info_8168c_2[] = {
2727 { 0x01, 0, 0x0001 },
2728 { 0x03, 0x0400, 0x0020 }
2729 };
2730
2731 rtl_set_def_aspm_entry_latency(tp);
2732
2733 rtl_ephy_init(tp, e_info_8168c_2);
2734
2735 __rtl_hw_start_8168cp(tp);
2736}
2737
2738static void rtl_hw_start_8168c_3(struct rtl8169_private *tp)
2739{
2740 rtl_hw_start_8168c_2(tp);
2741}
2742
2743static void rtl_hw_start_8168c_4(struct rtl8169_private *tp)
2744{
2745 rtl_set_def_aspm_entry_latency(tp);
2746
2747 __rtl_hw_start_8168cp(tp);
2748}
2749
2750static void rtl_hw_start_8168d(struct rtl8169_private *tp)
2751{
2752 rtl_set_def_aspm_entry_latency(tp);
2753
2754 rtl_disable_clock_request(tp);
2755}
2756
2757static void rtl_hw_start_8168d_4(struct rtl8169_private *tp)
2758{
2759 static const struct ephy_info e_info_8168d_4[] = {
2760 { 0x0b, 0x0000, 0x0048 },
2761 { 0x19, 0x0020, 0x0050 },
2762 { 0x0c, 0x0100, 0x0020 },
2763 { 0x10, 0x0004, 0x0000 },
2764 };
2765
2766 rtl_set_def_aspm_entry_latency(tp);
2767
2768 rtl_ephy_init(tp, e_info_8168d_4);
2769
2770 rtl_enable_clock_request(tp);
2771}
2772
2773static void rtl_hw_start_8168e_1(struct rtl8169_private *tp)
2774{
2775 static const struct ephy_info e_info_8168e_1[] = {
2776 { 0x00, 0x0200, 0x0100 },
2777 { 0x00, 0x0000, 0x0004 },
2778 { 0x06, 0x0002, 0x0001 },
2779 { 0x06, 0x0000, 0x0030 },
2780 { 0x07, 0x0000, 0x2000 },
2781 { 0x00, 0x0000, 0x0020 },
2782 { 0x03, 0x5800, 0x2000 },
2783 { 0x03, 0x0000, 0x0001 },
2784 { 0x01, 0x0800, 0x1000 },
2785 { 0x07, 0x0000, 0x4000 },
2786 { 0x1e, 0x0000, 0x2000 },
2787 { 0x19, 0xffff, 0xfe6c },
2788 { 0x0a, 0x0000, 0x0040 }
2789 };
2790
2791 rtl_set_def_aspm_entry_latency(tp);
2792
2793 rtl_ephy_init(tp, e_info_8168e_1);
2794
2795 rtl_disable_clock_request(tp);
2796
2797
2798 RTL_W32(tp, MISC, RTL_R32(tp, MISC) | TXPLA_RST);
2799 RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~TXPLA_RST);
2800
2801 RTL_W8(tp, Config5, RTL_R8(tp, Config5) & ~Spi_en);
2802}
2803
2804static void rtl_hw_start_8168e_2(struct rtl8169_private *tp)
2805{
2806 static const struct ephy_info e_info_8168e_2[] = {
2807 { 0x09, 0x0000, 0x0080 },
2808 { 0x19, 0x0000, 0x0224 },
2809 { 0x00, 0x0000, 0x0004 },
2810 { 0x0c, 0x3df0, 0x0200 },
2811 };
2812
2813 rtl_set_def_aspm_entry_latency(tp);
2814
2815 rtl_ephy_init(tp, e_info_8168e_2);
2816
2817 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000);
2818 rtl_eri_write(tp, 0xb8, ERIAR_MASK_1111, 0x0000);
2819 rtl_set_fifo_size(tp, 0x10, 0x10, 0x02, 0x06);
2820 rtl_eri_set_bits(tp, 0x0d4, 0x1f00);
2821 rtl_eri_set_bits(tp, 0x1d0, BIT(1));
2822 rtl_reset_packet_filter(tp);
2823 rtl_eri_set_bits(tp, 0x1b0, BIT(4));
2824 rtl_eri_write(tp, 0xcc, ERIAR_MASK_1111, 0x00000050);
2825 rtl_eri_write(tp, 0xd0, ERIAR_MASK_1111, 0x07ff0060);
2826
2827 rtl_disable_clock_request(tp);
2828
2829 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
2830
2831 rtl8168_config_eee_mac(tp);
2832
2833 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN);
2834 RTL_W32(tp, MISC, RTL_R32(tp, MISC) | PWM_EN);
2835 RTL_W8(tp, Config5, RTL_R8(tp, Config5) & ~Spi_en);
2836
2837 rtl_hw_aspm_clkreq_enable(tp, true);
2838}
2839
2840static void rtl_hw_start_8168f(struct rtl8169_private *tp)
2841{
2842 rtl_set_def_aspm_entry_latency(tp);
2843
2844 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000);
2845 rtl_eri_write(tp, 0xb8, ERIAR_MASK_1111, 0x0000);
2846 rtl_set_fifo_size(tp, 0x10, 0x10, 0x02, 0x06);
2847 rtl_reset_packet_filter(tp);
2848 rtl_eri_set_bits(tp, 0x1b0, BIT(4));
2849 rtl_eri_set_bits(tp, 0x1d0, BIT(4) | BIT(1));
2850 rtl_eri_write(tp, 0xcc, ERIAR_MASK_1111, 0x00000050);
2851 rtl_eri_write(tp, 0xd0, ERIAR_MASK_1111, 0x00000060);
2852
2853 rtl_disable_clock_request(tp);
2854
2855 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
2856 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN);
2857 RTL_W32(tp, MISC, RTL_R32(tp, MISC) | PWM_EN);
2858 RTL_W8(tp, Config5, RTL_R8(tp, Config5) & ~Spi_en);
2859
2860 rtl8168_config_eee_mac(tp);
2861}
2862
2863static void rtl_hw_start_8168f_1(struct rtl8169_private *tp)
2864{
2865 static const struct ephy_info e_info_8168f_1[] = {
2866 { 0x06, 0x00c0, 0x0020 },
2867 { 0x08, 0x0001, 0x0002 },
2868 { 0x09, 0x0000, 0x0080 },
2869 { 0x19, 0x0000, 0x0224 },
2870 { 0x00, 0x0000, 0x0008 },
2871 { 0x0c, 0x3df0, 0x0200 },
2872 };
2873
2874 rtl_hw_start_8168f(tp);
2875
2876 rtl_ephy_init(tp, e_info_8168f_1);
2877
2878 rtl_eri_set_bits(tp, 0x0d4, 0x1f00);
2879}
2880
2881static void rtl_hw_start_8411(struct rtl8169_private *tp)
2882{
2883 static const struct ephy_info e_info_8168f_1[] = {
2884 { 0x06, 0x00c0, 0x0020 },
2885 { 0x0f, 0xffff, 0x5200 },
2886 { 0x19, 0x0000, 0x0224 },
2887 { 0x00, 0x0000, 0x0008 },
2888 { 0x0c, 0x3df0, 0x0200 },
2889 };
2890
2891 rtl_hw_start_8168f(tp);
2892 rtl_pcie_state_l2l3_disable(tp);
2893
2894 rtl_ephy_init(tp, e_info_8168f_1);
2895
2896 rtl_eri_set_bits(tp, 0x0d4, 0x0c00);
2897}
2898
2899static void rtl_hw_start_8168g(struct rtl8169_private *tp)
2900{
2901 rtl_set_fifo_size(tp, 0x08, 0x10, 0x02, 0x06);
2902 rtl8168g_set_pause_thresholds(tp, 0x38, 0x48);
2903
2904 rtl_set_def_aspm_entry_latency(tp);
2905
2906 rtl_reset_packet_filter(tp);
2907 rtl_eri_write(tp, 0x2f8, ERIAR_MASK_0011, 0x1d8f);
2908
2909 RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~RXDV_GATED_EN);
2910
2911 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000);
2912 rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000);
2913 rtl_eri_set_bits(tp, 0x0d4, 0x1f80);
2914
2915 rtl8168_config_eee_mac(tp);
2916
2917 rtl_w0w1_eri(tp, 0x2fc, 0x01, 0x06);
2918 rtl_eri_clear_bits(tp, 0x1b0, BIT(12));
2919
2920 rtl_pcie_state_l2l3_disable(tp);
2921}
2922
2923static void rtl_hw_start_8168g_1(struct rtl8169_private *tp)
2924{
2925 static const struct ephy_info e_info_8168g_1[] = {
2926 { 0x00, 0x0008, 0x0000 },
2927 { 0x0c, 0x3ff0, 0x0820 },
2928 { 0x1e, 0x0000, 0x0001 },
2929 { 0x19, 0x8000, 0x0000 }
2930 };
2931
2932 rtl_hw_start_8168g(tp);
2933
2934
2935 rtl_hw_aspm_clkreq_enable(tp, false);
2936 rtl_ephy_init(tp, e_info_8168g_1);
2937 rtl_hw_aspm_clkreq_enable(tp, true);
2938}
2939
2940static void rtl_hw_start_8168g_2(struct rtl8169_private *tp)
2941{
2942 static const struct ephy_info e_info_8168g_2[] = {
2943 { 0x00, 0x0008, 0x0000 },
2944 { 0x0c, 0x3ff0, 0x0820 },
2945 { 0x19, 0xffff, 0x7c00 },
2946 { 0x1e, 0xffff, 0x20eb },
2947 { 0x0d, 0xffff, 0x1666 },
2948 { 0x00, 0xffff, 0x10a3 },
2949 { 0x06, 0xffff, 0xf050 },
2950 { 0x04, 0x0000, 0x0010 },
2951 { 0x1d, 0x4000, 0x0000 },
2952 };
2953
2954 rtl_hw_start_8168g(tp);
2955
2956
2957 rtl_hw_aspm_clkreq_enable(tp, false);
2958 rtl_ephy_init(tp, e_info_8168g_2);
2959}
2960
2961static void rtl_hw_start_8411_2(struct rtl8169_private *tp)
2962{
2963 static const struct ephy_info e_info_8411_2[] = {
2964 { 0x00, 0x0008, 0x0000 },
2965 { 0x0c, 0x37d0, 0x0820 },
2966 { 0x1e, 0x0000, 0x0001 },
2967 { 0x19, 0x8021, 0x0000 },
2968 { 0x1e, 0x0000, 0x2000 },
2969 { 0x0d, 0x0100, 0x0200 },
2970 { 0x00, 0x0000, 0x0080 },
2971 { 0x06, 0x0000, 0x0010 },
2972 { 0x04, 0x0000, 0x0010 },
2973 { 0x1d, 0x0000, 0x4000 },
2974 };
2975
2976 rtl_hw_start_8168g(tp);
2977
2978
2979 rtl_hw_aspm_clkreq_enable(tp, false);
2980 rtl_ephy_init(tp, e_info_8411_2);
2981
2982
2983
2984
2985 r8168_mac_ocp_write(tp, 0xFC28, 0x0000);
2986 r8168_mac_ocp_write(tp, 0xFC2A, 0x0000);
2987 r8168_mac_ocp_write(tp, 0xFC2C, 0x0000);
2988 r8168_mac_ocp_write(tp, 0xFC2E, 0x0000);
2989 r8168_mac_ocp_write(tp, 0xFC30, 0x0000);
2990 r8168_mac_ocp_write(tp, 0xFC32, 0x0000);
2991 r8168_mac_ocp_write(tp, 0xFC34, 0x0000);
2992 r8168_mac_ocp_write(tp, 0xFC36, 0x0000);
2993 mdelay(3);
2994 r8168_mac_ocp_write(tp, 0xFC26, 0x0000);
2995
2996 r8168_mac_ocp_write(tp, 0xF800, 0xE008);
2997 r8168_mac_ocp_write(tp, 0xF802, 0xE00A);
2998 r8168_mac_ocp_write(tp, 0xF804, 0xE00C);
2999 r8168_mac_ocp_write(tp, 0xF806, 0xE00E);
3000 r8168_mac_ocp_write(tp, 0xF808, 0xE027);
3001 r8168_mac_ocp_write(tp, 0xF80A, 0xE04F);
3002 r8168_mac_ocp_write(tp, 0xF80C, 0xE05E);
3003 r8168_mac_ocp_write(tp, 0xF80E, 0xE065);
3004 r8168_mac_ocp_write(tp, 0xF810, 0xC602);
3005 r8168_mac_ocp_write(tp, 0xF812, 0xBE00);
3006 r8168_mac_ocp_write(tp, 0xF814, 0x0000);
3007 r8168_mac_ocp_write(tp, 0xF816, 0xC502);
3008 r8168_mac_ocp_write(tp, 0xF818, 0xBD00);
3009 r8168_mac_ocp_write(tp, 0xF81A, 0x074C);
3010 r8168_mac_ocp_write(tp, 0xF81C, 0xC302);
3011 r8168_mac_ocp_write(tp, 0xF81E, 0xBB00);
3012 r8168_mac_ocp_write(tp, 0xF820, 0x080A);
3013 r8168_mac_ocp_write(tp, 0xF822, 0x6420);
3014 r8168_mac_ocp_write(tp, 0xF824, 0x48C2);
3015 r8168_mac_ocp_write(tp, 0xF826, 0x8C20);
3016 r8168_mac_ocp_write(tp, 0xF828, 0xC516);
3017 r8168_mac_ocp_write(tp, 0xF82A, 0x64A4);
3018 r8168_mac_ocp_write(tp, 0xF82C, 0x49C0);
3019 r8168_mac_ocp_write(tp, 0xF82E, 0xF009);
3020 r8168_mac_ocp_write(tp, 0xF830, 0x74A2);
3021 r8168_mac_ocp_write(tp, 0xF832, 0x8CA5);
3022 r8168_mac_ocp_write(tp, 0xF834, 0x74A0);
3023 r8168_mac_ocp_write(tp, 0xF836, 0xC50E);
3024 r8168_mac_ocp_write(tp, 0xF838, 0x9CA2);
3025 r8168_mac_ocp_write(tp, 0xF83A, 0x1C11);
3026 r8168_mac_ocp_write(tp, 0xF83C, 0x9CA0);
3027 r8168_mac_ocp_write(tp, 0xF83E, 0xE006);
3028 r8168_mac_ocp_write(tp, 0xF840, 0x74F8);
3029 r8168_mac_ocp_write(tp, 0xF842, 0x48C4);
3030 r8168_mac_ocp_write(tp, 0xF844, 0x8CF8);
3031 r8168_mac_ocp_write(tp, 0xF846, 0xC404);
3032 r8168_mac_ocp_write(tp, 0xF848, 0xBC00);
3033 r8168_mac_ocp_write(tp, 0xF84A, 0xC403);
3034 r8168_mac_ocp_write(tp, 0xF84C, 0xBC00);
3035 r8168_mac_ocp_write(tp, 0xF84E, 0x0BF2);
3036 r8168_mac_ocp_write(tp, 0xF850, 0x0C0A);
3037 r8168_mac_ocp_write(tp, 0xF852, 0xE434);
3038 r8168_mac_ocp_write(tp, 0xF854, 0xD3C0);
3039 r8168_mac_ocp_write(tp, 0xF856, 0x49D9);
3040 r8168_mac_ocp_write(tp, 0xF858, 0xF01F);
3041 r8168_mac_ocp_write(tp, 0xF85A, 0xC526);
3042 r8168_mac_ocp_write(tp, 0xF85C, 0x64A5);
3043 r8168_mac_ocp_write(tp, 0xF85E, 0x1400);
3044 r8168_mac_ocp_write(tp, 0xF860, 0xF007);
3045 r8168_mac_ocp_write(tp, 0xF862, 0x0C01);
3046 r8168_mac_ocp_write(tp, 0xF864, 0x8CA5);
3047 r8168_mac_ocp_write(tp, 0xF866, 0x1C15);
3048 r8168_mac_ocp_write(tp, 0xF868, 0xC51B);
3049 r8168_mac_ocp_write(tp, 0xF86A, 0x9CA0);
3050 r8168_mac_ocp_write(tp, 0xF86C, 0xE013);
3051 r8168_mac_ocp_write(tp, 0xF86E, 0xC519);
3052 r8168_mac_ocp_write(tp, 0xF870, 0x74A0);
3053 r8168_mac_ocp_write(tp, 0xF872, 0x48C4);
3054 r8168_mac_ocp_write(tp, 0xF874, 0x8CA0);
3055 r8168_mac_ocp_write(tp, 0xF876, 0xC516);
3056 r8168_mac_ocp_write(tp, 0xF878, 0x74A4);
3057 r8168_mac_ocp_write(tp, 0xF87A, 0x48C8);
3058 r8168_mac_ocp_write(tp, 0xF87C, 0x48CA);
3059 r8168_mac_ocp_write(tp, 0xF87E, 0x9CA4);
3060 r8168_mac_ocp_write(tp, 0xF880, 0xC512);
3061 r8168_mac_ocp_write(tp, 0xF882, 0x1B00);
3062 r8168_mac_ocp_write(tp, 0xF884, 0x9BA0);
3063 r8168_mac_ocp_write(tp, 0xF886, 0x1B1C);
3064 r8168_mac_ocp_write(tp, 0xF888, 0x483F);
3065 r8168_mac_ocp_write(tp, 0xF88A, 0x9BA2);
3066 r8168_mac_ocp_write(tp, 0xF88C, 0x1B04);
3067 r8168_mac_ocp_write(tp, 0xF88E, 0xC508);
3068 r8168_mac_ocp_write(tp, 0xF890, 0x9BA0);
3069 r8168_mac_ocp_write(tp, 0xF892, 0xC505);
3070 r8168_mac_ocp_write(tp, 0xF894, 0xBD00);
3071 r8168_mac_ocp_write(tp, 0xF896, 0xC502);
3072 r8168_mac_ocp_write(tp, 0xF898, 0xBD00);
3073 r8168_mac_ocp_write(tp, 0xF89A, 0x0300);
3074 r8168_mac_ocp_write(tp, 0xF89C, 0x051E);
3075 r8168_mac_ocp_write(tp, 0xF89E, 0xE434);
3076 r8168_mac_ocp_write(tp, 0xF8A0, 0xE018);
3077 r8168_mac_ocp_write(tp, 0xF8A2, 0xE092);
3078 r8168_mac_ocp_write(tp, 0xF8A4, 0xDE20);
3079 r8168_mac_ocp_write(tp, 0xF8A6, 0xD3C0);
3080 r8168_mac_ocp_write(tp, 0xF8A8, 0xC50F);
3081 r8168_mac_ocp_write(tp, 0xF8AA, 0x76A4);
3082 r8168_mac_ocp_write(tp, 0xF8AC, 0x49E3);
3083 r8168_mac_ocp_write(tp, 0xF8AE, 0xF007);
3084 r8168_mac_ocp_write(tp, 0xF8B0, 0x49C0);
3085 r8168_mac_ocp_write(tp, 0xF8B2, 0xF103);
3086 r8168_mac_ocp_write(tp, 0xF8B4, 0xC607);
3087 r8168_mac_ocp_write(tp, 0xF8B6, 0xBE00);
3088 r8168_mac_ocp_write(tp, 0xF8B8, 0xC606);
3089 r8168_mac_ocp_write(tp, 0xF8BA, 0xBE00);
3090 r8168_mac_ocp_write(tp, 0xF8BC, 0xC602);
3091 r8168_mac_ocp_write(tp, 0xF8BE, 0xBE00);
3092 r8168_mac_ocp_write(tp, 0xF8C0, 0x0C4C);
3093 r8168_mac_ocp_write(tp, 0xF8C2, 0x0C28);
3094 r8168_mac_ocp_write(tp, 0xF8C4, 0x0C2C);
3095 r8168_mac_ocp_write(tp, 0xF8C6, 0xDC00);
3096 r8168_mac_ocp_write(tp, 0xF8C8, 0xC707);
3097 r8168_mac_ocp_write(tp, 0xF8CA, 0x1D00);
3098 r8168_mac_ocp_write(tp, 0xF8CC, 0x8DE2);
3099 r8168_mac_ocp_write(tp, 0xF8CE, 0x48C1);
3100 r8168_mac_ocp_write(tp, 0xF8D0, 0xC502);
3101 r8168_mac_ocp_write(tp, 0xF8D2, 0xBD00);
3102 r8168_mac_ocp_write(tp, 0xF8D4, 0x00AA);
3103 r8168_mac_ocp_write(tp, 0xF8D6, 0xE0C0);
3104 r8168_mac_ocp_write(tp, 0xF8D8, 0xC502);
3105 r8168_mac_ocp_write(tp, 0xF8DA, 0xBD00);
3106 r8168_mac_ocp_write(tp, 0xF8DC, 0x0132);
3107
3108 r8168_mac_ocp_write(tp, 0xFC26, 0x8000);
3109
3110 r8168_mac_ocp_write(tp, 0xFC2A, 0x0743);
3111 r8168_mac_ocp_write(tp, 0xFC2C, 0x0801);
3112 r8168_mac_ocp_write(tp, 0xFC2E, 0x0BE9);
3113 r8168_mac_ocp_write(tp, 0xFC30, 0x02FD);
3114 r8168_mac_ocp_write(tp, 0xFC32, 0x0C25);
3115 r8168_mac_ocp_write(tp, 0xFC34, 0x00A9);
3116 r8168_mac_ocp_write(tp, 0xFC36, 0x012D);
3117
3118 rtl_hw_aspm_clkreq_enable(tp, true);
3119}
3120
3121static void rtl_hw_start_8168h_1(struct rtl8169_private *tp)
3122{
3123 static const struct ephy_info e_info_8168h_1[] = {
3124 { 0x1e, 0x0800, 0x0001 },
3125 { 0x1d, 0x0000, 0x0800 },
3126 { 0x05, 0xffff, 0x2089 },
3127 { 0x06, 0xffff, 0x5881 },
3128 { 0x04, 0xffff, 0x854a },
3129 { 0x01, 0xffff, 0x068b }
3130 };
3131 int rg_saw_cnt;
3132
3133
3134 rtl_hw_aspm_clkreq_enable(tp, false);
3135 rtl_ephy_init(tp, e_info_8168h_1);
3136
3137 rtl_set_fifo_size(tp, 0x08, 0x10, 0x02, 0x06);
3138 rtl8168g_set_pause_thresholds(tp, 0x38, 0x48);
3139
3140 rtl_set_def_aspm_entry_latency(tp);
3141
3142 rtl_reset_packet_filter(tp);
3143
3144 rtl_eri_set_bits(tp, 0xd4, 0x1f00);
3145 rtl_eri_set_bits(tp, 0xdc, 0x001c);
3146
3147 rtl_eri_write(tp, 0x5f0, ERIAR_MASK_0011, 0x4f87);
3148
3149 RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~RXDV_GATED_EN);
3150
3151 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000);
3152 rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000);
3153
3154 rtl8168_config_eee_mac(tp);
3155
3156 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
3157 RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
3158
3159 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~TX_10M_PS_EN);
3160
3161 rtl_eri_clear_bits(tp, 0x1b0, BIT(12));
3162
3163 rtl_pcie_state_l2l3_disable(tp);
3164
3165 rg_saw_cnt = phy_read_paged(tp->phydev, 0x0c42, 0x13) & 0x3fff;
3166 if (rg_saw_cnt > 0) {
3167 u16 sw_cnt_1ms_ini;
3168
3169 sw_cnt_1ms_ini = 16000000/rg_saw_cnt;
3170 sw_cnt_1ms_ini &= 0x0fff;
3171 r8168_mac_ocp_modify(tp, 0xd412, 0x0fff, sw_cnt_1ms_ini);
3172 }
3173
3174 r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0070);
3175 r8168_mac_ocp_modify(tp, 0xe052, 0x6000, 0x8008);
3176 r8168_mac_ocp_modify(tp, 0xe0d6, 0x01ff, 0x017f);
3177 r8168_mac_ocp_modify(tp, 0xd420, 0x0fff, 0x047f);
3178
3179 r8168_mac_ocp_write(tp, 0xe63e, 0x0001);
3180 r8168_mac_ocp_write(tp, 0xe63e, 0x0000);
3181 r8168_mac_ocp_write(tp, 0xc094, 0x0000);
3182 r8168_mac_ocp_write(tp, 0xc09e, 0x0000);
3183
3184 rtl_hw_aspm_clkreq_enable(tp, true);
3185}
3186
3187static void rtl_hw_start_8168ep(struct rtl8169_private *tp)
3188{
3189 rtl8168ep_stop_cmac(tp);
3190
3191 rtl_set_fifo_size(tp, 0x08, 0x10, 0x02, 0x06);
3192 rtl8168g_set_pause_thresholds(tp, 0x2f, 0x5f);
3193
3194 rtl_set_def_aspm_entry_latency(tp);
3195
3196 rtl_reset_packet_filter(tp);
3197
3198 rtl_eri_set_bits(tp, 0xd4, 0x1f80);
3199
3200 rtl_eri_write(tp, 0x5f0, ERIAR_MASK_0011, 0x4f87);
3201
3202 RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~RXDV_GATED_EN);
3203
3204 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000);
3205 rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000);
3206
3207 rtl8168_config_eee_mac(tp);
3208
3209 rtl_w0w1_eri(tp, 0x2fc, 0x01, 0x06);
3210
3211 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~TX_10M_PS_EN);
3212
3213 rtl_pcie_state_l2l3_disable(tp);
3214}
3215
3216static void rtl_hw_start_8168ep_1(struct rtl8169_private *tp)
3217{
3218 static const struct ephy_info e_info_8168ep_1[] = {
3219 { 0x00, 0xffff, 0x10ab },
3220 { 0x06, 0xffff, 0xf030 },
3221 { 0x08, 0xffff, 0x2006 },
3222 { 0x0d, 0xffff, 0x1666 },
3223 { 0x0c, 0x3ff0, 0x0000 }
3224 };
3225
3226
3227 rtl_hw_aspm_clkreq_enable(tp, false);
3228 rtl_ephy_init(tp, e_info_8168ep_1);
3229
3230 rtl_hw_start_8168ep(tp);
3231
3232 rtl_hw_aspm_clkreq_enable(tp, true);
3233}
3234
3235static void rtl_hw_start_8168ep_2(struct rtl8169_private *tp)
3236{
3237 static const struct ephy_info e_info_8168ep_2[] = {
3238 { 0x00, 0xffff, 0x10a3 },
3239 { 0x19, 0xffff, 0xfc00 },
3240 { 0x1e, 0xffff, 0x20ea }
3241 };
3242
3243
3244 rtl_hw_aspm_clkreq_enable(tp, false);
3245 rtl_ephy_init(tp, e_info_8168ep_2);
3246
3247 rtl_hw_start_8168ep(tp);
3248
3249 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
3250 RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
3251
3252 rtl_hw_aspm_clkreq_enable(tp, true);
3253}
3254
3255static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
3256{
3257 static const struct ephy_info e_info_8168ep_3[] = {
3258 { 0x00, 0x0000, 0x0080 },
3259 { 0x0d, 0x0100, 0x0200 },
3260 { 0x19, 0x8021, 0x0000 },
3261 { 0x1e, 0x0000, 0x2000 },
3262 };
3263
3264
3265 rtl_hw_aspm_clkreq_enable(tp, false);
3266 rtl_ephy_init(tp, e_info_8168ep_3);
3267
3268 rtl_hw_start_8168ep(tp);
3269
3270 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
3271 RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
3272
3273 r8168_mac_ocp_modify(tp, 0xd3e2, 0x0fff, 0x0271);
3274 r8168_mac_ocp_modify(tp, 0xd3e4, 0x00ff, 0x0000);
3275 r8168_mac_ocp_modify(tp, 0xe860, 0x0000, 0x0080);
3276
3277 rtl_hw_aspm_clkreq_enable(tp, true);
3278}
3279
3280static void rtl_hw_start_8117(struct rtl8169_private *tp)
3281{
3282 static const struct ephy_info e_info_8117[] = {
3283 { 0x19, 0x0040, 0x1100 },
3284 { 0x59, 0x0040, 0x1100 },
3285 };
3286 int rg_saw_cnt;
3287
3288 rtl8168ep_stop_cmac(tp);
3289
3290
3291 rtl_hw_aspm_clkreq_enable(tp, false);
3292 rtl_ephy_init(tp, e_info_8117);
3293
3294 rtl_set_fifo_size(tp, 0x08, 0x10, 0x02, 0x06);
3295 rtl8168g_set_pause_thresholds(tp, 0x2f, 0x5f);
3296
3297 rtl_set_def_aspm_entry_latency(tp);
3298
3299 rtl_reset_packet_filter(tp);
3300
3301 rtl_eri_set_bits(tp, 0xd4, 0x1f90);
3302
3303 rtl_eri_write(tp, 0x5f0, ERIAR_MASK_0011, 0x4f87);
3304
3305 RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~RXDV_GATED_EN);
3306
3307 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000);
3308 rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000);
3309
3310 rtl8168_config_eee_mac(tp);
3311
3312 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
3313 RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
3314
3315 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~TX_10M_PS_EN);
3316
3317 rtl_eri_clear_bits(tp, 0x1b0, BIT(12));
3318
3319 rtl_pcie_state_l2l3_disable(tp);
3320
3321 rg_saw_cnt = phy_read_paged(tp->phydev, 0x0c42, 0x13) & 0x3fff;
3322 if (rg_saw_cnt > 0) {
3323 u16 sw_cnt_1ms_ini;
3324
3325 sw_cnt_1ms_ini = (16000000 / rg_saw_cnt) & 0x0fff;
3326 r8168_mac_ocp_modify(tp, 0xd412, 0x0fff, sw_cnt_1ms_ini);
3327 }
3328
3329 r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0070);
3330 r8168_mac_ocp_write(tp, 0xea80, 0x0003);
3331 r8168_mac_ocp_modify(tp, 0xe052, 0x0000, 0x0009);
3332 r8168_mac_ocp_modify(tp, 0xd420, 0x0fff, 0x047f);
3333
3334 r8168_mac_ocp_write(tp, 0xe63e, 0x0001);
3335 r8168_mac_ocp_write(tp, 0xe63e, 0x0000);
3336 r8168_mac_ocp_write(tp, 0xc094, 0x0000);
3337 r8168_mac_ocp_write(tp, 0xc09e, 0x0000);
3338
3339
3340 r8169_apply_firmware(tp);
3341
3342 rtl_hw_aspm_clkreq_enable(tp, true);
3343}
3344
3345static void rtl_hw_start_8102e_1(struct rtl8169_private *tp)
3346{
3347 static const struct ephy_info e_info_8102e_1[] = {
3348 { 0x01, 0, 0x6e65 },
3349 { 0x02, 0, 0x091f },
3350 { 0x03, 0, 0xc2f9 },
3351 { 0x06, 0, 0xafb5 },
3352 { 0x07, 0, 0x0e00 },
3353 { 0x19, 0, 0xec80 },
3354 { 0x01, 0, 0x2e65 },
3355 { 0x01, 0, 0x6e65 }
3356 };
3357 u8 cfg1;
3358
3359 rtl_set_def_aspm_entry_latency(tp);
3360
3361 RTL_W8(tp, DBG_REG, FIX_NAK_1);
3362
3363 RTL_W8(tp, Config1,
3364 LEDS1 | LEDS0 | Speed_down | MEMMAP | IOMAP | VPD | PMEnable);
3365 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
3366
3367 cfg1 = RTL_R8(tp, Config1);
3368 if ((cfg1 & LEDS0) && (cfg1 & LEDS1))
3369 RTL_W8(tp, Config1, cfg1 & ~LEDS0);
3370
3371 rtl_ephy_init(tp, e_info_8102e_1);
3372}
3373
3374static void rtl_hw_start_8102e_2(struct rtl8169_private *tp)
3375{
3376 rtl_set_def_aspm_entry_latency(tp);
3377
3378 RTL_W8(tp, Config1, MEMMAP | IOMAP | VPD | PMEnable);
3379 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
3380}
3381
3382static void rtl_hw_start_8102e_3(struct rtl8169_private *tp)
3383{
3384 rtl_hw_start_8102e_2(tp);
3385
3386 rtl_ephy_write(tp, 0x03, 0xc2f9);
3387}
3388
3389static void rtl_hw_start_8401(struct rtl8169_private *tp)
3390{
3391 static const struct ephy_info e_info_8401[] = {
3392 { 0x01, 0xffff, 0x6fe5 },
3393 { 0x03, 0xffff, 0x0599 },
3394 { 0x06, 0xffff, 0xaf25 },
3395 { 0x07, 0xffff, 0x8e68 },
3396 };
3397
3398 rtl_ephy_init(tp, e_info_8401);
3399 RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
3400}
3401
3402static void rtl_hw_start_8105e_1(struct rtl8169_private *tp)
3403{
3404 static const struct ephy_info e_info_8105e_1[] = {
3405 { 0x07, 0, 0x4000 },
3406 { 0x19, 0, 0x0200 },
3407 { 0x19, 0, 0x0020 },
3408 { 0x1e, 0, 0x2000 },
3409 { 0x03, 0, 0x0001 },
3410 { 0x19, 0, 0x0100 },
3411 { 0x19, 0, 0x0004 },
3412 { 0x0a, 0, 0x0020 }
3413 };
3414
3415
3416 RTL_W32(tp, FuncEvent, RTL_R32(tp, FuncEvent) | 0x002800);
3417
3418
3419 RTL_W32(tp, FuncEvent, RTL_R32(tp, FuncEvent) & ~0x010000);
3420
3421 RTL_W8(tp, MCU, RTL_R8(tp, MCU) | EN_NDP | EN_OOB_RESET);
3422 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) | PFM_EN);
3423
3424 rtl_ephy_init(tp, e_info_8105e_1);
3425
3426 rtl_pcie_state_l2l3_disable(tp);
3427}
3428
3429static void rtl_hw_start_8105e_2(struct rtl8169_private *tp)
3430{
3431 rtl_hw_start_8105e_1(tp);
3432 rtl_ephy_write(tp, 0x1e, rtl_ephy_read(tp, 0x1e) | 0x8000);
3433}
3434
3435static void rtl_hw_start_8402(struct rtl8169_private *tp)
3436{
3437 static const struct ephy_info e_info_8402[] = {
3438 { 0x19, 0xffff, 0xff64 },
3439 { 0x1e, 0, 0x4000 }
3440 };
3441
3442 rtl_set_def_aspm_entry_latency(tp);
3443
3444
3445 RTL_W32(tp, FuncEvent, RTL_R32(tp, FuncEvent) | 0x002800);
3446
3447 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
3448
3449 rtl_ephy_init(tp, e_info_8402);
3450
3451 rtl_set_fifo_size(tp, 0x00, 0x00, 0x02, 0x06);
3452 rtl_reset_packet_filter(tp);
3453 rtl_eri_write(tp, 0xc0, ERIAR_MASK_0011, 0x0000);
3454 rtl_eri_write(tp, 0xb8, ERIAR_MASK_0011, 0x0000);
3455 rtl_w0w1_eri(tp, 0x0d4, 0x0e00, 0xff00);
3456
3457
3458 rtl_eri_write(tp, 0x1b0, ERIAR_MASK_0011, 0x0000);
3459
3460 rtl_pcie_state_l2l3_disable(tp);
3461}
3462
3463static void rtl_hw_start_8106(struct rtl8169_private *tp)
3464{
3465 rtl_hw_aspm_clkreq_enable(tp, false);
3466
3467
3468 RTL_W32(tp, FuncEvent, RTL_R32(tp, FuncEvent) | 0x002800);
3469
3470 RTL_W32(tp, MISC, (RTL_R32(tp, MISC) | DISABLE_LAN_EN) & ~EARLY_TALLY_EN);
3471 RTL_W8(tp, MCU, RTL_R8(tp, MCU) | EN_NDP | EN_OOB_RESET);
3472 RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
3473
3474 rtl_eri_write(tp, 0x1d0, ERIAR_MASK_0011, 0x0000);
3475
3476
3477 rtl_eri_write(tp, 0x1b0, ERIAR_MASK_0011, 0x0000);
3478
3479 rtl_pcie_state_l2l3_disable(tp);
3480 rtl_hw_aspm_clkreq_enable(tp, true);
3481}
3482
3483DECLARE_RTL_COND(rtl_mac_ocp_e00e_cond)
3484{
3485 return r8168_mac_ocp_read(tp, 0xe00e) & BIT(13);
3486}
3487
3488static void rtl_hw_start_8125_common(struct rtl8169_private *tp)
3489{
3490 rtl_pcie_state_l2l3_disable(tp);
3491
3492 RTL_W16(tp, 0x382, 0x221b);
3493 RTL_W8(tp, 0x4500, 0);
3494 RTL_W16(tp, 0x4800, 0);
3495
3496
3497 r8168_mac_ocp_modify(tp, 0xd40a, 0x0010, 0x0000);
3498
3499 RTL_W8(tp, Config1, RTL_R8(tp, Config1) & ~0x10);
3500
3501 r8168_mac_ocp_write(tp, 0xc140, 0xffff);
3502 r8168_mac_ocp_write(tp, 0xc142, 0xffff);
3503
3504 r8168_mac_ocp_modify(tp, 0xd3e2, 0x0fff, 0x03a9);
3505 r8168_mac_ocp_modify(tp, 0xd3e4, 0x00ff, 0x0000);
3506 r8168_mac_ocp_modify(tp, 0xe860, 0x0000, 0x0080);
3507
3508
3509 r8168_mac_ocp_modify(tp, 0xeb58, 0x0001, 0x0000);
3510
3511 if (tp->mac_version == RTL_GIGA_MAC_VER_63)
3512 r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0200);
3513 else
3514 r8168_mac_ocp_modify(tp, 0xe614, 0x0700, 0x0400);
3515
3516 if (tp->mac_version == RTL_GIGA_MAC_VER_63)
3517 r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0000);
3518 else
3519 r8168_mac_ocp_modify(tp, 0xe63e, 0x0c30, 0x0020);
3520
3521 r8168_mac_ocp_modify(tp, 0xc0b4, 0x0000, 0x000c);
3522 r8168_mac_ocp_modify(tp, 0xeb6a, 0x00ff, 0x0033);
3523 r8168_mac_ocp_modify(tp, 0xeb50, 0x03e0, 0x0040);
3524 r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0030);
3525 r8168_mac_ocp_modify(tp, 0xe040, 0x1000, 0x0000);
3526 r8168_mac_ocp_modify(tp, 0xea1c, 0x0003, 0x0001);
3527 r8168_mac_ocp_modify(tp, 0xe0c0, 0x4f0f, 0x4403);
3528 r8168_mac_ocp_modify(tp, 0xe052, 0x0080, 0x0068);
3529 r8168_mac_ocp_modify(tp, 0xc0ac, 0x0080, 0x1f00);
3530 r8168_mac_ocp_modify(tp, 0xd430, 0x0fff, 0x047f);
3531
3532 r8168_mac_ocp_modify(tp, 0xea1c, 0x0004, 0x0000);
3533 r8168_mac_ocp_modify(tp, 0xeb54, 0x0000, 0x0001);
3534 udelay(1);
3535 r8168_mac_ocp_modify(tp, 0xeb54, 0x0001, 0x0000);
3536 RTL_W16(tp, 0x1880, RTL_R16(tp, 0x1880) & ~0x0030);
3537
3538 r8168_mac_ocp_write(tp, 0xe098, 0xc302);
3539
3540 rtl_loop_wait_low(tp, &rtl_mac_ocp_e00e_cond, 1000, 10);
3541
3542 if (tp->mac_version == RTL_GIGA_MAC_VER_63)
3543 rtl8125b_config_eee_mac(tp);
3544 else
3545 rtl8125a_config_eee_mac(tp);
3546
3547 RTL_W32(tp, MISC, RTL_R32(tp, MISC) & ~RXDV_GATED_EN);
3548 udelay(10);
3549}
3550
3551static void rtl_hw_start_8125a_1(struct rtl8169_private *tp)
3552{
3553 static const struct ephy_info e_info_8125a_1[] = {
3554 { 0x01, 0xffff, 0xa812 },
3555 { 0x09, 0xffff, 0x520c },
3556 { 0x04, 0xffff, 0xd000 },
3557 { 0x0d, 0xffff, 0xf702 },
3558 { 0x0a, 0xffff, 0x8653 },
3559 { 0x06, 0xffff, 0x001e },
3560 { 0x08, 0xffff, 0x3595 },
3561 { 0x20, 0xffff, 0x9455 },
3562 { 0x21, 0xffff, 0x99ff },
3563 { 0x02, 0xffff, 0x6046 },
3564 { 0x29, 0xffff, 0xfe00 },
3565 { 0x23, 0xffff, 0xab62 },
3566
3567 { 0x41, 0xffff, 0xa80c },
3568 { 0x49, 0xffff, 0x520c },
3569 { 0x44, 0xffff, 0xd000 },
3570 { 0x4d, 0xffff, 0xf702 },
3571 { 0x4a, 0xffff, 0x8653 },
3572 { 0x46, 0xffff, 0x001e },
3573 { 0x48, 0xffff, 0x3595 },
3574 { 0x60, 0xffff, 0x9455 },
3575 { 0x61, 0xffff, 0x99ff },
3576 { 0x42, 0xffff, 0x6046 },
3577 { 0x69, 0xffff, 0xfe00 },
3578 { 0x63, 0xffff, 0xab62 },
3579 };
3580
3581 rtl_set_def_aspm_entry_latency(tp);
3582
3583
3584 rtl_hw_aspm_clkreq_enable(tp, false);
3585 rtl_ephy_init(tp, e_info_8125a_1);
3586
3587 rtl_hw_start_8125_common(tp);
3588 rtl_hw_aspm_clkreq_enable(tp, true);
3589}
3590
3591static void rtl_hw_start_8125a_2(struct rtl8169_private *tp)
3592{
3593 static const struct ephy_info e_info_8125a_2[] = {
3594 { 0x04, 0xffff, 0xd000 },
3595 { 0x0a, 0xffff, 0x8653 },
3596 { 0x23, 0xffff, 0xab66 },
3597 { 0x20, 0xffff, 0x9455 },
3598 { 0x21, 0xffff, 0x99ff },
3599 { 0x29, 0xffff, 0xfe04 },
3600
3601 { 0x44, 0xffff, 0xd000 },
3602 { 0x4a, 0xffff, 0x8653 },
3603 { 0x63, 0xffff, 0xab66 },
3604 { 0x60, 0xffff, 0x9455 },
3605 { 0x61, 0xffff, 0x99ff },
3606 { 0x69, 0xffff, 0xfe04 },
3607 };
3608
3609 rtl_set_def_aspm_entry_latency(tp);
3610
3611
3612 rtl_hw_aspm_clkreq_enable(tp, false);
3613 rtl_ephy_init(tp, e_info_8125a_2);
3614
3615 rtl_hw_start_8125_common(tp);
3616 rtl_hw_aspm_clkreq_enable(tp, true);
3617}
3618
3619static void rtl_hw_start_8125b(struct rtl8169_private *tp)
3620{
3621 static const struct ephy_info e_info_8125b[] = {
3622 { 0x0b, 0xffff, 0xa908 },
3623 { 0x1e, 0xffff, 0x20eb },
3624 { 0x4b, 0xffff, 0xa908 },
3625 { 0x5e, 0xffff, 0x20eb },
3626 { 0x22, 0x0030, 0x0020 },
3627 { 0x62, 0x0030, 0x0020 },
3628 };
3629
3630 rtl_set_def_aspm_entry_latency(tp);
3631 rtl_hw_aspm_clkreq_enable(tp, false);
3632
3633 rtl_ephy_init(tp, e_info_8125b);
3634 rtl_hw_start_8125_common(tp);
3635
3636 rtl_hw_aspm_clkreq_enable(tp, true);
3637}
3638
3639static void rtl_hw_config(struct rtl8169_private *tp)
3640{
3641 static const rtl_generic_fct hw_configs[] = {
3642 [RTL_GIGA_MAC_VER_07] = rtl_hw_start_8102e_1,
3643 [RTL_GIGA_MAC_VER_08] = rtl_hw_start_8102e_3,
3644 [RTL_GIGA_MAC_VER_09] = rtl_hw_start_8102e_2,
3645 [RTL_GIGA_MAC_VER_10] = NULL,
3646 [RTL_GIGA_MAC_VER_11] = rtl_hw_start_8168b,
3647 [RTL_GIGA_MAC_VER_12] = rtl_hw_start_8168b,
3648 [RTL_GIGA_MAC_VER_13] = NULL,
3649 [RTL_GIGA_MAC_VER_14] = rtl_hw_start_8401,
3650 [RTL_GIGA_MAC_VER_16] = NULL,
3651 [RTL_GIGA_MAC_VER_17] = rtl_hw_start_8168b,
3652 [RTL_GIGA_MAC_VER_18] = rtl_hw_start_8168cp_1,
3653 [RTL_GIGA_MAC_VER_19] = rtl_hw_start_8168c_1,
3654 [RTL_GIGA_MAC_VER_20] = rtl_hw_start_8168c_2,
3655 [RTL_GIGA_MAC_VER_21] = rtl_hw_start_8168c_3,
3656 [RTL_GIGA_MAC_VER_22] = rtl_hw_start_8168c_4,
3657 [RTL_GIGA_MAC_VER_23] = rtl_hw_start_8168cp_2,
3658 [RTL_GIGA_MAC_VER_24] = rtl_hw_start_8168cp_3,
3659 [RTL_GIGA_MAC_VER_25] = rtl_hw_start_8168d,
3660 [RTL_GIGA_MAC_VER_26] = rtl_hw_start_8168d,
3661 [RTL_GIGA_MAC_VER_27] = rtl_hw_start_8168d,
3662 [RTL_GIGA_MAC_VER_28] = rtl_hw_start_8168d_4,
3663 [RTL_GIGA_MAC_VER_29] = rtl_hw_start_8105e_1,
3664 [RTL_GIGA_MAC_VER_30] = rtl_hw_start_8105e_2,
3665 [RTL_GIGA_MAC_VER_31] = rtl_hw_start_8168d,
3666 [RTL_GIGA_MAC_VER_32] = rtl_hw_start_8168e_1,
3667 [RTL_GIGA_MAC_VER_33] = rtl_hw_start_8168e_1,
3668 [RTL_GIGA_MAC_VER_34] = rtl_hw_start_8168e_2,
3669 [RTL_GIGA_MAC_VER_35] = rtl_hw_start_8168f_1,
3670 [RTL_GIGA_MAC_VER_36] = rtl_hw_start_8168f_1,
3671 [RTL_GIGA_MAC_VER_37] = rtl_hw_start_8402,
3672 [RTL_GIGA_MAC_VER_38] = rtl_hw_start_8411,
3673 [RTL_GIGA_MAC_VER_39] = rtl_hw_start_8106,
3674 [RTL_GIGA_MAC_VER_40] = rtl_hw_start_8168g_1,
3675 [RTL_GIGA_MAC_VER_41] = rtl_hw_start_8168g_1,
3676 [RTL_GIGA_MAC_VER_42] = rtl_hw_start_8168g_2,
3677 [RTL_GIGA_MAC_VER_43] = rtl_hw_start_8168g_2,
3678 [RTL_GIGA_MAC_VER_44] = rtl_hw_start_8411_2,
3679 [RTL_GIGA_MAC_VER_45] = rtl_hw_start_8168h_1,
3680 [RTL_GIGA_MAC_VER_46] = rtl_hw_start_8168h_1,
3681 [RTL_GIGA_MAC_VER_47] = rtl_hw_start_8168h_1,
3682 [RTL_GIGA_MAC_VER_48] = rtl_hw_start_8168h_1,
3683 [RTL_GIGA_MAC_VER_49] = rtl_hw_start_8168ep_1,
3684 [RTL_GIGA_MAC_VER_50] = rtl_hw_start_8168ep_2,
3685 [RTL_GIGA_MAC_VER_51] = rtl_hw_start_8168ep_3,
3686 [RTL_GIGA_MAC_VER_52] = rtl_hw_start_8117,
3687 [RTL_GIGA_MAC_VER_53] = rtl_hw_start_8117,
3688 [RTL_GIGA_MAC_VER_60] = rtl_hw_start_8125a_1,
3689 [RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2,
3690 [RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b,
3691 };
3692
3693 if (hw_configs[tp->mac_version])
3694 hw_configs[tp->mac_version](tp);
3695}
3696
3697static void rtl_hw_start_8125(struct rtl8169_private *tp)
3698{
3699 int i;
3700
3701
3702 for (i = 0xa00; i < 0xb00; i += 4)
3703 RTL_W32(tp, i, 0);
3704
3705 rtl_hw_config(tp);
3706}
3707
3708static void rtl_hw_start_8168(struct rtl8169_private *tp)
3709{
3710 if (rtl_is_8168evl_up(tp))
3711 RTL_W8(tp, MaxTxPacketSize, EarlySize);
3712 else
3713 RTL_W8(tp, MaxTxPacketSize, TxPacketMax);
3714
3715 rtl_hw_config(tp);
3716
3717
3718 RTL_W16(tp, IntrMitigate, 0x0000);
3719}
3720
3721static void rtl_hw_start_8169(struct rtl8169_private *tp)
3722{
3723 RTL_W8(tp, EarlyTxThres, NoEarlyTx);
3724
3725 tp->cp_cmd |= PCIMulRW;
3726
3727 if (tp->mac_version == RTL_GIGA_MAC_VER_02 ||
3728 tp->mac_version == RTL_GIGA_MAC_VER_03)
3729 tp->cp_cmd |= EnAnaPLL;
3730
3731 RTL_W16(tp, CPlusCmd, tp->cp_cmd);
3732
3733 rtl8169_set_magic_reg(tp);
3734
3735
3736 RTL_W16(tp, IntrMitigate, 0x0000);
3737}
3738
3739static void rtl_hw_start(struct rtl8169_private *tp)
3740{
3741 rtl_unlock_config_regs(tp);
3742
3743 RTL_W16(tp, CPlusCmd, tp->cp_cmd);
3744
3745 if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
3746 rtl_hw_start_8169(tp);
3747 else if (rtl_is_8125(tp))
3748 rtl_hw_start_8125(tp);
3749 else
3750 rtl_hw_start_8168(tp);
3751
3752 rtl_set_rx_max_size(tp);
3753 rtl_set_rx_tx_desc_registers(tp);
3754 rtl_lock_config_regs(tp);
3755
3756 rtl_jumbo_config(tp);
3757
3758
3759 rtl_pci_commit(tp);
3760
3761 RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
3762 rtl_init_rxcfg(tp);
3763 rtl_set_tx_config_registers(tp);
3764 rtl_set_rx_config_features(tp, tp->dev->features);
3765 rtl_set_rx_mode(tp->dev);
3766 rtl_irq_enable(tp);
3767}
3768
3769static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
3770{
3771 struct rtl8169_private *tp = netdev_priv(dev);
3772
3773 dev->mtu = new_mtu;
3774 netdev_update_features(dev);
3775 rtl_jumbo_config(tp);
3776
3777 switch (tp->mac_version) {
3778 case RTL_GIGA_MAC_VER_61:
3779 case RTL_GIGA_MAC_VER_63:
3780 rtl8125_set_eee_txidle_timer(tp);
3781 break;
3782 default:
3783 break;
3784 }
3785
3786 return 0;
3787}
3788
3789static void rtl8169_mark_to_asic(struct RxDesc *desc)
3790{
3791 u32 eor = le32_to_cpu(desc->opts1) & RingEnd;
3792
3793 desc->opts2 = 0;
3794
3795 dma_wmb();
3796 WRITE_ONCE(desc->opts1, cpu_to_le32(DescOwn | eor | R8169_RX_BUF_SIZE));
3797}
3798
3799static struct page *rtl8169_alloc_rx_data(struct rtl8169_private *tp,
3800 struct RxDesc *desc)
3801{
3802 struct device *d = tp_to_dev(tp);
3803 int node = dev_to_node(d);
3804 dma_addr_t mapping;
3805 struct page *data;
3806
3807 data = alloc_pages_node(node, GFP_KERNEL, get_order(R8169_RX_BUF_SIZE));
3808 if (!data)
3809 return NULL;
3810
3811 mapping = dma_map_page(d, data, 0, R8169_RX_BUF_SIZE, DMA_FROM_DEVICE);
3812 if (unlikely(dma_mapping_error(d, mapping))) {
3813 netdev_err(tp->dev, "Failed to map RX DMA!\n");
3814 __free_pages(data, get_order(R8169_RX_BUF_SIZE));
3815 return NULL;
3816 }
3817
3818 desc->addr = cpu_to_le64(mapping);
3819 rtl8169_mark_to_asic(desc);
3820
3821 return data;
3822}
3823
3824static void rtl8169_rx_clear(struct rtl8169_private *tp)
3825{
3826 int i;
3827
3828 for (i = 0; i < NUM_RX_DESC && tp->Rx_databuff[i]; i++) {
3829 dma_unmap_page(tp_to_dev(tp),
3830 le64_to_cpu(tp->RxDescArray[i].addr),
3831 R8169_RX_BUF_SIZE, DMA_FROM_DEVICE);
3832 __free_pages(tp->Rx_databuff[i], get_order(R8169_RX_BUF_SIZE));
3833 tp->Rx_databuff[i] = NULL;
3834 tp->RxDescArray[i].addr = 0;
3835 tp->RxDescArray[i].opts1 = 0;
3836 }
3837}
3838
3839static int rtl8169_rx_fill(struct rtl8169_private *tp)
3840{
3841 int i;
3842
3843 for (i = 0; i < NUM_RX_DESC; i++) {
3844 struct page *data;
3845
3846 data = rtl8169_alloc_rx_data(tp, tp->RxDescArray + i);
3847 if (!data) {
3848 rtl8169_rx_clear(tp);
3849 return -ENOMEM;
3850 }
3851 tp->Rx_databuff[i] = data;
3852 }
3853
3854
3855 tp->RxDescArray[NUM_RX_DESC - 1].opts1 |= cpu_to_le32(RingEnd);
3856
3857 return 0;
3858}
3859
3860static int rtl8169_init_ring(struct rtl8169_private *tp)
3861{
3862 rtl8169_init_ring_indexes(tp);
3863
3864 memset(tp->tx_skb, 0, sizeof(tp->tx_skb));
3865 memset(tp->Rx_databuff, 0, sizeof(tp->Rx_databuff));
3866
3867 return rtl8169_rx_fill(tp);
3868}
3869
3870static void rtl8169_unmap_tx_skb(struct rtl8169_private *tp, unsigned int entry)
3871{
3872 struct ring_info *tx_skb = tp->tx_skb + entry;
3873 struct TxDesc *desc = tp->TxDescArray + entry;
3874
3875 dma_unmap_single(tp_to_dev(tp), le64_to_cpu(desc->addr), tx_skb->len,
3876 DMA_TO_DEVICE);
3877 memset(desc, 0, sizeof(*desc));
3878 memset(tx_skb, 0, sizeof(*tx_skb));
3879}
3880
3881static void rtl8169_tx_clear_range(struct rtl8169_private *tp, u32 start,
3882 unsigned int n)
3883{
3884 unsigned int i;
3885
3886 for (i = 0; i < n; i++) {
3887 unsigned int entry = (start + i) % NUM_TX_DESC;
3888 struct ring_info *tx_skb = tp->tx_skb + entry;
3889 unsigned int len = tx_skb->len;
3890
3891 if (len) {
3892 struct sk_buff *skb = tx_skb->skb;
3893
3894 rtl8169_unmap_tx_skb(tp, entry);
3895 if (skb)
3896 dev_consume_skb_any(skb);
3897 }
3898 }
3899}
3900
3901static void rtl8169_tx_clear(struct rtl8169_private *tp)
3902{
3903 rtl8169_tx_clear_range(tp, tp->dirty_tx, NUM_TX_DESC);
3904 netdev_reset_queue(tp->dev);
3905}
3906
3907static void rtl8169_cleanup(struct rtl8169_private *tp, bool going_down)
3908{
3909 napi_disable(&tp->napi);
3910
3911
3912 synchronize_net();
3913
3914
3915 rtl8169_irq_mask_and_ack(tp);
3916
3917 rtl_rx_close(tp);
3918
3919 if (going_down && tp->dev->wol_enabled)
3920 goto no_reset;
3921
3922 switch (tp->mac_version) {
3923 case RTL_GIGA_MAC_VER_27:
3924 case RTL_GIGA_MAC_VER_28:
3925 case RTL_GIGA_MAC_VER_31:
3926 rtl_loop_wait_low(tp, &rtl_npq_cond, 20, 2000);
3927 break;
3928 case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38:
3929 RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
3930 rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666);
3931 break;
3932 case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_63:
3933 rtl_enable_rxdvgate(tp);
3934 fsleep(2000);
3935 break;
3936 default:
3937 RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq);
3938 fsleep(100);
3939 break;
3940 }
3941
3942 rtl_hw_reset(tp);
3943no_reset:
3944 rtl8169_tx_clear(tp);
3945 rtl8169_init_ring_indexes(tp);
3946}
3947
3948static void rtl_reset_work(struct rtl8169_private *tp)
3949{
3950 int i;
3951
3952 netif_stop_queue(tp->dev);
3953
3954 rtl8169_cleanup(tp, false);
3955
3956 for (i = 0; i < NUM_RX_DESC; i++)
3957 rtl8169_mark_to_asic(tp->RxDescArray + i);
3958
3959 napi_enable(&tp->napi);
3960 rtl_hw_start(tp);
3961}
3962
3963static void rtl8169_tx_timeout(struct net_device *dev, unsigned int txqueue)
3964{
3965 struct rtl8169_private *tp = netdev_priv(dev);
3966
3967 rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING);
3968}
3969
3970static int rtl8169_tx_map(struct rtl8169_private *tp, const u32 *opts, u32 len,
3971 void *addr, unsigned int entry, bool desc_own)
3972{
3973 struct TxDesc *txd = tp->TxDescArray + entry;
3974 struct device *d = tp_to_dev(tp);
3975 dma_addr_t mapping;
3976 u32 opts1;
3977 int ret;
3978
3979 mapping = dma_map_single(d, addr, len, DMA_TO_DEVICE);
3980 ret = dma_mapping_error(d, mapping);
3981 if (unlikely(ret)) {
3982 if (net_ratelimit())
3983 netdev_err(tp->dev, "Failed to map TX data!\n");
3984 return ret;
3985 }
3986
3987 txd->addr = cpu_to_le64(mapping);
3988 txd->opts2 = cpu_to_le32(opts[1]);
3989
3990 opts1 = opts[0] | len;
3991 if (entry == NUM_TX_DESC - 1)
3992 opts1 |= RingEnd;
3993 if (desc_own)
3994 opts1 |= DescOwn;
3995 txd->opts1 = cpu_to_le32(opts1);
3996
3997 tp->tx_skb[entry].len = len;
3998
3999 return 0;
4000}
4001
4002static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
4003 const u32 *opts, unsigned int entry)
4004{
4005 struct skb_shared_info *info = skb_shinfo(skb);
4006 unsigned int cur_frag;
4007
4008 for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
4009 const skb_frag_t *frag = info->frags + cur_frag;
4010 void *addr = skb_frag_address(frag);
4011 u32 len = skb_frag_size(frag);
4012
4013 entry = (entry + 1) % NUM_TX_DESC;
4014
4015 if (unlikely(rtl8169_tx_map(tp, opts, len, addr, entry, true)))
4016 goto err_out;
4017 }
4018
4019 return 0;
4020
4021err_out:
4022 rtl8169_tx_clear_range(tp, tp->cur_tx + 1, cur_frag);
4023 return -EIO;
4024}
4025
4026static bool rtl_skb_is_udp(struct sk_buff *skb)
4027{
4028 int no = skb_network_offset(skb);
4029 struct ipv6hdr *i6h, _i6h;
4030 struct iphdr *ih, _ih;
4031
4032 switch (vlan_get_protocol(skb)) {
4033 case htons(ETH_P_IP):
4034 ih = skb_header_pointer(skb, no, sizeof(_ih), &_ih);
4035 return ih && ih->protocol == IPPROTO_UDP;
4036 case htons(ETH_P_IPV6):
4037 i6h = skb_header_pointer(skb, no, sizeof(_i6h), &_i6h);
4038 return i6h && i6h->nexthdr == IPPROTO_UDP;
4039 default:
4040 return false;
4041 }
4042}
4043
4044#define RTL_MIN_PATCH_LEN 47
4045
4046
4047static unsigned int rtl8125_quirk_udp_padto(struct rtl8169_private *tp,
4048 struct sk_buff *skb)
4049{
4050 unsigned int padto = 0, len = skb->len;
4051
4052 if (rtl_is_8125(tp) && len < 128 + RTL_MIN_PATCH_LEN &&
4053 rtl_skb_is_udp(skb) && skb_transport_header_was_set(skb)) {
4054 unsigned int trans_data_len = skb_tail_pointer(skb) -
4055 skb_transport_header(skb);
4056
4057 if (trans_data_len >= offsetof(struct udphdr, len) &&
4058 trans_data_len < RTL_MIN_PATCH_LEN) {
4059 u16 dest = ntohs(udp_hdr(skb)->dest);
4060
4061
4062 if (dest == 319 || dest == 320)
4063 padto = len + RTL_MIN_PATCH_LEN - trans_data_len;
4064 }
4065
4066 if (trans_data_len < sizeof(struct udphdr))
4067 padto = max_t(unsigned int, padto,
4068 len + sizeof(struct udphdr) - trans_data_len);
4069 }
4070
4071 return padto;
4072}
4073
4074static unsigned int rtl_quirk_packet_padto(struct rtl8169_private *tp,
4075 struct sk_buff *skb)
4076{
4077 unsigned int padto;
4078
4079 padto = rtl8125_quirk_udp_padto(tp, skb);
4080
4081 switch (tp->mac_version) {
4082 case RTL_GIGA_MAC_VER_34:
4083 case RTL_GIGA_MAC_VER_60:
4084 case RTL_GIGA_MAC_VER_61:
4085 case RTL_GIGA_MAC_VER_63:
4086 padto = max_t(unsigned int, padto, ETH_ZLEN);
4087 default:
4088 break;
4089 }
4090
4091 return padto;
4092}
4093
4094static void rtl8169_tso_csum_v1(struct sk_buff *skb, u32 *opts)
4095{
4096 u32 mss = skb_shinfo(skb)->gso_size;
4097
4098 if (mss) {
4099 opts[0] |= TD_LSO;
4100 opts[0] |= mss << TD0_MSS_SHIFT;
4101 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
4102 const struct iphdr *ip = ip_hdr(skb);
4103
4104 if (ip->protocol == IPPROTO_TCP)
4105 opts[0] |= TD0_IP_CS | TD0_TCP_CS;
4106 else if (ip->protocol == IPPROTO_UDP)
4107 opts[0] |= TD0_IP_CS | TD0_UDP_CS;
4108 else
4109 WARN_ON_ONCE(1);
4110 }
4111}
4112
4113static bool rtl8169_tso_csum_v2(struct rtl8169_private *tp,
4114 struct sk_buff *skb, u32 *opts)
4115{
4116 u32 transport_offset = (u32)skb_transport_offset(skb);
4117 struct skb_shared_info *shinfo = skb_shinfo(skb);
4118 u32 mss = shinfo->gso_size;
4119
4120 if (mss) {
4121 if (shinfo->gso_type & SKB_GSO_TCPV4) {
4122 opts[0] |= TD1_GTSENV4;
4123 } else if (shinfo->gso_type & SKB_GSO_TCPV6) {
4124 if (skb_cow_head(skb, 0))
4125 return false;
4126
4127 tcp_v6_gso_csum_prep(skb);
4128 opts[0] |= TD1_GTSENV6;
4129 } else {
4130 WARN_ON_ONCE(1);
4131 }
4132
4133 opts[0] |= transport_offset << GTTCPHO_SHIFT;
4134 opts[1] |= mss << TD1_MSS_SHIFT;
4135 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
4136 u8 ip_protocol;
4137
4138 switch (vlan_get_protocol(skb)) {
4139 case htons(ETH_P_IP):
4140 opts[1] |= TD1_IPv4_CS;
4141 ip_protocol = ip_hdr(skb)->protocol;
4142 break;
4143
4144 case htons(ETH_P_IPV6):
4145 opts[1] |= TD1_IPv6_CS;
4146 ip_protocol = ipv6_hdr(skb)->nexthdr;
4147 break;
4148
4149 default:
4150 ip_protocol = IPPROTO_RAW;
4151 break;
4152 }
4153
4154 if (ip_protocol == IPPROTO_TCP)
4155 opts[1] |= TD1_TCP_CS;
4156 else if (ip_protocol == IPPROTO_UDP)
4157 opts[1] |= TD1_UDP_CS;
4158 else
4159 WARN_ON_ONCE(1);
4160
4161 opts[1] |= transport_offset << TCPHO_SHIFT;
4162 } else {
4163 unsigned int padto = rtl_quirk_packet_padto(tp, skb);
4164
4165
4166 return !__skb_put_padto(skb, padto, false);
4167 }
4168
4169 return true;
4170}
4171
4172static bool rtl_tx_slots_avail(struct rtl8169_private *tp)
4173{
4174 unsigned int slots_avail = READ_ONCE(tp->dirty_tx) + NUM_TX_DESC
4175 - READ_ONCE(tp->cur_tx);
4176
4177
4178 return slots_avail > MAX_SKB_FRAGS;
4179}
4180
4181
4182static bool rtl_chip_supports_csum_v2(struct rtl8169_private *tp)
4183{
4184 switch (tp->mac_version) {
4185 case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06:
4186 case RTL_GIGA_MAC_VER_10 ... RTL_GIGA_MAC_VER_17:
4187 return false;
4188 default:
4189 return true;
4190 }
4191}
4192
4193static void rtl8169_doorbell(struct rtl8169_private *tp)
4194{
4195 if (rtl_is_8125(tp))
4196 RTL_W16(tp, TxPoll_8125, BIT(0));
4197 else
4198 RTL_W8(tp, TxPoll, NPQ);
4199}
4200
4201static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
4202 struct net_device *dev)
4203{
4204 unsigned int frags = skb_shinfo(skb)->nr_frags;
4205 struct rtl8169_private *tp = netdev_priv(dev);
4206 unsigned int entry = tp->cur_tx % NUM_TX_DESC;
4207 struct TxDesc *txd_first, *txd_last;
4208 bool stop_queue, door_bell;
4209 u32 opts[2];
4210
4211 if (unlikely(!rtl_tx_slots_avail(tp))) {
4212 if (net_ratelimit())
4213 netdev_err(dev, "BUG! Tx Ring full when queue awake!\n");
4214 goto err_stop_0;
4215 }
4216
4217 opts[1] = rtl8169_tx_vlan_tag(skb);
4218 opts[0] = 0;
4219
4220 if (!rtl_chip_supports_csum_v2(tp))
4221 rtl8169_tso_csum_v1(skb, opts);
4222 else if (!rtl8169_tso_csum_v2(tp, skb, opts))
4223 goto err_dma_0;
4224
4225 if (unlikely(rtl8169_tx_map(tp, opts, skb_headlen(skb), skb->data,
4226 entry, false)))
4227 goto err_dma_0;
4228
4229 txd_first = tp->TxDescArray + entry;
4230
4231 if (frags) {
4232 if (rtl8169_xmit_frags(tp, skb, opts, entry))
4233 goto err_dma_1;
4234 entry = (entry + frags) % NUM_TX_DESC;
4235 }
4236
4237 txd_last = tp->TxDescArray + entry;
4238 txd_last->opts1 |= cpu_to_le32(LastFrag);
4239 tp->tx_skb[entry].skb = skb;
4240
4241 skb_tx_timestamp(skb);
4242
4243
4244 dma_wmb();
4245
4246 door_bell = __netdev_sent_queue(dev, skb->len, netdev_xmit_more());
4247
4248 txd_first->opts1 |= cpu_to_le32(DescOwn | FirstFrag);
4249
4250
4251 smp_wmb();
4252
4253 WRITE_ONCE(tp->cur_tx, tp->cur_tx + frags + 1);
4254
4255 stop_queue = !rtl_tx_slots_avail(tp);
4256 if (unlikely(stop_queue)) {
4257
4258
4259
4260 smp_wmb();
4261 netif_stop_queue(dev);
4262
4263
4264
4265
4266
4267
4268
4269 smp_mb__after_atomic();
4270 if (rtl_tx_slots_avail(tp))
4271 netif_start_queue(dev);
4272 door_bell = true;
4273 }
4274
4275 if (door_bell)
4276 rtl8169_doorbell(tp);
4277
4278 return NETDEV_TX_OK;
4279
4280err_dma_1:
4281 rtl8169_unmap_tx_skb(tp, entry);
4282err_dma_0:
4283 dev_kfree_skb_any(skb);
4284 dev->stats.tx_dropped++;
4285 return NETDEV_TX_OK;
4286
4287err_stop_0:
4288 netif_stop_queue(dev);
4289 dev->stats.tx_dropped++;
4290 return NETDEV_TX_BUSY;
4291}
4292
4293static unsigned int rtl_last_frag_len(struct sk_buff *skb)
4294{
4295 struct skb_shared_info *info = skb_shinfo(skb);
4296 unsigned int nr_frags = info->nr_frags;
4297
4298 if (!nr_frags)
4299 return UINT_MAX;
4300
4301 return skb_frag_size(info->frags + nr_frags - 1);
4302}
4303
4304
4305static netdev_features_t rtl8168evl_fix_tso(struct sk_buff *skb,
4306 netdev_features_t features)
4307{
4308
4309 if (vlan_get_protocol(skb) == htons(ETH_P_IP) &&
4310 ip_hdrlen(skb) > sizeof(struct iphdr))
4311 features &= ~NETIF_F_ALL_TSO;
4312
4313
4314 else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4 &&
4315 tcp_hdrlen(skb) > sizeof(struct tcphdr))
4316 features &= ~NETIF_F_ALL_TSO;
4317
4318 else if (rtl_last_frag_len(skb) <= 6)
4319 features &= ~NETIF_F_ALL_TSO;
4320
4321 return features;
4322}
4323
4324static netdev_features_t rtl8169_features_check(struct sk_buff *skb,
4325 struct net_device *dev,
4326 netdev_features_t features)
4327{
4328 int transport_offset = skb_transport_offset(skb);
4329 struct rtl8169_private *tp = netdev_priv(dev);
4330
4331 if (skb_is_gso(skb)) {
4332 if (tp->mac_version == RTL_GIGA_MAC_VER_34)
4333 features = rtl8168evl_fix_tso(skb, features);
4334
4335 if (transport_offset > GTTCPHO_MAX &&
4336 rtl_chip_supports_csum_v2(tp))
4337 features &= ~NETIF_F_ALL_TSO;
4338 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
4339
4340 if (skb->len < ETH_ZLEN)
4341 features &= ~NETIF_F_CSUM_MASK;
4342
4343 if (rtl_quirk_packet_padto(tp, skb))
4344 features &= ~NETIF_F_CSUM_MASK;
4345
4346 if (transport_offset > TCPHO_MAX &&
4347 rtl_chip_supports_csum_v2(tp))
4348 features &= ~NETIF_F_CSUM_MASK;
4349 }
4350
4351 return vlan_features_check(skb, features);
4352}
4353
4354static void rtl8169_pcierr_interrupt(struct net_device *dev)
4355{
4356 struct rtl8169_private *tp = netdev_priv(dev);
4357 struct pci_dev *pdev = tp->pci_dev;
4358 int pci_status_errs;
4359 u16 pci_cmd;
4360
4361 pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
4362
4363 pci_status_errs = pci_status_get_and_clear_errors(pdev);
4364
4365 if (net_ratelimit())
4366 netdev_err(dev, "PCI error (cmd = 0x%04x, status_errs = 0x%04x)\n",
4367 pci_cmd, pci_status_errs);
4368
4369
4370
4371
4372
4373
4374
4375
4376 if (pdev->broken_parity_status)
4377 pci_cmd &= ~PCI_COMMAND_PARITY;
4378 else
4379 pci_cmd |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY;
4380
4381 pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
4382
4383 rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING);
4384}
4385
4386static void rtl_tx(struct net_device *dev, struct rtl8169_private *tp,
4387 int budget)
4388{
4389 unsigned int dirty_tx, bytes_compl = 0, pkts_compl = 0;
4390 struct sk_buff *skb;
4391
4392 dirty_tx = tp->dirty_tx;
4393
4394 while (READ_ONCE(tp->cur_tx) != dirty_tx) {
4395 unsigned int entry = dirty_tx % NUM_TX_DESC;
4396 u32 status;
4397
4398 status = le32_to_cpu(tp->TxDescArray[entry].opts1);
4399 if (status & DescOwn)
4400 break;
4401
4402 skb = tp->tx_skb[entry].skb;
4403 rtl8169_unmap_tx_skb(tp, entry);
4404
4405 if (skb) {
4406 pkts_compl++;
4407 bytes_compl += skb->len;
4408 napi_consume_skb(skb, budget);
4409 }
4410 dirty_tx++;
4411 }
4412
4413 if (tp->dirty_tx != dirty_tx) {
4414 netdev_completed_queue(dev, pkts_compl, bytes_compl);
4415 dev_sw_netstats_tx_add(dev, pkts_compl, bytes_compl);
4416
4417
4418
4419
4420
4421
4422
4423
4424 smp_store_mb(tp->dirty_tx, dirty_tx);
4425 if (netif_queue_stopped(dev) && rtl_tx_slots_avail(tp))
4426 netif_wake_queue(dev);
4427
4428
4429
4430
4431
4432
4433
4434
4435 if (tp->cur_tx != dirty_tx && skb)
4436 rtl8169_doorbell(tp);
4437 }
4438}
4439
4440static inline int rtl8169_fragmented_frame(u32 status)
4441{
4442 return (status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag);
4443}
4444
4445static inline void rtl8169_rx_csum(struct sk_buff *skb, u32 opts1)
4446{
4447 u32 status = opts1 & (RxProtoMask | RxCSFailMask);
4448
4449 if (status == RxProtoTCP || status == RxProtoUDP)
4450 skb->ip_summed = CHECKSUM_UNNECESSARY;
4451 else
4452 skb_checksum_none_assert(skb);
4453}
4454
4455static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, int budget)
4456{
4457 struct device *d = tp_to_dev(tp);
4458 int count;
4459
4460 for (count = 0; count < budget; count++, tp->cur_rx++) {
4461 unsigned int pkt_size, entry = tp->cur_rx % NUM_RX_DESC;
4462 struct RxDesc *desc = tp->RxDescArray + entry;
4463 struct sk_buff *skb;
4464 const void *rx_buf;
4465 dma_addr_t addr;
4466 u32 status;
4467
4468 status = le32_to_cpu(desc->opts1);
4469 if (status & DescOwn)
4470 break;
4471
4472
4473
4474
4475
4476 dma_rmb();
4477
4478 if (unlikely(status & RxRES)) {
4479 if (net_ratelimit())
4480 netdev_warn(dev, "Rx ERROR. status = %08x\n",
4481 status);
4482 dev->stats.rx_errors++;
4483 if (status & (RxRWT | RxRUNT))
4484 dev->stats.rx_length_errors++;
4485 if (status & RxCRC)
4486 dev->stats.rx_crc_errors++;
4487
4488 if (!(dev->features & NETIF_F_RXALL))
4489 goto release_descriptor;
4490 else if (status & RxRWT || !(status & (RxRUNT | RxCRC)))
4491 goto release_descriptor;
4492 }
4493
4494 pkt_size = status & GENMASK(13, 0);
4495 if (likely(!(dev->features & NETIF_F_RXFCS)))
4496 pkt_size -= ETH_FCS_LEN;
4497
4498
4499
4500
4501 if (unlikely(rtl8169_fragmented_frame(status))) {
4502 dev->stats.rx_dropped++;
4503 dev->stats.rx_length_errors++;
4504 goto release_descriptor;
4505 }
4506
4507 skb = napi_alloc_skb(&tp->napi, pkt_size);
4508 if (unlikely(!skb)) {
4509 dev->stats.rx_dropped++;
4510 goto release_descriptor;
4511 }
4512
4513 addr = le64_to_cpu(desc->addr);
4514 rx_buf = page_address(tp->Rx_databuff[entry]);
4515
4516 dma_sync_single_for_cpu(d, addr, pkt_size, DMA_FROM_DEVICE);
4517 prefetch(rx_buf);
4518 skb_copy_to_linear_data(skb, rx_buf, pkt_size);
4519 skb->tail += pkt_size;
4520 skb->len = pkt_size;
4521 dma_sync_single_for_device(d, addr, pkt_size, DMA_FROM_DEVICE);
4522
4523 rtl8169_rx_csum(skb, status);
4524 skb->protocol = eth_type_trans(skb, dev);
4525
4526 rtl8169_rx_vlan_tag(desc, skb);
4527
4528 if (skb->pkt_type == PACKET_MULTICAST)
4529 dev->stats.multicast++;
4530
4531 napi_gro_receive(&tp->napi, skb);
4532
4533 dev_sw_netstats_rx_add(dev, pkt_size);
4534release_descriptor:
4535 rtl8169_mark_to_asic(desc);
4536 }
4537
4538 return count;
4539}
4540
4541static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
4542{
4543 struct rtl8169_private *tp = dev_instance;
4544 u32 status = rtl_get_events(tp);
4545
4546 if ((status & 0xffff) == 0xffff || !(status & tp->irq_mask))
4547 return IRQ_NONE;
4548
4549 if (unlikely(status & SYSErr)) {
4550 rtl8169_pcierr_interrupt(tp->dev);
4551 goto out;
4552 }
4553
4554 if (status & LinkChg)
4555 phy_mac_interrupt(tp->phydev);
4556
4557 if (unlikely(status & RxFIFOOver &&
4558 tp->mac_version == RTL_GIGA_MAC_VER_11)) {
4559 netif_stop_queue(tp->dev);
4560 rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING);
4561 }
4562
4563 if (napi_schedule_prep(&tp->napi)) {
4564 rtl_irq_disable(tp);
4565 __napi_schedule(&tp->napi);
4566 }
4567out:
4568 rtl_ack_events(tp, status);
4569
4570 return IRQ_HANDLED;
4571}
4572
4573static void rtl_task(struct work_struct *work)
4574{
4575 struct rtl8169_private *tp =
4576 container_of(work, struct rtl8169_private, wk.work);
4577
4578 rtnl_lock();
4579
4580 if (!netif_running(tp->dev) ||
4581 !test_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags))
4582 goto out_unlock;
4583
4584 if (test_and_clear_bit(RTL_FLAG_TASK_RESET_PENDING, tp->wk.flags)) {
4585 rtl_reset_work(tp);
4586 netif_wake_queue(tp->dev);
4587 }
4588out_unlock:
4589 rtnl_unlock();
4590}
4591
4592static int rtl8169_poll(struct napi_struct *napi, int budget)
4593{
4594 struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
4595 struct net_device *dev = tp->dev;
4596 int work_done;
4597
4598 rtl_tx(dev, tp, budget);
4599
4600 work_done = rtl_rx(dev, tp, budget);
4601
4602 if (work_done < budget && napi_complete_done(napi, work_done))
4603 rtl_irq_enable(tp);
4604
4605 return work_done;
4606}
4607
4608static void r8169_phylink_handler(struct net_device *ndev)
4609{
4610 struct rtl8169_private *tp = netdev_priv(ndev);
4611
4612 if (netif_carrier_ok(ndev)) {
4613 rtl_link_chg_patch(tp);
4614 pm_request_resume(&tp->pci_dev->dev);
4615 } else {
4616 pm_runtime_idle(&tp->pci_dev->dev);
4617 }
4618
4619 if (net_ratelimit())
4620 phy_print_status(tp->phydev);
4621}
4622
4623static int r8169_phy_connect(struct rtl8169_private *tp)
4624{
4625 struct phy_device *phydev = tp->phydev;
4626 phy_interface_t phy_mode;
4627 int ret;
4628
4629 phy_mode = tp->supports_gmii ? PHY_INTERFACE_MODE_GMII :
4630 PHY_INTERFACE_MODE_MII;
4631
4632 ret = phy_connect_direct(tp->dev, phydev, r8169_phylink_handler,
4633 phy_mode);
4634 if (ret)
4635 return ret;
4636
4637 if (!tp->supports_gmii)
4638 phy_set_max_speed(phydev, SPEED_100);
4639
4640 phy_attached_info(phydev);
4641
4642 return 0;
4643}
4644
4645static void rtl8169_down(struct rtl8169_private *tp)
4646{
4647
4648 bitmap_zero(tp->wk.flags, RTL_FLAG_MAX);
4649
4650 phy_stop(tp->phydev);
4651
4652 rtl8169_update_counters(tp);
4653
4654 pci_clear_master(tp->pci_dev);
4655 rtl_pci_commit(tp);
4656
4657 rtl8169_cleanup(tp, true);
4658
4659 rtl_prepare_power_down(tp);
4660}
4661
4662static void rtl8169_up(struct rtl8169_private *tp)
4663{
4664 pci_set_master(tp->pci_dev);
4665 phy_resume(tp->phydev);
4666 rtl8169_init_phy(tp);
4667 napi_enable(&tp->napi);
4668 set_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
4669 rtl_reset_work(tp);
4670
4671 phy_start(tp->phydev);
4672}
4673
4674static int rtl8169_close(struct net_device *dev)
4675{
4676 struct rtl8169_private *tp = netdev_priv(dev);
4677 struct pci_dev *pdev = tp->pci_dev;
4678
4679 pm_runtime_get_sync(&pdev->dev);
4680
4681 netif_stop_queue(dev);
4682 rtl8169_down(tp);
4683 rtl8169_rx_clear(tp);
4684
4685 cancel_work_sync(&tp->wk.work);
4686
4687 free_irq(pci_irq_vector(pdev, 0), tp);
4688
4689 phy_disconnect(tp->phydev);
4690
4691 dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
4692 tp->RxPhyAddr);
4693 dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
4694 tp->TxPhyAddr);
4695 tp->TxDescArray = NULL;
4696 tp->RxDescArray = NULL;
4697
4698 pm_runtime_put_sync(&pdev->dev);
4699
4700 return 0;
4701}
4702
4703#ifdef CONFIG_NET_POLL_CONTROLLER
4704static void rtl8169_netpoll(struct net_device *dev)
4705{
4706 struct rtl8169_private *tp = netdev_priv(dev);
4707
4708 rtl8169_interrupt(pci_irq_vector(tp->pci_dev, 0), tp);
4709}
4710#endif
4711
4712static int rtl_open(struct net_device *dev)
4713{
4714 struct rtl8169_private *tp = netdev_priv(dev);
4715 struct pci_dev *pdev = tp->pci_dev;
4716 unsigned long irqflags;
4717 int retval = -ENOMEM;
4718
4719 pm_runtime_get_sync(&pdev->dev);
4720
4721
4722
4723
4724
4725 tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8169_TX_RING_BYTES,
4726 &tp->TxPhyAddr, GFP_KERNEL);
4727 if (!tp->TxDescArray)
4728 goto out;
4729
4730 tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES,
4731 &tp->RxPhyAddr, GFP_KERNEL);
4732 if (!tp->RxDescArray)
4733 goto err_free_tx_0;
4734
4735 retval = rtl8169_init_ring(tp);
4736 if (retval < 0)
4737 goto err_free_rx_1;
4738
4739 rtl_request_firmware(tp);
4740
4741 irqflags = pci_dev_msi_enabled(pdev) ? IRQF_NO_THREAD : IRQF_SHARED;
4742 retval = request_irq(pci_irq_vector(pdev, 0), rtl8169_interrupt,
4743 irqflags, dev->name, tp);
4744 if (retval < 0)
4745 goto err_release_fw_2;
4746
4747 retval = r8169_phy_connect(tp);
4748 if (retval)
4749 goto err_free_irq;
4750
4751 rtl8169_up(tp);
4752 rtl8169_init_counter_offsets(tp);
4753 netif_start_queue(dev);
4754out:
4755 pm_runtime_put_sync(&pdev->dev);
4756
4757 return retval;
4758
4759err_free_irq:
4760 free_irq(pci_irq_vector(pdev, 0), tp);
4761err_release_fw_2:
4762 rtl_release_firmware(tp);
4763 rtl8169_rx_clear(tp);
4764err_free_rx_1:
4765 dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
4766 tp->RxPhyAddr);
4767 tp->RxDescArray = NULL;
4768err_free_tx_0:
4769 dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
4770 tp->TxPhyAddr);
4771 tp->TxDescArray = NULL;
4772 goto out;
4773}
4774
4775static void
4776rtl8169_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
4777{
4778 struct rtl8169_private *tp = netdev_priv(dev);
4779 struct pci_dev *pdev = tp->pci_dev;
4780 struct rtl8169_counters *counters = tp->counters;
4781
4782 pm_runtime_get_noresume(&pdev->dev);
4783
4784 netdev_stats_to_stats64(stats, &dev->stats);
4785 dev_fetch_sw_netstats(stats, dev->tstats);
4786
4787
4788
4789
4790
4791 if (pm_runtime_active(&pdev->dev))
4792 rtl8169_update_counters(tp);
4793
4794
4795
4796
4797
4798 stats->tx_errors = le64_to_cpu(counters->tx_errors) -
4799 le64_to_cpu(tp->tc_offset.tx_errors);
4800 stats->collisions = le32_to_cpu(counters->tx_multi_collision) -
4801 le32_to_cpu(tp->tc_offset.tx_multi_collision);
4802 stats->tx_aborted_errors = le16_to_cpu(counters->tx_aborted) -
4803 le16_to_cpu(tp->tc_offset.tx_aborted);
4804 stats->rx_missed_errors = le16_to_cpu(counters->rx_missed) -
4805 le16_to_cpu(tp->tc_offset.rx_missed);
4806
4807 pm_runtime_put_noidle(&pdev->dev);
4808}
4809
4810static void rtl8169_net_suspend(struct rtl8169_private *tp)
4811{
4812 netif_device_detach(tp->dev);
4813
4814 if (netif_running(tp->dev))
4815 rtl8169_down(tp);
4816}
4817
4818#ifdef CONFIG_PM
4819
4820static int rtl8169_runtime_resume(struct device *dev)
4821{
4822 struct rtl8169_private *tp = dev_get_drvdata(dev);
4823
4824 rtl_rar_set(tp, tp->dev->dev_addr);
4825 __rtl8169_set_wol(tp, tp->saved_wolopts);
4826
4827 if (tp->TxDescArray)
4828 rtl8169_up(tp);
4829
4830 netif_device_attach(tp->dev);
4831
4832 return 0;
4833}
4834
4835static int __maybe_unused rtl8169_suspend(struct device *device)
4836{
4837 struct rtl8169_private *tp = dev_get_drvdata(device);
4838
4839 rtnl_lock();
4840 rtl8169_net_suspend(tp);
4841 if (!device_may_wakeup(tp_to_dev(tp)))
4842 clk_disable_unprepare(tp->clk);
4843 rtnl_unlock();
4844
4845 return 0;
4846}
4847
4848static int __maybe_unused rtl8169_resume(struct device *device)
4849{
4850 struct rtl8169_private *tp = dev_get_drvdata(device);
4851
4852 if (!device_may_wakeup(tp_to_dev(tp)))
4853 clk_prepare_enable(tp->clk);
4854
4855
4856 if (tp->mac_version == RTL_GIGA_MAC_VER_37)
4857 rtl_init_rxcfg(tp);
4858
4859 return rtl8169_runtime_resume(device);
4860}
4861
4862static int rtl8169_runtime_suspend(struct device *device)
4863{
4864 struct rtl8169_private *tp = dev_get_drvdata(device);
4865
4866 if (!tp->TxDescArray) {
4867 netif_device_detach(tp->dev);
4868 return 0;
4869 }
4870
4871 rtnl_lock();
4872 __rtl8169_set_wol(tp, WAKE_PHY);
4873 rtl8169_net_suspend(tp);
4874 rtnl_unlock();
4875
4876 return 0;
4877}
4878
4879static int rtl8169_runtime_idle(struct device *device)
4880{
4881 struct rtl8169_private *tp = dev_get_drvdata(device);
4882
4883 if (!netif_running(tp->dev) || !netif_carrier_ok(tp->dev))
4884 pm_schedule_suspend(device, 10000);
4885
4886 return -EBUSY;
4887}
4888
4889static const struct dev_pm_ops rtl8169_pm_ops = {
4890 SET_SYSTEM_SLEEP_PM_OPS(rtl8169_suspend, rtl8169_resume)
4891 SET_RUNTIME_PM_OPS(rtl8169_runtime_suspend, rtl8169_runtime_resume,
4892 rtl8169_runtime_idle)
4893};
4894
4895#endif
4896
4897static void rtl_wol_shutdown_quirk(struct rtl8169_private *tp)
4898{
4899
4900 switch (tp->mac_version) {
4901 case RTL_GIGA_MAC_VER_11:
4902 case RTL_GIGA_MAC_VER_12:
4903 case RTL_GIGA_MAC_VER_17:
4904 pci_clear_master(tp->pci_dev);
4905
4906 RTL_W8(tp, ChipCmd, CmdRxEnb);
4907 rtl_pci_commit(tp);
4908 break;
4909 default:
4910 break;
4911 }
4912}
4913
4914static void rtl_shutdown(struct pci_dev *pdev)
4915{
4916 struct rtl8169_private *tp = pci_get_drvdata(pdev);
4917
4918 rtnl_lock();
4919 rtl8169_net_suspend(tp);
4920 rtnl_unlock();
4921
4922
4923 rtl_rar_set(tp, tp->dev->perm_addr);
4924
4925 if (system_state == SYSTEM_POWER_OFF) {
4926 if (tp->saved_wolopts)
4927 rtl_wol_shutdown_quirk(tp);
4928
4929 pci_wake_from_d3(pdev, tp->saved_wolopts);
4930 pci_set_power_state(pdev, PCI_D3hot);
4931 }
4932}
4933
4934static void rtl_remove_one(struct pci_dev *pdev)
4935{
4936 struct rtl8169_private *tp = pci_get_drvdata(pdev);
4937
4938 if (pci_dev_run_wake(pdev))
4939 pm_runtime_get_noresume(&pdev->dev);
4940
4941 unregister_netdev(tp->dev);
4942
4943 if (tp->dash_type != RTL_DASH_NONE)
4944 rtl8168_driver_stop(tp);
4945
4946 rtl_release_firmware(tp);
4947
4948
4949 rtl_rar_set(tp, tp->dev->perm_addr);
4950}
4951
4952static const struct net_device_ops rtl_netdev_ops = {
4953 .ndo_open = rtl_open,
4954 .ndo_stop = rtl8169_close,
4955 .ndo_get_stats64 = rtl8169_get_stats64,
4956 .ndo_start_xmit = rtl8169_start_xmit,
4957 .ndo_features_check = rtl8169_features_check,
4958 .ndo_tx_timeout = rtl8169_tx_timeout,
4959 .ndo_validate_addr = eth_validate_addr,
4960 .ndo_change_mtu = rtl8169_change_mtu,
4961 .ndo_fix_features = rtl8169_fix_features,
4962 .ndo_set_features = rtl8169_set_features,
4963 .ndo_set_mac_address = rtl_set_mac_address,
4964 .ndo_do_ioctl = phy_do_ioctl_running,
4965 .ndo_set_rx_mode = rtl_set_rx_mode,
4966#ifdef CONFIG_NET_POLL_CONTROLLER
4967 .ndo_poll_controller = rtl8169_netpoll,
4968#endif
4969
4970};
4971
4972static void rtl_set_irq_mask(struct rtl8169_private *tp)
4973{
4974 tp->irq_mask = RxOK | RxErr | TxOK | TxErr | LinkChg;
4975
4976 if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
4977 tp->irq_mask |= SYSErr | RxOverflow | RxFIFOOver;
4978 else if (tp->mac_version == RTL_GIGA_MAC_VER_11)
4979
4980 tp->irq_mask |= RxFIFOOver;
4981 else
4982 tp->irq_mask |= RxOverflow;
4983}
4984
4985static int rtl_alloc_irq(struct rtl8169_private *tp)
4986{
4987 unsigned int flags;
4988
4989 switch (tp->mac_version) {
4990 case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06:
4991 rtl_unlock_config_regs(tp);
4992 RTL_W8(tp, Config2, RTL_R8(tp, Config2) & ~MSIEnable);
4993 rtl_lock_config_regs(tp);
4994 fallthrough;
4995 case RTL_GIGA_MAC_VER_07 ... RTL_GIGA_MAC_VER_17:
4996 flags = PCI_IRQ_LEGACY;
4997 break;
4998 default:
4999 flags = PCI_IRQ_ALL_TYPES;
5000 break;
5001 }
5002
5003 return pci_alloc_irq_vectors(tp->pci_dev, 1, 1, flags);
5004}
5005
5006static void rtl_read_mac_address(struct rtl8169_private *tp,
5007 u8 mac_addr[ETH_ALEN])
5008{
5009
5010 if (rtl_is_8168evl_up(tp) && tp->mac_version != RTL_GIGA_MAC_VER_34) {
5011 u32 value;
5012
5013 value = rtl_eri_read(tp, 0xe0);
5014 put_unaligned_le32(value, mac_addr);
5015 value = rtl_eri_read(tp, 0xe4);
5016 put_unaligned_le16(value, mac_addr + 4);
5017 } else if (rtl_is_8125(tp)) {
5018 rtl_read_mac_from_reg(tp, mac_addr, MAC0_BKP);
5019 }
5020}
5021
5022DECLARE_RTL_COND(rtl_link_list_ready_cond)
5023{
5024 return RTL_R8(tp, MCU) & LINK_LIST_RDY;
5025}
5026
5027static void r8168g_wait_ll_share_fifo_ready(struct rtl8169_private *tp)
5028{
5029 rtl_loop_wait_high(tp, &rtl_link_list_ready_cond, 100, 42);
5030}
5031
5032static int r8169_mdio_read_reg(struct mii_bus *mii_bus, int phyaddr, int phyreg)
5033{
5034 struct rtl8169_private *tp = mii_bus->priv;
5035
5036 if (phyaddr > 0)
5037 return -ENODEV;
5038
5039 return rtl_readphy(tp, phyreg);
5040}
5041
5042static int r8169_mdio_write_reg(struct mii_bus *mii_bus, int phyaddr,
5043 int phyreg, u16 val)
5044{
5045 struct rtl8169_private *tp = mii_bus->priv;
5046
5047 if (phyaddr > 0)
5048 return -ENODEV;
5049
5050 rtl_writephy(tp, phyreg, val);
5051
5052 return 0;
5053}
5054
5055static int r8169_mdio_register(struct rtl8169_private *tp)
5056{
5057 struct pci_dev *pdev = tp->pci_dev;
5058 struct mii_bus *new_bus;
5059 int ret;
5060
5061 new_bus = devm_mdiobus_alloc(&pdev->dev);
5062 if (!new_bus)
5063 return -ENOMEM;
5064
5065 new_bus->name = "r8169";
5066 new_bus->priv = tp;
5067 new_bus->parent = &pdev->dev;
5068 new_bus->irq[0] = PHY_MAC_INTERRUPT;
5069 snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x", pci_dev_id(pdev));
5070
5071 new_bus->read = r8169_mdio_read_reg;
5072 new_bus->write = r8169_mdio_write_reg;
5073
5074 ret = devm_mdiobus_register(&pdev->dev, new_bus);
5075 if (ret)
5076 return ret;
5077
5078 tp->phydev = mdiobus_get_phy(new_bus, 0);
5079 if (!tp->phydev) {
5080 return -ENODEV;
5081 } else if (!tp->phydev->drv) {
5082
5083
5084
5085 dev_err(&pdev->dev, "no dedicated PHY driver found for PHY ID 0x%08x, maybe realtek.ko needs to be added to initramfs?\n",
5086 tp->phydev->phy_id);
5087 return -EUNATCH;
5088 }
5089
5090
5091 phy_suspend(tp->phydev);
5092
5093 return 0;
5094}
5095
5096static void rtl_hw_init_8168g(struct rtl8169_private *tp)
5097{
5098 rtl_enable_rxdvgate(tp);
5099
5100 RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) & ~(CmdTxEnb | CmdRxEnb));
5101 msleep(1);
5102 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
5103
5104 r8168_mac_ocp_modify(tp, 0xe8de, BIT(14), 0);
5105 r8168g_wait_ll_share_fifo_ready(tp);
5106
5107 r8168_mac_ocp_modify(tp, 0xe8de, 0, BIT(15));
5108 r8168g_wait_ll_share_fifo_ready(tp);
5109}
5110
5111static void rtl_hw_init_8125(struct rtl8169_private *tp)
5112{
5113 rtl_enable_rxdvgate(tp);
5114
5115 RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) & ~(CmdTxEnb | CmdRxEnb));
5116 msleep(1);
5117 RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
5118
5119 r8168_mac_ocp_modify(tp, 0xe8de, BIT(14), 0);
5120 r8168g_wait_ll_share_fifo_ready(tp);
5121
5122 r8168_mac_ocp_write(tp, 0xc0aa, 0x07d0);
5123 r8168_mac_ocp_write(tp, 0xc0a6, 0x0150);
5124 r8168_mac_ocp_write(tp, 0xc01e, 0x5555);
5125 r8168g_wait_ll_share_fifo_ready(tp);
5126}
5127
5128static void rtl_hw_initialize(struct rtl8169_private *tp)
5129{
5130 switch (tp->mac_version) {
5131 case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_53:
5132 rtl8168ep_stop_cmac(tp);
5133 fallthrough;
5134 case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_48:
5135 rtl_hw_init_8168g(tp);
5136 break;
5137 case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_63:
5138 rtl_hw_init_8125(tp);
5139 break;
5140 default:
5141 break;
5142 }
5143}
5144
5145static int rtl_jumbo_max(struct rtl8169_private *tp)
5146{
5147
5148 if (!tp->supports_gmii)
5149 return 0;
5150
5151 switch (tp->mac_version) {
5152
5153 case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06:
5154 return JUMBO_7K;
5155
5156 case RTL_GIGA_MAC_VER_11:
5157 case RTL_GIGA_MAC_VER_12:
5158 case RTL_GIGA_MAC_VER_17:
5159 return JUMBO_4K;
5160
5161 case RTL_GIGA_MAC_VER_18 ... RTL_GIGA_MAC_VER_24:
5162 return JUMBO_6K;
5163 default:
5164 return JUMBO_9K;
5165 }
5166}
5167
5168static void rtl_disable_clk(void *data)
5169{
5170 clk_disable_unprepare(data);
5171}
5172
5173static int rtl_get_ether_clk(struct rtl8169_private *tp)
5174{
5175 struct device *d = tp_to_dev(tp);
5176 struct clk *clk;
5177 int rc;
5178
5179 clk = devm_clk_get(d, "ether_clk");
5180 if (IS_ERR(clk)) {
5181 rc = PTR_ERR(clk);
5182 if (rc == -ENOENT)
5183
5184 rc = 0;
5185 else
5186 dev_err_probe(d, rc, "failed to get clk\n");
5187 } else {
5188 tp->clk = clk;
5189 rc = clk_prepare_enable(clk);
5190 if (rc)
5191 dev_err(d, "failed to enable clk: %d\n", rc);
5192 else
5193 rc = devm_add_action_or_reset(d, rtl_disable_clk, clk);
5194 }
5195
5196 return rc;
5197}
5198
5199static void rtl_init_mac_address(struct rtl8169_private *tp)
5200{
5201 struct net_device *dev = tp->dev;
5202 u8 *mac_addr = dev->dev_addr;
5203 int rc;
5204
5205 rc = eth_platform_get_mac_address(tp_to_dev(tp), mac_addr);
5206 if (!rc)
5207 goto done;
5208
5209 rtl_read_mac_address(tp, mac_addr);
5210 if (is_valid_ether_addr(mac_addr))
5211 goto done;
5212
5213 rtl_read_mac_from_reg(tp, mac_addr, MAC0);
5214 if (is_valid_ether_addr(mac_addr))
5215 goto done;
5216
5217 eth_hw_addr_random(dev);
5218 dev_warn(tp_to_dev(tp), "can't read MAC address, setting random one\n");
5219done:
5220 rtl_rar_set(tp, mac_addr);
5221}
5222
5223static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5224{
5225 struct rtl8169_private *tp;
5226 int jumbo_max, region, rc;
5227 enum mac_version chipset;
5228 struct net_device *dev;
5229 u16 xid;
5230
5231 dev = devm_alloc_etherdev(&pdev->dev, sizeof (*tp));
5232 if (!dev)
5233 return -ENOMEM;
5234
5235 SET_NETDEV_DEV(dev, &pdev->dev);
5236 dev->netdev_ops = &rtl_netdev_ops;
5237 tp = netdev_priv(dev);
5238 tp->dev = dev;
5239 tp->pci_dev = pdev;
5240 tp->supports_gmii = ent->driver_data == RTL_CFG_NO_GBIT ? 0 : 1;
5241 tp->eee_adv = -1;
5242 tp->ocp_base = OCP_STD_PHY_BASE;
5243
5244 dev->tstats = devm_netdev_alloc_pcpu_stats(&pdev->dev,
5245 struct pcpu_sw_netstats);
5246 if (!dev->tstats)
5247 return -ENOMEM;
5248
5249
5250 rc = rtl_get_ether_clk(tp);
5251 if (rc)
5252 return rc;
5253
5254
5255
5256
5257 rc = pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S |
5258 PCIE_LINK_STATE_L1);
5259 tp->aspm_manageable = !rc;
5260
5261
5262 rc = pcim_enable_device(pdev);
5263 if (rc < 0) {
5264 dev_err(&pdev->dev, "enable failure\n");
5265 return rc;
5266 }
5267
5268 if (pcim_set_mwi(pdev) < 0)
5269 dev_info(&pdev->dev, "Mem-Wr-Inval unavailable\n");
5270
5271
5272 region = ffs(pci_select_bars(pdev, IORESOURCE_MEM)) - 1;
5273 if (region < 0) {
5274 dev_err(&pdev->dev, "no MMIO resource found\n");
5275 return -ENODEV;
5276 }
5277
5278
5279 if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
5280 dev_err(&pdev->dev, "Invalid PCI region size(s), aborting\n");
5281 return -ENODEV;
5282 }
5283
5284 rc = pcim_iomap_regions(pdev, BIT(region), MODULENAME);
5285 if (rc < 0) {
5286 dev_err(&pdev->dev, "cannot remap MMIO, aborting\n");
5287 return rc;
5288 }
5289
5290 tp->mmio_addr = pcim_iomap_table(pdev)[region];
5291
5292 xid = (RTL_R32(tp, TxConfig) >> 20) & 0xfcf;
5293
5294
5295 chipset = rtl8169_get_mac_version(xid, tp->supports_gmii);
5296 if (chipset == RTL_GIGA_MAC_NONE) {
5297 dev_err(&pdev->dev, "unknown chip XID %03x, contact r8169 maintainers (see MAINTAINERS file)\n", xid);
5298 return -ENODEV;
5299 }
5300
5301 tp->mac_version = chipset;
5302
5303 tp->dash_type = rtl_check_dash(tp);
5304
5305 tp->cp_cmd = RTL_R16(tp, CPlusCmd) & CPCMD_MASK;
5306
5307 if (sizeof(dma_addr_t) > 4 && tp->mac_version >= RTL_GIGA_MAC_VER_18 &&
5308 !dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)))
5309 dev->features |= NETIF_F_HIGHDMA;
5310
5311 rtl_init_rxcfg(tp);
5312
5313 rtl8169_irq_mask_and_ack(tp);
5314
5315 rtl_hw_initialize(tp);
5316
5317 rtl_hw_reset(tp);
5318
5319 rc = rtl_alloc_irq(tp);
5320 if (rc < 0) {
5321 dev_err(&pdev->dev, "Can't allocate interrupt\n");
5322 return rc;
5323 }
5324
5325 INIT_WORK(&tp->wk.work, rtl_task);
5326
5327 rtl_init_mac_address(tp);
5328
5329 dev->ethtool_ops = &rtl8169_ethtool_ops;
5330
5331 netif_napi_add(dev, &tp->napi, rtl8169_poll, NAPI_POLL_WEIGHT);
5332
5333 dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
5334 NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
5335 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO;
5336 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
5337
5338
5339
5340
5341
5342 if (tp->mac_version == RTL_GIGA_MAC_VER_05)
5343
5344 dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX;
5345
5346 if (rtl_chip_supports_csum_v2(tp))
5347 dev->hw_features |= NETIF_F_IPV6_CSUM;
5348
5349 dev->features |= dev->hw_features;
5350
5351
5352
5353
5354
5355
5356 if (rtl_chip_supports_csum_v2(tp)) {
5357 dev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6;
5358 dev->gso_max_size = RTL_GSO_MAX_SIZE_V2;
5359 dev->gso_max_segs = RTL_GSO_MAX_SEGS_V2;
5360 } else {
5361 dev->hw_features |= NETIF_F_SG | NETIF_F_TSO;
5362 dev->gso_max_size = RTL_GSO_MAX_SIZE_V1;
5363 dev->gso_max_segs = RTL_GSO_MAX_SEGS_V1;
5364 }
5365
5366 dev->hw_features |= NETIF_F_RXALL;
5367 dev->hw_features |= NETIF_F_RXFCS;
5368
5369
5370 rtl8169_set_features(dev, dev->features);
5371
5372 rtl_set_d3_pll_down(tp, true);
5373
5374 jumbo_max = rtl_jumbo_max(tp);
5375 if (jumbo_max)
5376 dev->max_mtu = jumbo_max;
5377
5378 rtl_set_irq_mask(tp);
5379
5380 tp->fw_name = rtl_chip_infos[chipset].fw_name;
5381
5382 tp->counters = dmam_alloc_coherent (&pdev->dev, sizeof(*tp->counters),
5383 &tp->counters_phys_addr,
5384 GFP_KERNEL);
5385 if (!tp->counters)
5386 return -ENOMEM;
5387
5388 pci_set_drvdata(pdev, tp);
5389
5390 rc = r8169_mdio_register(tp);
5391 if (rc)
5392 return rc;
5393
5394 rc = register_netdev(dev);
5395 if (rc)
5396 return rc;
5397
5398 netdev_info(dev, "%s, %pM, XID %03x, IRQ %d\n",
5399 rtl_chip_infos[chipset].name, dev->dev_addr, xid,
5400 pci_irq_vector(pdev, 0));
5401
5402 if (jumbo_max)
5403 netdev_info(dev, "jumbo features [frames: %d bytes, tx checksumming: %s]\n",
5404 jumbo_max, tp->mac_version <= RTL_GIGA_MAC_VER_06 ?
5405 "ok" : "ko");
5406
5407 if (tp->dash_type != RTL_DASH_NONE) {
5408 netdev_info(dev, "DASH enabled\n");
5409 rtl8168_driver_start(tp);
5410 }
5411
5412 if (pci_dev_run_wake(pdev))
5413 pm_runtime_put_sync(&pdev->dev);
5414
5415 return 0;
5416}
5417
5418static struct pci_driver rtl8169_pci_driver = {
5419 .name = MODULENAME,
5420 .id_table = rtl8169_pci_tbl,
5421 .probe = rtl_init_one,
5422 .remove = rtl_remove_one,
5423 .shutdown = rtl_shutdown,
5424 .driver.pm = pm_ptr(&rtl8169_pm_ops),
5425};
5426
5427module_pci_driver(rtl8169_pci_driver);
5428