Commit 61363f12ef3353e3a2b093d7882e493ad9241469
1 parent
d583ccd3bd
Exists in
smarc_8mm-imx_v2018.03_4.14.98_2.0.0_ga
and in
4 other branches
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 |