diff options
author | Peng Fan <peng.fan@nxp.com> | 2019-02-25 18:23:03 +0800 |
---|---|---|
committer | Peng Fan <peng.fan@nxp.com> | 2019-02-26 10:46:23 +0800 |
commit | cd0ec61b235929d75965c43e82127b73e73e1697 (patch) | |
tree | 392b8bded73ca606143a0098df29ef88d787a4ec /arch/arm/mach-imx/imx8/cpu.c | |
parent | 23f7a037d14d05c2eea5622bd8ffda2f23d04372 (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.c | 34 |
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; } |