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