xref: /openbmc/u-boot/drivers/net/fsl-mc/dpbp.c (revision 9a66328a)
183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2a2a55e51SPrabhakar Kushwaha /*
3a2a55e51SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
4a2a55e51SPrabhakar Kushwaha  *
5*a6f2a6eaSYogesh Gaur  * Copyright 2013-2016 Freescale Semiconductor, Inc.
62557c5a9SYogesh Gaur  * Copyright 2017 NXP
7a2a55e51SPrabhakar Kushwaha  */
8a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
9a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
10a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dpbp.h>
11a2a55e51SPrabhakar Kushwaha 
dpbp_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int dpbp_id,uint16_t * token)1287457d11SPrabhakar Kushwaha int dpbp_open(struct fsl_mc_io *mc_io,
1387457d11SPrabhakar Kushwaha 	      uint32_t cmd_flags,
1487457d11SPrabhakar Kushwaha 	      int dpbp_id,
1587457d11SPrabhakar Kushwaha 	      uint16_t *token)
16a2a55e51SPrabhakar Kushwaha {
17a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
18a2a55e51SPrabhakar Kushwaha 	int err;
19a2a55e51SPrabhakar Kushwaha 
20a2a55e51SPrabhakar Kushwaha 	/* prepare command */
21a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_OPEN,
2287457d11SPrabhakar Kushwaha 					  cmd_flags,
2387457d11SPrabhakar Kushwaha 					  0);
24a2a55e51SPrabhakar Kushwaha 	DPBP_CMD_OPEN(cmd, dpbp_id);
25a2a55e51SPrabhakar Kushwaha 
26a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
27a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
28a2a55e51SPrabhakar Kushwaha 	if (err)
29a2a55e51SPrabhakar Kushwaha 		return err;
30a2a55e51SPrabhakar Kushwaha 
31a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
32a2a55e51SPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
33a2a55e51SPrabhakar Kushwaha 
34a2a55e51SPrabhakar Kushwaha 	return err;
35a2a55e51SPrabhakar Kushwaha }
36a2a55e51SPrabhakar Kushwaha 
dpbp_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)3787457d11SPrabhakar Kushwaha int dpbp_close(struct fsl_mc_io *mc_io,
3887457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
3987457d11SPrabhakar Kushwaha 	       uint16_t token)
40a2a55e51SPrabhakar Kushwaha {
41a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
42a2a55e51SPrabhakar Kushwaha 
43a2a55e51SPrabhakar Kushwaha 	/* prepare command */
4487457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, cmd_flags,
45a2a55e51SPrabhakar Kushwaha 					  token);
46a2a55e51SPrabhakar Kushwaha 
47a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
48a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
49a2a55e51SPrabhakar Kushwaha }
50a2a55e51SPrabhakar Kushwaha 
dpbp_create(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,const struct dpbp_cfg * cfg,uint32_t * obj_id)511ebbe4fcSPrabhakar Kushwaha int dpbp_create(struct fsl_mc_io *mc_io,
522557c5a9SYogesh Gaur 		uint16_t dprc_token,
531ebbe4fcSPrabhakar Kushwaha 		uint32_t cmd_flags,
541ebbe4fcSPrabhakar Kushwaha 		const struct dpbp_cfg *cfg,
552557c5a9SYogesh Gaur 		uint32_t *obj_id)
561ebbe4fcSPrabhakar Kushwaha {
571ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
581ebbe4fcSPrabhakar Kushwaha 	int err;
591ebbe4fcSPrabhakar Kushwaha 
601ebbe4fcSPrabhakar Kushwaha 	(void)(cfg); /* unused */
611ebbe4fcSPrabhakar Kushwaha 
621ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
631ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_CREATE,
641ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
652557c5a9SYogesh Gaur 					  dprc_token);
661ebbe4fcSPrabhakar Kushwaha 
671ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
681ebbe4fcSPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
691ebbe4fcSPrabhakar Kushwaha 	if (err)
701ebbe4fcSPrabhakar Kushwaha 		return err;
711ebbe4fcSPrabhakar Kushwaha 
721ebbe4fcSPrabhakar Kushwaha 	/* retrieve response parameters */
732557c5a9SYogesh Gaur 	MC_CMD_READ_OBJ_ID(cmd, *obj_id);
741ebbe4fcSPrabhakar Kushwaha 
751ebbe4fcSPrabhakar Kushwaha 	return 0;
761ebbe4fcSPrabhakar Kushwaha }
771ebbe4fcSPrabhakar Kushwaha 
dpbp_destroy(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,uint32_t obj_id)781ebbe4fcSPrabhakar Kushwaha int dpbp_destroy(struct fsl_mc_io *mc_io,
792557c5a9SYogesh Gaur 		 uint16_t dprc_token,
801ebbe4fcSPrabhakar Kushwaha 		 uint32_t cmd_flags,
812557c5a9SYogesh Gaur 		 uint32_t obj_id)
821ebbe4fcSPrabhakar Kushwaha {
831ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
841ebbe4fcSPrabhakar Kushwaha 
851ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
861ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_DESTROY,
871ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
882557c5a9SYogesh Gaur 					  dprc_token);
892557c5a9SYogesh Gaur 
902557c5a9SYogesh Gaur 	/* set object id to destroy */
912557c5a9SYogesh Gaur 	CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
921ebbe4fcSPrabhakar Kushwaha 
931ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
941ebbe4fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
951ebbe4fcSPrabhakar Kushwaha }
961ebbe4fcSPrabhakar Kushwaha 
dpbp_enable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)9787457d11SPrabhakar Kushwaha int dpbp_enable(struct fsl_mc_io *mc_io,
9887457d11SPrabhakar Kushwaha 		uint32_t cmd_flags,
9987457d11SPrabhakar Kushwaha 		uint16_t token)
100a2a55e51SPrabhakar Kushwaha {
101a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
102a2a55e51SPrabhakar Kushwaha 
103a2a55e51SPrabhakar Kushwaha 	/* prepare command */
10487457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, cmd_flags,
105a2a55e51SPrabhakar Kushwaha 					  token);
106a2a55e51SPrabhakar Kushwaha 
107a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
108a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
109a2a55e51SPrabhakar Kushwaha }
110a2a55e51SPrabhakar Kushwaha 
dpbp_disable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)11187457d11SPrabhakar Kushwaha int dpbp_disable(struct fsl_mc_io *mc_io,
11287457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
11387457d11SPrabhakar Kushwaha 		 uint16_t token)
114a2a55e51SPrabhakar Kushwaha {
115a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
116a2a55e51SPrabhakar Kushwaha 
117a2a55e51SPrabhakar Kushwaha 	/* prepare command */
118a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_DISABLE,
11987457d11SPrabhakar Kushwaha 					  cmd_flags,
12087457d11SPrabhakar Kushwaha 					  token);
121a2a55e51SPrabhakar Kushwaha 
122a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
123a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
124a2a55e51SPrabhakar Kushwaha }
125a2a55e51SPrabhakar Kushwaha 
dpbp_reset(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)12687457d11SPrabhakar Kushwaha int dpbp_reset(struct fsl_mc_io *mc_io,
12787457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
12887457d11SPrabhakar Kushwaha 	       uint16_t token)
129a2a55e51SPrabhakar Kushwaha {
130a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
131a2a55e51SPrabhakar Kushwaha 
132a2a55e51SPrabhakar Kushwaha 	/* prepare command */
133a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_RESET,
13487457d11SPrabhakar Kushwaha 					  cmd_flags,
13587457d11SPrabhakar Kushwaha 					  token);
136a2a55e51SPrabhakar Kushwaha 
137a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
138a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
139a2a55e51SPrabhakar Kushwaha }
140a2a55e51SPrabhakar Kushwaha 
dpbp_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpbp_attr * attr)141a2a55e51SPrabhakar Kushwaha int dpbp_get_attributes(struct fsl_mc_io *mc_io,
14287457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
143a2a55e51SPrabhakar Kushwaha 			uint16_t token,
144a2a55e51SPrabhakar Kushwaha 			struct dpbp_attr *attr)
145a2a55e51SPrabhakar Kushwaha {
146a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
147a2a55e51SPrabhakar Kushwaha 	int err;
148a2a55e51SPrabhakar Kushwaha 
149a2a55e51SPrabhakar Kushwaha 	/* prepare command */
150a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_ATTR,
15187457d11SPrabhakar Kushwaha 					  cmd_flags,
15287457d11SPrabhakar Kushwaha 					  token);
153a2a55e51SPrabhakar Kushwaha 
154a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
155a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
156a2a55e51SPrabhakar Kushwaha 	if (err)
157a2a55e51SPrabhakar Kushwaha 		return err;
158a2a55e51SPrabhakar Kushwaha 
159a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
160a2a55e51SPrabhakar Kushwaha 	DPBP_RSP_GET_ATTRIBUTES(cmd, attr);
161a2a55e51SPrabhakar Kushwaha 
162a2a55e51SPrabhakar Kushwaha 	return 0;
163a2a55e51SPrabhakar Kushwaha }
1642557c5a9SYogesh Gaur 
dpbp_get_api_version(struct fsl_mc_io * mc_io,u32 cmd_flags,u16 * major_ver,u16 * minor_ver)1652557c5a9SYogesh Gaur int dpbp_get_api_version(struct fsl_mc_io *mc_io,
1662557c5a9SYogesh Gaur 			 u32 cmd_flags,
1672557c5a9SYogesh Gaur 			 u16 *major_ver,
1682557c5a9SYogesh Gaur 			 u16 *minor_ver)
1692557c5a9SYogesh Gaur {
1702557c5a9SYogesh Gaur 	struct mc_command cmd = { 0 };
1712557c5a9SYogesh Gaur 	int err;
1722557c5a9SYogesh Gaur 
1732557c5a9SYogesh Gaur 	/* prepare command */
1742557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_API_VERSION,
1752557c5a9SYogesh Gaur 					  cmd_flags, 0);
1762557c5a9SYogesh Gaur 
1772557c5a9SYogesh Gaur 	/* send command to mc */
1782557c5a9SYogesh Gaur 	err = mc_send_command(mc_io, &cmd);
1792557c5a9SYogesh Gaur 	if (err)
1802557c5a9SYogesh Gaur 		return err;
1812557c5a9SYogesh Gaur 
1822557c5a9SYogesh Gaur 	/* retrieve response parameters */
1832557c5a9SYogesh Gaur 	mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
1842557c5a9SYogesh Gaur 
1852557c5a9SYogesh Gaur 	return 0;
1862557c5a9SYogesh Gaur }
187