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 _ROC_ML_H_ 6*dfcf9474SSrikanth Yalavarthi #define _ROC_ML_H_ 7*dfcf9474SSrikanth Yalavarthi 8*dfcf9474SSrikanth Yalavarthi #include "roc_api.h" 9*dfcf9474SSrikanth Yalavarthi 10*dfcf9474SSrikanth Yalavarthi #define ROC_ML_MEM_SZ (6 * 1024) 11*dfcf9474SSrikanth Yalavarthi #define ROC_ML_TIMEOUT_MS 10000 12*dfcf9474SSrikanth Yalavarthi 13*dfcf9474SSrikanth Yalavarthi /* ML_CFG */ 14*dfcf9474SSrikanth Yalavarthi #define ROC_ML_CFG_JD_SIZE GENMASK_ULL(1, 0) 15*dfcf9474SSrikanth Yalavarthi #define ROC_ML_CFG_MLIP_ENA BIT_ULL(2) 16*dfcf9474SSrikanth Yalavarthi #define ROC_ML_CFG_BUSY BIT_ULL(3) 17*dfcf9474SSrikanth Yalavarthi #define ROC_ML_CFG_WRAP_CLK_FORCE BIT_ULL(4) 18*dfcf9474SSrikanth Yalavarthi #define ROC_ML_CFG_MLIP_CLK_FORCE BIT_ULL(5) 19*dfcf9474SSrikanth Yalavarthi #define ROC_ML_CFG_ENA BIT_ULL(6) 20*dfcf9474SSrikanth Yalavarthi 21*dfcf9474SSrikanth Yalavarthi /* ML_MLR_BASE */ 22*dfcf9474SSrikanth Yalavarthi #define ROC_ML_MLR_BASE_BASE GENMASK_ULL(51, 0) 23*dfcf9474SSrikanth Yalavarthi 24*dfcf9474SSrikanth Yalavarthi /* ML_STG_STATUS */ 25*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_STATUS_VALID BIT_ULL(0) 26*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_STATUS_ADDR_ERR BIT_ULL(1) 27*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_STATUS_DMA_ERR BIT_ULL(2) 28*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_STATUS_TIMEOUT BIT_ULL(3) 29*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_STATUS_NFAT_ERR BIT_ULL(4) 30*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_STATUS_JOB_ERR BIT_ULL(5) 31*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_STATUS_ELAPSED_TICKS GENMASK_ULL(47, 6) 32*dfcf9474SSrikanth Yalavarthi 33*dfcf9474SSrikanth Yalavarthi /* ML_STG_CONTROL */ 34*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_CONTROL_FETCH_TO_RUN BIT_ULL(0) 35*dfcf9474SSrikanth Yalavarthi #define ROC_ML_STG_CONTROL_RUN_TO_COMP BIT_ULL(1) 36*dfcf9474SSrikanth Yalavarthi 37*dfcf9474SSrikanth Yalavarthi /* ML_AXI_BRIDGE */ 38*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_AXI_RESP_CTRL BIT_ULL(0) 39*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_BRIDGE_CTRL_MODE BIT_ULL(1) 40*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_FORCE_AXI_ID GENMASK_ULL(11, 2) 41*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_CSR_WR_BLK BIT_ULL(13) 42*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_NCB_WR_BLK BIT_ULL(14) 43*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_CSR_RD_BLK BIT_ULL(15) 44*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_NCB_RD_BLK BIT_ULL(16) 45*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_FENCE BIT_ULL(17) 46*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_BUSY BIT_ULL(18) 47*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_FORCE_WRESP_OK BIT_ULL(19) 48*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_FORCE_RRESP_OK BIT_ULL(20) 49*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_CSR_FORCE_CMPLT BIT_ULL(21) 50*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_WR_CNT_GEAR GENMASK_ULL(25, 22) 51*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_RD_GEAR GENMASK_ULL(28, 26) 52*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_CSR_CUTTHROUGH_MODE BIT_ULL(29) 53*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_GAA_WRITE_CREDITS GENMASK_ULL(33, 30) 54*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_GAA_READ_CREDITS GENMASK_ULL(37, 34) 55*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_GAA_LOAD_WRITE_CREDITS BIT_ULL(38) 56*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_GAA_LOAD_READ_CREDITS BIT_ULL(39) 57*dfcf9474SSrikanth Yalavarthi #define ROC_ML_AXI_BRIDGE_CTRL_FLUSH_WRITE_DATA BIT_ULL(40) 58*dfcf9474SSrikanth Yalavarthi 59*dfcf9474SSrikanth Yalavarthi /* ML_JOB_MGR_CTRL */ 60*dfcf9474SSrikanth Yalavarthi #define ROC_ML_JOB_MGR_CTRL_STALL_ON_ERR BIT_ULL(0) 61*dfcf9474SSrikanth Yalavarthi #define ROC_ML_JOB_MGR_CTRL_PF_OVERRIDE BIT_ULL(1) 62*dfcf9474SSrikanth Yalavarthi #define ROC_ML_JOB_MGR_CTRL_PF_FUNC_OVERRIDE GENMASK_ULL(19, 4) 63*dfcf9474SSrikanth Yalavarthi #define ROC_ML_JOB_MGR_CTRL_BUSY BIT_ULL(20) 64*dfcf9474SSrikanth Yalavarthi #define ROC_ML_JOB_MGR_CTRL_STALL_ON_IDLE BIT_ULL(21) 65*dfcf9474SSrikanth Yalavarthi 66*dfcf9474SSrikanth Yalavarthi /* ML_JCMDQ_STATUS */ 67*dfcf9474SSrikanth Yalavarthi #define ROC_ML_JCMDQ_STATUS_AVAIL_COUNT GENMASK_ULL(4, 0) 68*dfcf9474SSrikanth Yalavarthi 69*dfcf9474SSrikanth Yalavarthi /* ML_ANBX_BACKP_DISABLE */ 70*dfcf9474SSrikanth Yalavarthi #define ROC_ML_ANBX_BACKP_DISABLE_EXTMSTR_B_BACKP_DISABLE BIT_ULL(0) 71*dfcf9474SSrikanth Yalavarthi #define ROC_ML_ANBX_BACKP_DISABLE_EXTMSTR_R_BACKP_DISABLE BIT_ULL(1) 72*dfcf9474SSrikanth Yalavarthi 73*dfcf9474SSrikanth Yalavarthi /* ML_ANBX_NCBI_P_OVR */ 74*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_MSH_DST_OVR_VLD BIT_ULL(0) 75*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_MSH_DST_OVR GENMASK_ULL(11, 1) 76*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_NS_OVR_VLD BIT_ULL(12) 77*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_NS_OVR BIT_ULL(13) 78*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_PADDR_OVR_VLD BIT_ULL(14) 79*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_PADDR_OVR BIT_ULL(15) 80*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_RO_OVR_VLD BIT_ULL(16) 81*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_RO_OVR BIT_ULL(17) 82*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_MPADID_VAL_OVR_VLD BIT_ULL(18) 83*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_MPADID_VAL_OVR BIT_ULL(19) 84*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_MPAMDID_OVR_VLD BIT_ULL(20) 85*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_P_OVR_ANB_NCBI_P_MPAMDID_OVR BIT_ULL(21) 86*dfcf9474SSrikanth Yalavarthi 87*dfcf9474SSrikanth Yalavarthi /* ML_ANBX_NCBI_NP_OVR */ 88*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_MSH_DST_OVR_VLD BIT_ULL(0) 89*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_MSH_DST_OVR GENMASK_ULL(11, 1) 90*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_NS_OVR_VLD BIT_ULL(12) 91*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_NS_OVR BIT_ULL(13) 92*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_PADDR_OVR_VLD BIT_ULL(14) 93*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_PADDR_OVR BIT_ULL(15) 94*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_RO_OVR_VLD BIT_ULL(16) 95*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_RO_OVR BIT_ULL(17) 96*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_MPADID_VAL_OVR_VLD BIT_ULL(18) 97*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_MPADID_VAL_OVR BIT_ULL(19) 98*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_MPAMDID_OVR_VLD BIT_ULL(20) 99*dfcf9474SSrikanth Yalavarthi #define ML_ANBX_NCBI_NP_OVR_ANB_NCBI_NP_MPAMDID_OVR BIT_ULL(21) 100*dfcf9474SSrikanth Yalavarthi 101*dfcf9474SSrikanth Yalavarthi /* ML_SW_RST_CTRL */ 102*dfcf9474SSrikanth Yalavarthi #define ROC_ML_SW_RST_CTRL_ACC_RST BIT_ULL(0) 103*dfcf9474SSrikanth Yalavarthi #define ROC_ML_SW_RST_CTRL_CMPC_RST BIT_ULL(1) 104*dfcf9474SSrikanth Yalavarthi 105*dfcf9474SSrikanth Yalavarthi struct roc_ml { 106*dfcf9474SSrikanth Yalavarthi struct plt_pci_device *pci_dev; 107*dfcf9474SSrikanth Yalavarthi plt_spinlock_t sp_spinlock; 108*dfcf9474SSrikanth Yalavarthi plt_spinlock_t fp_spinlock; 109*dfcf9474SSrikanth Yalavarthi uint8_t reserved[ROC_ML_MEM_SZ] __plt_cache_aligned; 110*dfcf9474SSrikanth Yalavarthi } __plt_cache_aligned; 111*dfcf9474SSrikanth Yalavarthi 112*dfcf9474SSrikanth Yalavarthi /* Register read and write functions */ 113*dfcf9474SSrikanth Yalavarthi uint64_t __roc_api roc_ml_reg_read64(struct roc_ml *roc_ml, uint64_t offset); 114*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_reg_write64(struct roc_ml *roc_ml, uint64_t val, uint64_t offset); 115*dfcf9474SSrikanth Yalavarthi uint32_t __roc_api roc_ml_reg_read32(struct roc_ml *roc_ml, uint64_t offset); 116*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_reg_write32(struct roc_ml *roc_ml, uint32_t val, uint64_t offset); 117*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_reg_save(struct roc_ml *roc_ml, uint64_t offset); 118*dfcf9474SSrikanth Yalavarthi 119*dfcf9474SSrikanth Yalavarthi /* Address translation functions */ 120*dfcf9474SSrikanth Yalavarthi uint64_t __roc_api roc_ml_addr_pa_to_offset(struct roc_ml *roc_ml, uint64_t phys_addr); 121*dfcf9474SSrikanth Yalavarthi uint64_t __roc_api roc_ml_addr_offset_to_pa(struct roc_ml *roc_ml, uint64_t offset); 122*dfcf9474SSrikanth Yalavarthi void *__roc_api roc_ml_addr_ap2mlip(struct roc_ml *roc_ml, void *addr); 123*dfcf9474SSrikanth Yalavarthi void *__roc_api roc_ml_addr_mlip2ap(struct roc_ml *roc_ml, void *addr); 124*dfcf9474SSrikanth Yalavarthi 125*dfcf9474SSrikanth Yalavarthi /* Scratch and JCMDQ functions */ 126*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_scratch_write_job(struct roc_ml *roc_ml, void *jd); 127*dfcf9474SSrikanth Yalavarthi bool __roc_api roc_ml_scratch_is_valid_bit_set(struct roc_ml *roc_ml); 128*dfcf9474SSrikanth Yalavarthi bool __roc_api roc_ml_scratch_is_done_bit_set(struct roc_ml *roc_ml); 129*dfcf9474SSrikanth Yalavarthi bool __roc_api roc_ml_scratch_enqueue(struct roc_ml *roc_ml, void *work_ptr); 130*dfcf9474SSrikanth Yalavarthi bool __roc_api roc_ml_scratch_dequeue(struct roc_ml *roc_ml, void *work_ptr); 131*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_scratch_queue_reset(struct roc_ml *roc_ml); 132*dfcf9474SSrikanth Yalavarthi bool __roc_api roc_ml_jcmdq_enqueue_lf(struct roc_ml *roc_ml, struct ml_job_cmd_s *job_cmd); 133*dfcf9474SSrikanth Yalavarthi bool __roc_api roc_ml_jcmdq_enqueue_sl(struct roc_ml *roc_ml, struct ml_job_cmd_s *job_cmd); 134*dfcf9474SSrikanth Yalavarthi 135*dfcf9474SSrikanth Yalavarthi /* Device management functions */ 136*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_clk_force_on(struct roc_ml *roc_ml); 137*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_clk_force_off(struct roc_ml *roc_ml); 138*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_dma_stall_on(struct roc_ml *roc_ml); 139*dfcf9474SSrikanth Yalavarthi void __roc_api roc_ml_dma_stall_off(struct roc_ml *roc_ml); 140*dfcf9474SSrikanth Yalavarthi bool __roc_api roc_ml_mlip_is_enabled(struct roc_ml *roc_ml); 141*dfcf9474SSrikanth Yalavarthi int __roc_api roc_ml_mlip_reset(struct roc_ml *roc_ml, bool force); 142*dfcf9474SSrikanth Yalavarthi 143*dfcf9474SSrikanth Yalavarthi /* Device / block functions */ 144*dfcf9474SSrikanth Yalavarthi int __roc_api roc_ml_dev_init(struct roc_ml *roc_ml); 145*dfcf9474SSrikanth Yalavarthi int __roc_api roc_ml_dev_fini(struct roc_ml *roc_ml); 146*dfcf9474SSrikanth Yalavarthi int __roc_api roc_ml_blk_init(struct roc_bphy *roc_bphy, struct roc_ml *roc_ml); 147*dfcf9474SSrikanth Yalavarthi int __roc_api roc_ml_blk_fini(struct roc_bphy *roc_bphy, struct roc_ml *roc_ml); 148*dfcf9474SSrikanth Yalavarthi 149*dfcf9474SSrikanth Yalavarthi /* Utility functions */ 150*dfcf9474SSrikanth Yalavarthi uint16_t __roc_api roc_ml_sso_pf_func_get(void); 151*dfcf9474SSrikanth Yalavarthi 152*dfcf9474SSrikanth Yalavarthi #endif /*_ROC_ML_H_*/ 153