blob: 2be56e24a18687172913510199dd8f35dd04c113 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -07002/*
3 * Freescale Layerscape MC I/O wrapper
4 *
Yogesh Gaur1a0c4ae2018-05-09 10:52:17 +05305 * Copyright 2013-2016 Freescale Semiconductor, Inc.
Yogesh Gaur318c32f2017-11-15 11:59:31 +05306 * Copyright 2017 NXP
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -07007 */
8
9#include <fsl-mc/fsl_mc_sys.h>
10#include <fsl-mc/fsl_mc_cmd.h>
11#include <fsl-mc/fsl_dprc.h>
12
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +053013int dprc_get_container_id(struct fsl_mc_io *mc_io,
14 uint32_t cmd_flags,
15 int *container_id)
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -070016{
17 struct mc_command cmd = { 0 };
18 int err;
19
20 /* prepare command */
21 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +053022 cmd_flags,
23 0);
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -070024
25 /* send command to mc*/
26 err = mc_send_command(mc_io, &cmd);
27 if (err)
28 return err;
29
30 /* retrieve response parameters */
31 DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
32
33 return 0;
34}
35
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +053036int dprc_open(struct fsl_mc_io *mc_io,
37 uint32_t cmd_flags,
38 int container_id,
39 uint16_t *token)
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -070040{
41 struct mc_command cmd = { 0 };
42 int err;
43
44 /* prepare command */
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +053045 cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -070046 0);
47 DPRC_CMD_OPEN(cmd, container_id);
48
49 /* send command to mc*/
50 err = mc_send_command(mc_io, &cmd);
51 if (err)
52 return err;
53
54 /* retrieve response parameters */
55 *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
56
57 return 0;
58}
59
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +053060int dprc_close(struct fsl_mc_io *mc_io,
61 uint32_t cmd_flags,
62 uint16_t token)
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -070063{
64 struct mc_command cmd = { 0 };
65
66 /* prepare command */
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +053067 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -070068 token);
69
70 /* send command to mc*/
71 return mc_send_command(mc_io, &cmd);
72}
73
Prabhakar Kushwahacf0c8cf2015-11-04 12:25:53 +053074int dprc_create_container(struct fsl_mc_io *mc_io,
75 uint32_t cmd_flags,
76 uint16_t token,
77 struct dprc_cfg *cfg,
78 int *child_container_id,
79 uint64_t *child_portal_paddr)
80{
81 struct mc_command cmd = { 0 };
82 int err;
83
84 /* prepare command */
85 DPRC_CMD_CREATE_CONTAINER(cmd, cfg);
86
87 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CREATE_CONT,
88 cmd_flags,
89 token);
90
91 /* send command to mc*/
92 err = mc_send_command(mc_io, &cmd);
93 if (err)
94 return err;
95
96 /* retrieve response parameters */
97 DPRC_RSP_CREATE_CONTAINER(cmd, *child_container_id,
98 *child_portal_paddr);
99
100 return 0;
101}
102
103int dprc_destroy_container(struct fsl_mc_io *mc_io,
104 uint32_t cmd_flags,
105 uint16_t token,
106 int child_container_id)
107{
108 struct mc_command cmd = { 0 };
109
110 /* prepare command */
111 cmd.header = mc_encode_cmd_header(DPRC_CMDID_DESTROY_CONT,
112 cmd_flags,
113 token);
114 DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id);
115
116 /* send command to mc*/
117 return mc_send_command(mc_io, &cmd);
118}
119
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700120int dprc_connect(struct fsl_mc_io *mc_io,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530121 uint32_t cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700122 uint16_t token,
123 const struct dprc_endpoint *endpoint1,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530124 const struct dprc_endpoint *endpoint2,
125 const struct dprc_connection_cfg *cfg)
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700126{
127 struct mc_command cmd = { 0 };
128
129 /* prepare command */
130 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530131 cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700132 token);
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530133 DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700134
135 /* send command to mc*/
136 return mc_send_command(mc_io, &cmd);
137}
138
139int dprc_disconnect(struct fsl_mc_io *mc_io,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530140 uint32_t cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700141 uint16_t token,
142 const struct dprc_endpoint *endpoint)
143{
144 struct mc_command cmd = { 0 };
145
146 /* prepare command */
147 cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530148 cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700149 token);
150 DPRC_CMD_DISCONNECT(cmd, endpoint);
151
152 /* send command to mc*/
153 return mc_send_command(mc_io, &cmd);
154}
155
156int dprc_get_connection(struct fsl_mc_io *mc_io,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530157 uint32_t cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700158 uint16_t token,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530159 const struct dprc_endpoint *endpoint1,
160 struct dprc_endpoint *endpoint2,
161 int *state)
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700162{
163 struct mc_command cmd = { 0 };
164 int err;
165
166 /* prepare command */
167 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
Prabhakar Kushwaha9564df62015-07-07 15:40:06 +0530168 cmd_flags,
Prabhakar Kushwahacfd9fbf2015-03-19 09:20:45 -0700169 token);
170 DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
171
172 /* send command to mc*/
173 err = mc_send_command(mc_io, &cmd);
174 if (err)
175 return err;
176
177 /* retrieve response parameters */
178 DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
179
180 return 0;
181}
Yogesh Gaur318c32f2017-11-15 11:59:31 +0530182
183int dprc_get_api_version(struct fsl_mc_io *mc_io,
184 u32 cmd_flags,
185 u16 *major_ver,
186 u16 *minor_ver)
187{
188 struct mc_command cmd = { 0 };
189 int err;
190
191 /* prepare command */
192 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_API_VERSION,
193 cmd_flags, 0);
194
195 /* send command to mc */
196 err = mc_send_command(mc_io, &cmd);
197 if (err)
198 return err;
199
200 /* retrieve response parameters */
201 mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
202
203 return 0;
204}