xref: /openbmc/linux/drivers/net/ipa/ipa_reg.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1cdf2e941SAlex Elder /* SPDX-License-Identifier: GPL-2.0 */
2cdf2e941SAlex Elder 
3cdf2e941SAlex Elder /* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
48ba59716SAlex Elder  * Copyright (C) 2018-2023 Linaro Ltd.
5cdf2e941SAlex Elder  */
6cdf2e941SAlex Elder #ifndef _IPA_REG_H_
7cdf2e941SAlex Elder #define _IPA_REG_H_
8cdf2e941SAlex Elder 
9cdf2e941SAlex Elder #include <linux/bitfield.h>
1007f120bcSAlex Elder #include <linux/bug.h>
11cdf2e941SAlex Elder 
12cdf2e941SAlex Elder #include "ipa_version.h"
1381772e44SAlex Elder #include "reg.h"
14cdf2e941SAlex Elder 
15cdf2e941SAlex Elder struct ipa;
16cdf2e941SAlex Elder 
17cdf2e941SAlex Elder /**
18cdf2e941SAlex Elder  * DOC: IPA Registers
19cdf2e941SAlex Elder  *
20cdf2e941SAlex Elder  * IPA registers are located within the "ipa-reg" address space defined by
21ace5dc61SAlex Elder  * Device Tree.  Each register has a specified offset within that space,
22ace5dc61SAlex Elder  * which is mapped into virtual memory space in ipa_mem_init().  Each
23ace5dc61SAlex Elder  * has a unique identifer, taken from the ipa_reg_id enumerated type.
24ace5dc61SAlex Elder  * All IPA registers are 32 bits wide.
25cdf2e941SAlex Elder  *
26ace5dc61SAlex Elder  * Certain "parameterized" register types are duplicated for a number of
27ace5dc61SAlex Elder  * instances of something.  For example, each IPA endpoint has an set of
28ace5dc61SAlex Elder  * registers defining its configuration.  The offset to an endpoint's set
29ace5dc61SAlex Elder  * of registers is computed based on an "base" offset, plus an endpoint's
30ace5dc61SAlex Elder  * ID multiplied and a "stride" value for the register.  Similarly, some
31ace5dc61SAlex Elder  * registers have an offset that depends on execution environment.  In
32ace5dc61SAlex Elder  * this case, the stride is multiplied by a member of the gsi_ee_id
33ace5dc61SAlex Elder  * enumerated type.
34cdf2e941SAlex Elder  *
35ace5dc61SAlex Elder  * Each version of IPA implements an array of ipa_reg structures indexed
36ace5dc61SAlex Elder  * by register ID.  Each entry in the array specifies the base offset and
37ace5dc61SAlex Elder  * (for parameterized registers) a non-zero stride value.  Not all versions
38ace5dc61SAlex Elder  * of IPA define all registers.  The offset for a register is returned by
39fc4cecf7SAlex Elder  * reg_offset() when the register's ipa_reg structure is supplied;
40ace5dc61SAlex Elder  * zero is returned for an undefined register (this should never happen).
41cdf2e941SAlex Elder  *
42ace5dc61SAlex Elder  * Some registers encode multiple fields within them.  Each field in
43ace5dc61SAlex Elder  * such a register has a unique identifier (from an enumerated type).
44ace5dc61SAlex Elder  * The position and width of the fields in a register are defined by
45ace5dc61SAlex Elder  * an array of field masks, indexed by field ID.  Two functions are
46ace5dc61SAlex Elder  * used to access register fields; both take an ipa_reg structure as
47ace5dc61SAlex Elder  * argument.  To encode a value to be represented in a register field,
48f1470fd7SAlex Elder  * the value and field ID are passed to reg_encode().  To extract
49ace5dc61SAlex Elder  * a value encoded in a register field, the field ID is passed to
50f1470fd7SAlex Elder  * reg_decode().  In addition, for single-bit fields, reg_bit()
51ace5dc61SAlex Elder  * can be used to either encode the bit value, or to generate a mask
52ace5dc61SAlex Elder  * used to extract the bit value.
53cdf2e941SAlex Elder  */
54cdf2e941SAlex Elder 
5598e2dd71SAlex Elder /* enum ipa_reg_id - IPA register IDs */
5698e2dd71SAlex Elder enum ipa_reg_id {
5798e2dd71SAlex Elder 	COMP_CFG,
5898e2dd71SAlex Elder 	CLKON_CFG,
5998e2dd71SAlex Elder 	ROUTE,
6098e2dd71SAlex Elder 	SHARED_MEM_SIZE,
6198e2dd71SAlex Elder 	QSB_MAX_WRITES,
6298e2dd71SAlex Elder 	QSB_MAX_READS,
6321e8aacaSAlex Elder 	FILT_ROUT_HASH_EN,				/* IPA v4.2 */
6421e8aacaSAlex Elder 	FILT_ROUT_HASH_FLUSH,			/* Not IPA v4.2 nor IPA v5.0+ */
658ba59716SAlex Elder 	FILT_ROUT_CACHE_FLUSH,				/* IPA v5.0+ */
6698e2dd71SAlex Elder 	STATE_AGGR_ACTIVE,
6798e2dd71SAlex Elder 	IPA_BCR,					/* Not IPA v4.5+ */
6898e2dd71SAlex Elder 	LOCAL_PKT_PROC_CNTXT,
6998e2dd71SAlex Elder 	AGGR_FORCE_CLOSE,
7098e2dd71SAlex Elder 	COUNTER_CFG,					/* Not IPA v4.5+ */
7198e2dd71SAlex Elder 	IPA_TX_CFG,					/* IPA v3.5+ */
7298e2dd71SAlex Elder 	FLAVOR_0,					/* IPA v3.5+ */
7398e2dd71SAlex Elder 	IDLE_INDICATION_CFG,				/* IPA v3.5+ */
7498e2dd71SAlex Elder 	QTIME_TIMESTAMP_CFG,				/* IPA v4.5+ */
7598e2dd71SAlex Elder 	TIMERS_XO_CLK_DIV_CFG,				/* IPA v4.5+ */
7698e2dd71SAlex Elder 	TIMERS_PULSE_GRAN_CFG,				/* IPA v4.5+ */
7798e2dd71SAlex Elder 	SRC_RSRC_GRP_01_RSRC_TYPE,
7898e2dd71SAlex Elder 	SRC_RSRC_GRP_23_RSRC_TYPE,
7921e8aacaSAlex Elder 	SRC_RSRC_GRP_45_RSRC_TYPE,	/* Not IPA v3.5+; IPA v4.5, IPA v5.0 */
8021e8aacaSAlex Elder 	SRC_RSRC_GRP_67_RSRC_TYPE,		/* Not IPA v3.5+; IPA v5.0 */
8198e2dd71SAlex Elder 	DST_RSRC_GRP_01_RSRC_TYPE,
8298e2dd71SAlex Elder 	DST_RSRC_GRP_23_RSRC_TYPE,
8321e8aacaSAlex Elder 	DST_RSRC_GRP_45_RSRC_TYPE,	/* Not IPA v3.5+; IPA v4.5, IPA v5.0 */
8421e8aacaSAlex Elder 	DST_RSRC_GRP_67_RSRC_TYPE,		/* Not IPA v3.5+; IPA v5.0 */
8598e2dd71SAlex Elder 	ENDP_INIT_CTRL,		/* Not IPA v4.2+ for TX, not IPA v4.0+ for RX */
8698e2dd71SAlex Elder 	ENDP_INIT_CFG,
8798e2dd71SAlex Elder 	ENDP_INIT_NAT,			/* TX only */
8898e2dd71SAlex Elder 	ENDP_INIT_HDR,
8998e2dd71SAlex Elder 	ENDP_INIT_HDR_EXT,
9098e2dd71SAlex Elder 	ENDP_INIT_HDR_METADATA_MASK,	/* RX only */
9198e2dd71SAlex Elder 	ENDP_INIT_MODE,			/* TX only */
9298e2dd71SAlex Elder 	ENDP_INIT_AGGR,
9398e2dd71SAlex Elder 	ENDP_INIT_HOL_BLOCK_EN,		/* RX only */
9498e2dd71SAlex Elder 	ENDP_INIT_HOL_BLOCK_TIMER,	/* RX only */
9598e2dd71SAlex Elder 	ENDP_INIT_DEAGGR,		/* TX only */
9698e2dd71SAlex Elder 	ENDP_INIT_RSRC_GRP,
9798e2dd71SAlex Elder 	ENDP_INIT_SEQ,			/* TX only */
9898e2dd71SAlex Elder 	ENDP_STATUS,
9998e2dd71SAlex Elder 	ENDP_FILTER_ROUTER_HSH_CFG,			/* Not IPA v4.2 */
1008ba59716SAlex Elder 	ENDP_FILTER_CACHE_CFG,				/* IPA v5.0+ */
1018ba59716SAlex Elder 	ENDP_ROUTER_CACHE_CFG,				/* IPA v5.0+ */
1028ba59716SAlex Elder 	/* The IRQ registers that follow are only used for GSI_EE_AP */
10398e2dd71SAlex Elder 	IPA_IRQ_STTS,
10498e2dd71SAlex Elder 	IPA_IRQ_EN,
10598e2dd71SAlex Elder 	IPA_IRQ_CLR,
10698e2dd71SAlex Elder 	IPA_IRQ_UC,
10798e2dd71SAlex Elder 	IRQ_SUSPEND_INFO,
10898e2dd71SAlex Elder 	IRQ_SUSPEND_EN,					/* IPA v3.1+ */
10998e2dd71SAlex Elder 	IRQ_SUSPEND_CLR,				/* IPA v3.1+ */
11098e2dd71SAlex Elder 	IPA_REG_ID_COUNT,				/* Last; not an ID */
11198e2dd71SAlex Elder };
11298e2dd71SAlex Elder 
11382a06807SAlex Elder /* COMP_CFG register */
11412c7ea7dSAlex Elder enum ipa_reg_comp_cfg_field_id {
11512c7ea7dSAlex Elder 	COMP_CFG_ENABLE,				/* Not IPA v4.0+ */
11612c7ea7dSAlex Elder 	RAM_ARB_PRI_CLIENT_SAMP_FIX_DIS,		/* IPA v4.7+ */
11712c7ea7dSAlex Elder 	GSI_SNOC_BYPASS_DIS,
11812c7ea7dSAlex Elder 	GEN_QMB_0_SNOC_BYPASS_DIS,
11912c7ea7dSAlex Elder 	GEN_QMB_1_SNOC_BYPASS_DIS,
12012c7ea7dSAlex Elder 	IPA_DCMP_FAST_CLK_EN,				/* Not IPA v4.5+ */
12112c7ea7dSAlex Elder 	IPA_QMB_SELECT_CONS_EN,				/* IPA v4.0+ */
12212c7ea7dSAlex Elder 	IPA_QMB_SELECT_PROD_EN,				/* IPA v4.0+ */
12312c7ea7dSAlex Elder 	GSI_MULTI_INORDER_RD_DIS,			/* IPA v4.0+ */
12412c7ea7dSAlex Elder 	GSI_MULTI_INORDER_WR_DIS,			/* IPA v4.0+ */
12512c7ea7dSAlex Elder 	GEN_QMB_0_MULTI_INORDER_RD_DIS,			/* IPA v4.0+ */
12612c7ea7dSAlex Elder 	GEN_QMB_1_MULTI_INORDER_RD_DIS,			/* IPA v4.0+ */
12712c7ea7dSAlex Elder 	GEN_QMB_0_MULTI_INORDER_WR_DIS,			/* IPA v4.0+ */
12812c7ea7dSAlex Elder 	GEN_QMB_1_MULTI_INORDER_WR_DIS,			/* IPA v4.0+ */
12912c7ea7dSAlex Elder 	GEN_QMB_0_SNOC_CNOC_LOOP_PROT_DIS,		/* IPA v4.0+ */
13012c7ea7dSAlex Elder 	GSI_SNOC_CNOC_LOOP_PROT_DISABLE,		/* IPA v4.0+ */
13112c7ea7dSAlex Elder 	GSI_MULTI_AXI_MASTERS_DIS,			/* IPA v4.0+ */
13212c7ea7dSAlex Elder 	IPA_QMB_SELECT_GLOBAL_EN,			/* IPA v4.0+ */
13312c7ea7dSAlex Elder 	QMB_RAM_RD_CACHE_DISABLE,			/* IPA v4.9+ */
13412c7ea7dSAlex Elder 	GENQMB_AOOOWR,					/* IPA v4.9+ */
13512c7ea7dSAlex Elder 	IF_OUT_OF_BUF_STOP_RESET_MASK_EN,		/* IPA v4.9+ */
13612c7ea7dSAlex Elder 	GEN_QMB_1_DYNAMIC_ASIZE,			/* IPA v4.9+ */
13712c7ea7dSAlex Elder 	GEN_QMB_0_DYNAMIC_ASIZE,			/* IPA v4.9+ */
13812c7ea7dSAlex Elder 	ATOMIC_FETCHER_ARB_LOCK_DIS,			/* IPA v4.0+ */
13912c7ea7dSAlex Elder 	FULL_FLUSH_WAIT_RS_CLOSURE_EN,			/* IPA v4.5+ */
14012c7ea7dSAlex Elder };
141cc5199edSAlex Elder 
14282a06807SAlex Elder /* CLKON_CFG register */
143479deb32SAlex Elder enum ipa_reg_clkon_cfg_field_id {
144479deb32SAlex Elder 	CLKON_RX,
145479deb32SAlex Elder 	CLKON_PROC,
146479deb32SAlex Elder 	TX_WRAPPER,
147479deb32SAlex Elder 	CLKON_MISC,
148479deb32SAlex Elder 	RAM_ARB,
149479deb32SAlex Elder 	FTCH_HPS,
150479deb32SAlex Elder 	FTCH_DPS,
151479deb32SAlex Elder 	CLKON_HPS,
152479deb32SAlex Elder 	CLKON_DPS,
153479deb32SAlex Elder 	RX_HPS_CMDQS,
154479deb32SAlex Elder 	HPS_DPS_CMDQS,
155479deb32SAlex Elder 	DPS_TX_CMDQS,
156479deb32SAlex Elder 	RSRC_MNGR,
157479deb32SAlex Elder 	CTX_HANDLER,
158479deb32SAlex Elder 	ACK_MNGR,
159479deb32SAlex Elder 	D_DCPH,
160479deb32SAlex Elder 	H_DCPH,
161479deb32SAlex Elder 	CLKON_DCMP,					/* IPA v4.5+ */
162479deb32SAlex Elder 	NTF_TX_CMDQS,					/* IPA v3.5+ */
163479deb32SAlex Elder 	CLKON_TX_0,					/* IPA v3.5+ */
164479deb32SAlex Elder 	CLKON_TX_1,					/* IPA v3.5+ */
165479deb32SAlex Elder 	CLKON_FNR,					/* IPA v3.5.1+ */
166479deb32SAlex Elder 	QSB2AXI_CMDQ_L,					/* IPA v4.0+ */
167479deb32SAlex Elder 	AGGR_WRAPPER,					/* IPA v4.0+ */
168479deb32SAlex Elder 	RAM_SLAVEWAY,					/* IPA v4.0+ */
169479deb32SAlex Elder 	CLKON_QMB,					/* IPA v4.0+ */
170479deb32SAlex Elder 	WEIGHT_ARB,					/* IPA v4.0+ */
171479deb32SAlex Elder 	GSI_IF,						/* IPA v4.0+ */
172479deb32SAlex Elder 	CLKON_GLOBAL,					/* IPA v4.0+ */
173479deb32SAlex Elder 	GLOBAL_2X_CLK,					/* IPA v4.0+ */
174479deb32SAlex Elder 	DPL_FIFO,					/* IPA v4.5+ */
175479deb32SAlex Elder 	DRBIP,						/* IPA v4.7+ */
176479deb32SAlex Elder };
177cdf2e941SAlex Elder 
17882a06807SAlex Elder /* ROUTE register */
179479deb32SAlex Elder enum ipa_reg_route_field_id {
180479deb32SAlex Elder 	ROUTE_DIS,
181479deb32SAlex Elder 	ROUTE_DEF_PIPE,
182479deb32SAlex Elder 	ROUTE_DEF_HDR_TABLE,
183479deb32SAlex Elder 	ROUTE_DEF_HDR_OFST,
184479deb32SAlex Elder 	ROUTE_FRAG_DEF_PIPE,
185479deb32SAlex Elder 	ROUTE_DEF_RETAIN_HDR,
186479deb32SAlex Elder };
187cdf2e941SAlex Elder 
18882a06807SAlex Elder /* SHARED_MEM_SIZE register */
18962b9c009SAlex Elder enum ipa_reg_shared_mem_size_field_id {
19062b9c009SAlex Elder 	MEM_SIZE,
19162b9c009SAlex Elder 	MEM_BADDR,
19262b9c009SAlex Elder };
193cdf2e941SAlex Elder 
19482a06807SAlex Elder /* QSB_MAX_WRITES register */
19562b9c009SAlex Elder enum ipa_reg_qsb_max_writes_field_id {
19662b9c009SAlex Elder 	GEN_QMB_0_MAX_WRITES,
19762b9c009SAlex Elder 	GEN_QMB_1_MAX_WRITES,
19862b9c009SAlex Elder };
199cdf2e941SAlex Elder 
20082a06807SAlex Elder /* QSB_MAX_READS register */
20162b9c009SAlex Elder enum ipa_reg_qsb_max_reads_field_id {
20262b9c009SAlex Elder 	GEN_QMB_0_MAX_READS,
20362b9c009SAlex Elder 	GEN_QMB_1_MAX_READS,
20462b9c009SAlex Elder 	GEN_QMB_0_MAX_READS_BEATS,			/* IPA v4.0+ */
20562b9c009SAlex Elder 	GEN_QMB_1_MAX_READS_BEATS,			/* IPA v4.0+ */
20662b9c009SAlex Elder };
207cdf2e941SAlex Elder 
20882a06807SAlex Elder /* FILT_ROUT_HASH_EN and FILT_ROUT_HASH_FLUSH registers */
2098ba59716SAlex Elder enum ipa_reg_filt_rout_hash_field_id {
21062b9c009SAlex Elder 	IPV6_ROUTER_HASH,
21162b9c009SAlex Elder 	IPV6_FILTER_HASH,
21262b9c009SAlex Elder 	IPV4_ROUTER_HASH,
21362b9c009SAlex Elder 	IPV4_FILTER_HASH,
21462b9c009SAlex Elder };
215cdf2e941SAlex Elder 
2168ba59716SAlex Elder /* FILT_ROUT_CACHE_FLUSH register */
2178ba59716SAlex Elder enum ipa_reg_filt_rout_cache_field_id {
2188ba59716SAlex Elder 	ROUTER_CACHE,
2198ba59716SAlex Elder 	FILTER_CACHE,
2208ba59716SAlex Elder };
2218ba59716SAlex Elder 
22282a06807SAlex Elder /* BCR register */
22321ab2078SAlex Elder enum ipa_bcr_compat {
22421ab2078SAlex Elder 	BCR_CMDQ_L_LACK_ONE_ENTRY		= 0x0,	/* Not IPA v4.2+ */
22521ab2078SAlex Elder 	BCR_TX_NOT_USING_BRESP			= 0x1,	/* Not IPA v4.2+ */
22621ab2078SAlex Elder 	BCR_TX_SUSPEND_IRQ_ASSERT_ONCE		= 0x2,	/* Not IPA v4.0+ */
22721ab2078SAlex Elder 	BCR_SUSPEND_L2_IRQ			= 0x3,	/* Not IPA v4.2+ */
22821ab2078SAlex Elder 	BCR_HOLB_DROP_L2_IRQ			= 0x4,	/* Not IPA v4.2+ */
22921ab2078SAlex Elder 	BCR_DUAL_TX				= 0x5,	/* IPA v3.5+ */
23021ab2078SAlex Elder 	BCR_ENABLE_FILTER_DATA_CACHE		= 0x6,	/* IPA v3.5+ */
23121ab2078SAlex Elder 	BCR_NOTIF_PRIORITY_OVER_ZLT		= 0x7,	/* IPA v3.5+ */
23221ab2078SAlex Elder 	BCR_FILTER_PREFETCH_EN			= 0x8,	/* IPA v3.5+ */
23321ab2078SAlex Elder 	BCR_ROUTER_PREFETCH_EN			= 0x9,	/* IPA v3.5+ */
23421ab2078SAlex Elder };
235cdf2e941SAlex Elder 
23682a06807SAlex Elder /* LOCAL_PKT_PROC_CNTXT register */
237b5c35fa4SAlex Elder enum ipa_reg_local_pkt_proc_cntxt_field_id {
238b5c35fa4SAlex Elder 	IPA_BASE_ADDR,
239b5c35fa4SAlex Elder };
240cdf2e941SAlex Elder 
24182a06807SAlex Elder /* COUNTER_CFG register */
242b5c35fa4SAlex Elder enum ipa_reg_counter_cfg_field_id {
243b5c35fa4SAlex Elder 	EOT_COAL_GRANULARITY,				/* Not v3.5+ */
244b5c35fa4SAlex Elder 	AGGR_GRANULARITY,
245b5c35fa4SAlex Elder };
24674fbbbbeSAlex Elder 
24782a06807SAlex Elder /* IPA_TX_CFG register */
248b5c35fa4SAlex Elder enum ipa_reg_ipa_tx_cfg_field_id {
249b5c35fa4SAlex Elder 	TX0_PREFETCH_DISABLE,				/* Not v4.0+ */
250b5c35fa4SAlex Elder 	TX1_PREFETCH_DISABLE,				/* Not v4.0+ */
251b5c35fa4SAlex Elder 	PREFETCH_ALMOST_EMPTY_SIZE,			/* Not v4.0+ */
252b5c35fa4SAlex Elder 	PREFETCH_ALMOST_EMPTY_SIZE_TX0,			/* v4.0+ */
253b5c35fa4SAlex Elder 	DMAW_SCND_OUTSD_PRED_THRESHOLD,			/* v4.0+ */
254b5c35fa4SAlex Elder 	DMAW_SCND_OUTSD_PRED_EN,			/* v4.0+ */
255b5c35fa4SAlex Elder 	DMAW_MAX_BEATS_256_DIS,				/* v4.0+ */
256b5c35fa4SAlex Elder 	PA_MASK_EN,					/* v4.0+ */
257b5c35fa4SAlex Elder 	PREFETCH_ALMOST_EMPTY_SIZE_TX1,			/* v4.0+ */
258b5c35fa4SAlex Elder 	DUAL_TX_ENABLE,					/* v4.5+ */
259b5c35fa4SAlex Elder 	SSPND_PA_NO_START_STATE,			/* v4,2+, not v4.5 */
260b5c35fa4SAlex Elder 	SSPND_PA_NO_BQ_STATE,				/* v4.2 only */
2618ba59716SAlex Elder 	HOLB_STICKY_DROP_EN,				/* v5.0+ */
262b5c35fa4SAlex Elder };
263cdf2e941SAlex Elder 
26482a06807SAlex Elder /* FLAVOR_0 register */
2659265a4f0SAlex Elder enum ipa_reg_flavor_0_field_id {
2669265a4f0SAlex Elder 	MAX_PIPES,
2679265a4f0SAlex Elder 	MAX_CONS_PIPES,
2689265a4f0SAlex Elder 	MAX_PROD_PIPES,
2699265a4f0SAlex Elder 	PROD_LOWEST,
2709265a4f0SAlex Elder };
271cdf2e941SAlex Elder 
27282a06807SAlex Elder /* IDLE_INDICATION_CFG register */
2739265a4f0SAlex Elder enum ipa_reg_idle_indication_cfg_field_id {
2749265a4f0SAlex Elder 	ENTER_IDLE_DEBOUNCE_THRESH,
2759265a4f0SAlex Elder 	CONST_NON_IDLE_ENABLE,
2769265a4f0SAlex Elder };
277cdf2e941SAlex Elder 
27882a06807SAlex Elder /* QTIME_TIMESTAMP_CFG register */
2799265a4f0SAlex Elder enum ipa_reg_qtime_timestamp_cfg_field_id {
2809265a4f0SAlex Elder 	DPL_TIMESTAMP_LSB,
2819265a4f0SAlex Elder 	DPL_TIMESTAMP_SEL,
2829265a4f0SAlex Elder 	TAG_TIMESTAMP_LSB,
2839265a4f0SAlex Elder 	NAT_TIMESTAMP_LSB,
2849265a4f0SAlex Elder };
28536426411SAlex Elder 
28682a06807SAlex Elder /* TIMERS_XO_CLK_DIV_CFG register */
2879265a4f0SAlex Elder enum ipa_reg_timers_xo_clk_div_cfg_field_id {
2889265a4f0SAlex Elder 	DIV_VALUE,
2899265a4f0SAlex Elder 	DIV_ENABLE,
2909265a4f0SAlex Elder };
29136426411SAlex Elder 
29282a06807SAlex Elder /* TIMERS_PULSE_GRAN_CFG register */
2939265a4f0SAlex Elder enum ipa_reg_timers_pulse_gran_cfg_field_id {
2949265a4f0SAlex Elder 	PULSE_GRAN_0,
2959265a4f0SAlex Elder 	PULSE_GRAN_1,
2969265a4f0SAlex Elder 	PULSE_GRAN_2,
2978ba59716SAlex Elder 	PULSE_GRAN_3,
2989265a4f0SAlex Elder };
2999265a4f0SAlex Elder 
3009265a4f0SAlex Elder /* Values for IPA_GRAN_x fields of TIMERS_PULSE_GRAN_CFG */
30136426411SAlex Elder enum ipa_pulse_gran {
30236426411SAlex Elder 	IPA_GRAN_10_US				= 0x0,
30336426411SAlex Elder 	IPA_GRAN_20_US				= 0x1,
30436426411SAlex Elder 	IPA_GRAN_50_US				= 0x2,
30536426411SAlex Elder 	IPA_GRAN_100_US				= 0x3,
30636426411SAlex Elder 	IPA_GRAN_1_MS				= 0x4,
30736426411SAlex Elder 	IPA_GRAN_10_MS				= 0x5,
30836426411SAlex Elder 	IPA_GRAN_100_MS				= 0x6,
30936426411SAlex Elder 	IPA_GRAN_655350_US			= 0x7,
31036426411SAlex Elder };
31136426411SAlex Elder 
31282a06807SAlex Elder /* {SRC,DST}_RSRC_GRP_{01,23,45,67}_RSRC_TYPE registers */
3131c418c4aSAlex Elder enum ipa_reg_rsrc_grp_rsrc_type_field_id {
3141c418c4aSAlex Elder 	X_MIN_LIM,
3151c418c4aSAlex Elder 	X_MAX_LIM,
3161c418c4aSAlex Elder 	Y_MIN_LIM,
3171c418c4aSAlex Elder 	Y_MAX_LIM,
3181c418c4aSAlex Elder };
319cdf2e941SAlex Elder 
32082a06807SAlex Elder /* ENDP_INIT_CTRL register */
3214468a344SAlex Elder enum ipa_reg_endp_init_ctrl_field_id {
3224468a344SAlex Elder 	ENDP_SUSPEND,					/* Not v4.0+ */
3234468a344SAlex Elder 	ENDP_DELAY,					/* Not v4.2+ */
3244468a344SAlex Elder };
325cdf2e941SAlex Elder 
32682a06807SAlex Elder /* ENDP_INIT_CFG register */
3274468a344SAlex Elder enum ipa_reg_endp_init_cfg_field_id {
3284468a344SAlex Elder 	FRAG_OFFLOAD_EN,
3294468a344SAlex Elder 	CS_OFFLOAD_EN,
3304468a344SAlex Elder 	CS_METADATA_HDR_OFFSET,
3314468a344SAlex Elder 	CS_GEN_QMB_MASTER_SEL,
3324468a344SAlex Elder };
333cdf2e941SAlex Elder 
334b8ecdaaaSAlex Elder /** enum ipa_cs_offload_en - ENDP_INIT_CFG register CS_OFFLOAD_EN field value */
33574fbbbbeSAlex Elder enum ipa_cs_offload_en {
33674fbbbbeSAlex Elder 	IPA_CS_OFFLOAD_NONE			= 0x0,
33773e0c9efSAlex Elder 	IPA_CS_OFFLOAD_UL	/* TX */	= 0x1,	/* Not IPA v4.5+ */
33873e0c9efSAlex Elder 	IPA_CS_OFFLOAD_DL	/* RX */	= 0x2,	/* Not IPA v4.5+ */
33973e0c9efSAlex Elder 	IPA_CS_OFFLOAD_INLINE	/* TX and RX */	= 0x1,	/* IPA v4.5+ */
34074fbbbbeSAlex Elder };
34174fbbbbeSAlex Elder 
34282a06807SAlex Elder /* ENDP_INIT_NAT register */
3434468a344SAlex Elder enum ipa_reg_endp_init_nat_field_id {
3444468a344SAlex Elder 	NAT_EN,
3454468a344SAlex Elder };
346647a05f3SAlex Elder 
347cbea4761SAlex Elder /** enum ipa_nat_type - ENDP_INIT_NAT register NAT_EN field value */
348cbea4761SAlex Elder enum ipa_nat_type {
349cbea4761SAlex Elder 	IPA_NAT_TYPE_BYPASS			= 0,
350cbea4761SAlex Elder 	IPA_NAT_TYPE_SRC			= 1,
351cbea4761SAlex Elder 	IPA_NAT_TYPE_DST			= 2,
352647a05f3SAlex Elder };
353647a05f3SAlex Elder 
35482a06807SAlex Elder /* ENDP_INIT_HDR register */
3554468a344SAlex Elder enum ipa_reg_endp_init_hdr_field_id {
3564468a344SAlex Elder 	HDR_LEN,
3574468a344SAlex Elder 	HDR_OFST_METADATA_VALID,
3584468a344SAlex Elder 	HDR_OFST_METADATA,
3594468a344SAlex Elder 	HDR_ADDITIONAL_CONST_LEN,
3604468a344SAlex Elder 	HDR_OFST_PKT_SIZE_VALID,
3614468a344SAlex Elder 	HDR_OFST_PKT_SIZE,
3624468a344SAlex Elder 	HDR_A5_MUX,					/* Not v4.9+ */
3634468a344SAlex Elder 	HDR_LEN_INC_DEAGG_HDR,
3644468a344SAlex Elder 	HDR_METADATA_REG_VALID,				/* Not v4.5+ */
3654468a344SAlex Elder 	HDR_LEN_MSB,					/* v4.5+ */
3664468a344SAlex Elder 	HDR_OFST_METADATA_MSB,				/* v4.5+ */
3674468a344SAlex Elder };
3681af15c2aSAlex Elder 
36982a06807SAlex Elder /* ENDP_INIT_HDR_EXT register */
3704468a344SAlex Elder enum ipa_reg_endp_init_hdr_ext_field_id {
3714468a344SAlex Elder 	HDR_ENDIANNESS,
3724468a344SAlex Elder 	HDR_TOTAL_LEN_OR_PAD_VALID,
3734468a344SAlex Elder 	HDR_TOTAL_LEN_OR_PAD,
3744468a344SAlex Elder 	HDR_PAYLOAD_LEN_INC_PADDING,
3754468a344SAlex Elder 	HDR_TOTAL_LEN_OR_PAD_OFFSET,
3764468a344SAlex Elder 	HDR_PAD_TO_ALIGNMENT,
3774468a344SAlex Elder 	HDR_TOTAL_LEN_OR_PAD_OFFSET_MSB,		/* v4.5+ */
3784468a344SAlex Elder 	HDR_OFST_PKT_SIZE_MSB,				/* v4.5+ */
3794468a344SAlex Elder 	HDR_ADDITIONAL_CONST_LEN_MSB,			/* v4.5+ */
3808ba59716SAlex Elder 	HDR_BYTES_TO_REMOVE_VALID,			/* v5.0+ */
3818ba59716SAlex Elder 	HDR_BYTES_TO_REMOVE,				/* v5.0+ */
3824468a344SAlex Elder };
383cdf2e941SAlex Elder 
38482a06807SAlex Elder /* ENDP_INIT_MODE register */
385216b409dSAlex Elder enum ipa_reg_endp_init_mode_field_id {
386216b409dSAlex Elder 	ENDP_MODE,
387216b409dSAlex Elder 	DCPH_ENABLE,					/* v4.5+ */
388216b409dSAlex Elder 	DEST_PIPE_INDEX,
389216b409dSAlex Elder 	BYTE_THRESHOLD,
390216b409dSAlex Elder 	PIPE_REPLICATION_EN,
391216b409dSAlex Elder 	PAD_EN,
392216b409dSAlex Elder 	HDR_FTCH_DISABLE,				/* v4.5+ */
393216b409dSAlex Elder 	DRBIP_ACL_ENABLE,				/* v4.9+ */
394216b409dSAlex Elder };
395cdf2e941SAlex Elder 
396b8ecdaaaSAlex Elder /** enum ipa_mode - ENDP_INIT_MODE register MODE field value */
39774fbbbbeSAlex Elder enum ipa_mode {
39874fbbbbeSAlex Elder 	IPA_BASIC				= 0x0,
39974fbbbbeSAlex Elder 	IPA_ENABLE_FRAMING_HDLC			= 0x1,
40074fbbbbeSAlex Elder 	IPA_ENABLE_DEFRAMING_HDLC		= 0x2,
40174fbbbbeSAlex Elder 	IPA_DMA					= 0x3,
40274fbbbbeSAlex Elder };
40374fbbbbeSAlex Elder 
40482a06807SAlex Elder /* ENDP_INIT_AGGR register */
405216b409dSAlex Elder enum ipa_reg_endp_init_aggr_field_id {
406216b409dSAlex Elder 	AGGR_EN,
407216b409dSAlex Elder 	AGGR_TYPE,
408216b409dSAlex Elder 	BYTE_LIMIT,
409216b409dSAlex Elder 	TIME_LIMIT,
410216b409dSAlex Elder 	PKT_LIMIT,
411216b409dSAlex Elder 	SW_EOF_ACTIVE,
412216b409dSAlex Elder 	FORCE_CLOSE,
413216b409dSAlex Elder 	HARD_BYTE_LIMIT_EN,
414216b409dSAlex Elder 	AGGR_GRAN_SEL,
415216b409dSAlex Elder };
416cdf2e941SAlex Elder 
417b8ecdaaaSAlex Elder /** enum ipa_aggr_en - ENDP_INIT_AGGR register AGGR_EN field value */
41874fbbbbeSAlex Elder enum ipa_aggr_en {
41973e0c9efSAlex Elder 	IPA_BYPASS_AGGR		/* TX and RX */	= 0x0,
42073e0c9efSAlex Elder 	IPA_ENABLE_AGGR		/* RX */	= 0x1,
42173e0c9efSAlex Elder 	IPA_ENABLE_DEAGGR	/* TX */	= 0x2,
42274fbbbbeSAlex Elder };
42374fbbbbeSAlex Elder 
424b8ecdaaaSAlex Elder /** enum ipa_aggr_type - ENDP_INIT_AGGR register AGGR_TYPE field value */
42574fbbbbeSAlex Elder enum ipa_aggr_type {
42674fbbbbeSAlex Elder 	IPA_MBIM_16				= 0x0,
42774fbbbbeSAlex Elder 	IPA_HDLC				= 0x1,
42874fbbbbeSAlex Elder 	IPA_TLP					= 0x2,
42974fbbbbeSAlex Elder 	IPA_RNDIS				= 0x3,
43074fbbbbeSAlex Elder 	IPA_GENERIC				= 0x4,
43174fbbbbeSAlex Elder 	IPA_COALESCE				= 0x5,
43274fbbbbeSAlex Elder 	IPA_QCMAP				= 0x6,
43374fbbbbeSAlex Elder };
43474fbbbbeSAlex Elder 
43582a06807SAlex Elder /* ENDP_INIT_HOL_BLOCK_EN register */
436216b409dSAlex Elder enum ipa_reg_endp_init_hol_block_en_field_id {
437216b409dSAlex Elder 	HOL_BLOCK_EN,
438216b409dSAlex Elder };
439cdf2e941SAlex Elder 
44082a06807SAlex Elder /* ENDP_INIT_HOL_BLOCK_TIMER register */
441216b409dSAlex Elder enum ipa_reg_endp_init_hol_block_timer_field_id {
442216b409dSAlex Elder 	TIMER_BASE_VALUE,				/* Not v4.5+ */
443216b409dSAlex Elder 	TIMER_SCALE,					/* v4.2 only */
444216b409dSAlex Elder 	TIMER_LIMIT,					/* v4.5+ */
445216b409dSAlex Elder 	TIMER_GRAN_SEL,					/* v4.5+ */
446216b409dSAlex Elder };
447cdf2e941SAlex Elder 
44882a06807SAlex Elder /* ENDP_INIT_DEAGGR register */
449181ca020SAlex Elder enum ipa_reg_endp_deaggr_field_id {
450181ca020SAlex Elder 	DEAGGR_HDR_LEN,
451181ca020SAlex Elder 	SYSPIPE_ERR_DETECTION,
452181ca020SAlex Elder 	PACKET_OFFSET_VALID,
453181ca020SAlex Elder 	PACKET_OFFSET_LOCATION,
454181ca020SAlex Elder 	IGNORE_MIN_PKT_ERR,
455181ca020SAlex Elder 	MAX_PACKET_LEN,
456181ca020SAlex Elder };
457cdf2e941SAlex Elder 
45882a06807SAlex Elder /* ENDP_INIT_RSRC_GRP register */
459181ca020SAlex Elder enum ipa_reg_endp_init_rsrc_grp_field_id {
460181ca020SAlex Elder 	ENDP_RSRC_GRP,
461181ca020SAlex Elder };
462cdf2e941SAlex Elder 
46382a06807SAlex Elder /* ENDP_INIT_SEQ register */
464181ca020SAlex Elder enum ipa_reg_endp_init_seq_field_id {
465181ca020SAlex Elder 	SEQ_TYPE,
466181ca020SAlex Elder 	SEQ_REP_TYPE,					/* Not v4.5+ */
467181ca020SAlex Elder };
468cdf2e941SAlex Elder 
46974fbbbbeSAlex Elder /**
4708ee5df65SAlex Elder  * enum ipa_seq_type - HPS and DPS sequencer type
471b8ecdaaaSAlex Elder  * @IPA_SEQ_DMA:		 Perform DMA only
472b8ecdaaaSAlex Elder  * @IPA_SEQ_1_PASS:		 One pass through the pipeline
473b8ecdaaaSAlex Elder  * @IPA_SEQ_2_PASS_SKIP_LAST_UC: Two passes, skip the microcprocessor
474b8ecdaaaSAlex Elder  * @IPA_SEQ_1_PASS_SKIP_LAST_UC: One pass, skip the microcprocessor
475b8ecdaaaSAlex Elder  * @IPA_SEQ_2_PASS:		 Two passes through the pipeline
476b8ecdaaaSAlex Elder  * @IPA_SEQ_3_PASS_SKIP_LAST_UC: Three passes, skip the microcprocessor
477b8ecdaaaSAlex Elder  * @IPA_SEQ_DECIPHER:		 Optional deciphering step (combined)
47874fbbbbeSAlex Elder  *
4798ee5df65SAlex Elder  * The low-order byte of the sequencer type register defines the number of
4808ee5df65SAlex Elder  * passes a packet takes through the IPA pipeline.  The last pass through can
4818ee5df65SAlex Elder  * optionally skip the microprocessor.  Deciphering is optional for all types;
4828ee5df65SAlex Elder  * if enabled, an additional mask (two bits) is added to the type value.
4838ee5df65SAlex Elder  *
4848ee5df65SAlex Elder  * Note: not all combinations of ipa_seq_type and ipa_seq_rep_type are
4858ee5df65SAlex Elder  * supported (or meaningful).
48674fbbbbeSAlex Elder  */
48774fbbbbeSAlex Elder enum ipa_seq_type {
4888ee5df65SAlex Elder 	IPA_SEQ_DMA				= 0x00,
4898ee5df65SAlex Elder 	IPA_SEQ_1_PASS				= 0x02,
4908ee5df65SAlex Elder 	IPA_SEQ_2_PASS_SKIP_LAST_UC		= 0x04,
4918ee5df65SAlex Elder 	IPA_SEQ_1_PASS_SKIP_LAST_UC		= 0x06,
4928ee5df65SAlex Elder 	IPA_SEQ_2_PASS				= 0x0a,
4938ee5df65SAlex Elder 	IPA_SEQ_3_PASS_SKIP_LAST_UC		= 0x0c,
494b8ecdaaaSAlex Elder 	/* The next value can be ORed with the above */
495b8ecdaaaSAlex Elder 	IPA_SEQ_DECIPHER			= 0x11,
4968ee5df65SAlex Elder };
4978ee5df65SAlex Elder 
4988ee5df65SAlex Elder /**
4998ee5df65SAlex Elder  * enum ipa_seq_rep_type - replicated packet sequencer type
500b8ecdaaaSAlex Elder  * @IPA_SEQ_REP_DMA_PARSER:	DMA parser for replicated packets
5018ee5df65SAlex Elder  *
5028ee5df65SAlex Elder  * This goes in the second byte of the endpoint sequencer type register.
5038ee5df65SAlex Elder  *
5048ee5df65SAlex Elder  * Note: not all combinations of ipa_seq_type and ipa_seq_rep_type are
5058ee5df65SAlex Elder  * supported (or meaningful).
5068ee5df65SAlex Elder  */
5078ee5df65SAlex Elder enum ipa_seq_rep_type {
5088ee5df65SAlex Elder 	IPA_SEQ_REP_DMA_PARSER			= 0x08,
50974fbbbbeSAlex Elder };
51074fbbbbeSAlex Elder 
51182a06807SAlex Elder /* ENDP_STATUS register */
512181ca020SAlex Elder enum ipa_reg_endp_status_field_id {
513181ca020SAlex Elder 	STATUS_EN,
514181ca020SAlex Elder 	STATUS_ENDP,
515181ca020SAlex Elder 	STATUS_LOCATION,				/* Not v4.5+ */
516181ca020SAlex Elder 	STATUS_PKT_SUPPRESS,				/* v4.0+ */
517181ca020SAlex Elder };
518cdf2e941SAlex Elder 
51982a06807SAlex Elder /* ENDP_FILTER_ROUTER_HSH_CFG register */
520181ca020SAlex Elder enum ipa_reg_endp_filter_router_hsh_cfg_field_id {
521181ca020SAlex Elder 	FILTER_HASH_MSK_SRC_ID,
522181ca020SAlex Elder 	FILTER_HASH_MSK_SRC_IP,
523181ca020SAlex Elder 	FILTER_HASH_MSK_DST_IP,
524181ca020SAlex Elder 	FILTER_HASH_MSK_SRC_PORT,
525181ca020SAlex Elder 	FILTER_HASH_MSK_DST_PORT,
526181ca020SAlex Elder 	FILTER_HASH_MSK_PROTOCOL,
527181ca020SAlex Elder 	FILTER_HASH_MSK_METADATA,
528181ca020SAlex Elder 	FILTER_HASH_MSK_ALL,		/* Bitwise OR of the above 6 fields */
529cdf2e941SAlex Elder 
530181ca020SAlex Elder 	ROUTER_HASH_MSK_SRC_ID,
531181ca020SAlex Elder 	ROUTER_HASH_MSK_SRC_IP,
532181ca020SAlex Elder 	ROUTER_HASH_MSK_DST_IP,
533181ca020SAlex Elder 	ROUTER_HASH_MSK_SRC_PORT,
534181ca020SAlex Elder 	ROUTER_HASH_MSK_DST_PORT,
535181ca020SAlex Elder 	ROUTER_HASH_MSK_PROTOCOL,
536181ca020SAlex Elder 	ROUTER_HASH_MSK_METADATA,
537181ca020SAlex Elder 	ROUTER_HASH_MSK_ALL,		/* Bitwise OR of the above 6 fields */
538181ca020SAlex Elder };
539cdf2e941SAlex Elder 
5408ba59716SAlex Elder /* ENDP_FILTER_CACHE_CFG and ENDP_ROUTER_CACHE_CFG registers */
5418ba59716SAlex Elder enum ipa_reg_endp_cache_cfg_field_id {
5428ba59716SAlex Elder 	CACHE_MSK_SRC_ID,
5438ba59716SAlex Elder 	CACHE_MSK_SRC_IP,
5448ba59716SAlex Elder 	CACHE_MSK_DST_IP,
5458ba59716SAlex Elder 	CACHE_MSK_SRC_PORT,
5468ba59716SAlex Elder 	CACHE_MSK_DST_PORT,
5478ba59716SAlex Elder 	CACHE_MSK_PROTOCOL,
5488ba59716SAlex Elder 	CACHE_MSK_METADATA,
5498ba59716SAlex Elder };
5508ba59716SAlex Elder 
55182a06807SAlex Elder /* IPA_IRQ_STTS, IPA_IRQ_EN, and IPA_IRQ_CLR registers */
55232205310SAlex Elder /**
55332205310SAlex Elder  * enum ipa_irq_id - Bit positions representing type of IPA IRQ
55432205310SAlex Elder  * @IPA_IRQ_UC_0:	Microcontroller event interrupt
55532205310SAlex Elder  * @IPA_IRQ_UC_1:	Microcontroller response interrupt
55632205310SAlex Elder  * @IPA_IRQ_TX_SUSPEND:	Data ready interrupt
557b8ecdaaaSAlex Elder  * @IPA_IRQ_COUNT:	Number of IRQ ids (must be last)
55832205310SAlex Elder  *
55932205310SAlex Elder  * IRQ types not described above are not currently used.
560b8ecdaaaSAlex Elder  *
561b8ecdaaaSAlex Elder  * @IPA_IRQ_BAD_SNOC_ACCESS:		(Not currently used)
562b8ecdaaaSAlex Elder  * @IPA_IRQ_EOT_COAL:			(Not currently used)
563b8ecdaaaSAlex Elder  * @IPA_IRQ_UC_2:			(Not currently used)
564b8ecdaaaSAlex Elder  * @IPA_IRQ_UC_3:			(Not currently used)
565b8ecdaaaSAlex Elder  * @IPA_IRQ_UC_IN_Q_NOT_EMPTY:		(Not currently used)
566b8ecdaaaSAlex Elder  * @IPA_IRQ_UC_RX_CMD_Q_NOT_FULL:	(Not currently used)
567b8ecdaaaSAlex Elder  * @IPA_IRQ_PROC_UC_ACK_Q_NOT_EMPTY:	(Not currently used)
568b8ecdaaaSAlex Elder  * @IPA_IRQ_RX_ERR:			(Not currently used)
569b8ecdaaaSAlex Elder  * @IPA_IRQ_DEAGGR_ERR:			(Not currently used)
570b8ecdaaaSAlex Elder  * @IPA_IRQ_TX_ERR:			(Not currently used)
571b8ecdaaaSAlex Elder  * @IPA_IRQ_STEP_MODE:			(Not currently used)
572b8ecdaaaSAlex Elder  * @IPA_IRQ_PROC_ERR:			(Not currently used)
573b8ecdaaaSAlex Elder  * @IPA_IRQ_TX_HOLB_DROP:		(Not currently used)
574b8ecdaaaSAlex Elder  * @IPA_IRQ_BAM_GSI_IDLE:		(Not currently used)
575b8ecdaaaSAlex Elder  * @IPA_IRQ_PIPE_YELLOW_BELOW:		(Not currently used)
576b8ecdaaaSAlex Elder  * @IPA_IRQ_PIPE_RED_BELOW:		(Not currently used)
577b8ecdaaaSAlex Elder  * @IPA_IRQ_PIPE_YELLOW_ABOVE:		(Not currently used)
578b8ecdaaaSAlex Elder  * @IPA_IRQ_PIPE_RED_ABOVE:		(Not currently used)
579b8ecdaaaSAlex Elder  * @IPA_IRQ_UCP:			(Not currently used)
580b8ecdaaaSAlex Elder  * @IPA_IRQ_DCMP:			(Not currently used)
581b8ecdaaaSAlex Elder  * @IPA_IRQ_GSI_EE:			(Not currently used)
582b8ecdaaaSAlex Elder  * @IPA_IRQ_GSI_IPA_IF_TLV_RCVD:	(Not currently used)
583b8ecdaaaSAlex Elder  * @IPA_IRQ_GSI_UC:			(Not currently used)
584b8ecdaaaSAlex Elder  * @IPA_IRQ_TLV_LEN_MIN_DSM:		(Not currently used)
585b8ecdaaaSAlex Elder  * @IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN: (Not currently used)
586b8ecdaaaSAlex Elder  * @IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN: (Not currently used)
587b8ecdaaaSAlex Elder  * @IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN: (Not currently used)
58832205310SAlex Elder  */
58932205310SAlex Elder enum ipa_irq_id {
59032205310SAlex Elder 	IPA_IRQ_BAD_SNOC_ACCESS			= 0x0,
591b8ecdaaaSAlex Elder 	/* The next bit is not present for IPA v3.5+ */
592b8ecdaaaSAlex Elder 	IPA_IRQ_EOT_COAL			= 0x1,
59332205310SAlex Elder 	IPA_IRQ_UC_0				= 0x2,
59432205310SAlex Elder 	IPA_IRQ_UC_1				= 0x3,
59532205310SAlex Elder 	IPA_IRQ_UC_2				= 0x4,
59632205310SAlex Elder 	IPA_IRQ_UC_3				= 0x5,
59732205310SAlex Elder 	IPA_IRQ_UC_IN_Q_NOT_EMPTY		= 0x6,
59832205310SAlex Elder 	IPA_IRQ_UC_RX_CMD_Q_NOT_FULL		= 0x7,
59932205310SAlex Elder 	IPA_IRQ_PROC_UC_ACK_Q_NOT_EMPTY		= 0x8,
60032205310SAlex Elder 	IPA_IRQ_RX_ERR				= 0x9,
60132205310SAlex Elder 	IPA_IRQ_DEAGGR_ERR			= 0xa,
60232205310SAlex Elder 	IPA_IRQ_TX_ERR				= 0xb,
60332205310SAlex Elder 	IPA_IRQ_STEP_MODE			= 0xc,
60432205310SAlex Elder 	IPA_IRQ_PROC_ERR			= 0xd,
60532205310SAlex Elder 	IPA_IRQ_TX_SUSPEND			= 0xe,
60632205310SAlex Elder 	IPA_IRQ_TX_HOLB_DROP			= 0xf,
60732205310SAlex Elder 	IPA_IRQ_BAM_GSI_IDLE			= 0x10,
60832205310SAlex Elder 	IPA_IRQ_PIPE_YELLOW_BELOW		= 0x11,
60932205310SAlex Elder 	IPA_IRQ_PIPE_RED_BELOW			= 0x12,
61032205310SAlex Elder 	IPA_IRQ_PIPE_YELLOW_ABOVE		= 0x13,
61132205310SAlex Elder 	IPA_IRQ_PIPE_RED_ABOVE			= 0x14,
61232205310SAlex Elder 	IPA_IRQ_UCP				= 0x15,
613b8ecdaaaSAlex Elder 	/* The next bit is not present for IPA v4.5+ */
61432205310SAlex Elder 	IPA_IRQ_DCMP				= 0x16,
61532205310SAlex Elder 	IPA_IRQ_GSI_EE				= 0x17,
61632205310SAlex Elder 	IPA_IRQ_GSI_IPA_IF_TLV_RCVD		= 0x18,
61732205310SAlex Elder 	IPA_IRQ_GSI_UC				= 0x19,
618b8ecdaaaSAlex Elder 	/* The next bit is present for IPA v4.5+ */
6195b6cd69eSAlex Elder 	IPA_IRQ_TLV_LEN_MIN_DSM			= 0x1a,
620b8ecdaaaSAlex Elder 	/* The next three bits are present for IPA v4.9+ */
621b8ecdaaaSAlex Elder 	IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN	= 0x1b,
622b8ecdaaaSAlex Elder 	IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN	= 0x1c,
623b8ecdaaaSAlex Elder 	IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN	= 0x1d,
62432205310SAlex Elder 	IPA_IRQ_COUNT,				/* Last; not an id */
62532205310SAlex Elder };
626cdf2e941SAlex Elder 
62782a06807SAlex Elder /* IPA_IRQ_UC register */
628181ca020SAlex Elder enum ipa_reg_ipa_irq_uc_field_id {
629181ca020SAlex Elder 	UC_INTR,
630181ca020SAlex Elder };
631cdf2e941SAlex Elder 
63281772e44SAlex Elder extern const struct regs ipa_regs_v3_1;
63381772e44SAlex Elder extern const struct regs ipa_regs_v3_5_1;
63481772e44SAlex Elder extern const struct regs ipa_regs_v4_2;
63581772e44SAlex Elder extern const struct regs ipa_regs_v4_5;
63681772e44SAlex Elder extern const struct regs ipa_regs_v4_7;
63781772e44SAlex Elder extern const struct regs ipa_regs_v4_9;
63881772e44SAlex Elder extern const struct regs ipa_regs_v4_11;
639*ed4c7d61SAlex Elder extern const struct regs ipa_regs_v5_0;
64007f120bcSAlex Elder 
64181772e44SAlex Elder const struct reg *ipa_reg(struct ipa *ipa, enum ipa_reg_id reg_id);
64207f120bcSAlex Elder 
643cdf2e941SAlex Elder int ipa_reg_init(struct ipa *ipa);
644cdf2e941SAlex Elder void ipa_reg_exit(struct ipa *ipa);
645cdf2e941SAlex Elder 
646cdf2e941SAlex Elder #endif /* _IPA_REG_H_ */
647