On Mon, 2021-11-22 at 12:44 +0200, Dafna Hirschfeld wrote: > From: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> > > In case of v4l2_reqbufs() it is possible, that a TLB flush is done > without runtime PM being enabled. In that case the "Partial TLB flush > timed out, falling back to full flush" warning is printed. > > Commit c0b57581b73b ("iommu/mediatek: Add power-domain operation") > introduced has_pm as optimization to avoid checking runtime PM > when there is no power domain attached. But without the PM domain > there is still the device driver's runtime PM suspend handler, which > disables the clock. Thus flushing should also be avoided when there > is no PM domain involved. > > Signed-off-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> > Reviewed-by: Dafna Hirschfeld <dafna.hirschfeld@xxxxxxxxxxxxx> Reviewed-by: Yong Wu <yong.wu@xxxxxxxxxxxx> > --- > drivers/iommu/mtk_iommu.c | 10 +++------- > 1 file changed, 3 insertions(+), 7 deletions(-) > > diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c > index 28dc4b95b6d9..b0535fcfd1d7 100644 > --- a/drivers/iommu/mtk_iommu.c > +++ b/drivers/iommu/mtk_iommu.c > @@ -227,16 +227,13 @@ static void > mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, > size_t granule, > struct mtk_iommu_data *data) > { > - bool has_pm = !!data->dev->pm_domain; > unsigned long flags; > int ret; > u32 tmp; > > for_each_m4u(data) { > - if (has_pm) { > - if (pm_runtime_get_if_in_use(data->dev) <= 0) > - continue; > - } > + if (pm_runtime_get_if_in_use(data->dev) <= 0) > + continue; > > spin_lock_irqsave(&data->tlb_lock, flags); > writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0, > @@ -261,8 +258,7 @@ static void > mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size, > writel_relaxed(0, data->base + REG_MMU_CPE_DONE); > spin_unlock_irqrestore(&data->tlb_lock, flags); > > - if (has_pm) > - pm_runtime_put(data->dev); > + pm_runtime_put(data->dev); > } > } >