xref: /dpdk/drivers/common/cnxk/hw/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 __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