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 : rtl_hw_disable_mac_mcu_bps(hw);
95 : :
96 [ # # # ]: 0 : switch (hw->mcfg) {
97 : 0 : case CFG_METHOD_52:
98 : : /* Get H/W mac mcu patch code version */
99 : 0 : hw->hw_mcu_patch_code_ver = rtl_get_hw_mcu_patch_code_ver(hw);
100 : :
101 : 0 : rtl_set_mac_mcu_8125a_2(hw);
102 : 0 : break;
103 : 0 : case CFG_METHOD_53:
104 : 0 : rtl_set_mac_mcu_8125b_2(hw);
105 : 0 : break;
106 : : }
107 : : }
108 : :
109 : : static void
110 : 0 : hw_phy_mcu_config_8168kb(struct rtl_hw *hw)
111 : : {
112 [ # # # ]: 0 : switch (hw->mcfg) {
113 : 0 : case CFG_METHOD_52:
114 : 0 : rtl_set_phy_mcu_8125a_2(hw);
115 : 0 : break;
116 : 0 : case CFG_METHOD_53:
117 : 0 : rtl_set_phy_mcu_8125b_2(hw);
118 : 0 : break;
119 : : }
120 : 0 : }
121 : :
122 : : const struct rtl_hw_ops rtl8168kb_ops = {
123 : : .hw_init_rxcfg = hw_init_rxcfg_8168kb,
124 : : .hw_ephy_config = hw_ephy_config_8168kb,
125 : : .hw_phy_config = hw_phy_config_8168kb,
126 : : .hw_mac_mcu_config = hw_mac_mcu_config_8168kb,
127 : : .hw_phy_mcu_config = hw_phy_mcu_config_8168kb,
128 : : };
|