xref: /dpdk/drivers/common/cnxk/roc_ml.h (revision dfcf94749ac9a899eb091bb99ac78d57ed7b215b)
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