xref: /OK3568_Linux_fs/u-boot/include/fsl-mc/fsl_dpio.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2013-2015 Freescale Semiconductor
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _FSL_DPIO_H
8*4882a593Smuzhiyun #define _FSL_DPIO_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /* DPIO Version */
11*4882a593Smuzhiyun #define DPIO_VER_MAJOR				3
12*4882a593Smuzhiyun #define DPIO_VER_MINOR				2
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* Command IDs */
15*4882a593Smuzhiyun #define DPIO_CMDID_CLOSE					0x800
16*4882a593Smuzhiyun #define DPIO_CMDID_OPEN						0x803
17*4882a593Smuzhiyun #define DPIO_CMDID_CREATE					0x903
18*4882a593Smuzhiyun #define DPIO_CMDID_DESTROY					0x900
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define DPIO_CMDID_ENABLE					0x002
21*4882a593Smuzhiyun #define DPIO_CMDID_DISABLE					0x003
22*4882a593Smuzhiyun #define DPIO_CMDID_GET_ATTR					0x004
23*4882a593Smuzhiyun #define DPIO_CMDID_RESET					0x005
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*                cmd, param, offset, width, type, arg_name */
26*4882a593Smuzhiyun #define DPIO_CMD_OPEN(cmd, dpio_id) \
27*4882a593Smuzhiyun 	MC_CMD_OP(cmd, 0, 0,  32, int,     dpio_id)
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /*                cmd, param, offset, width, type, arg_name */
30*4882a593Smuzhiyun #define DPIO_CMD_CREATE(cmd, cfg) \
31*4882a593Smuzhiyun do { \
32*4882a593Smuzhiyun 	MC_CMD_OP(cmd, 0, 16, 2,  enum dpio_channel_mode,	\
33*4882a593Smuzhiyun 					   cfg->channel_mode);\
34*4882a593Smuzhiyun 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t, cfg->num_priorities);\
35*4882a593Smuzhiyun } while (0)
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun /*                cmd, param, offset, width, type, arg_name */
38*4882a593Smuzhiyun #define DPIO_RSP_GET_ATTR(cmd, attr) \
39*4882a593Smuzhiyun do { \
40*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 0, 0,  32, int,	    attr->id);\
41*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->qbman_portal_id);\
42*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 0, 48, 8,  uint8_t,  attr->num_priorities);\
43*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 0, 56, 4,  enum dpio_channel_mode, attr->channel_mode);\
44*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, attr->qbman_portal_ce_offset);\
45*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 2, 0,  64, uint64_t, attr->qbman_portal_ci_offset);\
46*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 3, 0,  16, uint16_t, attr->version.major);\
47*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 3, 16, 16, uint16_t, attr->version.minor);\
48*4882a593Smuzhiyun 	MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->qbman_version);\
49*4882a593Smuzhiyun } while (0)
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /* Data Path I/O Portal API
52*4882a593Smuzhiyun  * Contains initialization APIs and runtime control APIs for DPIO
53*4882a593Smuzhiyun  */
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun struct fsl_mc_io;
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun /**
58*4882a593Smuzhiyun  * dpio_open() - Open a control session for the specified object
59*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
60*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
61*4882a593Smuzhiyun  * @dpio_id:	DPIO unique ID
62*4882a593Smuzhiyun  * @token:	Returned token; use in subsequent API calls
63*4882a593Smuzhiyun  *
64*4882a593Smuzhiyun  * This function can be used to open a control session for an
65*4882a593Smuzhiyun  * already created object; an object may have been declared in
66*4882a593Smuzhiyun  * the DPL or by calling the dpio_create() function.
67*4882a593Smuzhiyun  * This function returns a unique authentication token,
68*4882a593Smuzhiyun  * associated with the specific object ID and the specific MC
69*4882a593Smuzhiyun  * portal; this token must be used in all subsequent commands for
70*4882a593Smuzhiyun  * this specific object.
71*4882a593Smuzhiyun  *
72*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise.
73*4882a593Smuzhiyun  */
74*4882a593Smuzhiyun int dpio_open(struct fsl_mc_io	*mc_io,
75*4882a593Smuzhiyun 	      uint32_t		cmd_flags,
76*4882a593Smuzhiyun 	      int		dpio_id,
77*4882a593Smuzhiyun 	      uint16_t		*token);
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /**
80*4882a593Smuzhiyun  * dpio_close() - Close the control session of the object
81*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
82*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
83*4882a593Smuzhiyun  * @token:	Token of DPIO object
84*4882a593Smuzhiyun  *
85*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise.
86*4882a593Smuzhiyun  */
87*4882a593Smuzhiyun int dpio_close(struct fsl_mc_io	*mc_io,
88*4882a593Smuzhiyun 	       uint32_t		cmd_flags,
89*4882a593Smuzhiyun 	       uint16_t		token);
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun /**
92*4882a593Smuzhiyun  * enum dpio_channel_mode - DPIO notification channel mode
93*4882a593Smuzhiyun  * @DPIO_NO_CHANNEL: No support for notification channel
94*4882a593Smuzhiyun  * @DPIO_LOCAL_CHANNEL: Notifications on data availability can be received by a
95*4882a593Smuzhiyun  *	dedicated channel in the DPIO; user should point the queue's
96*4882a593Smuzhiyun  *	destination in the relevant interface to this DPIO
97*4882a593Smuzhiyun  */
98*4882a593Smuzhiyun enum dpio_channel_mode {
99*4882a593Smuzhiyun 	DPIO_NO_CHANNEL = 0,
100*4882a593Smuzhiyun 	DPIO_LOCAL_CHANNEL = 1,
101*4882a593Smuzhiyun };
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun /**
104*4882a593Smuzhiyun  * struct dpio_cfg - Structure representing DPIO configuration
105*4882a593Smuzhiyun  * @channel_mode: Notification channel mode
106*4882a593Smuzhiyun  * @num_priorities: Number of priorities for the notification channel (1-8);
107*4882a593Smuzhiyun  *			relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL'
108*4882a593Smuzhiyun  */
109*4882a593Smuzhiyun struct dpio_cfg {
110*4882a593Smuzhiyun 	enum dpio_channel_mode	channel_mode;
111*4882a593Smuzhiyun 	uint8_t		num_priorities;
112*4882a593Smuzhiyun };
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun /**
115*4882a593Smuzhiyun  * dpio_create() - Create the DPIO object.
116*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
117*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
118*4882a593Smuzhiyun  * @cfg:	Configuration structure
119*4882a593Smuzhiyun  * @token:	Returned token; use in subsequent API calls
120*4882a593Smuzhiyun  *
121*4882a593Smuzhiyun  * Create the DPIO object, allocate required resources and
122*4882a593Smuzhiyun  * perform required initialization.
123*4882a593Smuzhiyun  *
124*4882a593Smuzhiyun  * The object can be created either by declaring it in the
125*4882a593Smuzhiyun  * DPL file, or by calling this function.
126*4882a593Smuzhiyun  *
127*4882a593Smuzhiyun  * This function returns a unique authentication token,
128*4882a593Smuzhiyun  * associated with the specific object ID and the specific MC
129*4882a593Smuzhiyun  * portal; this token must be used in all subsequent calls to
130*4882a593Smuzhiyun  * this specific object. For objects that are created using the
131*4882a593Smuzhiyun  * DPL file, call dpio_open() function to get an authentication
132*4882a593Smuzhiyun  * token first.
133*4882a593Smuzhiyun  *
134*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise.
135*4882a593Smuzhiyun  */
136*4882a593Smuzhiyun int dpio_create(struct fsl_mc_io	*mc_io,
137*4882a593Smuzhiyun 		uint32_t		cmd_flags,
138*4882a593Smuzhiyun 		const struct dpio_cfg	*cfg,
139*4882a593Smuzhiyun 		uint16_t		*token);
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun /**
142*4882a593Smuzhiyun  * dpio_destroy() - Destroy the DPIO object and release all its resources.
143*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
144*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
145*4882a593Smuzhiyun  * @token:	Token of DPIO object
146*4882a593Smuzhiyun  *
147*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise
148*4882a593Smuzhiyun  */
149*4882a593Smuzhiyun int dpio_destroy(struct fsl_mc_io	*mc_io,
150*4882a593Smuzhiyun 		 uint32_t		cmd_flags,
151*4882a593Smuzhiyun 		 uint16_t		token);
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun /**
154*4882a593Smuzhiyun  * dpio_enable() - Enable the DPIO, allow I/O portal operations.
155*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
156*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
157*4882a593Smuzhiyun  * @token:	Token of DPIO object
158*4882a593Smuzhiyun  *
159*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise
160*4882a593Smuzhiyun  */
161*4882a593Smuzhiyun int dpio_enable(struct fsl_mc_io	*mc_io,
162*4882a593Smuzhiyun 		uint32_t		cmd_flags,
163*4882a593Smuzhiyun 		uint16_t		token);
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /**
166*4882a593Smuzhiyun  * dpio_disable() - Disable the DPIO, stop any I/O portal operation.
167*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
168*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
169*4882a593Smuzhiyun  * @token:	Token of DPIO object
170*4882a593Smuzhiyun  *
171*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise
172*4882a593Smuzhiyun  */
173*4882a593Smuzhiyun int dpio_disable(struct fsl_mc_io	*mc_io,
174*4882a593Smuzhiyun 		 uint32_t		cmd_flags,
175*4882a593Smuzhiyun 		 uint16_t		token);
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun /**
178*4882a593Smuzhiyun  * dpio_reset() - Reset the DPIO, returns the object to initial state.
179*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
180*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
181*4882a593Smuzhiyun  * @token:	Token of DPIO object
182*4882a593Smuzhiyun  *
183*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise.
184*4882a593Smuzhiyun  */
185*4882a593Smuzhiyun int dpio_reset(struct fsl_mc_io	*mc_io,
186*4882a593Smuzhiyun 	       uint32_t			cmd_flags,
187*4882a593Smuzhiyun 	       uint16_t		token);
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun /**
190*4882a593Smuzhiyun  * struct dpio_attr - Structure representing DPIO attributes
191*4882a593Smuzhiyun  * @id: DPIO object ID
192*4882a593Smuzhiyun  * @version: DPIO version
193*4882a593Smuzhiyun  * @qbman_portal_ce_offset: offset of the software portal cache-enabled area
194*4882a593Smuzhiyun  * @qbman_portal_ci_offset: offset of the software portal cache-inhibited area
195*4882a593Smuzhiyun  * @qbman_portal_id: Software portal ID
196*4882a593Smuzhiyun  * @channel_mode: Notification channel mode
197*4882a593Smuzhiyun  * @num_priorities: Number of priorities for the notification channel (1-8);
198*4882a593Smuzhiyun  *			relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL'
199*4882a593Smuzhiyun  * @qbman_version: QBMAN version
200*4882a593Smuzhiyun  */
201*4882a593Smuzhiyun struct dpio_attr {
202*4882a593Smuzhiyun 	int id;
203*4882a593Smuzhiyun 	/**
204*4882a593Smuzhiyun 	 * struct version - DPIO version
205*4882a593Smuzhiyun 	 * @major: DPIO major version
206*4882a593Smuzhiyun 	 * @minor: DPIO minor version
207*4882a593Smuzhiyun 	 */
208*4882a593Smuzhiyun 	struct {
209*4882a593Smuzhiyun 		uint16_t major;
210*4882a593Smuzhiyun 		uint16_t minor;
211*4882a593Smuzhiyun 	} version;
212*4882a593Smuzhiyun 	uint64_t qbman_portal_ce_offset;
213*4882a593Smuzhiyun 	uint64_t qbman_portal_ci_offset;
214*4882a593Smuzhiyun 	uint16_t qbman_portal_id;
215*4882a593Smuzhiyun 	enum dpio_channel_mode channel_mode;
216*4882a593Smuzhiyun 	uint8_t num_priorities;
217*4882a593Smuzhiyun 	uint32_t		qbman_version;
218*4882a593Smuzhiyun };
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun /**
221*4882a593Smuzhiyun  * dpio_get_attributes() - Retrieve DPIO attributes
222*4882a593Smuzhiyun  * @mc_io:	Pointer to MC portal's I/O object
223*4882a593Smuzhiyun  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
224*4882a593Smuzhiyun  * @token:	Token of DPIO object
225*4882a593Smuzhiyun  * @attr:	Returned object's attributes
226*4882a593Smuzhiyun  *
227*4882a593Smuzhiyun  * Return:	'0' on Success; Error code otherwise
228*4882a593Smuzhiyun  */
229*4882a593Smuzhiyun int dpio_get_attributes(struct fsl_mc_io	*mc_io,
230*4882a593Smuzhiyun 			uint32_t		cmd_flags,
231*4882a593Smuzhiyun 			uint16_t		token,
232*4882a593Smuzhiyun 			struct dpio_attr	*attr);
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun #endif /* _FSL_DPIO_H */
235