MLK-20976-2 imx8: cpu: check resource before set sid
authorYe Li <ye.li@nxp.com>
Fri, 24 May 2019 05:43:52 +0000 (22:43 -0700)
committerYe Li <ye.li@nxp.com>
Fri, 24 May 2019 11:29:12 +0000 (04:29 -0700)
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>
arch/arm/mach-imx/imx8/cpu.c

index 314947e..6fdedf6 100644 (file)
@@ -344,6 +344,15 @@ int arch_auxiliary_core_check_up(u32 core_id)
 }
 #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 @@ int imx8_config_smmu_sid(struct smmu_sid *dev_sids, int size)
                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 @@ int mmc_get_env_dev(void)
        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 @@ static int config_smmu_resource_sid(int rsrc, int sid)
 {
        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;
        }