hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/* Copyright(c) 2018-2019  Realtek Corporation
 */
 
#ifndef __RTW8822C_H__
#define __RTW8822C_H__
 
#include <asm/byteorder.h>
 
struct rtw8822cu_efuse {
   u8 res0[0x30];            /* 0x120 */
   u8 vid[2];            /* 0x150 */
   u8 pid[2];
   u8 res1[3];
   u8 mac_addr[ETH_ALEN];        /* 0x157 */
   u8 res2[0x3d];
};
 
struct rtw8822ce_efuse {
   u8 mac_addr[ETH_ALEN];        /* 0x120 */
   u8 vender_id[2];
   u8 device_id[2];
   u8 sub_vender_id[2];
   u8 sub_device_id[2];
   u8 pmc[2];
   u8 exp_device_cap[2];
   u8 msi_cap;
   u8 ltr_cap;            /* 0x133 */
   u8 exp_link_control[2];
   u8 link_cap[4];
   u8 link_control[2];
   u8 serial_number[8];
   u8 res0:2;            /* 0x144 */
   u8 ltr_en:1;
   u8 res1:2;
   u8 obff:2;
   u8 res2:3;
   u8 obff_cap:2;
   u8 res3:4;
   u8 class_code[3];
   u8 res4;
   u8 pci_pm_L1_2_supp:1;
   u8 pci_pm_L1_1_supp:1;
   u8 aspm_pm_L1_2_supp:1;
   u8 aspm_pm_L1_1_supp:1;
   u8 L1_pm_substates_supp:1;
   u8 res5:3;
   u8 port_common_mode_restore_time;
   u8 port_t_power_on_scale:2;
   u8 res6:1;
   u8 port_t_power_on_value:5;
   u8 res7;
};
 
struct rtw8822c_efuse {
   __le16 rtl_id;
   u8 res0[0x0e];
 
   /* power index for four RF paths */
   struct rtw_txpwr_idx txpwr_idx_table[4];
 
   u8 channel_plan;        /* 0xb8 */
   u8 xtal_k;
   u8 res1;
   u8 iqk_lck;
   u8 res2[5];            /* 0xbc */
   u8 rf_board_option;
   u8 rf_feature_option;
   u8 rf_bt_setting;
   u8 eeprom_version;
   u8 eeprom_customer_id;
   u8 tx_bb_swing_setting_2g;
   u8 tx_bb_swing_setting_5g;
   u8 tx_pwr_calibrate_rate;
   u8 rf_antenna_option;        /* 0xc9 */
   u8 rfe_option;
   u8 country_code[2];
   u8 res3[3];
   u8 path_a_thermal;        /* 0xd0 */
   u8 path_b_thermal;
   u8 res4[2];
   u8 rx_gain_gap_2g_ofdm;
   u8 res5;
   u8 rx_gain_gap_2g_cck;
   u8 res6;
   u8 rx_gain_gap_5gl;
   u8 res7;
   u8 rx_gain_gap_5gm;
   u8 res8;
   u8 rx_gain_gap_5gh;
   u8 res9;
   u8 res10[0x42];
   union {
       struct rtw8822cu_efuse u;
       struct rtw8822ce_efuse e;
   };
};
 
enum rtw8822c_dpk_agc_phase {
   RTW_DPK_GAIN_CHECK,
   RTW_DPK_GAIN_LARGE,
   RTW_DPK_GAIN_LESS,
   RTW_DPK_GL_LARGE,
   RTW_DPK_GL_LESS,
   RTW_DPK_LOSS_CHECK,
   RTW_DPK_AGC_OUT,
};
 
enum rtw8822c_dpk_one_shot_action {
   RTW_DPK_CAL_PWR,
   RTW_DPK_GAIN_LOSS,
   RTW_DPK_DO_DPK,
   RTW_DPK_DPK_ON,
   RTW_DPK_DAGC,
   RTW_DPK_ACTION_MAX
};
 
void rtw8822c_parse_tbl_dpk(struct rtw_dev *rtwdev,
               const struct rtw_table *tbl);
 
#define RTW_DECL_TABLE_DPK(name)            \
const struct rtw_table name ## _tbl = {            \
   .data = name,                    \
   .size = ARRAY_SIZE(name),            \
   .parse = rtw8822c_parse_tbl_dpk,        \
}
 
#define DACK_PATH_8822C        2
#define DACK_REG_8822C        16
#define DACK_RF_8822C        1
#define DACK_SN_8822C        100
 
/* phy status page0 */
#define GET_PHY_STAT_P0_PWDB_A(phy_stat)                                       \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))
#define GET_PHY_STAT_P0_PWDB_B(phy_stat)                                       \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(7, 0))
#define GET_PHY_STAT_P0_GAIN_A(phy_stat)                                       \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(21, 16))
#define GET_PHY_STAT_P0_GAIN_B(phy_stat)                                       \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(29, 24))
 
