1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
3 *
4 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5 *
6 ******************************************************************************/
7
8 #include "odm_precomp.h"
9
10 #include <phy.h>
11
12 /* AGC_TAB_1T.TXT */
13
14 static u32 array_agc_tab_1t_8188e[] = {
15 0xC78, 0xFB000001,
16 0xC78, 0xFB010001,
17 0xC78, 0xFB020001,
18 0xC78, 0xFB030001,
19 0xC78, 0xFB040001,
20 0xC78, 0xFB050001,
21 0xC78, 0xFA060001,
22 0xC78, 0xF9070001,
23 0xC78, 0xF8080001,
24 0xC78, 0xF7090001,
25 0xC78, 0xF60A0001,
26 0xC78, 0xF50B0001,
27 0xC78, 0xF40C0001,
28 0xC78, 0xF30D0001,
29 0xC78, 0xF20E0001,
30 0xC78, 0xF10F0001,
31 0xC78, 0xF0100001,
32 0xC78, 0xEF110001,
33 0xC78, 0xEE120001,
34 0xC78, 0xED130001,
35 0xC78, 0xEC140001,
36 0xC78, 0xEB150001,
37 0xC78, 0xEA160001,
38 0xC78, 0xE9170001,
39 0xC78, 0xE8180001,
40 0xC78, 0xE7190001,
41 0xC78, 0xE61A0001,
42 0xC78, 0xE51B0001,
43 0xC78, 0xE41C0001,
44 0xC78, 0xE31D0001,
45 0xC78, 0xE21E0001,
46 0xC78, 0xE11F0001,
47 0xC78, 0x8A200001,
48 0xC78, 0x89210001,
49 0xC78, 0x88220001,
50 0xC78, 0x87230001,
51 0xC78, 0x86240001,
52 0xC78, 0x85250001,
53 0xC78, 0x84260001,
54 0xC78, 0x83270001,
55 0xC78, 0x82280001,
56 0xC78, 0x6B290001,
57 0xC78, 0x6A2A0001,
58 0xC78, 0x692B0001,
59 0xC78, 0x682C0001,
60 0xC78, 0x672D0001,
61 0xC78, 0x662E0001,
62 0xC78, 0x652F0001,
63 0xC78, 0x64300001,
64 0xC78, 0x63310001,
65 0xC78, 0x62320001,
66 0xC78, 0x61330001,
67 0xC78, 0x46340001,
68 0xC78, 0x45350001,
69 0xC78, 0x44360001,
70 0xC78, 0x43370001,
71 0xC78, 0x42380001,
72 0xC78, 0x41390001,
73 0xC78, 0x403A0001,
74 0xC78, 0x403B0001,
75 0xC78, 0x403C0001,
76 0xC78, 0x403D0001,
77 0xC78, 0x403E0001,
78 0xC78, 0x403F0001,
79 0xC78, 0xFB400001,
80 0xC78, 0xFB410001,
81 0xC78, 0xFB420001,
82 0xC78, 0xFB430001,
83 0xC78, 0xFB440001,
84 0xC78, 0xFB450001,
85 0xC78, 0xFB460001,
86 0xC78, 0xFB470001,
87 0xC78, 0xFB480001,
88 0xC78, 0xFA490001,
89 0xC78, 0xF94A0001,
90 0xC78, 0xF84B0001,
91 0xC78, 0xF74C0001,
92 0xC78, 0xF64D0001,
93 0xC78, 0xF54E0001,
94 0xC78, 0xF44F0001,
95 0xC78, 0xF3500001,
96 0xC78, 0xF2510001,
97 0xC78, 0xF1520001,
98 0xC78, 0xF0530001,
99 0xC78, 0xEF540001,
100 0xC78, 0xEE550001,
101 0xC78, 0xED560001,
102 0xC78, 0xEC570001,
103 0xC78, 0xEB580001,
104 0xC78, 0xEA590001,
105 0xC78, 0xE95A0001,
106 0xC78, 0xE85B0001,
107 0xC78, 0xE75C0001,
108 0xC78, 0xE65D0001,
109 0xC78, 0xE55E0001,
110 0xC78, 0xE45F0001,
111 0xC78, 0xE3600001,
112 0xC78, 0xE2610001,
113 0xC78, 0xC3620001,
114 0xC78, 0xC2630001,
115 0xC78, 0xC1640001,
116 0xC78, 0x8B650001,
117 0xC78, 0x8A660001,
118 0xC78, 0x89670001,
119 0xC78, 0x88680001,
120 0xC78, 0x87690001,
121 0xC78, 0x866A0001,
122 0xC78, 0x856B0001,
123 0xC78, 0x846C0001,
124 0xC78, 0x676D0001,
125 0xC78, 0x666E0001,
126 0xC78, 0x656F0001,
127 0xC78, 0x64700001,
128 0xC78, 0x63710001,
129 0xC78, 0x62720001,
130 0xC78, 0x61730001,
131 0xC78, 0x60740001,
132 0xC78, 0x46750001,
133 0xC78, 0x45760001,
134 0xC78, 0x44770001,
135 0xC78, 0x43780001,
136 0xC78, 0x42790001,
137 0xC78, 0x417A0001,
138 0xC78, 0x407B0001,
139 0xC78, 0x407C0001,
140 0xC78, 0x407D0001,
141 0xC78, 0x407E0001,
142 0xC78, 0x407F0001,
143 };
144
set_baseband_agc_config(struct adapter * adapt)145 static bool set_baseband_agc_config(struct adapter *adapt)
146 {
147 u32 i;
148 const u32 arraylen = ARRAY_SIZE(array_agc_tab_1t_8188e);
149 u32 *array = array_agc_tab_1t_8188e;
150
151 for (i = 0; i < arraylen; i += 2) {
152 u32 v1 = array[i];
153 u32 v2 = array[i + 1];
154
155 if (v1 < 0xCDCDCDCD) {
156 phy_set_bb_reg(adapt, v1, bMaskDWord, v2);
157 udelay(1);
158 }
159 }
160 return true;
161 }
162
163 /* PHY_REG_1T.TXT */
164
165 static u32 array_phy_reg_1t_8188e[] = {
166 0x800, 0x80040000,
167 0x804, 0x00000003,
168 0x808, 0x0000FC00,
169 0x80C, 0x0000000A,
170 0x810, 0x10001331,
171 0x814, 0x020C3D10,
172 0x818, 0x02200385,
173 0x81C, 0x00000000,
174 0x820, 0x01000100,
175 0x824, 0x00390204,
176 0x828, 0x00000000,
177 0x82C, 0x00000000,
178 0x830, 0x00000000,
179 0x834, 0x00000000,
180 0x838, 0x00000000,
181 0x83C, 0x00000000,
182 0x840, 0x00010000,
183 0x844, 0x00000000,
184 0x848, 0x00000000,
185 0x84C, 0x00000000,
186 0x850, 0x00000000,
187 0x854, 0x00000000,
188 0x858, 0x569A11A9,
189 0x85C, 0x01000014,
190 0x860, 0x66F60110,
191 0x864, 0x061F0649,
192 0x868, 0x00000000,
193 0x86C, 0x27272700,
194 0x870, 0x07000760,
195 0x874, 0x25004000,
196 0x878, 0x00000808,
197 0x87C, 0x00000000,
198 0x880, 0xB0000C1C,
199 0x884, 0x00000001,
200 0x888, 0x00000000,
201 0x88C, 0xCCC000C0,
202 0x890, 0x00000800,
203 0x894, 0xFFFFFFFE,
204 0x898, 0x40302010,
205 0x89C, 0x00706050,
206 0x900, 0x00000000,
207 0x904, 0x00000023,
208 0x908, 0x00000000,
209 0x90C, 0x81121111,
210 0x910, 0x00000002,
211 0x914, 0x00000201,
212 0xA00, 0x00D047C8,
213 0xA04, 0x80FF000C,
214 0xA08, 0x8C838300,
215 0xA0C, 0x2E7F120F,
216 0xA10, 0x9500BB78,
217 0xA14, 0x1114D028,
218 0xA18, 0x00881117,
219 0xA1C, 0x89140F00,
220 0xA20, 0x1A1B0000,
221 0xA24, 0x090E1317,
222 0xA28, 0x00000204,
223 0xA2C, 0x00D30000,
224 0xA70, 0x101FBF00,
225 0xA74, 0x00000007,
226 0xA78, 0x00000900,
227 0xA7C, 0x225B0606,
228 0xA80, 0x218075B1,
229 0xB2C, 0x80000000,
230 0xC00, 0x48071D40,
231 0xC04, 0x03A05611,
232 0xC08, 0x000000E4,
233 0xC0C, 0x6C6C6C6C,
234 0xC10, 0x08800000,
235 0xC14, 0x40000100,
236 0xC18, 0x08800000,
237 0xC1C, 0x40000100,
238 0xC20, 0x00000000,
239 0xC24, 0x00000000,
240 0xC28, 0x00000000,
241 0xC2C, 0x00000000,
242 0xC30, 0x69E9AC47,
243 0xC34, 0x469652AF,
244 0xC38, 0x49795994,
245 0xC3C, 0x0A97971C,
246 0xC40, 0x1F7C403F,
247 0xC44, 0x000100B7,
248 0xC48, 0xEC020107,
249 0xC4C, 0x007F037F,
250 0xC50, 0x69553420,
251 0xC54, 0x43BC0094,
252 0xC58, 0x00013169,
253 0xC5C, 0x00250492,
254 0xC60, 0x00000000,
255 0xC64, 0x7112848B,
256 0xC68, 0x47C00BFF,
257 0xC6C, 0x00000036,
258 0xC70, 0x2C7F000D,
259 0xC74, 0x020610DB,
260 0xC78, 0x0000001F,
261 0xC7C, 0x00B91612,
262 0xC80, 0x390000E4,
263 0xC84, 0x20F60000,
264 0xC88, 0x40000100,
265 0xC8C, 0x20200000,
266 0xC90, 0x00091521,
267 0xC94, 0x00000000,
268 0xC98, 0x00121820,
269 0xC9C, 0x00007F7F,
270 0xCA0, 0x00000000,
271 0xCA4, 0x000300A0,
272 0xCA8, 0x00000000,
273 0xCAC, 0x00000000,
274 0xCB0, 0x00000000,
275 0xCB4, 0x00000000,
276 0xCB8, 0x00000000,
277 0xCBC, 0x28000000,
278 0xCC0, 0x00000000,
279 0xCC4, 0x00000000,
280 0xCC8, 0x00000000,
281 0xCCC, 0x00000000,
282 0xCD0, 0x00000000,
283 0xCD4, 0x00000000,
284 0xCD8, 0x64B22427,
285 0xCDC, 0x00766932,
286 0xCE0, 0x00222222,
287 0xCE4, 0x00000000,
288 0xCE8, 0x37644302,
289 0xCEC, 0x2F97D40C,
290 0xD00, 0x00000740,
291 0xD04, 0x00020401,
292 0xD08, 0x0000907F,
293 0xD0C, 0x20010201,
294 0xD10, 0xA0633333,
295 0xD14, 0x3333BC43,
296 0xD18, 0x7A8F5B6F,
297 0xD2C, 0xCC979975,
298 0xD30, 0x00000000,
299 0xD34, 0x80608000,
300 0xD38, 0x00000000,
301 0xD3C, 0x00127353,
302 0xD40, 0x00000000,
303 0xD44, 0x00000000,
304 0xD48, 0x00000000,
305 0xD4C, 0x00000000,
306 0xD50, 0x6437140A,
307 0xD54, 0x00000000,
308 0xD58, 0x00000282,
309 0xD5C, 0x30032064,
310 0xD60, 0x4653DE68,
311 0xD64, 0x04518A3C,
312 0xD68, 0x00002101,
313 0xD6C, 0x2A201C16,
314 0xD70, 0x1812362E,
315 0xD74, 0x322C2220,
316 0xD78, 0x000E3C24,
317 0xE00, 0x2D2D2D2D,
318 0xE04, 0x2D2D2D2D,
319 0xE08, 0x0390272D,
320 0xE10, 0x2D2D2D2D,
321 0xE14, 0x2D2D2D2D,
322 0xE18, 0x2D2D2D2D,
323 0xE1C, 0x2D2D2D2D,
324 0xE28, 0x00000000,
325 0xE30, 0x1000DC1F,
326 0xE34, 0x10008C1F,
327 0xE38, 0x02140102,
328 0xE3C, 0x681604C2,
329 0xE40, 0x01007C00,
330 0xE44, 0x01004800,
331 0xE48, 0xFB000000,
332 0xE4C, 0x000028D1,
333 0xE50, 0x1000DC1F,
334 0xE54, 0x10008C1F,
335 0xE58, 0x02140102,
336 0xE5C, 0x28160D05,
337 0xE60, 0x00000008,
338 0xE68, 0x001B25A4,
339 0xE6C, 0x00C00014,
340 0xE70, 0x00C00014,
341 0xE74, 0x01000014,
342 0xE78, 0x01000014,
343 0xE7C, 0x01000014,
344 0xE80, 0x01000014,
345 0xE84, 0x00C00014,
346 0xE88, 0x01000014,
347 0xE8C, 0x00C00014,
348 0xED0, 0x00C00014,
349 0xED4, 0x00C00014,
350 0xED8, 0x00C00014,
351 0xEDC, 0x00000014,
352 0xEE0, 0x00000014,
353 0xEEC, 0x01C00014,
354 0xF14, 0x00000003,
355 0xF4C, 0x00000000,
356 0xF00, 0x00000300,
357 };
358
rtl_bb_delay(struct adapter * adapt,u32 addr,u32 data)359 static void rtl_bb_delay(struct adapter *adapt, u32 addr, u32 data)
360 {
361 if (addr == 0xfe) {
362 msleep(50);
363 } else if (addr == 0xfd) {
364 mdelay(5);
365 } else if (addr == 0xfc) {
366 mdelay(1);
367 } else if (addr == 0xfb) {
368 udelay(50);
369 } else if (addr == 0xfa) {
370 udelay(5);
371 } else if (addr == 0xf9) {
372 udelay(1);
373 } else {
374 phy_set_bb_reg(adapt, addr, bMaskDWord, data);
375 /* Add 1us delay between BB/RF register setting. */
376 udelay(1);
377 }
378 }
379
set_baseband_phy_config(struct adapter * adapt)380 static bool set_baseband_phy_config(struct adapter *adapt)
381 {
382 u32 i;
383 const u32 arraylen = ARRAY_SIZE(array_phy_reg_1t_8188e);
384 u32 *array = array_phy_reg_1t_8188e;
385
386 for (i = 0; i < arraylen; i += 2) {
387 u32 v1 = array[i];
388 u32 v2 = array[i + 1];
389
390 if (v1 < 0xCDCDCDCD)
391 rtl_bb_delay(adapt, v1, v2);
392 }
393 return true;
394 }
395
396 /* PHY_REG_PG.TXT */
397
398 static u32 array_phy_reg_pg_8188e[] = {
399 0xE00, 0xFFFFFFFF, 0x06070809,
400 0xE04, 0xFFFFFFFF, 0x02020405,
401 0xE08, 0x0000FF00, 0x00000006,
402 0x86C, 0xFFFFFF00, 0x00020400,
403 0xE10, 0xFFFFFFFF, 0x08090A0B,
404 0xE14, 0xFFFFFFFF, 0x01030607,
405 0xE18, 0xFFFFFFFF, 0x08090A0B,
406 0xE1C, 0xFFFFFFFF, 0x01030607,
407 0xE00, 0xFFFFFFFF, 0x00000000,
408 0xE04, 0xFFFFFFFF, 0x00000000,
409 0xE08, 0x0000FF00, 0x00000000,
410 0x86C, 0xFFFFFF00, 0x00000000,
411 0xE10, 0xFFFFFFFF, 0x00000000,
412 0xE14, 0xFFFFFFFF, 0x00000000,
413 0xE18, 0xFFFFFFFF, 0x00000000,
414 0xE1C, 0xFFFFFFFF, 0x00000000,
415 0xE00, 0xFFFFFFFF, 0x02020202,
416 0xE04, 0xFFFFFFFF, 0x00020202,
417 0xE08, 0x0000FF00, 0x00000000,
418 0x86C, 0xFFFFFF00, 0x00000000,
419 0xE10, 0xFFFFFFFF, 0x04040404,
420 0xE14, 0xFFFFFFFF, 0x00020404,
421 0xE18, 0xFFFFFFFF, 0x00000000,
422 0xE1C, 0xFFFFFFFF, 0x00000000,
423 0xE00, 0xFFFFFFFF, 0x02020202,
424 0xE04, 0xFFFFFFFF, 0x00020202,
425 0xE08, 0x0000FF00, 0x00000000,
426 0x86C, 0xFFFFFF00, 0x00000000,
427 0xE10, 0xFFFFFFFF, 0x04040404,
428 0xE14, 0xFFFFFFFF, 0x00020404,
429 0xE18, 0xFFFFFFFF, 0x00000000,
430 0xE1C, 0xFFFFFFFF, 0x00000000,
431 0xE00, 0xFFFFFFFF, 0x00000000,
432 0xE04, 0xFFFFFFFF, 0x00000000,
433 0xE08, 0x0000FF00, 0x00000000,
434 0x86C, 0xFFFFFF00, 0x00000000,
435 0xE10, 0xFFFFFFFF, 0x00000000,
436 0xE14, 0xFFFFFFFF, 0x00000000,
437 0xE18, 0xFFFFFFFF, 0x00000000,
438 0xE1C, 0xFFFFFFFF, 0x00000000,
439 0xE00, 0xFFFFFFFF, 0x02020202,
440 0xE04, 0xFFFFFFFF, 0x00020202,
441 0xE08, 0x0000FF00, 0x00000000,
442 0x86C, 0xFFFFFF00, 0x00000000,
443 0xE10, 0xFFFFFFFF, 0x04040404,
444 0xE14, 0xFFFFFFFF, 0x00020404,
445 0xE18, 0xFFFFFFFF, 0x00000000,
446 0xE1C, 0xFFFFFFFF, 0x00000000,
447 0xE00, 0xFFFFFFFF, 0x00000000,
448 0xE04, 0xFFFFFFFF, 0x00000000,
449 0xE08, 0x0000FF00, 0x00000000,
450 0x86C, 0xFFFFFF00, 0x00000000,
451 0xE10, 0xFFFFFFFF, 0x00000000,
452 0xE14, 0xFFFFFFFF, 0x00000000,
453 0xE18, 0xFFFFFFFF, 0x00000000,
454 0xE1C, 0xFFFFFFFF, 0x00000000,
455 0xE00, 0xFFFFFFFF, 0x00000000,
456 0xE04, 0xFFFFFFFF, 0x00000000,
457 0xE08, 0x0000FF00, 0x00000000,
458 0x86C, 0xFFFFFF00, 0x00000000,
459 0xE10, 0xFFFFFFFF, 0x00000000,
460 0xE14, 0xFFFFFFFF, 0x00000000,
461 0xE18, 0xFFFFFFFF, 0x00000000,
462 0xE1C, 0xFFFFFFFF, 0x00000000,
463 0xE00, 0xFFFFFFFF, 0x00000000,
464 0xE04, 0xFFFFFFFF, 0x00000000,
465 0xE08, 0x0000FF00, 0x00000000,
466 0x86C, 0xFFFFFF00, 0x00000000,
467 0xE10, 0xFFFFFFFF, 0x00000000,
468 0xE14, 0xFFFFFFFF, 0x00000000,
469 0xE18, 0xFFFFFFFF, 0x00000000,
470 0xE1C, 0xFFFFFFFF, 0x00000000,
471 0xE00, 0xFFFFFFFF, 0x00000000,
472 0xE04, 0xFFFFFFFF, 0x00000000,
473 0xE08, 0x0000FF00, 0x00000000,
474 0x86C, 0xFFFFFF00, 0x00000000,
475 0xE10, 0xFFFFFFFF, 0x00000000,
476 0xE14, 0xFFFFFFFF, 0x00000000,
477 0xE18, 0xFFFFFFFF, 0x00000000,
478 0xE1C, 0xFFFFFFFF, 0x00000000,
479 0xE00, 0xFFFFFFFF, 0x00000000,
480 0xE04, 0xFFFFFFFF, 0x00000000,
481 0xE08, 0x0000FF00, 0x00000000,
482 0x86C, 0xFFFFFF00, 0x00000000,
483 0xE10, 0xFFFFFFFF, 0x00000000,
484 0xE14, 0xFFFFFFFF, 0x00000000,
485 0xE18, 0xFFFFFFFF, 0x00000000,
486 0xE1C, 0xFFFFFFFF, 0x00000000,
487
488 };
489
store_pwrindex_offset(struct adapter * adapter,u32 regaddr,u32 bitmask,u32 data)490 static void store_pwrindex_offset(struct adapter *adapter,
491 u32 regaddr, u32 bitmask, u32 data)
492 {
493 struct hal_data_8188e *hal_data = adapter->HalData;
494 u32 * const power_level_offset =
495 hal_data->MCSTxPowerLevelOriginalOffset[hal_data->pwrGroupCnt];
496
497 if (regaddr == rTxAGC_A_Rate18_06)
498 power_level_offset[0] = data;
499 if (regaddr == rTxAGC_A_Rate54_24)
500 power_level_offset[1] = data;
501 if (regaddr == rTxAGC_A_CCK1_Mcs32)
502 power_level_offset[6] = data;
503 if (regaddr == rTxAGC_B_CCK11_A_CCK2_11 && bitmask == 0xffffff00)
504 power_level_offset[7] = data;
505 if (regaddr == rTxAGC_A_Mcs03_Mcs00)
506 power_level_offset[2] = data;
507 if (regaddr == rTxAGC_A_Mcs07_Mcs04)
508 power_level_offset[3] = data;
509 if (regaddr == rTxAGC_A_Mcs11_Mcs08)
510 power_level_offset[4] = data;
511 if (regaddr == rTxAGC_A_Mcs15_Mcs12) {
512 power_level_offset[5] = data;
513 hal_data->pwrGroupCnt++;
514 }
515 if (regaddr == rTxAGC_B_Rate18_06)
516 power_level_offset[8] = data;
517 if (regaddr == rTxAGC_B_Rate54_24)
518 power_level_offset[9] = data;
519 if (regaddr == rTxAGC_B_CCK1_55_Mcs32)
520 power_level_offset[14] = data;
521 if (regaddr == rTxAGC_B_CCK11_A_CCK2_11 && bitmask == 0x000000ff)
522 power_level_offset[15] = data;
523 if (regaddr == rTxAGC_B_Mcs03_Mcs00)
524 power_level_offset[10] = data;
525 if (regaddr == rTxAGC_B_Mcs07_Mcs04)
526 power_level_offset[11] = data;
527 if (regaddr == rTxAGC_B_Mcs11_Mcs08)
528 power_level_offset[12] = data;
529 if (regaddr == rTxAGC_B_Mcs15_Mcs12)
530 power_level_offset[13] = data;
531 }
532
rtl_addr_delay(struct adapter * adapt,u32 addr,u32 bit_mask,u32 data)533 static void rtl_addr_delay(struct adapter *adapt,
534 u32 addr, u32 bit_mask, u32 data)
535 {
536 switch (addr) {
537 case 0xfe:
538 msleep(50);
539 break;
540 case 0xfd:
541 mdelay(5);
542 break;
543 case 0xfc:
544 mdelay(1);
545 break;
546 case 0xfb:
547 udelay(50);
548 break;
549 case 0xfa:
550 udelay(5);
551 break;
552 case 0xf9:
553 udelay(1);
554 break;
555 default:
556 store_pwrindex_offset(adapt, addr, bit_mask, data);
557 }
558 }
559
config_bb_with_pgheader(struct adapter * adapt)560 static bool config_bb_with_pgheader(struct adapter *adapt)
561 {
562 u32 i;
563 const u32 arraylen = ARRAY_SIZE(array_phy_reg_pg_8188e);
564 u32 *array = array_phy_reg_pg_8188e;
565
566 for (i = 0; i < arraylen; i += 3) {
567 u32 v1 = array[i];
568 u32 v2 = array[i + 1];
569 u32 v3 = array[i + 2];
570
571 if (v1 < 0xCDCDCDCD)
572 rtl_addr_delay(adapt, v1, v2, v3);
573 }
574 return true;
575 }
576
rtl88e_phy_init_bb_rf_register_definition(struct adapter * adapter)577 static void rtl88e_phy_init_bb_rf_register_definition(struct adapter *adapter)
578 {
579 struct bb_reg_def *reg[4];
580
581 reg[RF_PATH_A] = &adapter->HalData->PHYRegDef[RF_PATH_A];
582 reg[RF_PATH_B] = &adapter->HalData->PHYRegDef[RF_PATH_B];
583
584 reg[RF_PATH_A]->rfintfs = rFPGA0_XAB_RFInterfaceSW;
585 reg[RF_PATH_B]->rfintfs = rFPGA0_XAB_RFInterfaceSW;
586
587 reg[RF_PATH_A]->rfintfi = rFPGA0_XAB_RFInterfaceRB;
588 reg[RF_PATH_B]->rfintfi = rFPGA0_XAB_RFInterfaceRB;
589
590 reg[RF_PATH_A]->rfintfo = rFPGA0_XA_RFInterfaceOE;
591 reg[RF_PATH_B]->rfintfo = rFPGA0_XB_RFInterfaceOE;
592
593 reg[RF_PATH_A]->rfintfe = rFPGA0_XA_RFInterfaceOE;
594 reg[RF_PATH_B]->rfintfe = rFPGA0_XB_RFInterfaceOE;
595
596 reg[RF_PATH_A]->rf3wireOffset = rFPGA0_XA_LSSIParameter;
597 reg[RF_PATH_B]->rf3wireOffset = rFPGA0_XB_LSSIParameter;
598
599 reg[RF_PATH_A]->rfLSSI_Select = rFPGA0_XAB_RFParameter;
600 reg[RF_PATH_B]->rfLSSI_Select = rFPGA0_XAB_RFParameter;
601
602 reg[RF_PATH_A]->rfTxGainStage = rFPGA0_TxGainStage;
603 reg[RF_PATH_B]->rfTxGainStage = rFPGA0_TxGainStage;
604
605 reg[RF_PATH_A]->rfHSSIPara1 = rFPGA0_XA_HSSIParameter1;
606 reg[RF_PATH_B]->rfHSSIPara1 = rFPGA0_XB_HSSIParameter1;
607
608 reg[RF_PATH_A]->rfHSSIPara2 = rFPGA0_XA_HSSIParameter2;
609 reg[RF_PATH_B]->rfHSSIPara2 = rFPGA0_XB_HSSIParameter2;
610
611 reg[RF_PATH_A]->rfSwitchControl = rFPGA0_XAB_SwitchControl;
612 reg[RF_PATH_B]->rfSwitchControl = rFPGA0_XAB_SwitchControl;
613
614 reg[RF_PATH_A]->rfAGCControl1 = rOFDM0_XAAGCCore1;
615 reg[RF_PATH_B]->rfAGCControl1 = rOFDM0_XBAGCCore1;
616
617 reg[RF_PATH_A]->rfAGCControl2 = rOFDM0_XAAGCCore2;
618 reg[RF_PATH_B]->rfAGCControl2 = rOFDM0_XBAGCCore2;
619
620 reg[RF_PATH_A]->rfRxIQImbalance = rOFDM0_XARxIQImbalance;
621 reg[RF_PATH_B]->rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
622
623 reg[RF_PATH_A]->rfRxAFE = rOFDM0_XARxAFE;
624 reg[RF_PATH_B]->rfRxAFE = rOFDM0_XBRxAFE;
625
626 reg[RF_PATH_A]->rfTxIQImbalance = rOFDM0_XATxIQImbalance;
627 reg[RF_PATH_B]->rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
628
629 reg[RF_PATH_A]->rfTxAFE = rOFDM0_XATxAFE;
630 reg[RF_PATH_B]->rfTxAFE = rOFDM0_XBTxAFE;
631
632 reg[RF_PATH_A]->rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
633 reg[RF_PATH_B]->rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
634
635 reg[RF_PATH_A]->rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
636 reg[RF_PATH_B]->rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
637 }
638
config_parafile(struct adapter * adapt)639 static bool config_parafile(struct adapter *adapt)
640 {
641 struct eeprom_priv *eeprom = GET_EEPROM_EFUSE_PRIV(adapt);
642
643 set_baseband_phy_config(adapt);
644
645 /* If EEPROM or EFUSE autoload OK, We must config by PHY_REG_PG.txt */
646 if (!eeprom->bautoload_fail_flag) {
647 adapt->HalData->pwrGroupCnt = 0;
648 config_bb_with_pgheader(adapt);
649 }
650 set_baseband_agc_config(adapt);
651 return true;
652 }
653
rtl88eu_phy_bb_config(struct adapter * adapt)654 bool rtl88eu_phy_bb_config(struct adapter *adapt)
655 {
656 bool rtstatus;
657 u32 regval;
658 u8 crystal_cap;
659
660 rtl88e_phy_init_bb_rf_register_definition(adapt);
661
662 /* Enable BB and RF */
663 regval = usb_read16(adapt, REG_SYS_FUNC_EN);
664 usb_write16(adapt, REG_SYS_FUNC_EN,
665 (u16)(regval | BIT(13) | BIT(0) | BIT(1)));
666
667 usb_write8(adapt, REG_RF_CTRL, RF_EN | RF_RSTB | RF_SDMRSTB);
668
669 usb_write8(adapt, REG_SYS_FUNC_EN, FEN_USBA |
670 FEN_USBD | FEN_BB_GLB_RSTn | FEN_BBRSTB);
671
672 /* Config BB and AGC */
673 rtstatus = config_parafile(adapt);
674
675 /* write 0x24[16:11] = 0x24[22:17] = crystal_cap */
676 crystal_cap = adapt->HalData->CrystalCap & 0x3F;
677 phy_set_bb_reg(adapt, REG_AFE_XTAL_CTRL, 0x7ff800,
678 (crystal_cap | (crystal_cap << 6)));
679
680 return rtstatus;
681 }
682