Loading arch/arm/configs/vendor/sdxlemur.config +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ CONFIG_IOMMU_DYNAMIC_DOMAINS=y CONFIG_IOMMU_IO_PGTABLE_FAST=y CONFIG_QCOM_IOMMU_IO_PGTABLE_QUIRKS=y CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON=y CONFIG_QTI_IOMMU_SUPPORT=y CONFIG_QCOM_SCM=y CONFIG_QCOM_SECURE_BUFFER=y Loading arch/arm64/configs/vendor/holi_QGKI.config +1 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ CONFIG_QCOM_IOMMU_IO_PGTABLE_QUIRKS=y CONFIG_QCOM_LAZY_MAPPING=y CONFIG_DEBUG_FS=y CONFIG_IOMMU_DYNAMIC_DOMAINS=y CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON=y CONFIG_QCOM_SECURE_BUFFER=y # CONFIG_ZONE_DMA32 is not set CONFIG_EDAC_KRYO_ARM64=y Loading arch/arm64/configs/vendor/lahaina_QGKI.config +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ CONFIG_STM_PROTO_BASIC=y CONFIG_ION_MSM_HEAPS=y CONFIG_IOMMU_IO_PGTABLE_FAST=y CONFIG_IOMMU_DYNAMIC_DOMAINS=y CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON=y # CONFIG_IOMMU_IO_PGTABLE_FAST_SELFTEST is not set # CONFIG_IOMMU_IO_PGTABLE_FAST_PROVE_TLB is not set # CONFIG_SOFTLOCKUP_DETECTOR is not set Loading drivers/iommu/Kconfig +10 −0 Original line number Diff line number Diff line Loading @@ -538,6 +538,16 @@ config ARM_SMMU_TESTBUS_DEBUGFS on an SMMU. This also exposes debugfs nodes to read testbus output after the output has been selected. config ARM_SMMU_SKIP_MAP_POWER_ON bool "Skip power on in map/map_sg path" depends on ARM_SMMU && QGKI help Support for skipping domain power on in arm_smmu_map/map_sg path. This is required to be enabled if no tlb flush needs to be performed in map/map_sg path. If unsure, say N here. config ARM_SMMU_V3 tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support" depends on ARM64 Loading drivers/iommu/arm-smmu.c +19 −0 Original line number Diff line number Diff line Loading @@ -3149,6 +3149,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova, return PTR_ERR(ops); else if (!ops) return -EINVAL; if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) { ret = arm_smmu_domain_power_on(domain, smmu_domain->smmu); if (ret) return ret; } iova = arm_smmu_mask_iova(smmu_domain, iova); arm_smmu_secure_domain_lock(smmu_domain); arm_smmu_rpm_get(smmu); Loading @@ -3174,6 +3181,9 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova, } if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) arm_smmu_domain_power_off(domain, smmu_domain->smmu); arm_smmu_assign_table(smmu_domain); arm_smmu_secure_domain_unlock(smmu_domain); Loading Loading @@ -3300,6 +3310,12 @@ static size_t arm_smmu_map_sg(struct iommu_domain *domain, unsigned long iova, return 0; iova = arm_smmu_mask_iova(smmu_domain, iova); if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) { ret = arm_smmu_domain_power_on(domain, smmu_domain->smmu); if (ret) return ret; } arm_smmu_secure_domain_lock(smmu_domain); __saved_iova_start = iova; Loading Loading @@ -3357,6 +3373,9 @@ static size_t arm_smmu_map_sg(struct iommu_domain *domain, unsigned long iova, } out: if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) arm_smmu_domain_power_off(domain, smmu_domain->smmu); arm_smmu_assign_table(smmu_domain); arm_smmu_secure_domain_unlock(smmu_domain); Loading Loading
arch/arm/configs/vendor/sdxlemur.config +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ CONFIG_IOMMU_DYNAMIC_DOMAINS=y CONFIG_IOMMU_IO_PGTABLE_FAST=y CONFIG_QCOM_IOMMU_IO_PGTABLE_QUIRKS=y CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON=y CONFIG_QTI_IOMMU_SUPPORT=y CONFIG_QCOM_SCM=y CONFIG_QCOM_SECURE_BUFFER=y Loading
arch/arm64/configs/vendor/holi_QGKI.config +1 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ CONFIG_QCOM_IOMMU_IO_PGTABLE_QUIRKS=y CONFIG_QCOM_LAZY_MAPPING=y CONFIG_DEBUG_FS=y CONFIG_IOMMU_DYNAMIC_DOMAINS=y CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON=y CONFIG_QCOM_SECURE_BUFFER=y # CONFIG_ZONE_DMA32 is not set CONFIG_EDAC_KRYO_ARM64=y Loading
arch/arm64/configs/vendor/lahaina_QGKI.config +1 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ CONFIG_STM_PROTO_BASIC=y CONFIG_ION_MSM_HEAPS=y CONFIG_IOMMU_IO_PGTABLE_FAST=y CONFIG_IOMMU_DYNAMIC_DOMAINS=y CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON=y # CONFIG_IOMMU_IO_PGTABLE_FAST_SELFTEST is not set # CONFIG_IOMMU_IO_PGTABLE_FAST_PROVE_TLB is not set # CONFIG_SOFTLOCKUP_DETECTOR is not set Loading
drivers/iommu/Kconfig +10 −0 Original line number Diff line number Diff line Loading @@ -538,6 +538,16 @@ config ARM_SMMU_TESTBUS_DEBUGFS on an SMMU. This also exposes debugfs nodes to read testbus output after the output has been selected. config ARM_SMMU_SKIP_MAP_POWER_ON bool "Skip power on in map/map_sg path" depends on ARM_SMMU && QGKI help Support for skipping domain power on in arm_smmu_map/map_sg path. This is required to be enabled if no tlb flush needs to be performed in map/map_sg path. If unsure, say N here. config ARM_SMMU_V3 tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support" depends on ARM64 Loading
drivers/iommu/arm-smmu.c +19 −0 Original line number Diff line number Diff line Loading @@ -3149,6 +3149,13 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova, return PTR_ERR(ops); else if (!ops) return -EINVAL; if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) { ret = arm_smmu_domain_power_on(domain, smmu_domain->smmu); if (ret) return ret; } iova = arm_smmu_mask_iova(smmu_domain, iova); arm_smmu_secure_domain_lock(smmu_domain); arm_smmu_rpm_get(smmu); Loading @@ -3174,6 +3181,9 @@ static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova, } if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) arm_smmu_domain_power_off(domain, smmu_domain->smmu); arm_smmu_assign_table(smmu_domain); arm_smmu_secure_domain_unlock(smmu_domain); Loading Loading @@ -3300,6 +3310,12 @@ static size_t arm_smmu_map_sg(struct iommu_domain *domain, unsigned long iova, return 0; iova = arm_smmu_mask_iova(smmu_domain, iova); if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) { ret = arm_smmu_domain_power_on(domain, smmu_domain->smmu); if (ret) return ret; } arm_smmu_secure_domain_lock(smmu_domain); __saved_iova_start = iova; Loading Loading @@ -3357,6 +3373,9 @@ static size_t arm_smmu_map_sg(struct iommu_domain *domain, unsigned long iova, } out: if (!IS_ENABLED(CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON)) arm_smmu_domain_power_off(domain, smmu_domain->smmu); arm_smmu_assign_table(smmu_domain); arm_smmu_secure_domain_unlock(smmu_domain); Loading