xref: /rk3399_rockchip-uboot/include/fsl-mc/fsl_dpio.h (revision cd85bec36d0e0d16fedb00e0c434ed070a9c6b37)
1a2a55e51SPrabhakar Kushwaha /*
2a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor
3a2a55e51SPrabhakar Kushwaha  *
4a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
5a2a55e51SPrabhakar Kushwaha  */
6a2a55e51SPrabhakar Kushwaha 
7a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPIO_H
8a2a55e51SPrabhakar Kushwaha #define _FSL_DPIO_H
9a2a55e51SPrabhakar Kushwaha 
10a2a55e51SPrabhakar Kushwaha /* DPIO Version */
111f1c25c7SPrabhakar Kushwaha #define DPIO_VER_MAJOR				3
12*53e353fcSPrabhakar Kushwaha #define DPIO_VER_MINOR				2
13a2a55e51SPrabhakar Kushwaha 
14a2a55e51SPrabhakar Kushwaha /* Command IDs */
15a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_CLOSE					0x800
16a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_OPEN						0x803
171ebbe4fcSPrabhakar Kushwaha #define DPIO_CMDID_CREATE					0x903
181ebbe4fcSPrabhakar Kushwaha #define DPIO_CMDID_DESTROY					0x900
19a2a55e51SPrabhakar Kushwaha 
20a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_ENABLE					0x002
21a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_DISABLE					0x003
22a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_GET_ATTR					0x004
23a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_RESET					0x005
24a2a55e51SPrabhakar Kushwaha 
25a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
26a2a55e51SPrabhakar Kushwaha #define DPIO_CMD_OPEN(cmd, dpio_id) \
27a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,     dpio_id)
28a2a55e51SPrabhakar Kushwaha 
29a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
301ebbe4fcSPrabhakar Kushwaha #define DPIO_CMD_CREATE(cmd, cfg) \
311ebbe4fcSPrabhakar Kushwaha do { \
321ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 2,  enum dpio_channel_mode,	\
331ebbe4fcSPrabhakar Kushwaha 					   cfg->channel_mode);\
341ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t, cfg->num_priorities);\
351ebbe4fcSPrabhakar Kushwaha } while (0)
361ebbe4fcSPrabhakar Kushwaha 
371ebbe4fcSPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
38a2a55e51SPrabhakar Kushwaha #define DPIO_RSP_GET_ATTR(cmd, attr) \
39a2a55e51SPrabhakar Kushwaha do { \
40a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,	    attr->id);\
41a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->qbman_portal_id);\
42a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 48, 8,  uint8_t,  attr->num_priorities);\
43a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 56, 4,  enum dpio_channel_mode, attr->channel_mode);\
441f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, attr->qbman_portal_ce_offset);\
451f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  64, uint64_t, attr->qbman_portal_ci_offset);\
46a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  16, uint16_t, attr->version.major);\
47a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 16, 16, uint16_t, attr->version.minor);\
48*53e353fcSPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->qbman_version);\
49a2a55e51SPrabhakar Kushwaha } while (0)
50a2a55e51SPrabhakar Kushwaha 
51a2a55e51SPrabhakar Kushwaha /* Data Path I/O Portal API
52a2a55e51SPrabhakar Kushwaha  * Contains initialization APIs and runtime control APIs for DPIO
53a2a55e51SPrabhakar Kushwaha  */
54a2a55e51SPrabhakar Kushwaha 
55a2a55e51SPrabhakar Kushwaha struct fsl_mc_io;
561f1c25c7SPrabhakar Kushwaha 
57a2a55e51SPrabhakar Kushwaha /**
58a2a55e51SPrabhakar Kushwaha  * dpio_open() - Open a control session for the specified object
59a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
6087457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
61a2a55e51SPrabhakar Kushwaha  * @dpio_id:	DPIO unique ID
62a2a55e51SPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
63a2a55e51SPrabhakar Kushwaha  *
64a2a55e51SPrabhakar Kushwaha  * This function can be used to open a control session for an
65a2a55e51SPrabhakar Kushwaha  * already created object; an object may have been declared in
66a2a55e51SPrabhakar Kushwaha  * the DPL or by calling the dpio_create() function.
67a2a55e51SPrabhakar Kushwaha  * This function returns a unique authentication token,
68a2a55e51SPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
69a2a55e51SPrabhakar Kushwaha  * portal; this token must be used in all subsequent commands for
70a2a55e51SPrabhakar Kushwaha  * this specific object.
71a2a55e51SPrabhakar Kushwaha  *
72a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
73a2a55e51SPrabhakar Kushwaha  */
7487457d11SPrabhakar Kushwaha int dpio_open(struct fsl_mc_io	*mc_io,
7587457d11SPrabhakar Kushwaha 	      uint32_t		cmd_flags,
7687457d11SPrabhakar Kushwaha 	      int		dpio_id,
7787457d11SPrabhakar Kushwaha 	      uint16_t		*token);
78a2a55e51SPrabhakar Kushwaha 
79a2a55e51SPrabhakar Kushwaha /**
801f1c25c7SPrabhakar Kushwaha  * dpio_close() - Close the control session of the object
81a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
8287457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
831f1c25c7SPrabhakar Kushwaha  * @token:	Token of DPIO object
84a2a55e51SPrabhakar Kushwaha  *
85a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
86a2a55e51SPrabhakar Kushwaha  */
8787457d11SPrabhakar Kushwaha int dpio_close(struct fsl_mc_io	*mc_io,
8887457d11SPrabhakar Kushwaha 	       uint32_t		cmd_flags,
8987457d11SPrabhakar Kushwaha 	       uint16_t		token);
90a2a55e51SPrabhakar Kushwaha 
91a2a55e51SPrabhakar Kushwaha /**
92a2a55e51SPrabhakar Kushwaha  * enum dpio_channel_mode - DPIO notification channel mode
93a2a55e51SPrabhakar Kushwaha  * @DPIO_NO_CHANNEL: No support for notification channel
94a2a55e51SPrabhakar Kushwaha  * @DPIO_LOCAL_CHANNEL: Notifications on data availability can be received by a
95a2a55e51SPrabhakar Kushwaha  *	dedicated channel in the DPIO; user should point the queue's
96a2a55e51SPrabhakar Kushwaha  *	destination in the relevant interface to this DPIO
97a2a55e51SPrabhakar Kushwaha  */
98a2a55e51SPrabhakar Kushwaha enum dpio_channel_mode {
99a2a55e51SPrabhakar Kushwaha 	DPIO_NO_CHANNEL = 0,
100a2a55e51SPrabhakar Kushwaha 	DPIO_LOCAL_CHANNEL = 1,
101a2a55e51SPrabhakar Kushwaha };
102a2a55e51SPrabhakar Kushwaha 
103a2a55e51SPrabhakar Kushwaha /**
1041ebbe4fcSPrabhakar Kushwaha  * struct dpio_cfg - Structure representing DPIO configuration
1051ebbe4fcSPrabhakar Kushwaha  * @channel_mode: Notification channel mode
1061ebbe4fcSPrabhakar Kushwaha  * @num_priorities: Number of priorities for the notification channel (1-8);
1071ebbe4fcSPrabhakar Kushwaha  *			relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL'
1081ebbe4fcSPrabhakar Kushwaha  */
1091ebbe4fcSPrabhakar Kushwaha struct dpio_cfg {
1101ebbe4fcSPrabhakar Kushwaha 	enum dpio_channel_mode	channel_mode;
1111ebbe4fcSPrabhakar Kushwaha 	uint8_t		num_priorities;
1121ebbe4fcSPrabhakar Kushwaha };
1131ebbe4fcSPrabhakar Kushwaha 
1141ebbe4fcSPrabhakar Kushwaha /**
1151ebbe4fcSPrabhakar Kushwaha  * dpio_create() - Create the DPIO object.
1161ebbe4fcSPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
1171ebbe4fcSPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1181ebbe4fcSPrabhakar Kushwaha  * @cfg:	Configuration structure
1191ebbe4fcSPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
1201ebbe4fcSPrabhakar Kushwaha  *
1211ebbe4fcSPrabhakar Kushwaha  * Create the DPIO object, allocate required resources and
1221ebbe4fcSPrabhakar Kushwaha  * perform required initialization.
1231ebbe4fcSPrabhakar Kushwaha  *
1241ebbe4fcSPrabhakar Kushwaha  * The object can be created either by declaring it in the
1251ebbe4fcSPrabhakar Kushwaha  * DPL file, or by calling this function.
1261ebbe4fcSPrabhakar Kushwaha  *
1271ebbe4fcSPrabhakar Kushwaha  * This function returns a unique authentication token,
1281ebbe4fcSPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
1291ebbe4fcSPrabhakar Kushwaha  * portal; this token must be used in all subsequent calls to
1301ebbe4fcSPrabhakar Kushwaha  * this specific object. For objects that are created using the
1311ebbe4fcSPrabhakar Kushwaha  * DPL file, call dpio_open() function to get an authentication
1321ebbe4fcSPrabhakar Kushwaha  * token first.
1331ebbe4fcSPrabhakar Kushwaha  *
1341ebbe4fcSPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1351ebbe4fcSPrabhakar Kushwaha  */
1361ebbe4fcSPrabhakar Kushwaha int dpio_create(struct fsl_mc_io	*mc_io,
1371ebbe4fcSPrabhakar Kushwaha 		uint32_t		cmd_flags,
1381ebbe4fcSPrabhakar Kushwaha 		const struct dpio_cfg	*cfg,
1391ebbe4fcSPrabhakar Kushwaha 		uint16_t		*token);
1401ebbe4fcSPrabhakar Kushwaha 
1411ebbe4fcSPrabhakar Kushwaha /**
1421ebbe4fcSPrabhakar Kushwaha  * dpio_destroy() - Destroy the DPIO object and release all its resources.
1431ebbe4fcSPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
1441ebbe4fcSPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1451ebbe4fcSPrabhakar Kushwaha  * @token:	Token of DPIO object
1461ebbe4fcSPrabhakar Kushwaha  *
1471ebbe4fcSPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise
1481ebbe4fcSPrabhakar Kushwaha  */
1491ebbe4fcSPrabhakar Kushwaha int dpio_destroy(struct fsl_mc_io	*mc_io,
1501ebbe4fcSPrabhakar Kushwaha 		 uint32_t		cmd_flags,
1511ebbe4fcSPrabhakar Kushwaha 		 uint16_t		token);
1521ebbe4fcSPrabhakar Kushwaha 
1531ebbe4fcSPrabhakar Kushwaha /**
154a2a55e51SPrabhakar Kushwaha  * dpio_enable() - Enable the DPIO, allow I/O portal operations.
155a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
15687457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
157a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPIO object
158a2a55e51SPrabhakar Kushwaha  *
159a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise
160a2a55e51SPrabhakar Kushwaha  */
16187457d11SPrabhakar Kushwaha int dpio_enable(struct fsl_mc_io	*mc_io,
16287457d11SPrabhakar Kushwaha 		uint32_t		cmd_flags,
16387457d11SPrabhakar Kushwaha 		uint16_t		token);
164a2a55e51SPrabhakar Kushwaha 
165a2a55e51SPrabhakar Kushwaha /**
166a2a55e51SPrabhakar Kushwaha  * dpio_disable() - Disable the DPIO, stop any I/O portal operation.
167a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
16887457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
169a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPIO object
170a2a55e51SPrabhakar Kushwaha  *
171a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise
172a2a55e51SPrabhakar Kushwaha  */
17387457d11SPrabhakar Kushwaha int dpio_disable(struct fsl_mc_io	*mc_io,
17487457d11SPrabhakar Kushwaha 		 uint32_t		cmd_flags,
17587457d11SPrabhakar Kushwaha 		 uint16_t		token);
176a2a55e51SPrabhakar Kushwaha 
177a2a55e51SPrabhakar Kushwaha /**
178a2a55e51SPrabhakar Kushwaha  * dpio_reset() - Reset the DPIO, returns the object to initial state.
179a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
18087457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
181a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPIO object
182a2a55e51SPrabhakar Kushwaha  *
183a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
184a2a55e51SPrabhakar Kushwaha  */
18587457d11SPrabhakar Kushwaha int dpio_reset(struct fsl_mc_io	*mc_io,
18687457d11SPrabhakar Kushwaha 	       uint32_t			cmd_flags,
18787457d11SPrabhakar Kushwaha 	       uint16_t		token);
188a2a55e51SPrabhakar Kushwaha 
189a2a55e51SPrabhakar Kushwaha /**
190a2a55e51SPrabhakar Kushwaha  * struct dpio_attr - Structure representing DPIO attributes
191a2a55e51SPrabhakar Kushwaha  * @id: DPIO object ID
192a2a55e51SPrabhakar Kushwaha  * @version: DPIO version
1931f1c25c7SPrabhakar Kushwaha  * @qbman_portal_ce_offset: offset of the software portal cache-enabled area
1941f1c25c7SPrabhakar Kushwaha  * @qbman_portal_ci_offset: offset of the software portal cache-inhibited area
195a2a55e51SPrabhakar Kushwaha  * @qbman_portal_id: Software portal ID
196a2a55e51SPrabhakar Kushwaha  * @channel_mode: Notification channel mode
197a2a55e51SPrabhakar Kushwaha  * @num_priorities: Number of priorities for the notification channel (1-8);
198a2a55e51SPrabhakar Kushwaha  *			relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL'
199*53e353fcSPrabhakar Kushwaha  * @qbman_version: QBMAN version
200a2a55e51SPrabhakar Kushwaha  */
201a2a55e51SPrabhakar Kushwaha struct dpio_attr {
202a2a55e51SPrabhakar Kushwaha 	int id;
203a2a55e51SPrabhakar Kushwaha 	/**
204a2a55e51SPrabhakar Kushwaha 	 * struct version - DPIO version
205a2a55e51SPrabhakar Kushwaha 	 * @major: DPIO major version
206a2a55e51SPrabhakar Kushwaha 	 * @minor: DPIO minor version
207a2a55e51SPrabhakar Kushwaha 	 */
208a2a55e51SPrabhakar Kushwaha 	struct {
209a2a55e51SPrabhakar Kushwaha 		uint16_t major;
210a2a55e51SPrabhakar Kushwaha 		uint16_t minor;
211a2a55e51SPrabhakar Kushwaha 	} version;
2121f1c25c7SPrabhakar Kushwaha 	uint64_t qbman_portal_ce_offset;
2131f1c25c7SPrabhakar Kushwaha 	uint64_t qbman_portal_ci_offset;
214a2a55e51SPrabhakar Kushwaha 	uint16_t qbman_portal_id;
215a2a55e51SPrabhakar Kushwaha 	enum dpio_channel_mode channel_mode;
216a2a55e51SPrabhakar Kushwaha 	uint8_t num_priorities;
217*53e353fcSPrabhakar Kushwaha 	uint32_t		qbman_version;
218a2a55e51SPrabhakar Kushwaha };
219a2a55e51SPrabhakar Kushwaha 
220a2a55e51SPrabhakar Kushwaha /**
221a2a55e51SPrabhakar Kushwaha  * dpio_get_attributes() - Retrieve DPIO attributes
222a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
22387457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
224a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPIO object
225a2a55e51SPrabhakar Kushwaha  * @attr:	Returned object's attributes
226a2a55e51SPrabhakar Kushwaha  *
227a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise
228a2a55e51SPrabhakar Kushwaha  */
229a2a55e51SPrabhakar Kushwaha int dpio_get_attributes(struct fsl_mc_io	*mc_io,
23087457d11SPrabhakar Kushwaha 			uint32_t		cmd_flags,
231a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
232a2a55e51SPrabhakar Kushwaha 			struct dpio_attr	*attr);
233a2a55e51SPrabhakar Kushwaha 
234a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPIO_H */
235