Loading drivers/iommu/msm_iommu_sec.c +1 −9 Original line number Diff line number Diff line Loading @@ -426,23 +426,15 @@ fail: int msm_iommu_sec_program_iommu(struct msm_iommu_drvdata *drvdata, struct msm_iommu_ctx_drvdata *ctx_drvdata) { struct msm_scm_sec_cfg { unsigned int id; unsigned int spare; } cfg; int ret, scm_ret = 0; cfg.id = drvdata->sec_id; cfg.spare = ctx_drvdata->num; if (drvdata->smmu_local_base) { writel_relaxed(0xFFFFFFFF, drvdata->smmu_local_base + SMMU_INTR_SEL_NS); mb(); } ret = scm_call(SCM_SVC_MP, IOMMU_SECURE_CFG, &cfg, sizeof(cfg), &scm_ret, sizeof(scm_ret)); ret = scm_restore_sec_cfg(drvdata->sec_id, ctx_drvdata->num, &scm_ret); if (ret || scm_ret) { pr_err("scm call IOMMU_SECURE_CFG failed\n"); return ret ? ret : -EINVAL; Loading drivers/pci/host/pci-msm.c +2 −13 Original line number Diff line number Diff line Loading @@ -229,7 +229,6 @@ #define MAX_BUS_NUM 3 #define MAX_PROP_SIZE 32 #define MAX_RC_NAME_LEN 15 #define PCIE_MSM_RESTORE_SCM_CFG_CMD 0x2 #define MSM_PCIE_MAX_VREG 3 #define MSM_PCIE_MAX_CLK 7 #define MSM_PCIE_MAX_PIPE_CLK 1 Loading Loading @@ -807,24 +806,14 @@ static bool pcie_phy_is_ready(struct msm_pcie_dev_t *dev) static int msm_pcie_restore_sec_config(struct msm_pcie_dev_t *dev) { /* scm command buffer structrue */ struct msm_pcie_scm_cmd_buf { unsigned int device_id; unsigned int spare; } cbuf; int ret, scm_ret = 0; int ret, scm_ret; if (!dev) { pr_err("PCIe: the input pcie dev is NULL.\n"); return -ENODEV; } cbuf.device_id = dev->scm_dev_id; ret = scm_call(SCM_SVC_MP, PCIE_MSM_RESTORE_SCM_CFG_CMD, &cbuf, sizeof(cbuf), &scm_ret, sizeof(scm_ret)); ret = scm_restore_sec_cfg(dev->scm_dev_id, 0, &scm_ret); if (ret || scm_ret) { PCIE_ERR(dev, "PCIe: RC%d failed(%d) to restore sec config, scm_ret=%d\n", Loading drivers/soc/qcom/scm.c +33 −0 Original line number Diff line number Diff line Loading @@ -995,3 +995,36 @@ int scm_get_feat_version(u32 feat) return 0; } EXPORT_SYMBOL(scm_get_feat_version); #define RESTORE_SEC_CFG 2 int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret) { struct scm_desc desc = {0}; int ret; struct restore_sec_cfg { u32 device_id; u32 spare; } cfg; cfg.device_id = device_id; cfg.spare = spare; if (IS_ERR_OR_NULL(scm_ret)) return -EINVAL; if (!is_scm_armv8()) return scm_call(SCM_SVC_MP, RESTORE_SEC_CFG, &cfg, sizeof(cfg), scm_ret, sizeof(*scm_ret)); desc.args[0] = device_id; desc.args[1] = spare; desc.arginfo = SCM_ARGS(2); ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP, RESTORE_SEC_CFG), &desc); if (ret) return ret; *scm_ret = desc.ret[0]; return 0; } EXPORT_SYMBOL(scm_restore_sec_cfg); include/soc/qcom/scm.h +5 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ extern u32 scm_get_version(void); extern int scm_is_call_available(u32 svc_id, u32 cmd_id); extern int scm_get_feat_version(u32 feat); extern bool is_scm_armv8(void); extern int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret); #define SCM_HDCP_MAX_REG 5 Loading Loading @@ -195,5 +196,9 @@ static inline bool is_scm_armv8(void) return true; } static inline int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret) { return 0; } #endif #endif Loading
drivers/iommu/msm_iommu_sec.c +1 −9 Original line number Diff line number Diff line Loading @@ -426,23 +426,15 @@ fail: int msm_iommu_sec_program_iommu(struct msm_iommu_drvdata *drvdata, struct msm_iommu_ctx_drvdata *ctx_drvdata) { struct msm_scm_sec_cfg { unsigned int id; unsigned int spare; } cfg; int ret, scm_ret = 0; cfg.id = drvdata->sec_id; cfg.spare = ctx_drvdata->num; if (drvdata->smmu_local_base) { writel_relaxed(0xFFFFFFFF, drvdata->smmu_local_base + SMMU_INTR_SEL_NS); mb(); } ret = scm_call(SCM_SVC_MP, IOMMU_SECURE_CFG, &cfg, sizeof(cfg), &scm_ret, sizeof(scm_ret)); ret = scm_restore_sec_cfg(drvdata->sec_id, ctx_drvdata->num, &scm_ret); if (ret || scm_ret) { pr_err("scm call IOMMU_SECURE_CFG failed\n"); return ret ? ret : -EINVAL; Loading
drivers/pci/host/pci-msm.c +2 −13 Original line number Diff line number Diff line Loading @@ -229,7 +229,6 @@ #define MAX_BUS_NUM 3 #define MAX_PROP_SIZE 32 #define MAX_RC_NAME_LEN 15 #define PCIE_MSM_RESTORE_SCM_CFG_CMD 0x2 #define MSM_PCIE_MAX_VREG 3 #define MSM_PCIE_MAX_CLK 7 #define MSM_PCIE_MAX_PIPE_CLK 1 Loading Loading @@ -807,24 +806,14 @@ static bool pcie_phy_is_ready(struct msm_pcie_dev_t *dev) static int msm_pcie_restore_sec_config(struct msm_pcie_dev_t *dev) { /* scm command buffer structrue */ struct msm_pcie_scm_cmd_buf { unsigned int device_id; unsigned int spare; } cbuf; int ret, scm_ret = 0; int ret, scm_ret; if (!dev) { pr_err("PCIe: the input pcie dev is NULL.\n"); return -ENODEV; } cbuf.device_id = dev->scm_dev_id; ret = scm_call(SCM_SVC_MP, PCIE_MSM_RESTORE_SCM_CFG_CMD, &cbuf, sizeof(cbuf), &scm_ret, sizeof(scm_ret)); ret = scm_restore_sec_cfg(dev->scm_dev_id, 0, &scm_ret); if (ret || scm_ret) { PCIE_ERR(dev, "PCIe: RC%d failed(%d) to restore sec config, scm_ret=%d\n", Loading
drivers/soc/qcom/scm.c +33 −0 Original line number Diff line number Diff line Loading @@ -995,3 +995,36 @@ int scm_get_feat_version(u32 feat) return 0; } EXPORT_SYMBOL(scm_get_feat_version); #define RESTORE_SEC_CFG 2 int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret) { struct scm_desc desc = {0}; int ret; struct restore_sec_cfg { u32 device_id; u32 spare; } cfg; cfg.device_id = device_id; cfg.spare = spare; if (IS_ERR_OR_NULL(scm_ret)) return -EINVAL; if (!is_scm_armv8()) return scm_call(SCM_SVC_MP, RESTORE_SEC_CFG, &cfg, sizeof(cfg), scm_ret, sizeof(*scm_ret)); desc.args[0] = device_id; desc.args[1] = spare; desc.arginfo = SCM_ARGS(2); ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP, RESTORE_SEC_CFG), &desc); if (ret) return ret; *scm_ret = desc.ret[0]; return 0; } EXPORT_SYMBOL(scm_restore_sec_cfg);
include/soc/qcom/scm.h +5 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ extern u32 scm_get_version(void); extern int scm_is_call_available(u32 svc_id, u32 cmd_id); extern int scm_get_feat_version(u32 feat); extern bool is_scm_armv8(void); extern int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret); #define SCM_HDCP_MAX_REG 5 Loading Loading @@ -195,5 +196,9 @@ static inline bool is_scm_armv8(void) return true; } static inline int scm_restore_sec_cfg(u32 device_id, u32 spare, int *scm_ret) { return 0; } #endif #endif