Loading drivers/firmware/imx/rm.c +45 −0 Original line number Diff line number Diff line Loading @@ -43,3 +43,48 @@ bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource) return hdr->func; } EXPORT_SYMBOL(imx_sc_rm_is_resource_owned); struct imx_sc_msg_rm_get_resource_owner { struct imx_sc_rpc_msg hdr; union { struct { u16 resource; } req; struct { u8 val; } resp; } data; } __packed __aligned(4); /* * This function get @resource partition number * * @param[in] ipc IPC handle * @param[in] resource resource the control is associated with * @param[out] pt pointer to return the partition number * * @return Returns 0 for success and < 0 for errors. */ int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt) { struct imx_sc_msg_rm_get_resource_owner msg; struct imx_sc_rpc_msg *hdr = &msg.hdr; int ret; hdr->ver = IMX_SC_RPC_VERSION; hdr->svc = IMX_SC_RPC_SVC_RM; hdr->func = IMX_SC_RM_FUNC_GET_RESOURCE_OWNER; hdr->size = 2; msg.data.req.resource = resource; ret = imx_scu_call_rpc(ipc, &msg, true); if (ret) return ret; if (pt) *pt = msg.data.resp.val; return 0; } EXPORT_SYMBOL(imx_sc_rm_get_resource_owner); include/linux/firmware/imx/svc/rm.h +5 −0 Original line number Diff line number Diff line Loading @@ -59,11 +59,16 @@ enum imx_sc_rm_func { #if IS_ENABLED(CONFIG_IMX_SCU) bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource); int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt); #else static inline bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource) { return true; } static inline int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt) { return -EOPNOTSUPP; } #endif #endif Loading
drivers/firmware/imx/rm.c +45 −0 Original line number Diff line number Diff line Loading @@ -43,3 +43,48 @@ bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource) return hdr->func; } EXPORT_SYMBOL(imx_sc_rm_is_resource_owned); struct imx_sc_msg_rm_get_resource_owner { struct imx_sc_rpc_msg hdr; union { struct { u16 resource; } req; struct { u8 val; } resp; } data; } __packed __aligned(4); /* * This function get @resource partition number * * @param[in] ipc IPC handle * @param[in] resource resource the control is associated with * @param[out] pt pointer to return the partition number * * @return Returns 0 for success and < 0 for errors. */ int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt) { struct imx_sc_msg_rm_get_resource_owner msg; struct imx_sc_rpc_msg *hdr = &msg.hdr; int ret; hdr->ver = IMX_SC_RPC_VERSION; hdr->svc = IMX_SC_RPC_SVC_RM; hdr->func = IMX_SC_RM_FUNC_GET_RESOURCE_OWNER; hdr->size = 2; msg.data.req.resource = resource; ret = imx_scu_call_rpc(ipc, &msg, true); if (ret) return ret; if (pt) *pt = msg.data.resp.val; return 0; } EXPORT_SYMBOL(imx_sc_rm_get_resource_owner);
include/linux/firmware/imx/svc/rm.h +5 −0 Original line number Diff line number Diff line Loading @@ -59,11 +59,16 @@ enum imx_sc_rm_func { #if IS_ENABLED(CONFIG_IMX_SCU) bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource); int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt); #else static inline bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource) { return true; } static inline int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt) { return -EOPNOTSUPP; } #endif #endif