Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/firmware/imx/rm.c
26444 views
1
// SPDX-License-Identifier: GPL-2.0+
2
/*
3
* Copyright 2020 NXP
4
*
5
* File containing client-side RPC functions for the RM service. These
6
* function are ported to clients that communicate to the SC.
7
*/
8
9
#include <linux/firmware/imx/svc/rm.h>
10
11
struct imx_sc_msg_rm_rsrc_owned {
12
struct imx_sc_rpc_msg hdr;
13
u16 resource;
14
} __packed __aligned(4);
15
16
/*
17
* This function check @resource is owned by current partition or not
18
*
19
* @param[in] ipc IPC handle
20
* @param[in] resource resource the control is associated with
21
*
22
* @return Returns 0 for not owned and 1 for owned.
23
*/
24
bool imx_sc_rm_is_resource_owned(struct imx_sc_ipc *ipc, u16 resource)
25
{
26
struct imx_sc_msg_rm_rsrc_owned msg;
27
struct imx_sc_rpc_msg *hdr = &msg.hdr;
28
29
hdr->ver = IMX_SC_RPC_VERSION;
30
hdr->svc = IMX_SC_RPC_SVC_RM;
31
hdr->func = IMX_SC_RM_FUNC_IS_RESOURCE_OWNED;
32
hdr->size = 2;
33
34
msg.resource = resource;
35
36
/*
37
* SCU firmware only returns value 0 or 1
38
* for resource owned check which means not owned or owned.
39
* So it is always successful.
40
*/
41
imx_scu_call_rpc(ipc, &msg, true);
42
43
return hdr->func;
44
}
45
EXPORT_SYMBOL(imx_sc_rm_is_resource_owned);
46
47
struct imx_sc_msg_rm_get_resource_owner {
48
struct imx_sc_rpc_msg hdr;
49
union {
50
struct {
51
u16 resource;
52
} req;
53
struct {
54
u8 val;
55
} resp;
56
} data;
57
} __packed __aligned(4);
58
59
/*
60
* This function get @resource partition number
61
*
62
* @param[in] ipc IPC handle
63
* @param[in] resource resource the control is associated with
64
* @param[out] pt pointer to return the partition number
65
*
66
* @return Returns 0 for success and < 0 for errors.
67
*/
68
int imx_sc_rm_get_resource_owner(struct imx_sc_ipc *ipc, u16 resource, u8 *pt)
69
{
70
struct imx_sc_msg_rm_get_resource_owner msg;
71
struct imx_sc_rpc_msg *hdr = &msg.hdr;
72
int ret;
73
74
hdr->ver = IMX_SC_RPC_VERSION;
75
hdr->svc = IMX_SC_RPC_SVC_RM;
76
hdr->func = IMX_SC_RM_FUNC_GET_RESOURCE_OWNER;
77
hdr->size = 2;
78
79
msg.data.req.resource = resource;
80
81
ret = imx_scu_call_rpc(ipc, &msg, true);
82
if (ret)
83
return ret;
84
85
if (pt)
86
*pt = msg.data.resp.val;
87
88
return 0;
89
}
90
EXPORT_SYMBOL(imx_sc_rm_get_resource_owner);
91
92