Commit 61363f12ef3353e3a2b093d7882e493ad9241469

Authored by Peng Fan
1 parent d583ccd3bd

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>
(cherry picked from commit cd0ec61b235929d75965c43e82127b73e73e1697)

Showing 1 changed file with 21 additions and 13 deletions Side-by-side Diff

arch/arm/mach-imx/imx8/cpu.c
... ... @@ -617,6 +617,18 @@
617 617 }
618 618 #endif
619 619  
  620 +static bool check_owned_resource(sc_rsrc_t rsrc_id)
  621 +{
  622 + sc_ipc_t ipcHndl = 0;
  623 + bool owned;
  624 +
  625 + ipcHndl = gd->arch.ipc_channel_handle;
  626 +
  627 + owned = sc_rm_is_resource_owned(ipcHndl, rsrc_id);
  628 +
  629 + return owned;
  630 +}
  631 +
620 632 #ifdef CONFIG_IMX_SMMU
621 633 struct smmu_sid dev_sids[] = {
622 634 };
... ... @@ -630,6 +642,10 @@
630 642 return SC_ERR_NONE;
631 643  
632 644 for (i = 0; i < size; i++) {
  645 + if (!check_owned_resource(dev_sids[i].rsrc)) {
  646 + printf("%s rsrc[%d] not owned\n", __func__, dev_sids[i].rsrc);
  647 + continue;
  648 + }
633 649 sciErr = sc_rm_set_master_sid(gd->arch.ipc_channel_handle,
634 650 dev_sids[i].rsrc,
635 651 dev_sids[i].sid);
... ... @@ -885,18 +901,6 @@
885 901 return board_mmc_get_env_dev(devno);
886 902 }
887 903  
888   -static bool check_owned_resource(sc_rsrc_t rsrc_id)
889   -{
890   - sc_ipc_t ipcHndl = 0;
891   - bool owned;
892   -
893   - ipcHndl = gd->arch.ipc_channel_handle;
894   -
895   - owned = sc_rm_is_resource_owned(ipcHndl, rsrc_id);
896   -
897   - return owned;
898   -}
899   -
900 904 static bool check_owned_resources_in_pd_tree(void *blob, int nodeoff,
901 905 unsigned int *unowned_rsrc)
902 906 {
903 907  
... ... @@ -1269,10 +1273,14 @@
1269 1273 {
1270 1274 sc_err_t err;
1271 1275  
  1276 + if (!check_owned_resource(rsrc)) {
  1277 + printf("%s rsrc[%d] not owned\n", __func__, rsrc);
  1278 + return -1;
  1279 + }
1272 1280 err = sc_rm_set_master_sid(gd->arch.ipc_channel_handle, rsrc, sid);
1273 1281 debug("set_master_sid rsrc=%d sid=0x%x err=%d\n", rsrc, sid, err);
1274 1282 if (err != SC_ERR_NONE) {
1275   - pr_err("fail set_master_sid rsrc=%d sid=0x%x err=%d", rsrc, sid, err);
  1283 + pr_err("fail set_master_sid rsrc=%d sid=0x%x err=%d\n", rsrc, sid, err);
1276 1284 return -EINVAL;
1277 1285 }
1278 1286