1*20a027ccSLiron Himi /* SPDX-License-Identifier: BSD-3-Clause 2*20a027ccSLiron Himi * Copyright(C) 2021 Marvell. 3*20a027ccSLiron Himi */ 4*20a027ccSLiron Himi 5*20a027ccSLiron Himi #ifndef __REE_HW_H__ 6*20a027ccSLiron Himi #define __REE_HW_H__ 7*20a027ccSLiron Himi 8*20a027ccSLiron Himi /* REE instruction queue length */ 9*20a027ccSLiron Himi #define REE_IQ_LEN (1 << 13) 10*20a027ccSLiron Himi 11*20a027ccSLiron Himi #define REE_DEFAULT_CMD_QLEN REE_IQ_LEN 12*20a027ccSLiron Himi 13*20a027ccSLiron Himi /* Status register bits */ 14*20a027ccSLiron Himi #define REE_STATUS_PMI_EOJ_BIT BIT_ULL(14) 15*20a027ccSLiron Himi #define REE_STATUS_PMI_SOJ_BIT BIT_ULL(13) 16*20a027ccSLiron Himi #define REE_STATUS_MP_CNT_DET_BIT BIT_ULL(7) 17*20a027ccSLiron Himi #define REE_STATUS_MM_CNT_DET_BIT BIT_ULL(6) 18*20a027ccSLiron Himi #define REE_STATUS_ML_CNT_DET_BIT BIT_ULL(5) 19*20a027ccSLiron Himi #define REE_STATUS_MST_CNT_DET_BIT BIT_ULL(4) 20*20a027ccSLiron Himi #define REE_STATUS_MPT_CNT_DET_BIT BIT_ULL(3) 21*20a027ccSLiron Himi 22*20a027ccSLiron Himi /* Register offsets */ 23*20a027ccSLiron Himi /* REE LF registers */ 24*20a027ccSLiron Himi #define REE_LF_DONE_INT 0x120ull 25*20a027ccSLiron Himi #define REE_LF_DONE_INT_W1S 0x130ull 26*20a027ccSLiron Himi #define REE_LF_DONE_INT_ENA_W1S 0x138ull 27*20a027ccSLiron Himi #define REE_LF_DONE_INT_ENA_W1C 0x140ull 28*20a027ccSLiron Himi #define REE_LF_MISC_INT 0x300ull 29*20a027ccSLiron Himi #define REE_LF_MISC_INT_W1S 0x310ull 30*20a027ccSLiron Himi #define REE_LF_MISC_INT_ENA_W1S 0x320ull 31*20a027ccSLiron Himi #define REE_LF_MISC_INT_ENA_W1C 0x330ull 32*20a027ccSLiron Himi #define REE_LF_ENA 0x10ull 33*20a027ccSLiron Himi #define REE_LF_SBUF_ADDR 0x20ull 34*20a027ccSLiron Himi #define REE_LF_DONE 0x100ull 35*20a027ccSLiron Himi #define REE_LF_DONE_ACK 0x110ull 36*20a027ccSLiron Himi #define REE_LF_DONE_WAIT 0x148ull 37*20a027ccSLiron Himi #define REE_LF_DOORBELL 0x400ull 38*20a027ccSLiron Himi #define REE_LF_OUTSTAND_JOB 0x410ull 39*20a027ccSLiron Himi 40*20a027ccSLiron Himi /* BAR 0 */ 41*20a027ccSLiron Himi #define REE_AF_REEXM_MAX_MATCH (0x80c8ull) 42*20a027ccSLiron Himi #define REE_AF_QUE_SBUF_CTL(a) (0x1200ull | (uint64_t)(a) << 3) 43*20a027ccSLiron Himi #define REE_PRIV_LF_CFG(a) (0x41000ull | (uint64_t)(a) << 3) 44*20a027ccSLiron Himi 45*20a027ccSLiron Himi #define REE_AF_QUEX_GMCTL(a) (0x800 | (a) << 3) 46*20a027ccSLiron Himi 47*20a027ccSLiron Himi #define REE_AF_INT_VEC_RAS (0x0ull) 48*20a027ccSLiron Himi #define REE_AF_INT_VEC_RVU (0x1ull) 49*20a027ccSLiron Himi #define REE_AF_INT_VEC_QUE_DONE (0x2ull) 50*20a027ccSLiron Himi #define REE_AF_INT_VEC_AQ (0x3ull) 51*20a027ccSLiron Himi 52*20a027ccSLiron Himi 53*20a027ccSLiron Himi #define REE_LF_INT_VEC_QUE_DONE (0x0ull) 54*20a027ccSLiron Himi #define REE_LF_INT_VEC_MISC (0x1ull) 55*20a027ccSLiron Himi 56*20a027ccSLiron Himi #define REE_LF_SBUF_ADDR_OFF_MASK GENMASK_ULL(6, 0) 57*20a027ccSLiron Himi #define REE_LF_SBUF_ADDR_PTR_MASK GENMASK_ULL(52, 7) 58*20a027ccSLiron Himi 59*20a027ccSLiron Himi #define REE_LF_ENA_ENA_MASK BIT_ULL(0) 60*20a027ccSLiron Himi 61*20a027ccSLiron Himi #define REE_LF_BAR2(vf, q_id) \ 62*20a027ccSLiron Himi ((vf)->dev->bar2 + (((vf)->block_address << 20) | ((q_id) << 12))) 63*20a027ccSLiron Himi 64*20a027ccSLiron Himi #define REE_QUEUE_HI_PRIO 0x1 65*20a027ccSLiron Himi 66*20a027ccSLiron Himi enum ree_desc_type_e { 67*20a027ccSLiron Himi REE_TYPE_JOB_DESC = 0x0, 68*20a027ccSLiron Himi REE_TYPE_RESULT_DESC = 0x1, 69*20a027ccSLiron Himi REE_TYPE_ENUM_LAST = 0x2 70*20a027ccSLiron Himi }; 71*20a027ccSLiron Himi 72*20a027ccSLiron Himi union ree_res_status { 73*20a027ccSLiron Himi uint64_t u; 74*20a027ccSLiron Himi struct { 75*20a027ccSLiron Himi uint64_t job_type : 3; 76*20a027ccSLiron Himi uint64_t mpt_cnt_det : 1; 77*20a027ccSLiron Himi uint64_t mst_cnt_det : 1; 78*20a027ccSLiron Himi uint64_t ml_cnt_det : 1; 79*20a027ccSLiron Himi uint64_t mm_cnt_det : 1; 80*20a027ccSLiron Himi uint64_t mp_cnt_det : 1; 81*20a027ccSLiron Himi uint64_t mode : 2; 82*20a027ccSLiron Himi uint64_t reserved_10_11 : 2; 83*20a027ccSLiron Himi uint64_t reserved_12_12 : 1; 84*20a027ccSLiron Himi uint64_t pmi_soj : 1; 85*20a027ccSLiron Himi uint64_t pmi_eoj : 1; 86*20a027ccSLiron Himi uint64_t reserved_15_15 : 1; 87*20a027ccSLiron Himi uint64_t reserved_16_63 : 48; 88*20a027ccSLiron Himi } s; 89*20a027ccSLiron Himi }; 90*20a027ccSLiron Himi 91*20a027ccSLiron Himi union ree_res { 92*20a027ccSLiron Himi uint64_t u[8]; 93*20a027ccSLiron Himi struct ree_res_s_98 { 94*20a027ccSLiron Himi uint64_t done : 1; 95*20a027ccSLiron Himi uint64_t hwjid : 7; 96*20a027ccSLiron Himi uint64_t ree_res_job_id : 24; 97*20a027ccSLiron Himi uint64_t ree_res_status : 16; 98*20a027ccSLiron Himi uint64_t ree_res_dmcnt : 8; 99*20a027ccSLiron Himi uint64_t ree_res_mcnt : 8; 100*20a027ccSLiron Himi uint64_t ree_meta_ptcnt : 16; 101*20a027ccSLiron Himi uint64_t ree_meta_icnt : 16; 102*20a027ccSLiron Himi uint64_t ree_meta_lcnt : 16; 103*20a027ccSLiron Himi uint64_t ree_pmi_min_byte_ptr : 16; 104*20a027ccSLiron Himi uint64_t ree_err : 1; 105*20a027ccSLiron Himi uint64_t reserved_129_190 : 62; 106*20a027ccSLiron Himi uint64_t doneint : 1; 107*20a027ccSLiron Himi uint64_t reserved_192_255 : 64; 108*20a027ccSLiron Himi uint64_t reserved_256_319 : 64; 109*20a027ccSLiron Himi uint64_t reserved_320_383 : 64; 110*20a027ccSLiron Himi uint64_t reserved_384_447 : 64; 111*20a027ccSLiron Himi uint64_t reserved_448_511 : 64; 112*20a027ccSLiron Himi } s; 113*20a027ccSLiron Himi }; 114*20a027ccSLiron Himi 115*20a027ccSLiron Himi union ree_match { 116*20a027ccSLiron Himi uint64_t u; 117*20a027ccSLiron Himi struct { 118*20a027ccSLiron Himi uint64_t ree_rule_id : 32; 119*20a027ccSLiron Himi uint64_t start_ptr : 14; 120*20a027ccSLiron Himi uint64_t reserved_46_47 : 2; 121*20a027ccSLiron Himi uint64_t match_length : 15; 122*20a027ccSLiron Himi uint64_t reserved_63_6 : 1; 123*20a027ccSLiron Himi } s; 124*20a027ccSLiron Himi }; 125*20a027ccSLiron Himi 126*20a027ccSLiron Himi #endif /* __REE_HW_H__ */ 127