mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 12:25:00 -04:00
Revert "iommu/arm-smmu: Leave power resources enabled across unmap and sync ops"
This reverts commit fc6d479bac4c756359388647d45f39f08d0c8534. The functionality offered by this change was not implemented correctly, so revert it in favor of a different way of addressing the issue that was supposed to be fixed. Change-Id: Id061372026dea2960758c4dad0a5e37c2604576e Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
This commit is contained in:
parent
8543fd31f2
commit
be81ead736
5 changed files with 0 additions and 36 deletions
1
arch/arm/configs/vendor/sdxlemur.config
vendored
1
arch/arm/configs/vendor/sdxlemur.config
vendored
|
|
@ -22,7 +22,6 @@ 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_ARM_SMMU_POWER_OFF_AFTER_UNMAP=y
|
||||
CONFIG_QTI_IOMMU_SUPPORT=y
|
||||
CONFIG_QCOM_SCM=y
|
||||
CONFIG_QCOM_SECURE_BUFFER=y
|
||||
|
|
|
|||
1
arch/arm64/configs/vendor/holi_QGKI.config
vendored
1
arch/arm64/configs/vendor/holi_QGKI.config
vendored
|
|
@ -5,7 +5,6 @@ CONFIG_QCOM_LAZY_MAPPING=y
|
|||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_IOMMU_DYNAMIC_DOMAINS=y
|
||||
CONFIG_ARM_SMMU_SKIP_MAP_POWER_ON=y
|
||||
CONFIG_ARM_SMMU_POWER_OFF_AFTER_UNMAP=y
|
||||
CONFIG_QCOM_SECURE_BUFFER=y
|
||||
# CONFIG_ZONE_DMA32 is not set
|
||||
CONFIG_EDAC_KRYO_ARM64=y
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ 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_ARM_SMMU_POWER_OFF_AFTER_UNMAP=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
|
||||
|
|
|
|||
|
|
@ -548,15 +548,6 @@ config ARM_SMMU_SKIP_MAP_POWER_ON
|
|||
|
||||
If unsure, say N here.
|
||||
|
||||
config ARM_SMMU_POWER_OFF_AFTER_UNMAP
|
||||
bool "Remove power votes after unmapping memory"
|
||||
depends on ARM_SMMU && QGKI
|
||||
help
|
||||
Support for ensuring that votes for power resources are removed
|
||||
after memory is unmapped. This should be enabled when it is guaranteed
|
||||
that there are no outstanding TLB invalidations after the memory
|
||||
has been unmapped from the IOMMU page tables.
|
||||
|
||||
config ARM_SMMU_V3
|
||||
tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
|
||||
depends on ARM64
|
||||
|
|
|
|||
|
|
@ -3257,25 +3257,9 @@ static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova,
|
|||
spin_lock_irqsave(&smmu_domain->cb_lock, flags);
|
||||
ret = ops->unmap(ops, iova, size, gather);
|
||||
spin_unlock_irqrestore(&smmu_domain->cb_lock, flags);
|
||||
/*
|
||||
* The votes for power resources can only be removed if there are no
|
||||
* outstanding TLB invalidation operations. This is true when the
|
||||
* downstream io-pgtable-arm optimizations are in use, as the code that
|
||||
* unmaps the memory from the IOMMU page tables ensures that all TLB
|
||||
* operations are complete before returning.
|
||||
*
|
||||
* However, the upstream io-pgtable-arm implementation allows for a TLB
|
||||
* invalidation to be in progress when control is returned back here,
|
||||
* and the votes for the power resources will be removed, which has been
|
||||
* observed to cause problems where unmapping buffers takes a long time.
|
||||
* For those scenarios, leave the votes for power resources in place,
|
||||
* and rely on the subsequent sync operation to remove the votes.
|
||||
*/
|
||||
#ifdef CONFIG_ARM_SMMU_POWER_OFF_AFTER_UNMAP
|
||||
arm_smmu_rpm_put(smmu);
|
||||
|
||||
arm_smmu_domain_power_off(domain, smmu_domain->smmu);
|
||||
#endif
|
||||
/*
|
||||
* While splitting up block mappings, we might allocate page table
|
||||
* memory during unmap, so the vmids needs to be assigned to the
|
||||
|
|
@ -3313,20 +3297,12 @@ static void arm_smmu_iotlb_sync(struct iommu_domain *domain,
|
|||
struct arm_smmu_device *smmu = smmu_domain->smmu;
|
||||
|
||||
if (smmu_domain->flush_ops) {
|
||||
/*
|
||||
* Voting for power resources when
|
||||
* CONFIG_ARM_SMMU_POWER_OFF_AFTER_UNMAP is enabled, is required
|
||||
* as the unmap call has removed the votes for the power
|
||||
* resources.
|
||||
*/
|
||||
#ifdef CONFIG_ARM_SMMU_POWER_OFF_AFTER_UNMAP
|
||||
arm_smmu_rpm_get(smmu);
|
||||
if (arm_smmu_domain_power_on(domain, smmu)) {
|
||||
WARN_ON(1);
|
||||
arm_smmu_rpm_put(smmu);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
smmu_domain->flush_ops->tlb_sync(smmu_domain);
|
||||
arm_smmu_domain_power_off(domain, smmu);
|
||||
arm_smmu_rpm_put(smmu);
|
||||
|
|
|
|||
Loading…
Reference in a new issue