xref: /rk3399_rockchip-uboot/drivers/net/fsl-mc/dpio/dpio.c (revision a2a55e518f81900ab1538656e5df8d2759ccb1fb)
1*a2a55e51SPrabhakar Kushwaha /*
2*a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor
3*a2a55e51SPrabhakar Kushwaha  *
4*a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
5*a2a55e51SPrabhakar Kushwaha  */
6*a2a55e51SPrabhakar Kushwaha 
7*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
8*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
9*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dpio.h>
10*a2a55e51SPrabhakar Kushwaha 
11*a2a55e51SPrabhakar Kushwaha int dpio_open(struct fsl_mc_io *mc_io, int dpio_id, uint16_t *token)
12*a2a55e51SPrabhakar Kushwaha {
13*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
14*a2a55e51SPrabhakar Kushwaha 	int err;
15*a2a55e51SPrabhakar Kushwaha 
16*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
17*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_OPEN,
18*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW, 0);
19*a2a55e51SPrabhakar Kushwaha 	DPIO_CMD_OPEN(cmd, dpio_id);
20*a2a55e51SPrabhakar Kushwaha 
21*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
22*a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
23*a2a55e51SPrabhakar Kushwaha 	if (err)
24*a2a55e51SPrabhakar Kushwaha 		return err;
25*a2a55e51SPrabhakar Kushwaha 
26*a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
27*a2a55e51SPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
28*a2a55e51SPrabhakar Kushwaha 
29*a2a55e51SPrabhakar Kushwaha 	return 0;
30*a2a55e51SPrabhakar Kushwaha }
31*a2a55e51SPrabhakar Kushwaha 
32*a2a55e51SPrabhakar Kushwaha int dpio_close(struct fsl_mc_io *mc_io, uint16_t token)
33*a2a55e51SPrabhakar Kushwaha {
34*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
35*a2a55e51SPrabhakar Kushwaha 
36*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
37*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_CLOSE,
38*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_HIGH, token);
39*a2a55e51SPrabhakar Kushwaha 
40*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
41*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
42*a2a55e51SPrabhakar Kushwaha }
43*a2a55e51SPrabhakar Kushwaha 
44*a2a55e51SPrabhakar Kushwaha int dpio_enable(struct fsl_mc_io *mc_io, uint16_t token)
45*a2a55e51SPrabhakar Kushwaha {
46*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
47*a2a55e51SPrabhakar Kushwaha 
48*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
49*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_ENABLE,
50*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW, token);
51*a2a55e51SPrabhakar Kushwaha 
52*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
53*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
54*a2a55e51SPrabhakar Kushwaha }
55*a2a55e51SPrabhakar Kushwaha 
56*a2a55e51SPrabhakar Kushwaha int dpio_disable(struct fsl_mc_io *mc_io, uint16_t token)
57*a2a55e51SPrabhakar Kushwaha {
58*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
59*a2a55e51SPrabhakar Kushwaha 
60*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
61*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_DISABLE,
62*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW,
63*a2a55e51SPrabhakar Kushwaha 					  token);
64*a2a55e51SPrabhakar Kushwaha 
65*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
66*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
67*a2a55e51SPrabhakar Kushwaha }
68*a2a55e51SPrabhakar Kushwaha 
69*a2a55e51SPrabhakar Kushwaha int dpio_reset(struct fsl_mc_io *mc_io, uint16_t token)
70*a2a55e51SPrabhakar Kushwaha {
71*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
72*a2a55e51SPrabhakar Kushwaha 
73*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
74*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_RESET,
75*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW, token);
76*a2a55e51SPrabhakar Kushwaha 
77*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
78*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
79*a2a55e51SPrabhakar Kushwaha }
80*a2a55e51SPrabhakar Kushwaha 
81*a2a55e51SPrabhakar Kushwaha int dpio_get_attributes(struct fsl_mc_io *mc_io,
82*a2a55e51SPrabhakar Kushwaha 			uint16_t token,
83*a2a55e51SPrabhakar Kushwaha 			struct dpio_attr *attr)
84*a2a55e51SPrabhakar Kushwaha {
85*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
86*a2a55e51SPrabhakar Kushwaha 	int err;
87*a2a55e51SPrabhakar Kushwaha 
88*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
89*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_ATTR,
90*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW,
91*a2a55e51SPrabhakar Kushwaha 					  token);
92*a2a55e51SPrabhakar Kushwaha 
93*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
94*a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
95*a2a55e51SPrabhakar Kushwaha 	if (err)
96*a2a55e51SPrabhakar Kushwaha 		return err;
97*a2a55e51SPrabhakar Kushwaha 
98*a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
99*a2a55e51SPrabhakar Kushwaha 	DPIO_RSP_GET_ATTR(cmd, attr);
100*a2a55e51SPrabhakar Kushwaha 
101*a2a55e51SPrabhakar Kushwaha 	return 0;
102*a2a55e51SPrabhakar Kushwaha }
103