1*936840f1SAnson Huang /*
2*936840f1SAnson Huang * Copyright (C) 2016 Freescale Semiconductor, Inc.
3*936840f1SAnson Huang * Copyright 2017-2018 NXP
4*936840f1SAnson Huang *
5*936840f1SAnson Huang * SPDX-License-Identifier: BSD-3-Clause
6*936840f1SAnson Huang */
7*936840f1SAnson Huang
8*936840f1SAnson Huang /*!
9*936840f1SAnson Huang * File containing client-side RPC functions for the MISC service. These
10*936840f1SAnson Huang * functions are ported to clients that communicate to the SC.
11*936840f1SAnson Huang *
12*936840f1SAnson Huang * @addtogroup MISC_SVC
13*936840f1SAnson Huang * @{
14*936840f1SAnson Huang */
15*936840f1SAnson Huang
16*936840f1SAnson Huang /* Includes */
17*936840f1SAnson Huang
18*936840f1SAnson Huang #include <sci/sci_types.h>
19*936840f1SAnson Huang #include <sci/svc/rm/sci_rm_api.h>
20*936840f1SAnson Huang #include <sci/svc/misc/sci_misc_api.h>
21*936840f1SAnson Huang #include <sci/sci_rpc.h>
22*936840f1SAnson Huang #include <stdlib.h>
23*936840f1SAnson Huang #include "sci_misc_rpc.h"
24*936840f1SAnson Huang
25*936840f1SAnson Huang /* Local Defines */
26*936840f1SAnson Huang
27*936840f1SAnson Huang /* Local Types */
28*936840f1SAnson Huang
29*936840f1SAnson Huang /* Local Functions */
30*936840f1SAnson Huang
sc_misc_set_control(sc_ipc_t ipc,sc_rsrc_t resource,sc_ctrl_t ctrl,uint32_t val)31*936840f1SAnson Huang sc_err_t sc_misc_set_control(sc_ipc_t ipc, sc_rsrc_t resource,
32*936840f1SAnson Huang sc_ctrl_t ctrl, uint32_t val)
33*936840f1SAnson Huang {
34*936840f1SAnson Huang sc_rpc_msg_t msg;
35*936840f1SAnson Huang uint8_t result;
36*936840f1SAnson Huang
37*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
38*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
39*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_CONTROL;
40*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)ctrl;
41*936840f1SAnson Huang RPC_U32(&msg, 4U) = (uint32_t)val;
42*936840f1SAnson Huang RPC_U16(&msg, 8U) = (uint16_t)resource;
43*936840f1SAnson Huang RPC_SIZE(&msg) = 4U;
44*936840f1SAnson Huang
45*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
46*936840f1SAnson Huang
47*936840f1SAnson Huang result = RPC_R8(&msg);
48*936840f1SAnson Huang return (sc_err_t)result;
49*936840f1SAnson Huang }
50*936840f1SAnson Huang
sc_misc_get_control(sc_ipc_t ipc,sc_rsrc_t resource,sc_ctrl_t ctrl,uint32_t * val)51*936840f1SAnson Huang sc_err_t sc_misc_get_control(sc_ipc_t ipc, sc_rsrc_t resource,
52*936840f1SAnson Huang sc_ctrl_t ctrl, uint32_t *val)
53*936840f1SAnson Huang {
54*936840f1SAnson Huang sc_rpc_msg_t msg;
55*936840f1SAnson Huang uint8_t result;
56*936840f1SAnson Huang
57*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
58*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
59*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_CONTROL;
60*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)ctrl;
61*936840f1SAnson Huang RPC_U16(&msg, 4U) = (uint16_t)resource;
62*936840f1SAnson Huang RPC_SIZE(&msg) = 3U;
63*936840f1SAnson Huang
64*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
65*936840f1SAnson Huang
66*936840f1SAnson Huang if (val != NULL)
67*936840f1SAnson Huang *val = RPC_U32(&msg, 0U);
68*936840f1SAnson Huang
69*936840f1SAnson Huang result = RPC_R8(&msg);
70*936840f1SAnson Huang return (sc_err_t)result;
71*936840f1SAnson Huang }
72*936840f1SAnson Huang
sc_misc_set_max_dma_group(sc_ipc_t ipc,sc_rm_pt_t pt,sc_misc_dma_group_t max)73*936840f1SAnson Huang sc_err_t sc_misc_set_max_dma_group(sc_ipc_t ipc, sc_rm_pt_t pt,
74*936840f1SAnson Huang sc_misc_dma_group_t max)
75*936840f1SAnson Huang {
76*936840f1SAnson Huang sc_rpc_msg_t msg;
77*936840f1SAnson Huang uint8_t result;
78*936840f1SAnson Huang
79*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
80*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
81*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_MAX_DMA_GROUP;
82*936840f1SAnson Huang RPC_U8(&msg, 0U) = (uint8_t)pt;
83*936840f1SAnson Huang RPC_U8(&msg, 1U) = (uint8_t)max;
84*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
85*936840f1SAnson Huang
86*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
87*936840f1SAnson Huang
88*936840f1SAnson Huang result = RPC_R8(&msg);
89*936840f1SAnson Huang return (sc_err_t)result;
90*936840f1SAnson Huang }
91*936840f1SAnson Huang
sc_misc_set_dma_group(sc_ipc_t ipc,sc_rsrc_t resource,sc_misc_dma_group_t group)92*936840f1SAnson Huang sc_err_t sc_misc_set_dma_group(sc_ipc_t ipc, sc_rsrc_t resource,
93*936840f1SAnson Huang sc_misc_dma_group_t group)
94*936840f1SAnson Huang {
95*936840f1SAnson Huang sc_rpc_msg_t msg;
96*936840f1SAnson Huang uint8_t result;
97*936840f1SAnson Huang
98*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
99*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
100*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_DMA_GROUP;
101*936840f1SAnson Huang RPC_U16(&msg, 0U) = (uint16_t)resource;
102*936840f1SAnson Huang RPC_U8(&msg, 2U) = (uint8_t)group;
103*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
104*936840f1SAnson Huang
105*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
106*936840f1SAnson Huang
107*936840f1SAnson Huang result = RPC_R8(&msg);
108*936840f1SAnson Huang return (sc_err_t)result;
109*936840f1SAnson Huang }
110*936840f1SAnson Huang
sc_misc_seco_image_load(sc_ipc_t ipc,sc_faddr_t addr_src,sc_faddr_t addr_dst,uint32_t len,sc_bool_t fw)111*936840f1SAnson Huang sc_err_t sc_misc_seco_image_load(sc_ipc_t ipc, sc_faddr_t addr_src,
112*936840f1SAnson Huang sc_faddr_t addr_dst, uint32_t len,
113*936840f1SAnson Huang sc_bool_t fw)
114*936840f1SAnson Huang {
115*936840f1SAnson Huang sc_rpc_msg_t msg;
116*936840f1SAnson Huang uint8_t result;
117*936840f1SAnson Huang
118*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
119*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
120*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_IMAGE_LOAD;
121*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)(addr_src >> 32U);
122*936840f1SAnson Huang RPC_U32(&msg, 4U) = (uint32_t)addr_src;
123*936840f1SAnson Huang RPC_U32(&msg, 8U) = (uint32_t)(addr_dst >> 32U);
124*936840f1SAnson Huang RPC_U32(&msg, 12U) = (uint32_t)addr_dst;
125*936840f1SAnson Huang RPC_U32(&msg, 16U) = (uint32_t)len;
126*936840f1SAnson Huang RPC_U8(&msg, 20U) = (uint8_t)fw;
127*936840f1SAnson Huang RPC_SIZE(&msg) = 7U;
128*936840f1SAnson Huang
129*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
130*936840f1SAnson Huang
131*936840f1SAnson Huang result = RPC_R8(&msg);
132*936840f1SAnson Huang return (sc_err_t)result;
133*936840f1SAnson Huang }
134*936840f1SAnson Huang
sc_misc_seco_authenticate(sc_ipc_t ipc,sc_misc_seco_auth_cmd_t cmd,sc_faddr_t addr)135*936840f1SAnson Huang sc_err_t sc_misc_seco_authenticate(sc_ipc_t ipc,
136*936840f1SAnson Huang sc_misc_seco_auth_cmd_t cmd, sc_faddr_t addr)
137*936840f1SAnson Huang {
138*936840f1SAnson Huang sc_rpc_msg_t msg;
139*936840f1SAnson Huang uint8_t result;
140*936840f1SAnson Huang
141*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
142*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
143*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_AUTHENTICATE;
144*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
145*936840f1SAnson Huang RPC_U32(&msg, 4U) = (uint32_t)addr;
146*936840f1SAnson Huang RPC_U8(&msg, 8U) = (uint8_t)cmd;
147*936840f1SAnson Huang RPC_SIZE(&msg) = 4U;
148*936840f1SAnson Huang
149*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
150*936840f1SAnson Huang
151*936840f1SAnson Huang result = RPC_R8(&msg);
152*936840f1SAnson Huang return (sc_err_t)result;
153*936840f1SAnson Huang }
154*936840f1SAnson Huang
sc_misc_seco_fuse_write(sc_ipc_t ipc,sc_faddr_t addr)155*936840f1SAnson Huang sc_err_t sc_misc_seco_fuse_write(sc_ipc_t ipc, sc_faddr_t addr)
156*936840f1SAnson Huang {
157*936840f1SAnson Huang sc_rpc_msg_t msg;
158*936840f1SAnson Huang uint8_t result;
159*936840f1SAnson Huang
160*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
161*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
162*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_FUSE_WRITE;
163*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
164*936840f1SAnson Huang RPC_U32(&msg, 4U) = (uint32_t)addr;
165*936840f1SAnson Huang RPC_SIZE(&msg) = 3U;
166*936840f1SAnson Huang
167*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
168*936840f1SAnson Huang
169*936840f1SAnson Huang result = RPC_R8(&msg);
170*936840f1SAnson Huang return (sc_err_t)result;
171*936840f1SAnson Huang }
172*936840f1SAnson Huang
sc_misc_seco_enable_debug(sc_ipc_t ipc,sc_faddr_t addr)173*936840f1SAnson Huang sc_err_t sc_misc_seco_enable_debug(sc_ipc_t ipc, sc_faddr_t addr)
174*936840f1SAnson Huang {
175*936840f1SAnson Huang sc_rpc_msg_t msg;
176*936840f1SAnson Huang uint8_t result;
177*936840f1SAnson Huang
178*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
179*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
180*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_ENABLE_DEBUG;
181*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
182*936840f1SAnson Huang RPC_U32(&msg, 4U) = (uint32_t)addr;
183*936840f1SAnson Huang RPC_SIZE(&msg) = 3U;
184*936840f1SAnson Huang
185*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
186*936840f1SAnson Huang
187*936840f1SAnson Huang result = RPC_R8(&msg);
188*936840f1SAnson Huang return (sc_err_t)result;
189*936840f1SAnson Huang }
190*936840f1SAnson Huang
sc_misc_seco_forward_lifecycle(sc_ipc_t ipc,uint32_t lifecycle)191*936840f1SAnson Huang sc_err_t sc_misc_seco_forward_lifecycle(sc_ipc_t ipc, uint32_t lifecycle)
192*936840f1SAnson Huang {
193*936840f1SAnson Huang sc_rpc_msg_t msg;
194*936840f1SAnson Huang uint8_t result;
195*936840f1SAnson Huang
196*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
197*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
198*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_FORWARD_LIFECYCLE;
199*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)lifecycle;
200*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
201*936840f1SAnson Huang
202*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
203*936840f1SAnson Huang
204*936840f1SAnson Huang result = RPC_R8(&msg);
205*936840f1SAnson Huang return (sc_err_t)result;
206*936840f1SAnson Huang }
207*936840f1SAnson Huang
sc_misc_seco_return_lifecycle(sc_ipc_t ipc,sc_faddr_t addr)208*936840f1SAnson Huang sc_err_t sc_misc_seco_return_lifecycle(sc_ipc_t ipc, sc_faddr_t addr)
209*936840f1SAnson Huang {
210*936840f1SAnson Huang sc_rpc_msg_t msg;
211*936840f1SAnson Huang uint8_t result;
212*936840f1SAnson Huang
213*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
214*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
215*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_RETURN_LIFECYCLE;
216*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)(addr >> 32U);
217*936840f1SAnson Huang RPC_U32(&msg, 4U) = (uint32_t)addr;
218*936840f1SAnson Huang RPC_SIZE(&msg) = 3U;
219*936840f1SAnson Huang
220*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
221*936840f1SAnson Huang
222*936840f1SAnson Huang result = RPC_R8(&msg);
223*936840f1SAnson Huang return (sc_err_t)result;
224*936840f1SAnson Huang }
225*936840f1SAnson Huang
sc_misc_seco_build_info(sc_ipc_t ipc,uint32_t * version,uint32_t * commit)226*936840f1SAnson Huang void sc_misc_seco_build_info(sc_ipc_t ipc, uint32_t *version, uint32_t *commit)
227*936840f1SAnson Huang {
228*936840f1SAnson Huang sc_rpc_msg_t msg;
229*936840f1SAnson Huang
230*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
231*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
232*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_BUILD_INFO;
233*936840f1SAnson Huang RPC_SIZE(&msg) = 1U;
234*936840f1SAnson Huang
235*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
236*936840f1SAnson Huang
237*936840f1SAnson Huang if (version != NULL)
238*936840f1SAnson Huang *version = RPC_U32(&msg, 0U);
239*936840f1SAnson Huang
240*936840f1SAnson Huang if (commit != NULL)
241*936840f1SAnson Huang *commit = RPC_U32(&msg, 4U);
242*936840f1SAnson Huang }
243*936840f1SAnson Huang
sc_misc_seco_chip_info(sc_ipc_t ipc,uint16_t * lc,uint16_t * monotonic,uint32_t * uid_l,uint32_t * uid_h)244*936840f1SAnson Huang sc_err_t sc_misc_seco_chip_info(sc_ipc_t ipc, uint16_t *lc,
245*936840f1SAnson Huang uint16_t *monotonic, uint32_t *uid_l,
246*936840f1SAnson Huang uint32_t *uid_h)
247*936840f1SAnson Huang {
248*936840f1SAnson Huang sc_rpc_msg_t msg;
249*936840f1SAnson Huang uint8_t result;
250*936840f1SAnson Huang
251*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
252*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
253*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SECO_CHIP_INFO;
254*936840f1SAnson Huang RPC_SIZE(&msg) = 1U;
255*936840f1SAnson Huang
256*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
257*936840f1SAnson Huang
258*936840f1SAnson Huang if (uid_l != NULL)
259*936840f1SAnson Huang *uid_l = RPC_U32(&msg, 0U);
260*936840f1SAnson Huang
261*936840f1SAnson Huang if (uid_h != NULL)
262*936840f1SAnson Huang *uid_h = RPC_U32(&msg, 4U);
263*936840f1SAnson Huang
264*936840f1SAnson Huang if (lc != NULL)
265*936840f1SAnson Huang *lc = RPC_U16(&msg, 8U);
266*936840f1SAnson Huang
267*936840f1SAnson Huang if (monotonic != NULL)
268*936840f1SAnson Huang *monotonic = RPC_U16(&msg, 10U);
269*936840f1SAnson Huang
270*936840f1SAnson Huang result = RPC_R8(&msg);
271*936840f1SAnson Huang return (sc_err_t)result;
272*936840f1SAnson Huang }
273*936840f1SAnson Huang
sc_misc_debug_out(sc_ipc_t ipc,uint8_t ch)274*936840f1SAnson Huang void sc_misc_debug_out(sc_ipc_t ipc, uint8_t ch)
275*936840f1SAnson Huang {
276*936840f1SAnson Huang sc_rpc_msg_t msg;
277*936840f1SAnson Huang
278*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
279*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
280*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_DEBUG_OUT;
281*936840f1SAnson Huang RPC_U8(&msg, 0U) = (uint8_t)ch;
282*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
283*936840f1SAnson Huang
284*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
285*936840f1SAnson Huang }
286*936840f1SAnson Huang
sc_misc_waveform_capture(sc_ipc_t ipc,sc_bool_t enable)287*936840f1SAnson Huang sc_err_t sc_misc_waveform_capture(sc_ipc_t ipc, sc_bool_t enable)
288*936840f1SAnson Huang {
289*936840f1SAnson Huang sc_rpc_msg_t msg;
290*936840f1SAnson Huang uint8_t result;
291*936840f1SAnson Huang
292*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
293*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
294*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_WAVEFORM_CAPTURE;
295*936840f1SAnson Huang RPC_U8(&msg, 0U) = (uint8_t)enable;
296*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
297*936840f1SAnson Huang
298*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
299*936840f1SAnson Huang
300*936840f1SAnson Huang result = RPC_R8(&msg);
301*936840f1SAnson Huang return (sc_err_t)result;
302*936840f1SAnson Huang }
303*936840f1SAnson Huang
sc_misc_build_info(sc_ipc_t ipc,uint32_t * build,uint32_t * commit)304*936840f1SAnson Huang void sc_misc_build_info(sc_ipc_t ipc, uint32_t *build, uint32_t *commit)
305*936840f1SAnson Huang {
306*936840f1SAnson Huang sc_rpc_msg_t msg;
307*936840f1SAnson Huang
308*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
309*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
310*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_BUILD_INFO;
311*936840f1SAnson Huang RPC_SIZE(&msg) = 1U;
312*936840f1SAnson Huang
313*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
314*936840f1SAnson Huang
315*936840f1SAnson Huang if (build != NULL)
316*936840f1SAnson Huang *build = RPC_U32(&msg, 0U);
317*936840f1SAnson Huang
318*936840f1SAnson Huang if (commit != NULL)
319*936840f1SAnson Huang *commit = RPC_U32(&msg, 4U);
320*936840f1SAnson Huang }
321*936840f1SAnson Huang
sc_misc_unique_id(sc_ipc_t ipc,uint32_t * id_l,uint32_t * id_h)322*936840f1SAnson Huang void sc_misc_unique_id(sc_ipc_t ipc, uint32_t *id_l, uint32_t *id_h)
323*936840f1SAnson Huang {
324*936840f1SAnson Huang sc_rpc_msg_t msg;
325*936840f1SAnson Huang
326*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
327*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
328*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_UNIQUE_ID;
329*936840f1SAnson Huang RPC_SIZE(&msg) = 1U;
330*936840f1SAnson Huang
331*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
332*936840f1SAnson Huang
333*936840f1SAnson Huang if (id_l != NULL)
334*936840f1SAnson Huang *id_l = RPC_U32(&msg, 0U);
335*936840f1SAnson Huang
336*936840f1SAnson Huang if (id_h != NULL)
337*936840f1SAnson Huang *id_h = RPC_U32(&msg, 4U);
338*936840f1SAnson Huang }
339*936840f1SAnson Huang
sc_misc_set_ari(sc_ipc_t ipc,sc_rsrc_t resource,sc_rsrc_t resource_mst,uint16_t ari,sc_bool_t enable)340*936840f1SAnson Huang sc_err_t sc_misc_set_ari(sc_ipc_t ipc, sc_rsrc_t resource,
341*936840f1SAnson Huang sc_rsrc_t resource_mst, uint16_t ari, sc_bool_t enable)
342*936840f1SAnson Huang {
343*936840f1SAnson Huang sc_rpc_msg_t msg;
344*936840f1SAnson Huang uint8_t result;
345*936840f1SAnson Huang
346*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
347*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
348*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_ARI;
349*936840f1SAnson Huang RPC_U16(&msg, 0U) = (uint16_t)resource;
350*936840f1SAnson Huang RPC_U16(&msg, 2U) = (uint16_t)resource_mst;
351*936840f1SAnson Huang RPC_U16(&msg, 4U) = (uint16_t)ari;
352*936840f1SAnson Huang RPC_U8(&msg, 6U) = (uint8_t)enable;
353*936840f1SAnson Huang RPC_SIZE(&msg) = 3U;
354*936840f1SAnson Huang
355*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
356*936840f1SAnson Huang
357*936840f1SAnson Huang result = RPC_R8(&msg);
358*936840f1SAnson Huang return (sc_err_t)result;
359*936840f1SAnson Huang }
360*936840f1SAnson Huang
sc_misc_boot_status(sc_ipc_t ipc,sc_misc_boot_status_t status)361*936840f1SAnson Huang void sc_misc_boot_status(sc_ipc_t ipc, sc_misc_boot_status_t status)
362*936840f1SAnson Huang {
363*936840f1SAnson Huang sc_rpc_msg_t msg;
364*936840f1SAnson Huang
365*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
366*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
367*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_BOOT_STATUS;
368*936840f1SAnson Huang RPC_U8(&msg, 0U) = (uint8_t)status;
369*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
370*936840f1SAnson Huang
371*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_TRUE);
372*936840f1SAnson Huang }
373*936840f1SAnson Huang
sc_misc_boot_done(sc_ipc_t ipc,sc_rsrc_t cpu)374*936840f1SAnson Huang sc_err_t sc_misc_boot_done(sc_ipc_t ipc, sc_rsrc_t cpu)
375*936840f1SAnson Huang {
376*936840f1SAnson Huang sc_rpc_msg_t msg;
377*936840f1SAnson Huang uint8_t result;
378*936840f1SAnson Huang
379*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
380*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
381*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_BOOT_DONE;
382*936840f1SAnson Huang RPC_U16(&msg, 0U) = (uint16_t)cpu;
383*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
384*936840f1SAnson Huang
385*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
386*936840f1SAnson Huang
387*936840f1SAnson Huang result = RPC_R8(&msg);
388*936840f1SAnson Huang return (sc_err_t)result;
389*936840f1SAnson Huang }
390*936840f1SAnson Huang
sc_misc_otp_fuse_read(sc_ipc_t ipc,uint32_t word,uint32_t * val)391*936840f1SAnson Huang sc_err_t sc_misc_otp_fuse_read(sc_ipc_t ipc, uint32_t word, uint32_t *val)
392*936840f1SAnson Huang {
393*936840f1SAnson Huang sc_rpc_msg_t msg;
394*936840f1SAnson Huang uint8_t result;
395*936840f1SAnson Huang
396*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
397*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
398*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_OTP_FUSE_READ;
399*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)word;
400*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
401*936840f1SAnson Huang
402*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
403*936840f1SAnson Huang
404*936840f1SAnson Huang if (val != NULL)
405*936840f1SAnson Huang *val = RPC_U32(&msg, 0U);
406*936840f1SAnson Huang
407*936840f1SAnson Huang result = RPC_R8(&msg);
408*936840f1SAnson Huang return (sc_err_t)result;
409*936840f1SAnson Huang }
410*936840f1SAnson Huang
sc_misc_otp_fuse_write(sc_ipc_t ipc,uint32_t word,uint32_t val)411*936840f1SAnson Huang sc_err_t sc_misc_otp_fuse_write(sc_ipc_t ipc, uint32_t word, uint32_t val)
412*936840f1SAnson Huang {
413*936840f1SAnson Huang sc_rpc_msg_t msg;
414*936840f1SAnson Huang uint8_t result;
415*936840f1SAnson Huang
416*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
417*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
418*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_OTP_FUSE_WRITE;
419*936840f1SAnson Huang RPC_U32(&msg, 0U) = (uint32_t)word;
420*936840f1SAnson Huang RPC_U32(&msg, 4U) = (uint32_t)val;
421*936840f1SAnson Huang RPC_SIZE(&msg) = 3U;
422*936840f1SAnson Huang
423*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
424*936840f1SAnson Huang
425*936840f1SAnson Huang result = RPC_R8(&msg);
426*936840f1SAnson Huang return (sc_err_t)result;
427*936840f1SAnson Huang }
428*936840f1SAnson Huang
sc_misc_set_temp(sc_ipc_t ipc,sc_rsrc_t resource,sc_misc_temp_t temp,int16_t celsius,int8_t tenths)429*936840f1SAnson Huang sc_err_t sc_misc_set_temp(sc_ipc_t ipc, sc_rsrc_t resource,
430*936840f1SAnson Huang sc_misc_temp_t temp, int16_t celsius, int8_t tenths)
431*936840f1SAnson Huang {
432*936840f1SAnson Huang sc_rpc_msg_t msg;
433*936840f1SAnson Huang uint8_t result;
434*936840f1SAnson Huang
435*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
436*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
437*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_SET_TEMP;
438*936840f1SAnson Huang RPC_U16(&msg, 0U) = (uint16_t)resource;
439*936840f1SAnson Huang RPC_I16(&msg, 2U) = (int16_t) celsius;
440*936840f1SAnson Huang RPC_U8(&msg, 4U) = (uint8_t)temp;
441*936840f1SAnson Huang RPC_I8(&msg, 5U) = (int8_t) tenths;
442*936840f1SAnson Huang RPC_SIZE(&msg) = 3U;
443*936840f1SAnson Huang
444*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
445*936840f1SAnson Huang
446*936840f1SAnson Huang result = RPC_R8(&msg);
447*936840f1SAnson Huang return (sc_err_t)result;
448*936840f1SAnson Huang }
449*936840f1SAnson Huang
sc_misc_get_temp(sc_ipc_t ipc,sc_rsrc_t resource,sc_misc_temp_t temp,int16_t * celsius,int8_t * tenths)450*936840f1SAnson Huang sc_err_t sc_misc_get_temp(sc_ipc_t ipc, sc_rsrc_t resource,
451*936840f1SAnson Huang sc_misc_temp_t temp, int16_t *celsius,
452*936840f1SAnson Huang int8_t *tenths)
453*936840f1SAnson Huang {
454*936840f1SAnson Huang sc_rpc_msg_t msg;
455*936840f1SAnson Huang uint8_t result;
456*936840f1SAnson Huang
457*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
458*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
459*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_TEMP;
460*936840f1SAnson Huang RPC_U16(&msg, 0U) = (uint16_t)resource;
461*936840f1SAnson Huang RPC_U8(&msg, 2U) = (uint8_t)temp;
462*936840f1SAnson Huang RPC_SIZE(&msg) = 2U;
463*936840f1SAnson Huang
464*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
465*936840f1SAnson Huang
466*936840f1SAnson Huang if (celsius != NULL)
467*936840f1SAnson Huang *celsius = RPC_I16(&msg, 0U);
468*936840f1SAnson Huang
469*936840f1SAnson Huang result = RPC_R8(&msg);
470*936840f1SAnson Huang if (tenths != NULL)
471*936840f1SAnson Huang *tenths = RPC_I8(&msg, 2U);
472*936840f1SAnson Huang
473*936840f1SAnson Huang return (sc_err_t)result;
474*936840f1SAnson Huang }
475*936840f1SAnson Huang
sc_misc_get_boot_dev(sc_ipc_t ipc,sc_rsrc_t * dev)476*936840f1SAnson Huang void sc_misc_get_boot_dev(sc_ipc_t ipc, sc_rsrc_t *dev)
477*936840f1SAnson Huang {
478*936840f1SAnson Huang sc_rpc_msg_t msg;
479*936840f1SAnson Huang
480*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
481*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
482*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_BOOT_DEV;
483*936840f1SAnson Huang RPC_SIZE(&msg) = 1U;
484*936840f1SAnson Huang
485*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
486*936840f1SAnson Huang
487*936840f1SAnson Huang if (dev != NULL)
488*936840f1SAnson Huang *dev = RPC_U16(&msg, 0U);
489*936840f1SAnson Huang }
490*936840f1SAnson Huang
sc_misc_get_button_status(sc_ipc_t ipc,sc_bool_t * status)491*936840f1SAnson Huang void sc_misc_get_button_status(sc_ipc_t ipc, sc_bool_t *status)
492*936840f1SAnson Huang {
493*936840f1SAnson Huang sc_rpc_msg_t msg;
494*936840f1SAnson Huang
495*936840f1SAnson Huang RPC_VER(&msg) = SC_RPC_VERSION;
496*936840f1SAnson Huang RPC_SVC(&msg) = (uint8_t)SC_RPC_SVC_MISC;
497*936840f1SAnson Huang RPC_FUNC(&msg) = (uint8_t)MISC_FUNC_GET_BUTTON_STATUS;
498*936840f1SAnson Huang RPC_SIZE(&msg) = 1U;
499*936840f1SAnson Huang
500*936840f1SAnson Huang sc_call_rpc(ipc, &msg, SC_FALSE);
501*936840f1SAnson Huang
502*936840f1SAnson Huang if (status != NULL)
503*936840f1SAnson Huang *status = RPC_U8(&msg, 0U);
504*936840f1SAnson Huang }
505*936840f1SAnson Huang
506*936840f1SAnson Huang /**@}*/
507