Merge "arm-smmu: Add clock and regulator vote in qcom io page table sync path"

This commit is contained in:
qctecmdr
2022-03-07 08:12:39 -08:00
committed by Gerrit - the friendly Code Review server
2 changed files with 11 additions and 0 deletions

View File

@@ -1459,7 +1459,9 @@ static void arm_smmu_qcom_tlb_sync(void *cookie)
{
struct arm_smmu_domain *smmu_domain = cookie;
arm_smmu_rpm_get(smmu_domain->smmu);
__arm_smmu_flush_iotlb_all(&smmu_domain->domain, false);
arm_smmu_rpm_put(smmu_domain->smmu);
}
static const struct qcom_iommu_pgtable_ops arm_smmu_pgtable_ops = {

View File

@@ -385,9 +385,18 @@ static arm_lpae_iopte arm_lpae_install_table(arm_lpae_iopte *table,
struct arm_lpae_io_pgtable *data)
{
arm_lpae_iopte old, new;
unsigned long flags = 0;
/*
* Drop the lock for TLB SYNC operation in order to
* enable clock & regulator through rpm hooks and
* resoter after it.
*/
spin_unlock_irqrestore(&data->lock, flags);
/* Due to tlb maintenance in unmap being deferred */
qcom_io_pgtable_tlb_sync(data->iommu_pgtbl_ops, data->iop.cookie);
spin_lock_irqsave(&data->lock, flags);
new = __pa(table) | ARM_LPAE_PTE_TYPE_TABLE;
if (cfg->quirks & IO_PGTABLE_QUIRK_ARM_NS)