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 "rtl8125bp_mcu.h"
9 : :
10 : : /* For RTL8125BP, CFG_METHOD_54,55 */
11 : :
12 : : /* ------------------------------------MAC 8125BP------------------------------------- */
13 : :
14 : : void
15 : 0 : rtl_set_mac_mcu_8125bp_1(struct rtl_hw *hw)
16 : : {
17 : : u16 entry_cnt;
18 : : static const u16 mcu_patch_code[] = {
19 : : 0xE010, 0xE014, 0xE027, 0xE04A, 0xE04D, 0xE050, 0xE052, 0xE054, 0xE056,
20 : : 0xE058, 0xE05A, 0xE05C, 0xE05E, 0xE060, 0xE062, 0xE064, 0x1BC8, 0x46EB,
21 : : 0xC302, 0xBB00, 0x0F14, 0xC211, 0x400A, 0xF00A, 0xC20F, 0x400A, 0xF007,
22 : : 0x73A4, 0xC20C, 0x400A, 0xF102, 0x48B0, 0x9B20, 0x1B00, 0x9BA0, 0xC602,
23 : : 0xBE00, 0x4364, 0xE6E0, 0xE6E2, 0xC01C, 0xB406, 0x1000, 0xF016, 0xC61F,
24 : : 0x400E, 0xF012, 0x218E, 0x25BE, 0x1300, 0xF007, 0x7340, 0xC618, 0x400E,
25 : : 0xF102, 0x48B0, 0x8320, 0xB400, 0x2402, 0x1000, 0xF003, 0x7342, 0x8322,
26 : : 0xB000, 0xE007, 0x7322, 0x9B42, 0x7320, 0x9B40, 0x0300, 0x0300, 0xB006,
27 : : 0xC302, 0xBB00, 0x413E, 0xE6E0, 0xC01C, 0x49D1, 0xC602, 0xBE00, 0x3F94,
28 : : 0x49D1, 0xC602, 0xBE00, 0x4030, 0xC602, 0xBE00, 0x3FDA, 0xC102, 0xB900,
29 : : 0x401A, 0xC102, 0xB900, 0x0000, 0xC002, 0xB800, 0x0000, 0xC602, 0xBE00,
30 : : 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
31 : : 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
32 : : 0x0000, 0x6936, 0x0A18, 0x0C02, 0x0D21
33 : : };
34 : :
35 : : entry_cnt = ARRAY_SIZE(mcu_patch_code);
36 : :
37 : : /* Get BIN mac mcu patch code version */
38 : 0 : hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code,
39 : : entry_cnt);
40 : :
41 [ # # ]: 0 : if (hw->hw_mcu_patch_code_ver != hw->bin_mcu_patch_code_ver)
42 : 0 : rtl_write_mac_mcu_ram_code(hw, mcu_patch_code, entry_cnt);
43 : :
44 : 0 : rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
45 : :
46 : 0 : rtl_mac_ocp_write(hw, 0xFC28, 0x0f10);
47 : 0 : rtl_mac_ocp_write(hw, 0xFC2A, 0x435c);
48 : 0 : rtl_mac_ocp_write(hw, 0xFC2C, 0x4112);
49 : 0 : rtl_mac_ocp_write(hw, 0xFC2E, 0x3F92);
50 : 0 : rtl_mac_ocp_write(hw, 0xFC30, 0x402E);
51 : 0 : rtl_mac_ocp_write(hw, 0xFC32, 0x3FD6);
52 : 0 : rtl_mac_ocp_write(hw, 0xFC34, 0x4018);
53 : :
54 : 0 : rtl_mac_ocp_write(hw, 0xFC48, 0x007F);
55 : 0 : }
56 : :
57 : : void
58 : 0 : rtl_set_mac_mcu_8125bp_2(struct rtl_hw *hw)
59 : : {
60 : : u16 entry_cnt;
61 : : static const u16 mcu_patch_code[] = {
62 : : 0xE010, 0xE033, 0xE046, 0xE04A, 0xE04D, 0xE050, 0xE052, 0xE054, 0xE056,
63 : : 0xE058, 0xE05A, 0xE05C, 0xE05E, 0xE060, 0xE062, 0xE064, 0xB406, 0x1000,
64 : : 0xF016, 0xC61F, 0x400E, 0xF012, 0x218E, 0x25BE, 0x1300, 0xF007, 0x7340,
65 : : 0xC618, 0x400E, 0xF102, 0x48B0, 0x8320, 0xB400, 0x2402, 0x1000, 0xF003,
66 : : 0x7342, 0x8322, 0xB000, 0xE007, 0x7322, 0x9B42, 0x7320, 0x9B40, 0x0300,
67 : : 0x0300, 0xB006, 0xC302, 0xBB00, 0x4168, 0xE6E0, 0xC01C, 0xC211, 0x400A,
68 : : 0xF00A, 0xC20F, 0x400A, 0xF007, 0x73A4, 0xC20C, 0x400A, 0xF102, 0x48B0,
69 : : 0x9B20, 0x1B00, 0x9BA0, 0xC602, 0xBE00, 0x4392, 0xE6E0, 0xE6E2, 0xC01C,
70 : : 0x4166, 0x9CF6, 0xC002, 0xB800, 0x143C, 0x49D1, 0xC602, 0xBE00, 0x3FC4,
71 : : 0x49D1, 0xC602, 0xBE00, 0x405A, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
72 : : 0x0000, 0xC102, 0xB900, 0x0000, 0xC002, 0xB800, 0x0000, 0xC602, 0xBE00,
73 : : 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
74 : : 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00,
75 : : 0x0000, 0x6936, 0x0B18, 0x0C02, 0x0D22
76 : : };
77 : :
78 : : entry_cnt = ARRAY_SIZE(mcu_patch_code);
79 : :
80 : : /* Get BIN mac mcu patch code version */
81 : 0 : hw->bin_mcu_patch_code_ver = rtl_get_bin_mcu_patch_code_ver(mcu_patch_code,
82 : : entry_cnt);
83 : :
84 [ # # ]: 0 : if (hw->hw_mcu_patch_code_ver != hw->bin_mcu_patch_code_ver)
85 : 0 : rtl_write_mac_mcu_ram_code(hw, mcu_patch_code, entry_cnt);
86 : :
87 : 0 : rtl_mac_ocp_write(hw, 0xFC26, 0x8000);
88 : :
89 : 0 : rtl_mac_ocp_write(hw, 0xFC28, 0x413C);
90 : 0 : rtl_mac_ocp_write(hw, 0xFC2A, 0x438A);
91 : 0 : rtl_mac_ocp_write(hw, 0xFC2C, 0x143A);
92 : 0 : rtl_mac_ocp_write(hw, 0xFC2E, 0x3FC2);
93 : 0 : rtl_mac_ocp_write(hw, 0xFC30, 0x4058);
94 : :
95 : 0 : rtl_mac_ocp_write(hw, 0xFC48, 0x001F);
96 : 0 : }
97 : :
98 : : /* ------------------------------------PHY 8125BP--------------------------------------- */
99 : :
100 : : static const u16 phy_mcu_ram_code_8125bp_1_1[] = {
101 : : 0xa436, 0x8024, 0xa438, 0x3600, 0xa436, 0xB82E, 0xa438, 0x0001,
102 : : 0xb820, 0x0090, 0xa436, 0xA016, 0xa438, 0x0000, 0xa436, 0xA012,
103 : : 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010,
104 : : 0xa438, 0x1800, 0xa438, 0x8014, 0xa438, 0x1800, 0xa438, 0x8018,
105 : : 0xa438, 0x1800, 0xa438, 0x801c, 0xa438, 0x1800, 0xa438, 0x8020,
106 : : 0xa438, 0x1800, 0xa438, 0x8024, 0xa438, 0x1800, 0xa438, 0x8028,
107 : : 0xa438, 0x1800, 0xa438, 0x8028, 0xa438, 0xdb20, 0xa438, 0xd501,
108 : : 0xa438, 0x1800, 0xa438, 0x034c, 0xa438, 0xdb10, 0xa438, 0xd501,
109 : : 0xa438, 0x1800, 0xa438, 0x032c, 0xa438, 0x8620, 0xa438, 0xa480,
110 : : 0xa438, 0x1800, 0xa438, 0x1cfe, 0xa438, 0xbf40, 0xa438, 0xd703,
111 : : 0xa438, 0x1800, 0xa438, 0x0ce9, 0xa438, 0x9c10, 0xa438, 0x9f40,
112 : : 0xa438, 0x1800, 0xa438, 0x137a, 0xa438, 0x9f20, 0xa438, 0x9f40,
113 : : 0xa438, 0x1800, 0xa438, 0x16c4, 0xa436, 0xA026, 0xa438, 0xffff,
114 : : 0xa436, 0xA024, 0xa438, 0xffff, 0xa436, 0xA022, 0xa438, 0x16c3,
115 : : 0xa436, 0xA020, 0xa438, 0x1379, 0xa436, 0xA006, 0xa438, 0x0ce8,
116 : : 0xa436, 0xA004, 0xa438, 0x1cfd, 0xa436, 0xA002, 0xa438, 0x032b,
117 : : 0xa436, 0xA000, 0xa438, 0x034b, 0xa436, 0xA008, 0xa438, 0x3f00,
118 : : 0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012, 0xa438, 0x0000,
119 : : 0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010, 0xa438, 0x1800,
120 : : 0xa438, 0x8018, 0xa438, 0x1800, 0xa438, 0x8021, 0xa438, 0x1800,
121 : : 0xa438, 0x802b, 0xa438, 0x1800, 0xa438, 0x8055, 0xa438, 0x1800,
122 : : 0xa438, 0x805a, 0xa438, 0x1800, 0xa438, 0x805e, 0xa438, 0x1800,
123 : : 0xa438, 0x8062, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0xcb11,
124 : : 0xa438, 0xd1b9, 0xa438, 0xd05b, 0xa438, 0x0000, 0xa438, 0x1800,
125 : : 0xa438, 0x0284, 0xa438, 0x0000, 0xa438, 0x0000, 0xa438, 0xd700,
126 : : 0xa438, 0x5fb4, 0xa438, 0x5f95, 0xa438, 0x0000, 0xa438, 0x0000,
127 : : 0xa438, 0x1800, 0xa438, 0x02b7, 0xa438, 0x0000, 0xa438, 0x0000,
128 : : 0xa438, 0xcb21, 0xa438, 0x1000, 0xa438, 0x0b34, 0xa438, 0xd71f,
129 : : 0xa438, 0x5f5e, 0xa438, 0x0000, 0xa438, 0x1800, 0xa438, 0x0322,
130 : : 0xa438, 0xd700, 0xa438, 0xd113, 0xa438, 0xd040, 0xa438, 0x1000,
131 : : 0xa438, 0x0a57, 0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0xd700,
132 : : 0xa438, 0x6065, 0xa438, 0xd122, 0xa438, 0xf002, 0xa438, 0xd122,
133 : : 0xa438, 0xd040, 0xa438, 0x1000, 0xa438, 0x0b53, 0xa438, 0xa008,
134 : : 0xa438, 0xd704, 0xa438, 0x4052, 0xa438, 0xa002, 0xa438, 0xd704,
135 : : 0xa438, 0x4054, 0xa438, 0xa740, 0xa438, 0x1000, 0xa438, 0x0a57,
136 : : 0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0xcb9b, 0xa438, 0xd110,
137 : : 0xa438, 0xd040, 0xa438, 0x1000, 0xa438, 0x0c01, 0xa438, 0x1000,
138 : : 0xa438, 0x0a57, 0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0x801a,
139 : : 0xa438, 0x1000, 0xa438, 0x0a57, 0xa438, 0xd704, 0xa438, 0x7fb9,
140 : : 0xa438, 0x1800, 0xa438, 0x088d, 0xa438, 0xcb62, 0xa438, 0xd700,
141 : : 0xa438, 0x8880, 0xa438, 0x1800, 0xa438, 0x06cb, 0xa438, 0xbe02,
142 : : 0xa438, 0x0000, 0xa438, 0x1800, 0xa438, 0x002c, 0xa438, 0xbe04,
143 : : 0xa438, 0x0000, 0xa438, 0x1800, 0xa438, 0x002c, 0xa438, 0xbe08,
144 : : 0xa438, 0x0000, 0xa438, 0x1800, 0xa438, 0x002c, 0xa436, 0xA10E,
145 : : 0xa438, 0x802a, 0xa436, 0xA10C, 0xa438, 0x8026, 0xa436, 0xA10A,
146 : : 0xa438, 0x8022, 0xa436, 0xA108, 0xa438, 0x06ca, 0xa436, 0xA106,
147 : : 0xa438, 0x086f, 0xa436, 0xA104, 0xa438, 0x0321, 0xa436, 0xA102,
148 : : 0xa438, 0x02b5, 0xa436, 0xA100, 0xa438, 0x0283, 0xa436, 0xA110,
149 : : 0xa438, 0x001f, 0xb820, 0x0010, 0xb82e, 0x0000, 0xa436, 0x8024,
150 : : 0xa438, 0x0000, 0xB820, 0x0000, 0xFFFF, 0xFFFF
151 : : };
152 : :
153 : : static const u16 phy_mcu_ram_code_8125bp_1_2[] = {
154 : : 0xb892, 0x0000, 0xb88e, 0xC201, 0xb890, 0x2C01, 0xb890, 0xCD02,
155 : : 0xb890, 0x0602, 0xb890, 0x5502, 0xb890, 0xB903, 0xb890, 0x3303,
156 : : 0xb890, 0xC204, 0xb890, 0x6605, 0xb890, 0x1F05, 0xb890, 0xEE06,
157 : : 0xb890, 0xD207, 0xb890, 0xCC08, 0xb890, 0xDA09, 0xb890, 0xFF0B,
158 : : 0xb890, 0x380C, 0xb890, 0x87F3, 0xb88e, 0xC27F, 0xb890, 0x2B66,
159 : : 0xb890, 0x6666, 0xb890, 0x6666, 0xb890, 0x6666, 0xb890, 0x6666,
160 : : 0xb890, 0x6666, 0xb890, 0x6666, 0xb890, 0x6666, 0xb890, 0x66C2,
161 : : 0xb88e, 0xC26F, 0xb890, 0x751D, 0xb890, 0x1D1F, 0xb890, 0x2022,
162 : : 0xb890, 0x2325, 0xb890, 0x2627, 0xb890, 0x2829, 0xb890, 0x2929,
163 : : 0xb890, 0x2A2A, 0xb890, 0x2B66, 0xB820, 0x0000, 0xFFFF, 0xFFFF
164 : : };
165 : :
166 : : static void
167 : : rtl_real_set_phy_mcu_8125bp_1_1(struct rtl_hw *hw)
168 : : {
169 : 0 : rtl_set_phy_mcu_ram_code(hw, phy_mcu_ram_code_8125bp_1_1,
170 : : ARRAY_SIZE(phy_mcu_ram_code_8125bp_1_1));
171 : : }
172 : :
173 : : static void
174 : : rtl_real_set_phy_mcu_8125bp_1_2(struct rtl_hw *hw)
175 : : {
176 : 0 : rtl_set_phy_mcu_ram_code(hw, phy_mcu_ram_code_8125bp_1_2,
177 : : ARRAY_SIZE(phy_mcu_ram_code_8125bp_1_2));
178 : : }
179 : :
180 : : void
181 : 0 : rtl_set_phy_mcu_8125bp_1(struct rtl_hw *hw)
182 : : {
183 : 0 : rtl_set_phy_mcu_patch_request(hw);
184 : :
185 : : rtl_real_set_phy_mcu_8125bp_1_1(hw);
186 : :
187 : 0 : rtl_clear_phy_mcu_patch_request(hw);
188 : :
189 : 0 : rtl_set_phy_mcu_patch_request(hw);
190 : :
191 : : rtl_real_set_phy_mcu_8125bp_1_2(hw);
192 : :
193 : 0 : rtl_clear_phy_mcu_patch_request(hw);
194 : 0 : }
|