xref: /rk3399_rockchip-uboot/drivers/net/fsl-mc/dpio/dpio.c (revision 1670c8c219f6e47de624b4ed557b5a995265cd40)
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 #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,int dpio_id,uint16_t * token)1187457d11SPrabhakar Kushwaha int dpio_open(struct fsl_mc_io *mc_io,
1287457d11SPrabhakar Kushwaha 	      uint32_t cmd_flags,
1387457d11SPrabhakar Kushwaha 	      int 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,uint32_t cmd_flags,const struct dpio_cfg * cfg,uint16_t * token)51*1ebbe4fcSPrabhakar Kushwaha int dpio_create(struct fsl_mc_io *mc_io,
52*1ebbe4fcSPrabhakar Kushwaha 		uint32_t cmd_flags,
53*1ebbe4fcSPrabhakar Kushwaha 		const struct dpio_cfg *cfg,
54*1ebbe4fcSPrabhakar Kushwaha 		uint16_t *token)
55*1ebbe4fcSPrabhakar Kushwaha {
56*1ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
57*1ebbe4fcSPrabhakar Kushwaha 	int err;
58*1ebbe4fcSPrabhakar Kushwaha 
59*1ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
60*1ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_CREATE,
61*1ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
62*1ebbe4fcSPrabhakar Kushwaha 					  0);
63*1ebbe4fcSPrabhakar Kushwaha 	DPIO_CMD_CREATE(cmd, cfg);
64*1ebbe4fcSPrabhakar Kushwaha 
65*1ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
66*1ebbe4fcSPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
67*1ebbe4fcSPrabhakar Kushwaha 	if (err)
68*1ebbe4fcSPrabhakar Kushwaha 		return err;
69*1ebbe4fcSPrabhakar Kushwaha 
70*1ebbe4fcSPrabhakar Kushwaha 	/* retrieve response parameters */
71*1ebbe4fcSPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
72*1ebbe4fcSPrabhakar Kushwaha 
73*1ebbe4fcSPrabhakar Kushwaha 	return 0;
74*1ebbe4fcSPrabhakar Kushwaha }
75*1ebbe4fcSPrabhakar Kushwaha 
dpio_destroy(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)76*1ebbe4fcSPrabhakar Kushwaha int dpio_destroy(struct fsl_mc_io *mc_io,
77*1ebbe4fcSPrabhakar Kushwaha 		 uint32_t cmd_flags,
78*1ebbe4fcSPrabhakar Kushwaha 		 uint16_t token)
79*1ebbe4fcSPrabhakar Kushwaha {
80*1ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
81*1ebbe4fcSPrabhakar Kushwaha 
82*1ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
83*1ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_DESTROY,
84*1ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
85*1ebbe4fcSPrabhakar Kushwaha 					  token);
86*1ebbe4fcSPrabhakar Kushwaha 
87*1ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
88*1ebbe4fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
89*1ebbe4fcSPrabhakar Kushwaha }
90*1ebbe4fcSPrabhakar Kushwaha 
dpio_enable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)9187457d11SPrabhakar Kushwaha int dpio_enable(struct fsl_mc_io *mc_io,
9287457d11SPrabhakar Kushwaha 		uint32_t cmd_flags,
9387457d11SPrabhakar Kushwaha 		uint16_t token)
9487457d11SPrabhakar Kushwaha {
9587457d11SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
9687457d11SPrabhakar Kushwaha 
9787457d11SPrabhakar Kushwaha 	/* prepare command */
9887457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_ENABLE,
9987457d11SPrabhakar Kushwaha 					  cmd_flags,
10087457d11SPrabhakar Kushwaha 					  token);
10187457d11SPrabhakar Kushwaha 
10287457d11SPrabhakar Kushwaha 	/* send command to mc*/
10387457d11SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
10487457d11SPrabhakar Kushwaha }
10587457d11SPrabhakar Kushwaha 
dpio_disable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)10687457d11SPrabhakar Kushwaha int dpio_disable(struct fsl_mc_io *mc_io,
10787457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
10887457d11SPrabhakar Kushwaha 		 uint16_t token)
10987457d11SPrabhakar Kushwaha {
11087457d11SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
11187457d11SPrabhakar Kushwaha 
11287457d11SPrabhakar Kushwaha 	/* prepare command */
11387457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_DISABLE,
11487457d11SPrabhakar Kushwaha 					  cmd_flags,
11587457d11SPrabhakar Kushwaha 					  token);
11687457d11SPrabhakar Kushwaha 
11787457d11SPrabhakar Kushwaha 	/* send command to mc*/
11887457d11SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
11987457d11SPrabhakar Kushwaha }
12087457d11SPrabhakar Kushwaha 
dpio_reset(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)12187457d11SPrabhakar Kushwaha int dpio_reset(struct fsl_mc_io *mc_io,
12287457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
12387457d11SPrabhakar Kushwaha 	       uint16_t token)
124a2a55e51SPrabhakar Kushwaha {
125a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
126a2a55e51SPrabhakar Kushwaha 
127a2a55e51SPrabhakar Kushwaha 	/* prepare command */
128a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_RESET,
12987457d11SPrabhakar Kushwaha 					  cmd_flags,
13087457d11SPrabhakar Kushwaha 					  token);
131a2a55e51SPrabhakar Kushwaha 
132a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
133a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
134a2a55e51SPrabhakar Kushwaha }
135a2a55e51SPrabhakar Kushwaha 
dpio_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpio_attr * attr)136a2a55e51SPrabhakar Kushwaha int dpio_get_attributes(struct fsl_mc_io *mc_io,
13787457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
138a2a55e51SPrabhakar Kushwaha 			uint16_t token,
139a2a55e51SPrabhakar Kushwaha 			struct dpio_attr *attr)
140a2a55e51SPrabhakar Kushwaha {
141a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
142a2a55e51SPrabhakar Kushwaha 	int err;
143a2a55e51SPrabhakar Kushwaha 
144a2a55e51SPrabhakar Kushwaha 	/* prepare command */
145a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_ATTR,
14687457d11SPrabhakar Kushwaha 					  cmd_flags,
147a2a55e51SPrabhakar Kushwaha 					  token);
148a2a55e51SPrabhakar Kushwaha 
149a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
150a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
151a2a55e51SPrabhakar Kushwaha 	if (err)
152a2a55e51SPrabhakar Kushwaha 		return err;
153a2a55e51SPrabhakar Kushwaha 
154a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
155a2a55e51SPrabhakar Kushwaha 	DPIO_RSP_GET_ATTR(cmd, attr);
156a2a55e51SPrabhakar Kushwaha 
157a2a55e51SPrabhakar Kushwaha 	return 0;
158a2a55e51SPrabhakar Kushwaha }
159