xref: /openbmc/u-boot/drivers/net/fsl-mc/dpio/dpio.c (revision c590e62d3b6f6dd72eae1183614f919e3fd7ffcb)
183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2a2a55e51SPrabhakar Kushwaha /*
3*a6f2a6eaSYogesh Gaur  * Copyright 2013-2016 Freescale Semiconductor, Inc.
42557c5a9SYogesh Gaur  * Copyright 2017 NXP
5a2a55e51SPrabhakar Kushwaha  */
6a2a55e51SPrabhakar Kushwaha 
7a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
8a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
9a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dpio.h>
10a2a55e51SPrabhakar Kushwaha 
dpio_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint32_t dpio_id,uint16_t * token)1187457d11SPrabhakar Kushwaha int dpio_open(struct fsl_mc_io *mc_io,
1287457d11SPrabhakar Kushwaha 	      uint32_t cmd_flags,
132557c5a9SYogesh Gaur 	      uint32_t dpio_id,
1487457d11SPrabhakar Kushwaha 	      uint16_t *token)
15a2a55e51SPrabhakar Kushwaha {
16a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
17a2a55e51SPrabhakar Kushwaha 	int err;
18a2a55e51SPrabhakar Kushwaha 
19a2a55e51SPrabhakar Kushwaha 	/* prepare command */
20a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_OPEN,
2187457d11SPrabhakar Kushwaha 					  cmd_flags,
2287457d11SPrabhakar Kushwaha 					  0);
23a2a55e51SPrabhakar Kushwaha 	DPIO_CMD_OPEN(cmd, dpio_id);
24a2a55e51SPrabhakar Kushwaha 
25a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
26a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
27a2a55e51SPrabhakar Kushwaha 	if (err)
28a2a55e51SPrabhakar Kushwaha 		return err;
29a2a55e51SPrabhakar Kushwaha 
30a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
31a2a55e51SPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
32a2a55e51SPrabhakar Kushwaha 
33a2a55e51SPrabhakar Kushwaha 	return 0;
34a2a55e51SPrabhakar Kushwaha }
35a2a55e51SPrabhakar Kushwaha 
dpio_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)3687457d11SPrabhakar Kushwaha int dpio_close(struct fsl_mc_io *mc_io,
3787457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
3887457d11SPrabhakar Kushwaha 	       uint16_t token)
39a2a55e51SPrabhakar Kushwaha {
40a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
41a2a55e51SPrabhakar Kushwaha 
42a2a55e51SPrabhakar Kushwaha 	/* prepare command */
43a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_CLOSE,
4487457d11SPrabhakar Kushwaha 					  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 
dpio_create(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,const struct dpio_cfg * cfg,uint32_t * obj_id)511ebbe4fcSPrabhakar Kushwaha int dpio_create(struct fsl_mc_io *mc_io,
522557c5a9SYogesh Gaur 		uint16_t dprc_token,
531ebbe4fcSPrabhakar Kushwaha 		uint32_t cmd_flags,
541ebbe4fcSPrabhakar Kushwaha 		const struct dpio_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 	/* prepare command */
611ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_CREATE,
621ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
632557c5a9SYogesh Gaur 					  dprc_token);
641ebbe4fcSPrabhakar Kushwaha 	DPIO_CMD_CREATE(cmd, cfg);
651ebbe4fcSPrabhakar Kushwaha 
661ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
671ebbe4fcSPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
681ebbe4fcSPrabhakar Kushwaha 	if (err)
691ebbe4fcSPrabhakar Kushwaha 		return err;
701ebbe4fcSPrabhakar Kushwaha 
711ebbe4fcSPrabhakar Kushwaha 	/* retrieve response parameters */
722557c5a9SYogesh Gaur 	MC_CMD_READ_OBJ_ID(cmd, *obj_id);
731ebbe4fcSPrabhakar Kushwaha 
741ebbe4fcSPrabhakar Kushwaha 	return 0;
751ebbe4fcSPrabhakar Kushwaha }
761ebbe4fcSPrabhakar Kushwaha 
dpio_destroy(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,uint32_t obj_id)771ebbe4fcSPrabhakar Kushwaha int dpio_destroy(struct fsl_mc_io *mc_io,
782557c5a9SYogesh Gaur 		 uint16_t dprc_token,
791ebbe4fcSPrabhakar Kushwaha 		 uint32_t cmd_flags,
802557c5a9SYogesh Gaur 		 uint32_t obj_id)
811ebbe4fcSPrabhakar Kushwaha {
821ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
831ebbe4fcSPrabhakar Kushwaha 
841ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
851ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_DESTROY,
861ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
872557c5a9SYogesh Gaur 					  dprc_token);
882557c5a9SYogesh Gaur 
892557c5a9SYogesh Gaur 	/* set object id to destroy */
902557c5a9SYogesh Gaur 	CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
911ebbe4fcSPrabhakar Kushwaha 
921ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
931ebbe4fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
941ebbe4fcSPrabhakar Kushwaha }
951ebbe4fcSPrabhakar Kushwaha 
dpio_enable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)9687457d11SPrabhakar Kushwaha int dpio_enable(struct fsl_mc_io *mc_io,
9787457d11SPrabhakar Kushwaha 		uint32_t cmd_flags,
9887457d11SPrabhakar Kushwaha 		uint16_t token)
9987457d11SPrabhakar Kushwaha {
10087457d11SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
10187457d11SPrabhakar Kushwaha 
10287457d11SPrabhakar Kushwaha 	/* prepare command */
10387457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_ENABLE,
10487457d11SPrabhakar Kushwaha 					  cmd_flags,
10587457d11SPrabhakar Kushwaha 					  token);
10687457d11SPrabhakar Kushwaha 
10787457d11SPrabhakar Kushwaha 	/* send command to mc*/
10887457d11SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
10987457d11SPrabhakar Kushwaha }
11087457d11SPrabhakar Kushwaha 
dpio_disable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)11187457d11SPrabhakar Kushwaha int dpio_disable(struct fsl_mc_io *mc_io,
11287457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
11387457d11SPrabhakar Kushwaha 		 uint16_t token)
11487457d11SPrabhakar Kushwaha {
11587457d11SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
11687457d11SPrabhakar Kushwaha 
11787457d11SPrabhakar Kushwaha 	/* prepare command */
11887457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_DISABLE,
11987457d11SPrabhakar Kushwaha 					  cmd_flags,
12087457d11SPrabhakar Kushwaha 					  token);
12187457d11SPrabhakar Kushwaha 
12287457d11SPrabhakar Kushwaha 	/* send command to mc*/
12387457d11SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
12487457d11SPrabhakar Kushwaha }
12587457d11SPrabhakar Kushwaha 
dpio_reset(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)12687457d11SPrabhakar Kushwaha int dpio_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(DPIO_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 
dpio_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpio_attr * attr)141a2a55e51SPrabhakar Kushwaha int dpio_get_attributes(struct fsl_mc_io *mc_io,
14287457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
143a2a55e51SPrabhakar Kushwaha 			uint16_t token,
144a2a55e51SPrabhakar Kushwaha 			struct dpio_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(DPIO_CMDID_GET_ATTR,
15187457d11SPrabhakar Kushwaha 					  cmd_flags,
152a2a55e51SPrabhakar 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 	DPIO_RSP_GET_ATTR(cmd, attr);
161a2a55e51SPrabhakar Kushwaha 
162a2a55e51SPrabhakar Kushwaha 	return 0;
163a2a55e51SPrabhakar Kushwaha }
1642557c5a9SYogesh Gaur 
dpio_get_api_version(struct fsl_mc_io * mc_io,u32 cmd_flags,u16 * major_ver,u16 * minor_ver)1652557c5a9SYogesh Gaur int dpio_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(DPIO_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