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