1*dfcf9474SSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause 2*dfcf9474SSrikanth Yalavarthi * Copyright (c) 2022 Marvell. 3*dfcf9474SSrikanth Yalavarthi */ 4*dfcf9474SSrikanth Yalavarthi 5*dfcf9474SSrikanth Yalavarthi #ifndef __ML_HW_H__ 6*dfcf9474SSrikanth Yalavarthi #define __ML_HW_H__ 7*dfcf9474SSrikanth Yalavarthi 8*dfcf9474SSrikanth Yalavarthi #include <stdint.h> 9*dfcf9474SSrikanth Yalavarthi 10*dfcf9474SSrikanth Yalavarthi /* Constants */ 11*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NR 0x3 12*dfcf9474SSrikanth Yalavarthi 13*dfcf9474SSrikanth Yalavarthi /* Base offsets */ 14*dfcf9474SSrikanth Yalavarthi #define ML_MLAB_BLK_OFFSET 0x20000000 /* CNF10KB */ 15*dfcf9474SSrikanth Yalavarthi #define ML_AXI_START_ADDR 0x800000000 16*dfcf9474SSrikanth Yalavarthi 17*dfcf9474SSrikanth Yalavarthi /* MLW register offsets / ML_PF_BAR0 */ 18*dfcf9474SSrikanth Yalavarthi #define ML_CFG 0x10000 19*dfcf9474SSrikanth Yalavarthi #define ML_MLR_BASE 0x10008 20*dfcf9474SSrikanth Yalavarthi #define ML_AXI_BRIDGE_CTRL(a) (0x10020 | (uint64_t)(a) << 3) 21*dfcf9474SSrikanth Yalavarthi #define ML_JOB_MGR_CTRL 0x10060 22*dfcf9474SSrikanth Yalavarthi #define ML_CORE_INT_LO 0x10140 23*dfcf9474SSrikanth Yalavarthi #define ML_CORE_INT_HI 0x10160 24*dfcf9474SSrikanth Yalavarthi #define ML_JCMDQ_IN(a) (0x11000 | (uint64_t)(a) << 3) /* CN10KA */ 25*dfcf9474SSrikanth Yalavarthi #define ML_JCMDQ_STATUS 0x11010 /* CN10KA */ 26*dfcf9474SSrikanth Yalavarthi #define ML_STGX_STATUS(a) (0x11020 | (uint64_t)(a) << 3) /* CNF10KB */ 27*dfcf9474SSrikanth Yalavarthi #define ML_STG_CONTROL 0x11100 /* CNF10KB */ 28*dfcf9474SSrikanth Yalavarthi #define ML_PNB_CMD_TYPE 0x113a0 /* CNF10KB */ 29*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH(a) (0x14000 | (uint64_t)(a) << 3) 30*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_BACKP_DISABLE(a) (0x18000 | (uint64_t)(a) << 12) /* CN10KA */ 31*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR(a) (0x18010 | (uint64_t)(a) << 12) /* CN10KA */ 32*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR(a) (0x18020 | (uint64_t)(a) << 12) /* CN10KA */ 33*dfcf9474SSrikanth Yalavarthi 34*dfcf9474SSrikanth Yalavarthi /* MLIP configuration register offsets / ML_PF_BAR0 */ 35*dfcf9474SSrikanth Yalavarthi #define ML_SW_RST_CTRL 0x12084000 36*dfcf9474SSrikanth Yalavarthi #define ML_A35_0_RST_VECTOR_BASE_W(a) (0x12084014 + (a) * (0x04)) 37*dfcf9474SSrikanth Yalavarthi #define ML_A35_1_RST_VECTOR_BASE_W(a) (0x1208401c + (a) * (0x04)) 38*dfcf9474SSrikanth Yalavarthi 39*dfcf9474SSrikanth Yalavarthi /* MLW scratch register offsets */ 40*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_WORK_PTR (ML_SCRATCH(0)) 41*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_FW_CTRL (ML_SCRATCH(1)) 42*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_DBG_BUFFER_HEAD_C0 (ML_SCRATCH(2)) 43*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_DBG_BUFFER_TAIL_C0 (ML_SCRATCH(3)) 44*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_DBG_BUFFER_HEAD_C1 (ML_SCRATCH(4)) 45*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_DBG_BUFFER_TAIL_C1 (ML_SCRATCH(5)) 46*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_EXCEPTION_SP_C0 (ML_SCRATCH(6)) 47*dfcf9474SSrikanth Yalavarthi #define ML_SCRATCH_EXCEPTION_SP_C1 (ML_SCRATCH(7)) 48*dfcf9474SSrikanth Yalavarthi 49*dfcf9474SSrikanth Yalavarthi /* ML job completion structure */ 50*dfcf9474SSrikanth Yalavarthi struct ml_jce_s { 51*dfcf9474SSrikanth Yalavarthi /* WORD 0 */ 52*dfcf9474SSrikanth Yalavarthi union ml_jce_w0 { 53*dfcf9474SSrikanth Yalavarthi struct { 54*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_0_3 : 4; 55*dfcf9474SSrikanth Yalavarthi 56*dfcf9474SSrikanth Yalavarthi /* Reserved for future architecture */ 57*dfcf9474SSrikanth Yalavarthi uint64_t ggrp_h : 2; 58*dfcf9474SSrikanth Yalavarthi 59*dfcf9474SSrikanth Yalavarthi /* Tag type */ 60*dfcf9474SSrikanth Yalavarthi uint64_t ttype : 2; 61*dfcf9474SSrikanth Yalavarthi 62*dfcf9474SSrikanth Yalavarthi /* Physical function number */ 63*dfcf9474SSrikanth Yalavarthi uint64_t pf_func : 16; 64*dfcf9474SSrikanth Yalavarthi 65*dfcf9474SSrikanth Yalavarthi /* Unused [7] + Guest Group [6:0] */ 66*dfcf9474SSrikanth Yalavarthi uint64_t ggrp : 8; 67*dfcf9474SSrikanth Yalavarthi 68*dfcf9474SSrikanth Yalavarthi /* Tag */ 69*dfcf9474SSrikanth Yalavarthi uint64_t tag : 32; 70*dfcf9474SSrikanth Yalavarthi } s; 71*dfcf9474SSrikanth Yalavarthi uint64_t u64; 72*dfcf9474SSrikanth Yalavarthi } w0; 73*dfcf9474SSrikanth Yalavarthi 74*dfcf9474SSrikanth Yalavarthi /* WORD 1 */ 75*dfcf9474SSrikanth Yalavarthi union ml_jce_w1 { 76*dfcf9474SSrikanth Yalavarthi struct { 77*dfcf9474SSrikanth Yalavarthi /* Work queue pointer */ 78*dfcf9474SSrikanth Yalavarthi uint64_t wqp : 53; 79*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_53_63 : 11; 80*dfcf9474SSrikanth Yalavarthi 81*dfcf9474SSrikanth Yalavarthi } s; 82*dfcf9474SSrikanth Yalavarthi uint64_t u64; 83*dfcf9474SSrikanth Yalavarthi } w1; 84*dfcf9474SSrikanth Yalavarthi }; 85*dfcf9474SSrikanth Yalavarthi 86*dfcf9474SSrikanth Yalavarthi /* ML job command structure */ 87*dfcf9474SSrikanth Yalavarthi struct ml_job_cmd_s { 88*dfcf9474SSrikanth Yalavarthi /* WORD 0 */ 89*dfcf9474SSrikanth Yalavarthi union ml_job_cmd_w0 { 90*dfcf9474SSrikanth Yalavarthi struct { 91*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_0_63; 92*dfcf9474SSrikanth Yalavarthi } s; 93*dfcf9474SSrikanth Yalavarthi uint64_t u64; 94*dfcf9474SSrikanth Yalavarthi } w0; 95*dfcf9474SSrikanth Yalavarthi 96*dfcf9474SSrikanth Yalavarthi /* WORD 1 */ 97*dfcf9474SSrikanth Yalavarthi union ml_job_cmd_w1 { 98*dfcf9474SSrikanth Yalavarthi struct { 99*dfcf9474SSrikanth Yalavarthi /* Job pointer */ 100*dfcf9474SSrikanth Yalavarthi uint64_t jobptr : 53; 101*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_53_63 : 11; 102*dfcf9474SSrikanth Yalavarthi } s; 103*dfcf9474SSrikanth Yalavarthi uint64_t u64; 104*dfcf9474SSrikanth Yalavarthi } w1; 105*dfcf9474SSrikanth Yalavarthi }; 106*dfcf9474SSrikanth Yalavarthi 107*dfcf9474SSrikanth Yalavarthi /* ML A35 0 RST vector base structure */ 108*dfcf9474SSrikanth Yalavarthi union ml_a35_0_rst_vector_base_s { 109*dfcf9474SSrikanth Yalavarthi struct { 110*dfcf9474SSrikanth Yalavarthi /* Base address */ 111*dfcf9474SSrikanth Yalavarthi uint64_t addr : 37; 112*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_37_63 : 27; 113*dfcf9474SSrikanth Yalavarthi } s; 114*dfcf9474SSrikanth Yalavarthi 115*dfcf9474SSrikanth Yalavarthi struct { 116*dfcf9474SSrikanth Yalavarthi /* WORD 0 */ 117*dfcf9474SSrikanth Yalavarthi uint32_t w0; 118*dfcf9474SSrikanth Yalavarthi 119*dfcf9474SSrikanth Yalavarthi /* WORD 1 */ 120*dfcf9474SSrikanth Yalavarthi uint32_t w1; 121*dfcf9474SSrikanth Yalavarthi } w; 122*dfcf9474SSrikanth Yalavarthi 123*dfcf9474SSrikanth Yalavarthi uint64_t u64; 124*dfcf9474SSrikanth Yalavarthi }; 125*dfcf9474SSrikanth Yalavarthi 126*dfcf9474SSrikanth Yalavarthi /* ML A35 1 RST vector base structure */ 127*dfcf9474SSrikanth Yalavarthi union ml_a35_1_rst_vector_base_s { 128*dfcf9474SSrikanth Yalavarthi struct { 129*dfcf9474SSrikanth Yalavarthi /* Base address */ 130*dfcf9474SSrikanth Yalavarthi uint64_t addr : 37; 131*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_37_63 : 27; 132*dfcf9474SSrikanth Yalavarthi } s; 133*dfcf9474SSrikanth Yalavarthi 134*dfcf9474SSrikanth Yalavarthi struct { 135*dfcf9474SSrikanth Yalavarthi /* WORD 0 */ 136*dfcf9474SSrikanth Yalavarthi uint32_t w0; 137*dfcf9474SSrikanth Yalavarthi 138*dfcf9474SSrikanth Yalavarthi /* WORD 1 */ 139*dfcf9474SSrikanth Yalavarthi uint32_t w1; 140*dfcf9474SSrikanth Yalavarthi } w; 141*dfcf9474SSrikanth Yalavarthi 142*dfcf9474SSrikanth Yalavarthi uint64_t u64; 143*dfcf9474SSrikanth Yalavarthi }; 144*dfcf9474SSrikanth Yalavarthi 145*dfcf9474SSrikanth Yalavarthi /* Work pointer scratch register */ 146*dfcf9474SSrikanth Yalavarthi union ml_scratch_work_ptr_s { 147*dfcf9474SSrikanth Yalavarthi struct { 148*dfcf9474SSrikanth Yalavarthi /* Work pointer */ 149*dfcf9474SSrikanth Yalavarthi uint64_t work_ptr : 37; 150*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_37_63 : 27; 151*dfcf9474SSrikanth Yalavarthi } s; 152*dfcf9474SSrikanth Yalavarthi uint64_t u64; 153*dfcf9474SSrikanth Yalavarthi }; 154*dfcf9474SSrikanth Yalavarthi 155*dfcf9474SSrikanth Yalavarthi /* Firmware control scratch register */ 156*dfcf9474SSrikanth Yalavarthi union ml_scratch_fw_ctrl_s { 157*dfcf9474SSrikanth Yalavarthi struct { 158*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_0_15 : 16; 159*dfcf9474SSrikanth Yalavarthi 160*dfcf9474SSrikanth Yalavarthi /* Valid job bit */ 161*dfcf9474SSrikanth Yalavarthi uint64_t valid : 1; 162*dfcf9474SSrikanth Yalavarthi 163*dfcf9474SSrikanth Yalavarthi /* Done status bit */ 164*dfcf9474SSrikanth Yalavarthi uint64_t done : 1; 165*dfcf9474SSrikanth Yalavarthi uint64_t rsvd_18_63 : 46; 166*dfcf9474SSrikanth Yalavarthi } s; 167*dfcf9474SSrikanth Yalavarthi uint64_t u64; 168*dfcf9474SSrikanth Yalavarthi }; 169*dfcf9474SSrikanth Yalavarthi 170*dfcf9474SSrikanth Yalavarthi #endif /* __ML_HW_H__ */ 171