xref: /openbmc/u-boot/drivers/net/fsl-mc/dpbp.c (revision a2a55e51)
1*a2a55e51SPrabhakar Kushwaha /*
2*a2a55e51SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
3*a2a55e51SPrabhakar Kushwaha  *
4*a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
5*a2a55e51SPrabhakar Kushwaha  * Author: German Rivera <German.Rivera@freescale.com>
6*a2a55e51SPrabhakar Kushwaha  *
7*a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
8*a2a55e51SPrabhakar Kushwaha  */
9*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
10*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
11*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dpbp.h>
12*a2a55e51SPrabhakar Kushwaha 
13*a2a55e51SPrabhakar Kushwaha int dpbp_open(struct fsl_mc_io *mc_io, int dpbp_id, uint16_t *token)
14*a2a55e51SPrabhakar Kushwaha {
15*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
16*a2a55e51SPrabhakar Kushwaha 	int err;
17*a2a55e51SPrabhakar Kushwaha 
18*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
19*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_OPEN,
20*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW, 0);
21*a2a55e51SPrabhakar Kushwaha 	DPBP_CMD_OPEN(cmd, dpbp_id);
22*a2a55e51SPrabhakar Kushwaha 
23*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
24*a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
25*a2a55e51SPrabhakar Kushwaha 	if (err)
26*a2a55e51SPrabhakar Kushwaha 		return err;
27*a2a55e51SPrabhakar Kushwaha 
28*a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
29*a2a55e51SPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
30*a2a55e51SPrabhakar Kushwaha 
31*a2a55e51SPrabhakar Kushwaha 	return err;
32*a2a55e51SPrabhakar Kushwaha }
33*a2a55e51SPrabhakar Kushwaha 
34*a2a55e51SPrabhakar Kushwaha int dpbp_close(struct fsl_mc_io *mc_io, uint16_t token)
35*a2a55e51SPrabhakar Kushwaha {
36*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
37*a2a55e51SPrabhakar Kushwaha 
38*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
39*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, MC_CMD_PRI_HIGH,
40*a2a55e51SPrabhakar Kushwaha 					  token);
41*a2a55e51SPrabhakar Kushwaha 
42*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
43*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
44*a2a55e51SPrabhakar Kushwaha }
45*a2a55e51SPrabhakar Kushwaha 
46*a2a55e51SPrabhakar Kushwaha int dpbp_enable(struct fsl_mc_io *mc_io, uint16_t token)
47*a2a55e51SPrabhakar Kushwaha {
48*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
49*a2a55e51SPrabhakar Kushwaha 
50*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
51*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, MC_CMD_PRI_LOW,
52*a2a55e51SPrabhakar Kushwaha 					  token);
53*a2a55e51SPrabhakar Kushwaha 
54*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
55*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
56*a2a55e51SPrabhakar Kushwaha }
57*a2a55e51SPrabhakar Kushwaha 
58*a2a55e51SPrabhakar Kushwaha int dpbp_disable(struct fsl_mc_io *mc_io, uint16_t token)
59*a2a55e51SPrabhakar Kushwaha {
60*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
61*a2a55e51SPrabhakar Kushwaha 
62*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
63*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_DISABLE,
64*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW, token);
65*a2a55e51SPrabhakar Kushwaha 
66*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
67*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
68*a2a55e51SPrabhakar Kushwaha }
69*a2a55e51SPrabhakar Kushwaha 
70*a2a55e51SPrabhakar Kushwaha int dpbp_reset(struct fsl_mc_io *mc_io, uint16_t token)
71*a2a55e51SPrabhakar Kushwaha {
72*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
73*a2a55e51SPrabhakar Kushwaha 
74*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
75*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_RESET,
76*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW, token);
77*a2a55e51SPrabhakar Kushwaha 
78*a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
79*a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
80*a2a55e51SPrabhakar Kushwaha }
81*a2a55e51SPrabhakar Kushwaha 
82*a2a55e51SPrabhakar Kushwaha int dpbp_get_attributes(struct fsl_mc_io *mc_io,
83*a2a55e51SPrabhakar Kushwaha 			uint16_t token,
84*a2a55e51SPrabhakar Kushwaha 			struct dpbp_attr *attr)
85*a2a55e51SPrabhakar Kushwaha {
86*a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
87*a2a55e51SPrabhakar Kushwaha 	int err;
88*a2a55e51SPrabhakar Kushwaha 
89*a2a55e51SPrabhakar Kushwaha 	/* prepare command */
90*a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_ATTR,
91*a2a55e51SPrabhakar Kushwaha 					  MC_CMD_PRI_LOW, 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 	DPBP_RSP_GET_ATTRIBUTES(cmd, attr);
100*a2a55e51SPrabhakar Kushwaha 
101*a2a55e51SPrabhakar Kushwaha 	return 0;
102*a2a55e51SPrabhakar Kushwaha }
103