1*872d48a7SPrabhakar Kushwaha /*
2*872d48a7SPrabhakar Kushwaha * Freescale Layerscape MC I/O wrapper
3*872d48a7SPrabhakar Kushwaha *
4*872d48a7SPrabhakar Kushwaha * Copyright (C) 2015 Freescale Semiconductor, Inc.
5*872d48a7SPrabhakar Kushwaha * Author: Prabhakar Kushwaha <prabhakar@freescale.com>
6*872d48a7SPrabhakar Kushwaha *
7*872d48a7SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+
8*872d48a7SPrabhakar Kushwaha */
9*872d48a7SPrabhakar Kushwaha
10*872d48a7SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
11*872d48a7SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
12*872d48a7SPrabhakar Kushwaha #include <fsl-mc/fsl_dpmac.h>
13*872d48a7SPrabhakar Kushwaha
dpmac_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int dpmac_id,uint16_t * token)14*872d48a7SPrabhakar Kushwaha int dpmac_open(struct fsl_mc_io *mc_io,
15*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
16*872d48a7SPrabhakar Kushwaha int dpmac_id,
17*872d48a7SPrabhakar Kushwaha uint16_t *token)
18*872d48a7SPrabhakar Kushwaha {
19*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
20*872d48a7SPrabhakar Kushwaha int err;
21*872d48a7SPrabhakar Kushwaha
22*872d48a7SPrabhakar Kushwaha /* prepare command */
23*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_OPEN,
24*872d48a7SPrabhakar Kushwaha cmd_flags,
25*872d48a7SPrabhakar Kushwaha 0);
26*872d48a7SPrabhakar Kushwaha DPMAC_CMD_OPEN(cmd, dpmac_id);
27*872d48a7SPrabhakar Kushwaha
28*872d48a7SPrabhakar Kushwaha /* send command to mc*/
29*872d48a7SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd);
30*872d48a7SPrabhakar Kushwaha if (err)
31*872d48a7SPrabhakar Kushwaha return err;
32*872d48a7SPrabhakar Kushwaha
33*872d48a7SPrabhakar Kushwaha /* retrieve response parameters */
34*872d48a7SPrabhakar Kushwaha *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
35*872d48a7SPrabhakar Kushwaha
36*872d48a7SPrabhakar Kushwaha return err;
37*872d48a7SPrabhakar Kushwaha }
38*872d48a7SPrabhakar Kushwaha
dpmac_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)39*872d48a7SPrabhakar Kushwaha int dpmac_close(struct fsl_mc_io *mc_io,
40*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
41*872d48a7SPrabhakar Kushwaha uint16_t token)
42*872d48a7SPrabhakar Kushwaha {
43*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
44*872d48a7SPrabhakar Kushwaha
45*872d48a7SPrabhakar Kushwaha /* prepare command */
46*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_CLOSE, cmd_flags,
47*872d48a7SPrabhakar Kushwaha token);
48*872d48a7SPrabhakar Kushwaha
49*872d48a7SPrabhakar Kushwaha /* send command to mc*/
50*872d48a7SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd);
51*872d48a7SPrabhakar Kushwaha }
52*872d48a7SPrabhakar Kushwaha
dpmac_create(struct fsl_mc_io * mc_io,uint32_t cmd_flags,const struct dpmac_cfg * cfg,uint16_t * token)53*872d48a7SPrabhakar Kushwaha int dpmac_create(struct fsl_mc_io *mc_io,
54*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
55*872d48a7SPrabhakar Kushwaha const struct dpmac_cfg *cfg,
56*872d48a7SPrabhakar Kushwaha uint16_t *token)
57*872d48a7SPrabhakar Kushwaha {
58*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
59*872d48a7SPrabhakar Kushwaha int err;
60*872d48a7SPrabhakar Kushwaha
61*872d48a7SPrabhakar Kushwaha /* prepare command */
62*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_CREATE,
63*872d48a7SPrabhakar Kushwaha cmd_flags,
64*872d48a7SPrabhakar Kushwaha 0);
65*872d48a7SPrabhakar Kushwaha DPMAC_CMD_CREATE(cmd, cfg);
66*872d48a7SPrabhakar Kushwaha
67*872d48a7SPrabhakar Kushwaha /* send command to mc*/
68*872d48a7SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd);
69*872d48a7SPrabhakar Kushwaha if (err)
70*872d48a7SPrabhakar Kushwaha return err;
71*872d48a7SPrabhakar Kushwaha
72*872d48a7SPrabhakar Kushwaha /* retrieve response parameters */
73*872d48a7SPrabhakar Kushwaha *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
74*872d48a7SPrabhakar Kushwaha
75*872d48a7SPrabhakar Kushwaha return 0;
76*872d48a7SPrabhakar Kushwaha }
77*872d48a7SPrabhakar Kushwaha
dpmac_destroy(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)78*872d48a7SPrabhakar Kushwaha int dpmac_destroy(struct fsl_mc_io *mc_io,
79*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
80*872d48a7SPrabhakar Kushwaha uint16_t token)
81*872d48a7SPrabhakar Kushwaha {
82*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
83*872d48a7SPrabhakar Kushwaha
84*872d48a7SPrabhakar Kushwaha /* prepare command */
85*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_DESTROY,
86*872d48a7SPrabhakar Kushwaha cmd_flags,
87*872d48a7SPrabhakar Kushwaha token);
88*872d48a7SPrabhakar Kushwaha
89*872d48a7SPrabhakar Kushwaha /* send command to mc*/
90*872d48a7SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd);
91*872d48a7SPrabhakar Kushwaha }
92*872d48a7SPrabhakar Kushwaha
dpmac_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpmac_attr * attr)93*872d48a7SPrabhakar Kushwaha int dpmac_get_attributes(struct fsl_mc_io *mc_io,
94*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
95*872d48a7SPrabhakar Kushwaha uint16_t token,
96*872d48a7SPrabhakar Kushwaha struct dpmac_attr *attr)
97*872d48a7SPrabhakar Kushwaha {
98*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
99*872d48a7SPrabhakar Kushwaha int err;
100*872d48a7SPrabhakar Kushwaha
101*872d48a7SPrabhakar Kushwaha /* prepare command */
102*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_ATTR,
103*872d48a7SPrabhakar Kushwaha cmd_flags,
104*872d48a7SPrabhakar Kushwaha token);
105*872d48a7SPrabhakar Kushwaha
106*872d48a7SPrabhakar Kushwaha /* send command to mc*/
107*872d48a7SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd);
108*872d48a7SPrabhakar Kushwaha if (err)
109*872d48a7SPrabhakar Kushwaha return err;
110*872d48a7SPrabhakar Kushwaha
111*872d48a7SPrabhakar Kushwaha /* retrieve response parameters */
112*872d48a7SPrabhakar Kushwaha DPMAC_RSP_GET_ATTRIBUTES(cmd, attr);
113*872d48a7SPrabhakar Kushwaha
114*872d48a7SPrabhakar Kushwaha return 0;
115*872d48a7SPrabhakar Kushwaha }
116*872d48a7SPrabhakar Kushwaha
dpmac_mdio_read(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpmac_mdio_cfg * cfg)117*872d48a7SPrabhakar Kushwaha int dpmac_mdio_read(struct fsl_mc_io *mc_io,
118*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
119*872d48a7SPrabhakar Kushwaha uint16_t token,
120*872d48a7SPrabhakar Kushwaha struct dpmac_mdio_cfg *cfg)
121*872d48a7SPrabhakar Kushwaha {
122*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
123*872d48a7SPrabhakar Kushwaha int err;
124*872d48a7SPrabhakar Kushwaha
125*872d48a7SPrabhakar Kushwaha /* prepare command */
126*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_MDIO_READ,
127*872d48a7SPrabhakar Kushwaha cmd_flags,
128*872d48a7SPrabhakar Kushwaha token);
129*872d48a7SPrabhakar Kushwaha DPMAC_CMD_MDIO_READ(cmd, cfg);
130*872d48a7SPrabhakar Kushwaha
131*872d48a7SPrabhakar Kushwaha /* send command to mc*/
132*872d48a7SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd);
133*872d48a7SPrabhakar Kushwaha if (err)
134*872d48a7SPrabhakar Kushwaha return err;
135*872d48a7SPrabhakar Kushwaha
136*872d48a7SPrabhakar Kushwaha /* retrieve response parameters */
137*872d48a7SPrabhakar Kushwaha DPMAC_RSP_MDIO_READ(cmd, cfg->data);
138*872d48a7SPrabhakar Kushwaha
139*872d48a7SPrabhakar Kushwaha return 0;
140*872d48a7SPrabhakar Kushwaha }
141*872d48a7SPrabhakar Kushwaha
dpmac_mdio_write(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpmac_mdio_cfg * cfg)142*872d48a7SPrabhakar Kushwaha int dpmac_mdio_write(struct fsl_mc_io *mc_io,
143*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
144*872d48a7SPrabhakar Kushwaha uint16_t token,
145*872d48a7SPrabhakar Kushwaha struct dpmac_mdio_cfg *cfg)
146*872d48a7SPrabhakar Kushwaha {
147*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
148*872d48a7SPrabhakar Kushwaha
149*872d48a7SPrabhakar Kushwaha /* prepare command */
150*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_MDIO_WRITE,
151*872d48a7SPrabhakar Kushwaha cmd_flags,
152*872d48a7SPrabhakar Kushwaha token);
153*872d48a7SPrabhakar Kushwaha DPMAC_CMD_MDIO_WRITE(cmd, cfg);
154*872d48a7SPrabhakar Kushwaha
155*872d48a7SPrabhakar Kushwaha /* send command to mc*/
156*872d48a7SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd);
157*872d48a7SPrabhakar Kushwaha }
158*872d48a7SPrabhakar Kushwaha
dpmac_get_link_cfg(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpmac_link_cfg * cfg)159*872d48a7SPrabhakar Kushwaha int dpmac_get_link_cfg(struct fsl_mc_io *mc_io,
160*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
161*872d48a7SPrabhakar Kushwaha uint16_t token,
162*872d48a7SPrabhakar Kushwaha struct dpmac_link_cfg *cfg)
163*872d48a7SPrabhakar Kushwaha {
164*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
165*872d48a7SPrabhakar Kushwaha int err = 0;
166*872d48a7SPrabhakar Kushwaha
167*872d48a7SPrabhakar Kushwaha /* prepare command */
168*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_LINK_CFG,
169*872d48a7SPrabhakar Kushwaha cmd_flags,
170*872d48a7SPrabhakar Kushwaha token);
171*872d48a7SPrabhakar Kushwaha
172*872d48a7SPrabhakar Kushwaha /* send command to mc*/
173*872d48a7SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd);
174*872d48a7SPrabhakar Kushwaha if (err)
175*872d48a7SPrabhakar Kushwaha return err;
176*872d48a7SPrabhakar Kushwaha
177*872d48a7SPrabhakar Kushwaha DPMAC_RSP_GET_LINK_CFG(cmd, cfg);
178*872d48a7SPrabhakar Kushwaha
179*872d48a7SPrabhakar Kushwaha return 0;
180*872d48a7SPrabhakar Kushwaha }
181*872d48a7SPrabhakar Kushwaha
dpmac_set_link_state(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpmac_link_state * link_state)182*872d48a7SPrabhakar Kushwaha int dpmac_set_link_state(struct fsl_mc_io *mc_io,
183*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
184*872d48a7SPrabhakar Kushwaha uint16_t token,
185*872d48a7SPrabhakar Kushwaha struct dpmac_link_state *link_state)
186*872d48a7SPrabhakar Kushwaha {
187*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
188*872d48a7SPrabhakar Kushwaha
189*872d48a7SPrabhakar Kushwaha /* prepare command */
190*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_SET_LINK_STATE,
191*872d48a7SPrabhakar Kushwaha cmd_flags,
192*872d48a7SPrabhakar Kushwaha token);
193*872d48a7SPrabhakar Kushwaha DPMAC_CMD_SET_LINK_STATE(cmd, link_state);
194*872d48a7SPrabhakar Kushwaha
195*872d48a7SPrabhakar Kushwaha /* send command to mc*/
196*872d48a7SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd);
197*872d48a7SPrabhakar Kushwaha }
198*872d48a7SPrabhakar Kushwaha
dpmac_get_counter(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,enum dpmac_counter type,uint64_t * counter)199*872d48a7SPrabhakar Kushwaha int dpmac_get_counter(struct fsl_mc_io *mc_io,
200*872d48a7SPrabhakar Kushwaha uint32_t cmd_flags,
201*872d48a7SPrabhakar Kushwaha uint16_t token,
202*872d48a7SPrabhakar Kushwaha enum dpmac_counter type,
203*872d48a7SPrabhakar Kushwaha uint64_t *counter)
204*872d48a7SPrabhakar Kushwaha {
205*872d48a7SPrabhakar Kushwaha struct mc_command cmd = { 0 };
206*872d48a7SPrabhakar Kushwaha int err = 0;
207*872d48a7SPrabhakar Kushwaha
208*872d48a7SPrabhakar Kushwaha /* prepare command */
209*872d48a7SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_COUNTER,
210*872d48a7SPrabhakar Kushwaha cmd_flags,
211*872d48a7SPrabhakar Kushwaha token);
212*872d48a7SPrabhakar Kushwaha DPMAC_CMD_GET_COUNTER(cmd, type);
213*872d48a7SPrabhakar Kushwaha
214*872d48a7SPrabhakar Kushwaha /* send command to mc*/
215*872d48a7SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd);
216*872d48a7SPrabhakar Kushwaha if (err)
217*872d48a7SPrabhakar Kushwaha return err;
218*872d48a7SPrabhakar Kushwaha
219*872d48a7SPrabhakar Kushwaha DPMAC_RSP_GET_COUNTER(cmd, *counter);
220*872d48a7SPrabhakar Kushwaha
221*872d48a7SPrabhakar Kushwaha return 0;
222*872d48a7SPrabhakar Kushwaha }
223