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