Loading drivers/firmware/qcom_scm-smc.c +36 −0 Original line number Diff line number Diff line Loading @@ -806,6 +806,23 @@ int __qcom_scm_pas_mss_reset(struct device *dev, bool reset) return ret ? : desc.res[0]; } int __qcom_scm_get_sec_dump_state(struct device *dev, u32 *dump_state) { int ret; struct qcom_scm_desc desc = { .svc = QCOM_SCM_SVC_UTIL, .cmd = QCOM_SCM_UTIL_GET_SEC_DUMP_STATE, .owner = ARM_SMCCC_OWNER_SIP }; ret = qcom_scm_call(dev, &desc); if (dump_state) *dump_state = desc.res[0]; return ret; } int __qcom_scm_io_readl(struct device *dev, phys_addr_t addr, unsigned int *val) { Loading Loading @@ -972,6 +989,25 @@ int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr, u32 size, return ret; } int __qcom_scm_mem_protect_region_id(struct device *dev, phys_addr_t paddr, size_t size) { int ret; struct qcom_scm_desc desc = { .svc = QCOM_SCM_SVC_MP, .cmd = QCOM_SCM_MP_MEM_PROTECT_REGION_ID, .owner = ARM_SMCCC_OWNER_SIP }; desc.args[0] = paddr; desc.args[1] = size; desc.arginfo = QCOM_SCM_ARGS(2); ret = qcom_scm_call(dev, &desc); return ret; } int __qcom_scm_iommu_secure_map(struct device *dev, phys_addr_t sg_list_addr, size_t num_sg, size_t sg_block_size, u64 sec_id, int cbndx, unsigned long iova, size_t total_len) Loading drivers/firmware/qcom_scm.c +13 −0 Original line number Diff line number Diff line Loading @@ -322,6 +322,13 @@ static const struct reset_control_ops qcom_scm_pas_reset_ops = { .deassert = qcom_scm_pas_reset_deassert, }; int qcom_scm_get_sec_dump_state(u32 *dump_state) { return __qcom_scm_get_sec_dump_state(__scm->dev, dump_state); } EXPORT_SYMBOL(qcom_scm_get_sec_dump_state); int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val) { return __qcom_scm_io_readl(__scm->dev, addr, val); Loading Loading @@ -365,6 +372,12 @@ int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare) } EXPORT_SYMBOL(qcom_scm_iommu_secure_ptbl_init); int qcom_scm_mem_protect_region_id(phys_addr_t paddr, size_t size) { return __qcom_scm_mem_protect_region_id(__scm->dev, paddr, size); } EXPORT_SYMBOL(qcom_scm_mem_protect_region_id); int qcom_scm_iommu_secure_map(phys_addr_t sg_list_addr, size_t num_sg, size_t sg_block_size, u64 sec_id, int cbndx, unsigned long iova, size_t total_len) Loading drivers/firmware/qcom_scm.h +7 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,10 @@ extern int __qcom_scm_pas_auth_and_reset(struct device *dev, u32 peripheral); extern int __qcom_scm_pas_shutdown(struct device *dev, u32 peripheral); extern int __qcom_scm_pas_mss_reset(struct device *dev, bool reset); #define QCOM_SCM_SVC_UTIL 0x03 #define QCOM_SCM_UTIL_GET_SEC_DUMP_STATE 0x10 extern int __qcom_scm_get_sec_dump_state(struct device *dev, u32 *dump_state); #define QCOM_SCM_SVC_IO 0x05 #define QCOM_SCM_IO_READ 0x01 #define QCOM_SCM_IO_WRITE 0x02 Loading @@ -60,6 +64,7 @@ extern void __qcom_scm_mmu_sync(struct device *dev, bool sync); #define QCOM_SCM_MP_RESTORE_SEC_CFG 0x02 #define QCOM_SCM_MP_IOMMU_SECURE_PTBL_SIZE 0x03 #define QCOM_SCM_MP_IOMMU_SECURE_PTBL_INIT 0x04 #define QCOM_SCM_MP_MEM_PROTECT_REGION_ID 0x10 #define QCOM_SCM_MP_IOMMU_SECURE_MAP2_FLAT 0x12 #define QCOM_SCM_MP_IOMMU_SECURE_UNMAP2_FLAT 0x13 #define QCOM_SCM_MP_ASSIGN 0x16 Loading @@ -69,6 +74,8 @@ extern int __qcom_scm_iommu_secure_ptbl_size(struct device *dev, u32 spare, size_t *size); extern int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr, u32 size, u32 spare); extern int __qcom_scm_mem_protect_region_id(struct device *dev, phys_addr_t paddr, size_t size); extern int __qcom_scm_iommu_secure_map(struct device *dev, phys_addr_t sg_list_addr, size_t num_sg, size_t sg_block_size, u64 sec_id, int cbndx, Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +15 −23 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ #include <linux/pci.h> #include <soc/qcom/subsystem_restart.h> #include <linux/soc/qcom/smem.h> #include <soc/qcom/scm.h> #include <linux/qcom_scm.h> #include <asm/cacheflush.h> #include <linux/soc/qcom/smem_state.h> #include <linux/of_irq.h> Loading Loading @@ -91,7 +91,6 @@ struct ipa_ioc_nat_ipv6ct_table_alloc32 { #endif /* #ifdef CONFIG_COMPAT */ #define IPA_TZ_UNLOCK_ATTRIBUTE 0x0C0311 #define TZ_MEM_PROTECT_REGION_ID 0x10 struct tz_smmu_ipa_protect_region_iovec_s { u64 input_addr; Loading Loading @@ -6272,10 +6271,10 @@ static ssize_t ipa3_write(struct file *file, const char __user *buf, */ int ipa3_tz_unlock_reg(struct ipa_tz_unlock_reg_info *reg_info, u16 num_regs) { int i, size, ret; int i, ret; compat_size_t size; struct tz_smmu_ipa_protect_region_iovec_s *ipa_tz_unlock_vec; struct tz_smmu_ipa_protect_region_s cmd_buf; struct scm_desc desc = {0}; if (reg_info == NULL || num_regs == 0) { IPAERR("Bad parameters\n"); Loading @@ -6300,11 +6299,9 @@ int ipa3_tz_unlock_reg(struct ipa_tz_unlock_reg_info *reg_info, u16 num_regs) cmd_buf.iovec_buf = virt_to_phys((void *)ipa_tz_unlock_vec); cmd_buf.size_bytes = size; desc.args[0] = virt_to_phys((void *)ipa_tz_unlock_vec); desc.args[1] = size; desc.arginfo = SCM_ARGS(2); ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP, TZ_MEM_PROTECT_REGION_ID), &desc); ret = qcom_scm_mem_protect_region_id( virt_to_phys((void *)ipa_tz_unlock_vec), size); if (ret) { IPAERR("scm call SCM_SVC_MP failed: %d\n", ret); Loading Loading @@ -6368,24 +6365,19 @@ static int ipa3_alloc_pkt_init(void) * Returns true in secure dump allowed. * Return false when secure dump not allowed. */ #define TZ_UTIL_GET_SEC_DUMP_STATE 0x10 static bool ipa_is_mem_dump_allowed(void) { struct scm_desc desc = {0}; int ret = 0; int ret; u32 dump_state; desc.args[0] = 0; desc.arginfo = 0; ret = qcom_scm_get_sec_dump_state(&dump_state); ret = scm_call2( SCM_SIP_FNID(SCM_SVC_UTIL, TZ_UTIL_GET_SEC_DUMP_STATE), &desc); if (ret) { IPAERR("SCM DUMP_STATE call failed\n"); return false; } return (desc.ret[0] == 1); return (dump_state == 1); } static int ipa3_lan_poll(struct napi_struct *napi, int budget) Loading drivers/platform/msm/ipa/ipa_v3/ipa_i.h +0 −1 Original line number Diff line number Diff line Loading @@ -426,7 +426,6 @@ enum { #endif /* #ifdef CONFIG_COMPAT */ #define IPA_TZ_UNLOCK_ATTRIBUTE 0x0C0311 #define TZ_MEM_PROTECT_REGION_ID 0x10 #define MBOX_TOUT_MS 100 Loading Loading
drivers/firmware/qcom_scm-smc.c +36 −0 Original line number Diff line number Diff line Loading @@ -806,6 +806,23 @@ int __qcom_scm_pas_mss_reset(struct device *dev, bool reset) return ret ? : desc.res[0]; } int __qcom_scm_get_sec_dump_state(struct device *dev, u32 *dump_state) { int ret; struct qcom_scm_desc desc = { .svc = QCOM_SCM_SVC_UTIL, .cmd = QCOM_SCM_UTIL_GET_SEC_DUMP_STATE, .owner = ARM_SMCCC_OWNER_SIP }; ret = qcom_scm_call(dev, &desc); if (dump_state) *dump_state = desc.res[0]; return ret; } int __qcom_scm_io_readl(struct device *dev, phys_addr_t addr, unsigned int *val) { Loading Loading @@ -972,6 +989,25 @@ int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr, u32 size, return ret; } int __qcom_scm_mem_protect_region_id(struct device *dev, phys_addr_t paddr, size_t size) { int ret; struct qcom_scm_desc desc = { .svc = QCOM_SCM_SVC_MP, .cmd = QCOM_SCM_MP_MEM_PROTECT_REGION_ID, .owner = ARM_SMCCC_OWNER_SIP }; desc.args[0] = paddr; desc.args[1] = size; desc.arginfo = QCOM_SCM_ARGS(2); ret = qcom_scm_call(dev, &desc); return ret; } int __qcom_scm_iommu_secure_map(struct device *dev, phys_addr_t sg_list_addr, size_t num_sg, size_t sg_block_size, u64 sec_id, int cbndx, unsigned long iova, size_t total_len) Loading
drivers/firmware/qcom_scm.c +13 −0 Original line number Diff line number Diff line Loading @@ -322,6 +322,13 @@ static const struct reset_control_ops qcom_scm_pas_reset_ops = { .deassert = qcom_scm_pas_reset_deassert, }; int qcom_scm_get_sec_dump_state(u32 *dump_state) { return __qcom_scm_get_sec_dump_state(__scm->dev, dump_state); } EXPORT_SYMBOL(qcom_scm_get_sec_dump_state); int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val) { return __qcom_scm_io_readl(__scm->dev, addr, val); Loading Loading @@ -365,6 +372,12 @@ int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare) } EXPORT_SYMBOL(qcom_scm_iommu_secure_ptbl_init); int qcom_scm_mem_protect_region_id(phys_addr_t paddr, size_t size) { return __qcom_scm_mem_protect_region_id(__scm->dev, paddr, size); } EXPORT_SYMBOL(qcom_scm_mem_protect_region_id); int qcom_scm_iommu_secure_map(phys_addr_t sg_list_addr, size_t num_sg, size_t sg_block_size, u64 sec_id, int cbndx, unsigned long iova, size_t total_len) Loading
drivers/firmware/qcom_scm.h +7 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,10 @@ extern int __qcom_scm_pas_auth_and_reset(struct device *dev, u32 peripheral); extern int __qcom_scm_pas_shutdown(struct device *dev, u32 peripheral); extern int __qcom_scm_pas_mss_reset(struct device *dev, bool reset); #define QCOM_SCM_SVC_UTIL 0x03 #define QCOM_SCM_UTIL_GET_SEC_DUMP_STATE 0x10 extern int __qcom_scm_get_sec_dump_state(struct device *dev, u32 *dump_state); #define QCOM_SCM_SVC_IO 0x05 #define QCOM_SCM_IO_READ 0x01 #define QCOM_SCM_IO_WRITE 0x02 Loading @@ -60,6 +64,7 @@ extern void __qcom_scm_mmu_sync(struct device *dev, bool sync); #define QCOM_SCM_MP_RESTORE_SEC_CFG 0x02 #define QCOM_SCM_MP_IOMMU_SECURE_PTBL_SIZE 0x03 #define QCOM_SCM_MP_IOMMU_SECURE_PTBL_INIT 0x04 #define QCOM_SCM_MP_MEM_PROTECT_REGION_ID 0x10 #define QCOM_SCM_MP_IOMMU_SECURE_MAP2_FLAT 0x12 #define QCOM_SCM_MP_IOMMU_SECURE_UNMAP2_FLAT 0x13 #define QCOM_SCM_MP_ASSIGN 0x16 Loading @@ -69,6 +74,8 @@ extern int __qcom_scm_iommu_secure_ptbl_size(struct device *dev, u32 spare, size_t *size); extern int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr, u32 size, u32 spare); extern int __qcom_scm_mem_protect_region_id(struct device *dev, phys_addr_t paddr, size_t size); extern int __qcom_scm_iommu_secure_map(struct device *dev, phys_addr_t sg_list_addr, size_t num_sg, size_t sg_block_size, u64 sec_id, int cbndx, Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +15 −23 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ #include <linux/pci.h> #include <soc/qcom/subsystem_restart.h> #include <linux/soc/qcom/smem.h> #include <soc/qcom/scm.h> #include <linux/qcom_scm.h> #include <asm/cacheflush.h> #include <linux/soc/qcom/smem_state.h> #include <linux/of_irq.h> Loading Loading @@ -91,7 +91,6 @@ struct ipa_ioc_nat_ipv6ct_table_alloc32 { #endif /* #ifdef CONFIG_COMPAT */ #define IPA_TZ_UNLOCK_ATTRIBUTE 0x0C0311 #define TZ_MEM_PROTECT_REGION_ID 0x10 struct tz_smmu_ipa_protect_region_iovec_s { u64 input_addr; Loading Loading @@ -6272,10 +6271,10 @@ static ssize_t ipa3_write(struct file *file, const char __user *buf, */ int ipa3_tz_unlock_reg(struct ipa_tz_unlock_reg_info *reg_info, u16 num_regs) { int i, size, ret; int i, ret; compat_size_t size; struct tz_smmu_ipa_protect_region_iovec_s *ipa_tz_unlock_vec; struct tz_smmu_ipa_protect_region_s cmd_buf; struct scm_desc desc = {0}; if (reg_info == NULL || num_regs == 0) { IPAERR("Bad parameters\n"); Loading @@ -6300,11 +6299,9 @@ int ipa3_tz_unlock_reg(struct ipa_tz_unlock_reg_info *reg_info, u16 num_regs) cmd_buf.iovec_buf = virt_to_phys((void *)ipa_tz_unlock_vec); cmd_buf.size_bytes = size; desc.args[0] = virt_to_phys((void *)ipa_tz_unlock_vec); desc.args[1] = size; desc.arginfo = SCM_ARGS(2); ret = scm_call2(SCM_SIP_FNID(SCM_SVC_MP, TZ_MEM_PROTECT_REGION_ID), &desc); ret = qcom_scm_mem_protect_region_id( virt_to_phys((void *)ipa_tz_unlock_vec), size); if (ret) { IPAERR("scm call SCM_SVC_MP failed: %d\n", ret); Loading Loading @@ -6368,24 +6365,19 @@ static int ipa3_alloc_pkt_init(void) * Returns true in secure dump allowed. * Return false when secure dump not allowed. */ #define TZ_UTIL_GET_SEC_DUMP_STATE 0x10 static bool ipa_is_mem_dump_allowed(void) { struct scm_desc desc = {0}; int ret = 0; int ret; u32 dump_state; desc.args[0] = 0; desc.arginfo = 0; ret = qcom_scm_get_sec_dump_state(&dump_state); ret = scm_call2( SCM_SIP_FNID(SCM_SVC_UTIL, TZ_UTIL_GET_SEC_DUMP_STATE), &desc); if (ret) { IPAERR("SCM DUMP_STATE call failed\n"); return false; } return (desc.ret[0] == 1); return (dump_state == 1); } static int ipa3_lan_poll(struct napi_struct *napi, int budget) Loading
drivers/platform/msm/ipa/ipa_v3/ipa_i.h +0 −1 Original line number Diff line number Diff line Loading @@ -426,7 +426,6 @@ enum { #endif /* #ifdef CONFIG_COMPAT */ #define IPA_TZ_UNLOCK_ATTRIBUTE 0x0C0311 #define TZ_MEM_PROTECT_REGION_ID 0x10 #define MBOX_TOUT_MS 100 Loading