/* phy status page1 */
#define GET_PHY_STAT_P1_PWDB_A(phy_stat)                                       \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))
#define GET_PHY_STAT_P1_PWDB_B(phy_stat)                                       \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(23, 16))
#define GET_PHY_STAT_P1_L_RXSC(phy_stat)                                       \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(11, 8))
#define GET_PHY_STAT_P1_HT_RXSC(phy_stat)                                      \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(15, 12))
#define GET_PHY_STAT_P1_RXEVM_A(phy_stat)                                      \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(7, 0))
#define GET_PHY_STAT_P1_RXEVM_B(phy_stat)                                      \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(15, 8))
#define GET_PHY_STAT_P1_CFO_TAIL_A(phy_stat)                                 \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x05), GENMASK(7, 0))
#define GET_PHY_STAT_P1_CFO_TAIL_B(phy_stat)                                 \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x05), GENMASK(15, 8))
#define GET_PHY_STAT_P1_RXSNR_A(phy_stat)                                      \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x06), GENMASK(7, 0))
#define GET_PHY_STAT_P1_RXSNR_B(phy_stat)                                      \
   le32_get_bits(*((__le32 *)(phy_stat) + 0x06), GENMASK(15, 8))
 
#define REG_ANAPARLDO_POW_MAC    0x0029
#define BIT_LDOE25_PON        BIT(0)
#define REG_RRSR        0x0440
#define BITS_RRSR_RSC        (BIT(21) | BIT(22))
 
#define REG_TXDFIR0    0x808
#define REG_DFIRBW    0x810
#define REG_ANTMAP0    0x820
#define REG_ANTMAP    0x824
#define REG_DYMPRITH    0x86c
#define REG_DYMENTH0    0x870
#define REG_DYMENTH    0x874
#define REG_SBD        0x88c
#define BITS_SUBTUNE        GENMASK(15, 12)
#define REG_DYMTHMIN    0x8a4
#define REG_TXBWCTL    0x9b0
#define REG_TXCLK    0x9b4
#define REG_SCOTRK    0xc30
#define REG_MRCM    0xc38
#define REG_AGCSWSH    0xc44
#define REG_ANTWTPD    0xc54
#define REG_PT_CHSMO    0xcbc
#define BIT_PT_OPT        BIT(21)
#define REG_ORITXCODE    0x1800
#define REG_3WIRE    0x180c
#define BIT_3WIRE_TX_EN        BIT(0)
#define BIT_3WIRE_RX_EN        BIT(1)
#define BIT_3WIRE_PI_ON        BIT(28)
#define REG_ANAPAR_A    0x1830
#define BIT_ANAPAR_UPDATE    BIT(29)
#define REG_RXAGCCTL0    0x18ac
#define BITS_RXAGC_CCK        GENMASK(15, 12)
#define BITS_RXAGC_OFDM        GENMASK(8, 4)
#define REG_DCKA_I_0    0x18bc
#define REG_DCKA_I_1    0x18c0
#define REG_DCKA_Q_0    0x18d8
#define REG_DCKA_Q_1    0x18dc
#define REG_CCKSB    0x1a00
#define REG_RXCCKSEL    0x1a04
#define REG_BGCTRL    0x1a14
#define BITS_RX_IQ_WEIGHT    (BIT(8) | BIT(9))
#define REG_TXF0    0x1a20
#define REG_TXF1    0x1a24
#define REG_TXF2    0x1a28
#define REG_CCANRX    0x1a2c
#define BIT_CCK_FA_RST        (BIT(14) | BIT(15))
#define BIT_OFDM_FA_RST        (BIT(12) | BIT(13))
#define REG_CCK_FACNT    0x1a5c
#define REG_CCKTXONLY    0x1a80
#define BIT_BB_CCK_CHECK_EN    BIT(18)
#define REG_TXF3    0x1a98
#define REG_TXF4    0x1a9c
#define REG_TXF5    0x1aa0
#define REG_TXF6    0x1aac
#define REG_TXF7    0x1ab0
#define REG_CCK_SOURCE    0x1abc
#define BIT_NBI_EN        BIT(30)
#define REG_IQKSTAT    0x1b10
#define REG_TXANT    0x1c28
#define REG_ENCCK    0x1c3c
#define BIT_CCK_BLK_EN        BIT(1)
#define BIT_CCK_OFDM_BLK_EN    (BIT(0) | BIT(1))
#define REG_CCAMSK    0x1c80
#define REG_RSTB    0x1c90
#define BIT_RSTB_3WIRE        BIT(8)
#define REG_RX_BREAK    0x1d2c
#define BIT_COM_RX_GCK_EN    BIT(31)
#define REG_RXFNCTL    0x1d30
#define REG_RXIGI    0x1d70
#define REG_ENFN    0x1e24
#define REG_TXANTSEG    0x1e28
#define REG_TXLGMAP    0x1e2c
#define REG_CCKPATH    0x1e5c
#define REG_CNT_CTRL    0x1eb4
#define BIT_ALL_CNT_RST        BIT(25)
#define REG_OFDM_FACNT    0x2d00
#define REG_OFDM_FACNT1    0x2d04
#define REG_OFDM_FACNT2    0x2d08
#define REG_OFDM_FACNT3    0x2d0c
#define REG_OFDM_FACNT4    0x2d10
#define REG_OFDM_FACNT5    0x2d20
#define REG_RPT_CIP    0x2d9c
#define REG_OFDM_TXCNT    0x2de0
#define REG_ORITXCODE2    0x4100
#define REG_3WIRE2    0x410c
#define REG_ANAPAR_B    0x4130
#define REG_RXAGCCTL    0x41ac
#define REG_DCKB_I_0    0x41bc
#define REG_DCKB_I_1    0x41c0
#define REG_DCKB_Q_0    0x41d8
#define REG_DCKB_Q_1    0x41dc
 
