Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2024 Realtek Corporation. All rights reserved
3 : : */
4 : :
5 : : #include "../r8169_ethdev.h"
6 : : #include "../r8169_hw.h"
7 : : #include "../r8169_phy.h"
8 : : #include "rtl8125a.h"
9 : : #include "rtl8125b.h"
10 : :
11 : : /* For RTL8168KB, CFG_METHOD_52,53 */
12 : :
13 : : static void
14 : 0 : hw_init_rxcfg_8168kb(struct rtl_hw *hw)
15 : : {
16 [ # # ]: 0 : if (hw->mcfg == CFG_METHOD_52)
17 : 0 : RTL_W32(hw, RxConfig, Rx_Fetch_Number_8 |
18 : : (RX_DMA_BURST_256 << RxCfgDMAShift));
19 [ # # ]: 0 : else if (hw->mcfg == CFG_METHOD_53)
20 : 0 : RTL_W32(hw, RxConfig, Rx_Fetch_Number_8 | RxCfg_pause_slot_en |
21 : : (RX_DMA_BURST_256 << RxCfgDMAShift));
22 : 0 : }
23 : :
24 : : static void
25 : 0 : hw_ephy_config_8168kb(struct rtl_hw *hw)
26 : : {
27 [ # # # ]: 0 : switch (hw->mcfg) {
28 : 0 : case CFG_METHOD_52:
29 : 0 : rtl_ephy_write(hw, 0x04, 0xD000);
30 : 0 : rtl_ephy_write(hw, 0x0A, 0x8653);
31 : 0 : rtl_ephy_write(hw, 0x23, 0xAB66);
32 : 0 : rtl_ephy_write(hw, 0x20, 0x9455);
33 : 0 : rtl_ephy_write(hw, 0x21, 0x99FF);
34 : 0 : rtl_ephy_write(hw, 0x29, 0xFE04);
35 : :
36 : 0 : rtl_ephy_write(hw, 0x44, 0xD000);
37 : 0 : rtl_ephy_write(hw, 0x4A, 0x8653);
38 : 0 : rtl_ephy_write(hw, 0x63, 0xAB66);
39 : 0 : rtl_ephy_write(hw, 0x60, 0x9455);
40 : 0 : rtl_ephy_write(hw, 0x61, 0x99FF);
41 : 0 : rtl_ephy_write(hw, 0x69, 0xFE04);
42 : :
43 : 0 : rtl_clear_and_set_pcie_phy_bit(hw, 0x2A, (BIT_14 | BIT_13 | BIT_12),
44 : : (BIT_13 | BIT_12));
45 : 0 : rtl_clear_pcie_phy_bit(hw, 0x19, BIT_6);
46 : 0 : rtl_set_pcie_phy_bit(hw, 0x1B, (BIT_11 | BIT_10 | BIT_9));
47 : 0 : rtl_clear_pcie_phy_bit(hw, 0x1B, (BIT_14 | BIT_13 | BIT_12));
48 : 0 : rtl_ephy_write(hw, 0x02, 0x6042);
49 : 0 : rtl_ephy_write(hw, 0x06, 0x0014);
50 : :
51 : 0 : rtl_clear_and_set_pcie_phy_bit(hw, 0x6A, (BIT_14 | BIT_13 | BIT_12),
52 : : (BIT_13 | BIT_12));
53 : 0 : rtl_clear_pcie_phy_bit(hw, 0x59, BIT_6);
54 : 0 : rtl_set_pcie_phy_bit(hw, 0x5B, (BIT_11 | BIT_10 | BIT_9));
55 : 0 : rtl_clear_pcie_phy_bit(hw, 0x5B, (BIT_14 | BIT_13 | BIT_12));
56 : 0 : rtl_ephy_write(hw, 0x42, 0x6042);
57 : 0 : rtl_ephy_write(hw, 0x46, 0x0014);
58 : 0 : break;
59 : 0 : case CFG_METHOD_53:
60 : 0 : rtl_ephy_write(hw, 0x0B, 0xA908);
61 : 0 : rtl_ephy_write(hw, 0x1E, 0x20EB);
62 : 0 : rtl_ephy_write(hw, 0x22, 0x0023);
63 : 0 : rtl_ephy_write(hw, 0x02, 0x60C2);
64 : 0 : rtl_ephy_write(hw, 0x29, 0xFF00);
65 : :
66 : 0 : rtl_ephy_write(hw, 0x4B, 0xA908);
67 : 0 : rtl_ephy_write(hw, 0x5E, 0x28EB);
68 : 0 : rtl_ephy_write(hw, 0x62, 0x0023);
69 : 0 : rtl_ephy_write(hw, 0x42, 0x60C2);
70 : 0 : rtl_ephy_write(hw, 0x69, 0xFF00);
71 : 0 : break;
72 : : }
73 : 0 : }
74 : :
75 : : static void
76 : 0 : hw_phy_config_8168kb(struct rtl_hw *hw)
77 : : {
78 [ # # # ]: 0 : switch (hw->mcfg) {
79 : 0 : case CFG_METHOD_52:
80 : 0 : rtl_hw_phy_config_8125a_2(hw);
81 : 0 : break;
82 : 0 : case CFG_METHOD_53:
83 : 0 : rtl_hw_phy_config_8125b_2(hw);
84 : 0 : break;
85 : : }
86 : 0 : }
87 : :
88 : : static void
89 : 0 : hw_mac_mcu_config_8168kb(struct rtl_hw *hw)
90 : : {
91 [ # # ]: 0 : if (hw->NotWrMcuPatchCode)
92 : : return;
93 : :
94 [ # # # ]: 0 : switch (hw->mcfg) {
95 : 0 : case CFG_METHOD_52:
96 : 0 : rtl_set_mac_mcu_8125a_2(hw);
97 : 0 : break;
98 : 0 : case CFG_METHOD_53:
99 : 0 : rtl_set_mac_mcu_8125b_2(hw);
100 : 0 : break;
101 : : }
102 : : }
103 : :
104 : : static void
105 : 0 : hw_phy_mcu_config_8168kb(struct rtl_hw *hw)
106 : : {
107 [ # # # ]: 0 : switch (hw->mcfg) {
108 : 0 : case CFG_METHOD_52:
109 : 0 : rtl_set_phy_mcu_8125a_2(hw);
110 : 0 : break;
111 : 0 : case CFG_METHOD_53:
112 : 0 : rtl_set_phy_mcu_8125b_2(hw);
113 : 0 : break;
114 : : }
115 : 0 : }
116 : :
117 : : const struct rtl_hw_ops rtl8168kb_ops = {
118 : : .hw_init_rxcfg = hw_init_rxcfg_8168kb,
119 : : .hw_ephy_config = hw_ephy_config_8168kb,
120 : : .hw_phy_config = hw_phy_config_8168kb,
121 : : .hw_mac_mcu_config = hw_mac_mcu_config_8168kb,
122 : : .hw_phy_mcu_config = hw_phy_mcu_config_8168kb,
123 : : };
|