1/* SPDX-License-Identifier: GPL-2.0-only
2 *
3 * Copyright (c) 2021, MediaTek Inc.
4 * Copyright (c) 2021-2022, Intel Corporation.
5 *
6 * Authors:
7 * Haijun Liu <haijun.liu@mediatek.com>
8 * Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
9 *
10 * Contributors:
11 * Amir Hanania <amir.hanania@intel.com>
12 * Andy Shevchenko <andriy.shevchenko@linux.intel.com>
13 * Eliot Lee <eliot.lee@intel.com>
14 * Moises Veleta <moises.veleta@intel.com>
15 * Ricardo Martinez <ricardo.martinez@linux.intel.com>
16 * Sreehari Kancharla <sreehari.kancharla@intel.com>
17 */
18
19#ifndef __T7XX_REG_H__
20#define __T7XX_REG_H__
21
22#include <linux/bits.h>
23
24/* Device base address offset */
25#define MHCCIF_RC_DEV_BASE 0x10024000
26
27#define REG_RC2EP_SW_BSY 0x04
28#define REG_RC2EP_SW_INT_START 0x08
29
30#define REG_RC2EP_SW_TCHNUM 0x0c
31#define H2D_CH_EXCEPTION_ACK 1
32#define H2D_CH_EXCEPTION_CLEARQ_ACK 2
33#define H2D_CH_DS_LOCK 3
34/* Channels 4-8 are reserved */
35#define H2D_CH_SUSPEND_REQ 9
36#define H2D_CH_RESUME_REQ 10
37#define H2D_CH_SUSPEND_REQ_AP 11
38#define H2D_CH_RESUME_REQ_AP 12
39#define H2D_CH_DEVICE_RESET 13
40#define H2D_CH_DRM_DISABLE_AP 14
41
42#define REG_EP2RC_SW_INT_STS 0x10
43#define REG_EP2RC_SW_INT_ACK 0x14
44#define REG_EP2RC_SW_INT_EAP_MASK 0x20
45#define REG_EP2RC_SW_INT_EAP_MASK_SET 0x30
46#define REG_EP2RC_SW_INT_EAP_MASK_CLR 0x40
47
48#define D2H_INT_DS_LOCK_ACK BIT(0)
49#define D2H_INT_EXCEPTION_INIT BIT(1)
50#define D2H_INT_EXCEPTION_INIT_DONE BIT(2)
51#define D2H_INT_EXCEPTION_CLEARQ_DONE BIT(3)
52#define D2H_INT_EXCEPTION_ALLQ_RESET BIT(4)
53#define D2H_INT_PORT_ENUM BIT(5)
54/* Bits 6-10 are reserved */
55#define D2H_INT_SUSPEND_ACK BIT(11)
56#define D2H_INT_RESUME_ACK BIT(12)
57#define D2H_INT_SUSPEND_ACK_AP BIT(13)
58#define D2H_INT_RESUME_ACK_AP BIT(14)
59#define D2H_INT_ASYNC_AP_HK BIT(15)
60#define D2H_INT_ASYNC_MD_HK BIT(16)
61
62/* Register base */
63#define INFRACFG_AO_DEV_CHIP 0x10001000
64
65/* ATR setting */
66#define T7XX_PCIE_REG_TRSL_ADDR_CHIP 0x10000000
67#define T7XX_PCIE_REG_SIZE_CHIP 0x00400000
68
69/* Reset Generic Unit (RGU) */
70#define TOPRGU_CH_PCIE_IRQ_STA 0x1000790c
71
72#define ATR_PORT_OFFSET 0x100
73#define ATR_TABLE_OFFSET 0x20
74#define ATR_TABLE_NUM_PER_ATR 8
75#define ATR_TRANSPARENT_SIZE 0x3f
76
77/* PCIE_MAC_IREG Register Definition */
78
79#define ISTAT_HST_CTRL 0x01ac
80#define ISTAT_HST_CTRL_DIS BIT(0)
81
82#define T7XX_PCIE_MISC_CTRL 0x0348
83#define T7XX_PCIE_MISC_MAC_SLEEP_DIS BIT(7)
84
85#define T7XX_PCIE_CFG_MSIX 0x03ec
86#define ATR_PCIE_WIN0_T0_ATR_PARAM_SRC_ADDR 0x0600
87#define ATR_PCIE_WIN0_T0_TRSL_ADDR 0x0608
88#define ATR_PCIE_WIN0_T0_TRSL_PARAM 0x0610
89#define ATR_PCIE_WIN0_ADDR_ALGMT GENMASK_ULL(63, 12)
90
91#define ATR_SRC_ADDR_INVALID 0x007f
92
93#define T7XX_PCIE_PM_RESUME_STATE 0x0d0c
94
95enum t7xx_pm_resume_state {
96 PM_RESUME_REG_STATE_L3,
97 PM_RESUME_REG_STATE_L1,
98 PM_RESUME_REG_STATE_INIT,
99 PM_RESUME_REG_STATE_EXP,
100 PM_RESUME_REG_STATE_L2,
101 PM_RESUME_REG_STATE_L2_EXP,
102};
103
104enum host_event_e {
105 HOST_EVENT_INIT = 0,
106 FASTBOOT_DL_NOTIFY = 0x3,
107};
108
109#define T7XX_PCIE_MISC_DEV_STATUS 0x0d1c
110#define MISC_STAGE_MASK GENMASK(2, 0)
111#define MISC_RESET_TYPE_PLDR BIT(26)
112#define MISC_RESET_TYPE_FLDR BIT(27)
113#define MISC_RESET_TYPE_PLDR BIT(26)
114#define MISC_LK_EVENT_MASK GENMASK(11, 8)
115#define HOST_EVENT_MASK GENMASK(31, 28)
116
117enum lk_event_id {
118 LK_EVENT_NORMAL = 0,
119 LK_EVENT_CREATE_PD_PORT = 1,
120 LK_EVENT_CREATE_POST_DL_PORT = 2,
121 LK_EVENT_RESET = 7,
122};
123
124enum t7xx_device_stage {
125 T7XX_DEV_STAGE_INIT = 0,
126 T7XX_DEV_STAGE_BROM_PRE = 1,
127 T7XX_DEV_STAGE_BROM_POST = 2,
128 T7XX_DEV_STAGE_LK = 3,
129 T7XX_DEV_STAGE_LINUX = 4,
130};
131
132#define T7XX_PCIE_RESOURCE_STATUS 0x0d28
133#define T7XX_PCIE_RESOURCE_STS_MSK GENMASK(4, 0)
134
135#define DISABLE_ASPM_LOWPWR 0x0e50
136#define ENABLE_ASPM_LOWPWR 0x0e54
137#define T7XX_L1_BIT(i) BIT((i) * 4 + 1)
138#define T7XX_L1_1_BIT(i) BIT((i) * 4 + 2)
139#define T7XX_L1_2_BIT(i) BIT((i) * 4 + 3)
140
141#define MSIX_ISTAT_HST_GRP0_0 0x0f00
142#define IMASK_HOST_MSIX_SET_GRP0_0 0x3000
143#define IMASK_HOST_MSIX_CLR_GRP0_0 0x3080
144#define EXT_INT_START 24
145#define EXT_INT_NUM 8
146#define MSIX_MSK_SET_ALL GENMASK(31, 24)
147
148enum t7xx_int {
149 DPMAIF_INT,
150 CLDMA0_INT,
151 CLDMA1_INT,
152 CLDMA2_INT,
153 MHCCIF_INT,
154 DPMAIF2_INT,
155 SAP_RGU_INT,
156 CLDMA3_INT,
157};
158
159/* DPMA definitions */
160
161#define DPMAIF_PD_BASE 0x1022d000
162#define BASE_DPMAIF_UL DPMAIF_PD_BASE
163#define BASE_DPMAIF_DL (DPMAIF_PD_BASE + 0x100)
164#define BASE_DPMAIF_AP_MISC (DPMAIF_PD_BASE + 0x400)
165#define BASE_DPMAIF_MMW_HPC (DPMAIF_PD_BASE + 0x600)
166#define BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX (DPMAIF_PD_BASE + 0x900)
167#define BASE_DPMAIF_PD_SRAM_DL (DPMAIF_PD_BASE + 0xc00)
168#define BASE_DPMAIF_PD_SRAM_UL (DPMAIF_PD_BASE + 0xd00)
169
170#define DPMAIF_AO_BASE 0x10014000
171#define BASE_DPMAIF_AO_UL DPMAIF_AO_BASE
172#define BASE_DPMAIF_AO_DL (DPMAIF_AO_BASE + 0x400)
173
174#define DPMAIF_UL_ADD_DESC (BASE_DPMAIF_UL + 0x00)
175#define DPMAIF_UL_CHK_BUSY (BASE_DPMAIF_UL + 0x88)
176#define DPMAIF_UL_RESERVE_AO_RW (BASE_DPMAIF_UL + 0xac)
177#define DPMAIF_UL_ADD_DESC_CH0 (BASE_DPMAIF_UL + 0xb0)
178
179#define DPMAIF_DL_BAT_INIT (BASE_DPMAIF_DL + 0x00)
180#define DPMAIF_DL_BAT_ADD (BASE_DPMAIF_DL + 0x04)
181#define DPMAIF_DL_BAT_INIT_CON0 (BASE_DPMAIF_DL + 0x08)
182#define DPMAIF_DL_BAT_INIT_CON1 (BASE_DPMAIF_DL + 0x0c)
183#define DPMAIF_DL_BAT_INIT_CON2 (BASE_DPMAIF_DL + 0x10)
184#define DPMAIF_DL_BAT_INIT_CON3 (BASE_DPMAIF_DL + 0x50)
185#define DPMAIF_DL_CHK_BUSY (BASE_DPMAIF_DL + 0xb4)
186
187#define DPMAIF_AP_L2TISAR0 (BASE_DPMAIF_AP_MISC + 0x00)
188#define DPMAIF_AP_APDL_L2TISAR0 (BASE_DPMAIF_AP_MISC + 0x50)
189#define DPMAIF_AP_IP_BUSY (BASE_DPMAIF_AP_MISC + 0x60)
190#define DPMAIF_AP_CG_EN (BASE_DPMAIF_AP_MISC + 0x68)
191#define DPMAIF_AP_OVERWRITE_CFG (BASE_DPMAIF_AP_MISC + 0x90)
192#define DPMAIF_AP_MEM_CLR (BASE_DPMAIF_AP_MISC + 0x94)
193#define DPMAIF_AP_ALL_L2TISAR0_MASK GENMASK(31, 0)
194#define DPMAIF_AP_APDL_ALL_L2TISAR0_MASK GENMASK(31, 0)
195#define DPMAIF_AP_IP_BUSY_MASK GENMASK(31, 0)
196
197#define DPMAIF_AO_UL_INIT_SET (BASE_DPMAIF_AO_UL + 0x0)
198#define DPMAIF_AO_UL_CHNL_ARB0 (BASE_DPMAIF_AO_UL + 0x1c)
199#define DPMAIF_AO_UL_AP_L2TIMR0 (BASE_DPMAIF_AO_UL + 0x80)
200#define DPMAIF_AO_UL_AP_L2TIMCR0 (BASE_DPMAIF_AO_UL + 0x84)
201#define DPMAIF_AO_UL_AP_L2TIMSR0 (BASE_DPMAIF_AO_UL + 0x88)
202#define DPMAIF_AO_UL_AP_L1TIMR0 (BASE_DPMAIF_AO_UL + 0x8c)
203#define DPMAIF_AO_UL_APDL_L2TIMR0 (BASE_DPMAIF_AO_UL + 0x90)
204#define DPMAIF_AO_UL_APDL_L2TIMCR0 (BASE_DPMAIF_AO_UL + 0x94)
205#define DPMAIF_AO_UL_APDL_L2TIMSR0 (BASE_DPMAIF_AO_UL + 0x98)
206#define DPMAIF_AO_AP_DLUL_IP_BUSY_MASK (BASE_DPMAIF_AO_UL + 0x9c)
207
208#define DPMAIF_AO_UL_CHNL0_CON0 (BASE_DPMAIF_PD_SRAM_UL + 0x10)
209#define DPMAIF_AO_UL_CHNL0_CON1 (BASE_DPMAIF_PD_SRAM_UL + 0x14)
210#define DPMAIF_AO_UL_CHNL0_CON2 (BASE_DPMAIF_PD_SRAM_UL + 0x18)
211#define DPMAIF_AO_UL_CH0_STA (BASE_DPMAIF_PD_SRAM_UL + 0x70)
212
213#define DPMAIF_AO_DL_INIT_SET (BASE_DPMAIF_AO_DL + 0x00)
214#define DPMAIF_AO_DL_IRQ_MASK (BASE_DPMAIF_AO_DL + 0x0c)
215#define DPMAIF_AO_DL_DLQPIT_INIT_CON5 (BASE_DPMAIF_AO_DL + 0x28)
216#define DPMAIF_AO_DL_DLQPIT_TRIG_THRES (BASE_DPMAIF_AO_DL + 0x34)
217
218#define DPMAIF_AO_DL_PKTINFO_CON0 (BASE_DPMAIF_PD_SRAM_DL + 0x00)
219#define DPMAIF_AO_DL_PKTINFO_CON1 (BASE_DPMAIF_PD_SRAM_DL + 0x04)
220#define DPMAIF_AO_DL_PKTINFO_CON2 (BASE_DPMAIF_PD_SRAM_DL + 0x08)
221#define DPMAIF_AO_DL_RDY_CHK_THRES (BASE_DPMAIF_PD_SRAM_DL + 0x0c)
222#define DPMAIF_AO_DL_RDY_CHK_FRG_THRES (BASE_DPMAIF_PD_SRAM_DL + 0x10)
223
224#define DPMAIF_AO_DL_DLQ_AGG_CFG (BASE_DPMAIF_PD_SRAM_DL + 0x20)
225#define DPMAIF_AO_DL_DLQPIT_TIMEOUT0 (BASE_DPMAIF_PD_SRAM_DL + 0x24)
226#define DPMAIF_AO_DL_DLQPIT_TIMEOUT1 (BASE_DPMAIF_PD_SRAM_DL + 0x28)
227#define DPMAIF_AO_DL_HPC_CNTL (BASE_DPMAIF_PD_SRAM_DL + 0x38)
228#define DPMAIF_AO_DL_PIT_SEQ_END (BASE_DPMAIF_PD_SRAM_DL + 0x40)
229
230#define DPMAIF_AO_DL_BAT_RD_IDX (BASE_DPMAIF_PD_SRAM_DL + 0xd8)
231#define DPMAIF_AO_DL_BAT_WR_IDX (BASE_DPMAIF_PD_SRAM_DL + 0xdc)
232#define DPMAIF_AO_DL_PIT_RD_IDX (BASE_DPMAIF_PD_SRAM_DL + 0xec)
233#define DPMAIF_AO_DL_PIT_WR_IDX (BASE_DPMAIF_PD_SRAM_DL + 0x60)
234#define DPMAIF_AO_DL_FRGBAT_RD_IDX (BASE_DPMAIF_PD_SRAM_DL + 0x78)
235#define DPMAIF_AO_DL_DLQ_WR_IDX (BASE_DPMAIF_PD_SRAM_DL + 0xa4)
236
237#define DPMAIF_HPC_INTR_MASK (BASE_DPMAIF_MMW_HPC + 0x0f4)
238#define DPMA_HPC_ALL_INT_MASK GENMASK(15, 0)
239
240#define DPMAIF_HPC_DLQ_PATH_MODE 3
241#define DPMAIF_HPC_ADD_MODE_DF 0
242#define DPMAIF_HPC_TOTAL_NUM 8
243#define DPMAIF_HPC_MAX_TOTAL_NUM 8
244
245#define DPMAIF_DL_DLQPIT_INIT (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x00)
246#define DPMAIF_DL_DLQPIT_ADD (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x10)
247#define DPMAIF_DL_DLQPIT_INIT_CON0 (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x14)
248#define DPMAIF_DL_DLQPIT_INIT_CON1 (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x18)
249#define DPMAIF_DL_DLQPIT_INIT_CON2 (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x1c)
250#define DPMAIF_DL_DLQPIT_INIT_CON3 (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x20)
251#define DPMAIF_DL_DLQPIT_INIT_CON4 (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x24)
252#define DPMAIF_DL_DLQPIT_INIT_CON5 (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x28)
253#define DPMAIF_DL_DLQPIT_INIT_CON6 (BASE_DPMAIF_DL_DLQ_REMOVEAO_IDX + 0x2c)
254
255#define DPMAIF_ULQSAR_n(q) (DPMAIF_AO_UL_CHNL0_CON0 + 0x10 * (q))
256#define DPMAIF_UL_DRBSIZE_ADDRH_n(q) (DPMAIF_AO_UL_CHNL0_CON1 + 0x10 * (q))
257#define DPMAIF_UL_DRB_ADDRH_n(q) (DPMAIF_AO_UL_CHNL0_CON2 + 0x10 * (q))
258#define DPMAIF_ULQ_STA0_n(q) (DPMAIF_AO_UL_CH0_STA + 0x04 * (q))
259#define DPMAIF_ULQ_ADD_DESC_CH_n(q) (DPMAIF_UL_ADD_DESC_CH0 + 0x04 * (q))
260
261#define DPMAIF_UL_DRB_RIDX_MSK GENMASK(31, 16)
262
263#define DPMAIF_AP_RGU_ASSERT 0x10001150
264#define DPMAIF_AP_RGU_DEASSERT 0x10001154
265#define DPMAIF_AP_RST_BIT BIT(2)
266
267#define DPMAIF_AP_AO_RGU_ASSERT 0x10001140
268#define DPMAIF_AP_AO_RGU_DEASSERT 0x10001144
269#define DPMAIF_AP_AO_RST_BIT BIT(6)
270
271/* DPMAIF init/restore */
272#define DPMAIF_UL_ADD_NOT_READY BIT(31)
273#define DPMAIF_UL_ADD_UPDATE BIT(31)
274#define DPMAIF_UL_ADD_COUNT_MASK GENMASK(15, 0)
275#define DPMAIF_UL_ALL_QUE_ARB_EN GENMASK(11, 8)
276
277#define DPMAIF_DL_ADD_UPDATE BIT(31)
278#define DPMAIF_DL_ADD_NOT_READY BIT(31)
279#define DPMAIF_DL_FRG_ADD_UPDATE BIT(16)
280#define DPMAIF_DL_ADD_COUNT_MASK GENMASK(15, 0)
281
282#define DPMAIF_DL_BAT_INIT_ALLSET BIT(0)
283#define DPMAIF_DL_BAT_FRG_INIT BIT(16)
284#define DPMAIF_DL_BAT_INIT_EN BIT(31)
285#define DPMAIF_DL_BAT_INIT_NOT_READY BIT(31)
286#define DPMAIF_DL_BAT_INIT_ONLY_ENABLE_BIT 0
287
288#define DPMAIF_DL_PIT_INIT_ALLSET BIT(0)
289#define DPMAIF_DL_PIT_INIT_EN BIT(31)
290#define DPMAIF_DL_PIT_INIT_NOT_READY BIT(31)
291
292#define DPMAIF_BAT_REMAIN_SZ_BASE 16
293#define DPMAIF_BAT_BUFFER_SZ_BASE 128
294#define DPMAIF_FRG_BUFFER_SZ_BASE 128
295
296#define DLQ_PIT_IDX_SIZE 0x20
297
298#define DPMAIF_PIT_SIZE_MSK GENMASK(17, 0)
299
300#define DPMAIF_PIT_REM_CNT_MSK GENMASK(17, 0)
301
302#define DPMAIF_BAT_EN_MSK BIT(16)
303#define DPMAIF_FRG_EN_MSK BIT(28)
304#define DPMAIF_BAT_SIZE_MSK GENMASK(15, 0)
305
306#define DPMAIF_BAT_BID_MAXCNT_MSK GENMASK(31, 16)
307#define DPMAIF_BAT_REMAIN_MINSZ_MSK GENMASK(15, 8)
308#define DPMAIF_PIT_CHK_NUM_MSK GENMASK(31, 24)
309#define DPMAIF_BAT_BUF_SZ_MSK GENMASK(16, 8)
310#define DPMAIF_FRG_BUF_SZ_MSK GENMASK(16, 8)
311#define DPMAIF_BAT_RSV_LEN_MSK GENMASK(7, 0)
312#define DPMAIF_PKT_ALIGN_MSK GENMASK(23, 22)
313
314#define DPMAIF_BAT_CHECK_THRES_MSK GENMASK(21, 16)
315#define DPMAIF_FRG_CHECK_THRES_MSK GENMASK(7, 0)
316
317#define DPMAIF_PKT_ALIGN_EN BIT(23)
318
319#define DPMAIF_DRB_SIZE_MSK GENMASK(15, 0)
320
321#define DPMAIF_DL_RD_WR_IDX_MSK GENMASK(17, 0)
322
323/* DPMAIF_UL_CHK_BUSY */
324#define DPMAIF_UL_IDLE_STS BIT(11)
325/* DPMAIF_DL_CHK_BUSY */
326#define DPMAIF_DL_IDLE_STS BIT(23)
327/* DPMAIF_AO_DL_RDY_CHK_THRES */
328#define DPMAIF_DL_PKT_CHECKSUM_EN BIT(31)
329#define DPMAIF_PORT_MODE_PCIE BIT(30)
330#define DPMAIF_DL_BURST_PIT_EN BIT(13)
331/* DPMAIF_DL_BAT_INIT_CON1 */
332#define DPMAIF_DL_BAT_CACHE_PRI BIT(22)
333/* DPMAIF_AP_MEM_CLR */
334#define DPMAIF_MEM_CLR BIT(0)
335/* DPMAIF_AP_OVERWRITE_CFG */
336#define DPMAIF_SRAM_SYNC BIT(0)
337/* DPMAIF_AO_UL_INIT_SET */
338#define DPMAIF_UL_INIT_DONE BIT(0)
339/* DPMAIF_AO_DL_INIT_SET */
340#define DPMAIF_DL_INIT_DONE BIT(0)
341/* DPMAIF_AO_DL_PIT_SEQ_END */
342#define DPMAIF_DL_PIT_SEQ_MSK GENMASK(7, 0)
343/* DPMAIF_UL_RESERVE_AO_RW */
344#define DPMAIF_PCIE_MODE_SET_VALUE 0x55
345/* DPMAIF_AP_CG_EN */
346#define DPMAIF_CG_EN 0x7f
347
348#define DPMAIF_UDL_IP_BUSY BIT(0)
349#define DPMAIF_DL_INT_DLQ0_QDONE BIT(8)
350#define DPMAIF_DL_INT_DLQ1_QDONE BIT(9)
351#define DPMAIF_DL_INT_DLQ0_PITCNT_LEN BIT(10)
352#define DPMAIF_DL_INT_DLQ1_PITCNT_LEN BIT(11)
353#define DPMAIF_DL_INT_Q2TOQ1 BIT(24)
354#define DPMAIF_DL_INT_Q2APTOP BIT(25)
355
356#define DPMAIF_DLQ_LOW_TIMEOUT_THRES_MKS GENMASK(15, 0)
357#define DPMAIF_DLQ_HIGH_TIMEOUT_THRES_MSK GENMASK(31, 16)
358
359/* DPMAIF DLQ HW configure */
360#define DPMAIF_AGG_MAX_LEN_DF 65535
361#define DPMAIF_AGG_TBL_ENT_NUM_DF 50
362#define DPMAIF_HASH_PRIME_DF 13
363#define DPMAIF_MID_TIMEOUT_THRES_DF 100
364#define DPMAIF_DLQ_TIMEOUT_THRES_DF 100
365#define DPMAIF_DLQ_PRS_THRES_DF 10
366#define DPMAIF_DLQ_HASH_BIT_CHOOSE_DF 0
367
368#define DPMAIF_DLQPIT_EN_MSK BIT(20)
369#define DPMAIF_DLQPIT_CHAN_OFS 16
370#define DPMAIF_ADD_DLQ_PIT_CHAN_OFS 20
371
372#endif /* __T7XX_REG_H__ */
373

source code of linux/drivers/net/wwan/t7xx/t7xx_reg.h