#define RF_MODE_TRXAGC        0x00
#define RF_RXAGC_OFFSET        0x19
#define RF_BW_TRXBB        0x1a
#define RF_TX_GAIN_OFFSET    0x55
#define RF_TX_GAIN        0x56
#define RF_TXA_LB_SW        0x63
#define RF_RXG_GAIN        0x87
#define RF_RXA_MIX_GAIN        0x8a
#define RF_EXT_TIA_BW        0x8f
#define RF_DEBUG        0xde
 
#define REG_NCTL0        0x1b00
#define REG_DPD_CTL0_S0        0x1b04
#define REG_DPD_CTL1_S0        0x1b08
#define REG_IQK_CTL1        0x1b20
#define REG_DPD_LUT0        0x1b44
#define REG_DPD_CTL0_S1        0x1b5c
#define REG_DPD_LUT3        0x1b60
#define REG_DPD_CTL1_S1        0x1b60
#define REG_DPD_AGC        0x1b67
#define REG_DPD_CTL0        0x1bb4
#define REG_R_CONFIG        0x1bcc
#define REG_RXSRAM_CTL        0x1bd4
#define REG_DPD_CTL11        0x1be4
#define REG_DPD_CTL12        0x1be8
#define REG_DPD_CTL15        0x1bf4
#define REG_DPD_CTL16        0x1bf8
#define REG_STAT_RPT        0x1bfc
 
#define BIT_EXT_TIA_BW        BIT(1)
#define BIT_DE_TRXBW        BIT(2)
#define BIT_DE_TX_GAIN        BIT(16)
#define BIT_RXG_GAIN        BIT(18)
#define BIT_DE_PWR_TRIM        BIT(19)
#define BIT_INNER_LB        BIT(21)
#define BIT_BYPASS_DPD        BIT(25)
#define BIT_DPD_EN        BIT(31)
#define BIT_SUBPAGE        GENMASK(3, 0)
#define BIT_TXAGC        GENMASK(4, 0)
#define BIT_GAIN_TXBB        GENMASK(4, 0)
#define BIT_LB_ATT        GENMASK(4, 2)
#define BIT_RXA_MIX_GAIN    GENMASK(4, 3)
#define BIT_IQ_SWITCH        GENMASK(5, 0)
#define BIT_DPD_CLK        GENMASK(7, 4)
#define BIT_RXAGC        GENMASK(9, 5)
#define BIT_BW_RXBB        GENMASK(11, 10)
#define BIT_LB_SW        GENMASK(13, 12)
#define BIT_BW_TXBB        GENMASK(14, 12)
#define BIT_GLOSS_DB        GENMASK(14, 12)
#define BIT_TXA_LB_ATT        GENMASK(15, 14)
#define BIT_TX_OFFSET_VAL    GENMASK(18, 14)
#define BIT_RPT_SEL        GENMASK(20, 16)
#define BIT_GS_PWSF        GENMASK(27, 0)
#define BIT_RPT_DGAIN        GENMASK(27, 16)
#define BIT_TX_CFIR        GENMASK(31, 30)
 
#define PPG_THERMAL_A 0x1ef
#define PPG_THERMAL_B 0x1b0
#define RF_THEMAL_MASK GENMASK(19, 16)
#define PPG_2GL_TXAB 0x1d4
#define PPG_2GM_TXAB 0x1ee
#define PPG_2GH_TXAB 0x1d2
#define PPG_2G_A_MASK GENMASK(3, 0)
#define PPG_2G_B_MASK GENMASK(7, 4)
#define PPG_5GL1_TXA 0x1ec
#define PPG_5GL2_TXA 0x1e8
#define PPG_5GM1_TXA 0x1e4
#define PPG_5GM2_TXA 0x1e0
#define PPG_5GH1_TXA 0x1dc
#define PPG_5GL1_TXB 0x1eb
#define PPG_5GL2_TXB 0x1e7
#define PPG_5GM1_TXB 0x1e3
#define PPG_5GM2_TXB 0x1df
#define PPG_5GH1_TXB 0x1db
#define PPG_5G_MASK GENMASK(4, 0)
#define PPG_PABIAS_2GA 0x1d6
#define PPG_PABIAS_2GB 0x1d5
#define PPG_PABIAS_5GA 0x1d8
#define PPG_PABIAS_5GB 0x1d7
#define PPG_PABIAS_MASK GENMASK(3, 0)
#define RF_PABIAS_2G_MASK GENMASK(15, 12)
#define RF_PABIAS_5G_MASK GENMASK(19, 16)
 
#endif