summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx/imx8/cpu.c
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2019-02-25 18:23:03 +0800
committerPeng Fan <peng.fan@nxp.com>2019-02-26 10:46:23 +0800
commitcd0ec61b235929d75965c43e82127b73e73e1697 (patch)
tree392b8bded73ca606143a0098df29ef88d787a4ec /arch/arm/mach-imx/imx8/cpu.c
parent23f7a037d14d05c2eea5622bd8ffda2f23d04372 (diff)
MLK-20976-2 imx8: cpu: check resource before set sid
If resource is not owned, we ignore sid settings. When support CM41 + android auto on xen, some resources are owned by CM41, when CM41 releases those resources, CM41 will program SID for those resources. Signed-off-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Flynn xu <flynn.xu@nxp.com>
Diffstat (limited to 'arch/arm/mach-imx/imx8/cpu.c')
-rw-r--r--arch/arm/mach-imx/imx8/cpu.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c
index a09989951c..7ff42b4cb5 100644
--- a/arch/arm/mach-imx/imx8/cpu.c
+++ b/arch/arm/mach-imx/imx8/cpu.c
@@ -617,6 +617,18 @@ int arch_auxiliary_core_check_up(u32 core_id)
}
#endif
+static bool check_owned_resource(sc_rsrc_t rsrc_id)
+{
+ sc_ipc_t ipcHndl = 0;
+ bool owned;
+
+ ipcHndl = gd->arch.ipc_channel_handle;
+
+ owned = sc_rm_is_resource_owned(ipcHndl, rsrc_id);
+
+ return owned;
+}
+
#ifdef CONFIG_IMX_SMMU
struct smmu_sid dev_sids[] = {
};
@@ -630,6 +642,10 @@ sc_err_t imx8_config_smmu_sid(struct smmu_sid *dev_sids, int size)
return SC_ERR_NONE;
for (i = 0; i < size; i++) {
+ if (!check_owned_resource(dev_sids[i].rsrc)) {
+ printf("%s rsrc[%d] not owned\n", __func__, dev_sids[i].rsrc);
+ continue;
+ }
sciErr = sc_rm_set_master_sid(gd->arch.ipc_channel_handle,
dev_sids[i].rsrc,
dev_sids[i].sid);
@@ -885,18 +901,6 @@ int mmc_get_env_dev(void)
return board_mmc_get_env_dev(devno);
}
-static bool check_owned_resource(sc_rsrc_t rsrc_id)
-{
- sc_ipc_t ipcHndl = 0;
- bool owned;
-
- ipcHndl = gd->arch.ipc_channel_handle;
-
- owned = sc_rm_is_resource_owned(ipcHndl, rsrc_id);
-
- return owned;
-}
-
static bool check_owned_resources_in_pd_tree(void *blob, int nodeoff,
unsigned int *unowned_rsrc)
{
@@ -1269,10 +1273,14 @@ static int config_smmu_resource_sid(int rsrc, int sid)
{
sc_err_t err;
+ if (!check_owned_resource(rsrc)) {
+ printf("%s rsrc[%d] not owned\n", __func__, rsrc);
+ return -1;
+ }
err = sc_rm_set_master_sid(gd->arch.ipc_channel_handle, rsrc, sid);
debug("set_master_sid rsrc=%d sid=0x%x err=%d\n", rsrc, sid, err);
if (err != SC_ERR_NONE) {
- pr_err("fail set_master_sid rsrc=%d sid=0x%x err=%d", rsrc, sid, err);
+ pr_err("fail set_master_sid rsrc=%d sid=0x%x err=%d\n", rsrc, sid, err);
return -EINVAL;
}