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>
Signed-off-by: Ye Li <ye.li@nxp.com>
diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c
index 314947e..6fdedf6 100644
--- a/arch/arm/mach-imx/imx8/cpu.c
+++ b/arch/arm/mach-imx/imx8/cpu.c
@@ -344,6 +344,15 @@
}
#endif
+static bool check_owned_resource(sc_rsrc_t rsrc_id)
+{
+ bool owned;
+
+ owned = sc_rm_is_resource_owned(-1, rsrc_id);
+
+ return owned;
+}
+
#ifdef CONFIG_IMX_SMMU
struct smmu_sid dev_sids[] = {
};
@@ -357,6 +366,10 @@
return 0;
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(-1,
dev_sids[i].rsrc,
dev_sids[i].sid);
@@ -597,15 +610,6 @@
return board_mmc_get_env_dev(devno);
}
-static bool check_owned_resource(sc_rsrc_t rsrc_id)
-{
- bool owned;
-
- owned = sc_rm_is_resource_owned(-1, rsrc_id);
-
- return owned;
-}
-
static bool check_owned_resources_in_pd_tree(void *blob, int nodeoff,
unsigned int *unowned_rsrc)
{
@@ -984,10 +988,14 @@
{
int err;
+ if (!check_owned_resource(rsrc)) {
+ printf("%s rsrc[%d] not owned\n", __func__, rsrc);
+ return -1;
+ }
err = sc_rm_set_master_sid(-1, 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;
}