All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vivek Gautam <vivek.gautam@codeaurora.org>
To: robin.murphy@arm.com, robdclark@gmail.com
Cc: will.deacon@arm.com, stanimir.varbanov@linaro.org,
	sboyd@codeaurora.org, sricharan@codeaurora.org,
	iommu@lists.linux-foundation.org, linux-arm-msm@vger.kernel.org,
	Vivek Gautam <vivek.gautam@codeaurora.org>
Subject: [PATCH v2 1/1] iommu/arm-smmu: Defer TLB flush in case of unmap op
Date: Wed,  6 Sep 2017 11:07:35 +0530	[thread overview]
Message-ID: <1504676255-15980-1-git-send-email-vivek.gautam@codeaurora.org> (raw)
In-Reply-To: <CAFp+6iF=6W_X7Aq=Z4T+HuQT2x4sO+L3wCHuCOu8tQqK2QeTkQ@mail.gmail.com>

We don't want to touch the TLB when smmu is suspended, so
defer the TLB maintenance until smmu is resumed.
On resume, we issue arm_smmu_device_reset() to restore the
configuration and flush the TLBs.

Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
---

Hi Robin,

This patch comes after the discussion[1] we had about defering the
physical TLB maintenance for an unmap request if the SMMU is
suspended. Sorry for the delay in sending the updated version
of the patch.

As discussed, this patch now checks the PM state of smmu in
.tlb_add_flush and .tlb_sync page-table ops and return if smmu
is suspended. On resume without assuming that the TLBs state is
preserved, we issue a arm_smmu_device_reset() which is the safest
thing to do.

Alternatively, without going into the TLB defer thing, we can simply
avoid calling pm_runtime_get/put() in case of atomic context, as we
discussed in the other thread[3]. This will look something like this:

      static size_t arm_smmu_unmap(struct iommu_domain *domain, ....)
      {
      <snip>

     -       return ops->unmap(ops, iova, size);
     +       if (!in_atomic())
     +              pm_runtime_get_sync(smmu_domain->smmu->dev);
     +       ret = ops->unmap(ops, iova, size);
     +       if (!in_atomic())
     +              pm_runtime_put_sync(smmu_domain->smmu->dev);
     +
     +       return ret;
      }

Let me know which approach should work.

One other concern that we were discussing was of distributed SMMU
configuration.
"Say the GPU and its local TBU are in the same clock domain - if the GPU has
just gone idle and we've clock-gated it, but "the SMMU" (i.e. the TCU)
is still active servicing other devices, we will assume we can happily
unmap GPU buffers and issue TLBIs, but what happens with entries held in
the unclocked TBU's micro-TLB?"

In such scenerio, when master is clock gated and TCU is still running:
 -> If TCU and TBU are in same clock/power domain, then we can still
    issue TLBIs as long as the smmu is clocked.
 -> If TCU and TBU are in separate clock/power domains, then we better
    check the power state for TBUs and defer TLB maintenance if TBUs are
    clock gated.
    In such scenerio will it make sense to represent a distributed smmu
    as TCU device with multiple TBU child devices?

This patch is based on the pm runtime series for arm-smmu[2], the next
version of which I will post after we conclude this discussion.

[1] https://patchwork.kernel.org/patch/9876489/
[2] https://lkml.org/lkml/2017/7/6/230
[3] https://lkml.org/lkml/2017/8/7/386

 drivers/iommu/arm-smmu.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 8384d5fad388..c6d904733166 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -439,6 +439,10 @@ static void arm_smmu_tlb_sync_context(void *cookie)
 	void __iomem *base = ARM_SMMU_CB(smmu, smmu_domain->cfg.cbndx);
 	unsigned long flags;
 
+	/* smmu suspended? we can't perform TLB operations */
+	if (pm_runtime_suspended(smmu->dev))
+		return;
+
 	spin_lock_irqsave(&smmu_domain->cb_lock, flags);
 	__arm_smmu_tlb_sync(smmu, base + ARM_SMMU_CB_TLBSYNC,
 			    base + ARM_SMMU_CB_TLBSTATUS);
@@ -449,6 +453,9 @@ static void arm_smmu_tlb_sync_vmid(void *cookie)
 {
 	struct arm_smmu_domain *smmu_domain = cookie;
 
+	if (pm_runtime_suspended(smmu_domain->smmu->dev))
+		return;
+
 	arm_smmu_tlb_sync_global(smmu_domain->smmu);
 }
 
@@ -458,6 +465,9 @@ static void arm_smmu_tlb_inv_context_s1(void *cookie)
 	struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
 	void __iomem *base = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
 
+	if (pm_runtime_suspended(smmu_domain->smmu->dev))
+		return;
+
 	writel_relaxed(cfg->asid, base + ARM_SMMU_CB_S1_TLBIASID);
 	arm_smmu_tlb_sync_context(cookie);
 }
@@ -468,6 +478,9 @@ static void arm_smmu_tlb_inv_context_s2(void *cookie)
 	struct arm_smmu_device *smmu = smmu_domain->smmu;
 	void __iomem *base = ARM_SMMU_GR0(smmu);
 
+	if (pm_runtime_suspended(smmu_domain->smmu->dev))
+		return;
+
 	writel_relaxed(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
 	arm_smmu_tlb_sync_global(smmu);
 }
@@ -480,6 +493,9 @@ static void arm_smmu_tlb_inv_range_nosync(unsigned long iova, size_t size,
 	bool stage1 = cfg->cbar != CBAR_TYPE_S2_TRANS;
 	void __iomem *reg = ARM_SMMU_CB(smmu_domain->smmu, cfg->cbndx);
 
+	if (pm_runtime_suspended(smmu_domain->smmu->dev))
+		return;
+
 	if (stage1) {
 		reg += leaf ? ARM_SMMU_CB_S1_TLBIVAL : ARM_SMMU_CB_S1_TLBIVA;
 
@@ -521,6 +537,9 @@ static void arm_smmu_tlb_inv_vmid_nosync(unsigned long iova, size_t size,
 	struct arm_smmu_domain *smmu_domain = cookie;
 	void __iomem *base = ARM_SMMU_GR0(smmu_domain->smmu);
 
+	if (pm_runtime_suspended(smmu_domain->smmu->dev))
+		return;
+
 	writel_relaxed(smmu_domain->cfg.vmid, base + ARM_SMMU_GR0_TLBIVMID);
 }
 
@@ -2299,8 +2318,13 @@ static int __maybe_unused arm_smmu_pm_resume(struct device *dev)
 static int __maybe_unused arm_smmu_resume(struct device *dev)
 {
 	struct arm_smmu_device *smmu = dev_get_drvdata(dev);
+	int ret;
+
+	ret = clk_bulk_prepare_enable(smmu->num_clks, smmu->clocks);
+	if (ret)
+		return ret;
 
-	return clk_bulk_prepare_enable(smmu->num_clks, smmu->clocks);
+	return arm_smmu_device_reset(smmu);
 }
 
 static int __maybe_unused arm_smmu_suspend(struct device *dev)
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

  reply	other threads:[~2017-09-06  5:37 UTC|newest]

Thread overview: 168+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-06  9:36 [PATCH V4 0/6] iommu/arm-smmu: Add runtime pm/sleep support Vivek Gautam
2017-07-06  9:36 ` Vivek Gautam
2017-07-06  9:37 ` [PATCH V4 1/6] iommu/arm-smmu: Fix the error path in arm_smmu_add_device Vivek Gautam
2017-07-06  9:37   ` Vivek Gautam
2017-07-06  9:37 ` [PATCH V4 2/6] iommu/arm-smmu: Add pm_runtime/sleep ops Vivek Gautam
2017-07-06  9:37   ` Vivek Gautam
2017-07-06  9:37   ` Vivek Gautam
     [not found]   ` <1499333825-7658-3-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-12 22:58     ` Stephen Boyd
2017-07-12 22:58       ` Stephen Boyd
2017-07-12 22:58       ` Stephen Boyd
     [not found]       ` <20170712225821.GB22780-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-12 23:01         ` Stephen Boyd
2017-07-12 23:01           ` Stephen Boyd
2017-07-12 23:01           ` Stephen Boyd
2017-07-13  3:57           ` Vivek Gautam
2017-07-13  3:57             ` Vivek Gautam
2017-07-06  9:37 ` [PATCH V4 3/6] iommu/arm-smmu: Invoke pm_runtime during probe, add/remove device Vivek Gautam
2017-07-06  9:37   ` Vivek Gautam
     [not found]   ` <1499333825-7658-4-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-12 22:54     ` Stephen Boyd
2017-07-12 22:54       ` Stephen Boyd
2017-07-12 22:54       ` Stephen Boyd
     [not found]       ` <20170712225459.GZ22780-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-13  5:13         ` Vivek Gautam
2017-07-13  5:13           ` Vivek Gautam
2017-07-13  5:13           ` Vivek Gautam
     [not found]           ` <5ee0bacd-e557-a6c4-a897-844fb12ea6ae-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-13  5:35             ` Sricharan R
2017-07-13  5:35               ` Sricharan R
2017-07-13  5:35               ` Sricharan R
     [not found]               ` <4dbc938c-ac88-9bd4-cf00-458008ae24c1-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-13 11:50                 ` Rob Clark
2017-07-13 11:50                   ` Rob Clark
2017-07-13 11:50                   ` Rob Clark
2017-07-13 11:50                   ` Rob Clark
     [not found]                   ` <CAF6AEGsFOtsOjt1sLNPSFLEcu-7d1zxCOhTeC+P8e0TDbb1dSA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-13 12:02                     ` Marek Szyprowski
2017-07-13 12:02                       ` Marek Szyprowski
2017-07-13 12:02                       ` Marek Szyprowski
2017-07-13 12:02                       ` Marek Szyprowski
2017-07-13 12:10                       ` Rob Clark
2017-07-13 12:10                         ` Rob Clark
2017-07-13 12:10                         ` Rob Clark
     [not found]                         ` <CAF6AEGsfDewRUHLUbFKT1Q+8U2BkmFMHo4ZBSwSGspU3ktUY8g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-13 12:23                           ` Marek Szyprowski
2017-07-13 12:23                             ` Marek Szyprowski
2017-07-13 12:23                             ` Marek Szyprowski
2017-07-13 12:23                             ` Marek Szyprowski
2017-07-13 13:53                     ` Sricharan R
2017-07-13 13:53                       ` Sricharan R
2017-07-13 13:53                       ` Sricharan R
2017-07-13 13:53                       ` Sricharan R
     [not found]                       ` <60a56ae6-ed9d-57cd-130f-5bd9d32d4d58-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-13 14:55                         ` Rob Clark
2017-07-13 14:55                           ` Rob Clark
2017-07-13 14:55                           ` Rob Clark
2017-07-13 14:55                           ` Rob Clark
2017-07-14 17:07                           ` Will Deacon
2017-07-14 17:07                             ` Will Deacon
2017-07-14 17:07                             ` Will Deacon
2017-07-14 17:42                             ` Rob Clark
2017-07-14 17:42                               ` Rob Clark
2017-07-14 17:42                               ` Rob Clark
2017-07-14 18:06                               ` Will Deacon
2017-07-14 18:06                                 ` Will Deacon
2017-07-14 18:06                                 ` Will Deacon
2017-07-14 18:25                                 ` Rob Clark
2017-07-14 18:25                                   ` Rob Clark
2017-07-14 18:25                                   ` Rob Clark
2017-07-14 19:01                                   ` Will Deacon
2017-07-14 19:01                                     ` Will Deacon
2017-07-14 19:01                                     ` Will Deacon
     [not found]                                     ` <20170714190113.GE26488-5wv7dgnIgG8@public.gmane.org>
2017-07-14 19:34                                       ` Rob Clark
2017-07-14 19:34                                         ` Rob Clark
2017-07-14 19:34                                         ` Rob Clark
2017-07-14 19:34                                         ` Rob Clark
2017-07-14 19:36                                         ` Will Deacon
2017-07-14 19:36                                           ` Will Deacon
2017-07-14 19:36                                           ` Will Deacon
2017-07-14 19:39                                           ` Rob Clark
2017-07-14 19:39                                             ` Rob Clark
2017-07-14 19:39                                             ` Rob Clark
2017-07-17 11:46                                             ` Sricharan R
2017-07-17 11:46                                               ` Sricharan R
2017-07-17 11:46                                               ` Sricharan R
     [not found]                                               ` <6cd287bb-25c0-a7bd-8d3c-a63b9da0fd25-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-17 12:28                                                 ` Sricharan R
2017-07-17 12:28                                                   ` Sricharan R
2017-07-17 12:28                                                   ` Sricharan R
2017-07-17 12:28                                                   ` Sricharan R
2017-07-24 15:31                                                   ` Vivek Gautam
2017-07-24 15:31                                                     ` Vivek Gautam
2017-07-24 15:31                                                     ` Vivek Gautam
     [not found]                                                     ` <CAFp+6iFfu2-qrDDim7fzKKLqMcSVMmOr7esqBZ-xEeLTOOTNLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-02  9:53                                                       ` [PATCH] iommu/arm-smmu: Defer TLB flush in case of unmap op Vivek Gautam
2017-08-02  9:53                                                         ` Vivek Gautam
2017-08-02  9:53                                                         ` Vivek Gautam
2017-08-02 12:17                                                         ` Robin Murphy
2017-08-02 12:17                                                           ` Robin Murphy
     [not found]                                                           ` <35aeb7dd-4fe6-3175-2252-41c3c54873a9-5wv7dgnIgG8@public.gmane.org>
2017-08-03  5:35                                                             ` Vivek Gautam
2017-08-03  5:35                                                               ` Vivek Gautam
2017-08-03  5:35                                                               ` Vivek Gautam
2017-08-04 17:04                                                               ` Robin Murphy
2017-08-04 17:04                                                                 ` Robin Murphy
2017-08-07  7:44                                                                 ` Vivek Gautam
2017-08-07  7:44                                                                   ` Vivek Gautam
2017-08-07  7:44                                                                   ` Vivek Gautam
2017-09-06  5:37                                                                   ` Vivek Gautam [this message]
     [not found]                                                                     ` <1504676255-15980-1-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-09-13 11:04                                                                       ` [PATCH v2 1/1] " Vivek Gautam
2017-10-13 19:08                                                                     ` Will Deacon
2017-11-20 17:17                                                                       ` Vivek Gautam
2017-08-07  8:27                     ` [PATCH V4 3/6] iommu/arm-smmu: Invoke pm_runtime during probe, add/remove device Vivek Gautam
2017-08-07  8:27                       ` Vivek Gautam
2017-08-07  8:27                       ` Vivek Gautam
2017-08-07  8:27                       ` Vivek Gautam
2017-08-07 12:29                       ` Rob Clark
2017-08-07 12:29                         ` Rob Clark
2017-08-07 12:29                         ` Rob Clark
     [not found]                         ` <CAF6AEGsw2=nERuJ8UCBr_kTBS0TigaA9LL1Hxw3JmNiu4oycOA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-11-14 18:30                           ` Vivek Gautam
2017-11-14 18:30                             ` Vivek Gautam
2017-11-14 18:30                             ` Vivek Gautam
2017-11-14 18:30                             ` Vivek Gautam
     [not found]                             ` <CAFp+6iGyB-iVb+vyDr6Dzk1FG6baiNy_kZWjB3sm_GViDh6rnQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-11-27 22:22                               ` Stephen Boyd
2017-11-27 22:22                                 ` Stephen Boyd
2017-11-27 22:22                                 ` Stephen Boyd
2017-11-27 22:22                                 ` Stephen Boyd
     [not found]                                 ` <20171127222238.GF18379-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-11-27 23:43                                   ` Rob Clark
2017-11-27 23:43                                     ` Rob Clark
2017-11-27 23:43                                     ` Rob Clark
2017-11-27 23:43                                     ` Rob Clark
2017-11-28 13:43                                     ` Vivek Gautam
2017-11-28 13:43                                       ` Vivek Gautam
2017-11-28 13:43                                       ` Vivek Gautam
     [not found]                                       ` <3a2f74e9-90cf-d843-d801-15eb614d7abe-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-11-28 20:05                                         ` Rob Clark
2017-11-28 20:05                                           ` Rob Clark
2017-11-28 20:05                                           ` Rob Clark
2017-11-28 20:05                                           ` Rob Clark
2017-07-13 13:57                 ` Vivek Gautam
2017-07-13 13:57                   ` Vivek Gautam
2017-07-13 13:57                   ` Vivek Gautam
2017-07-13 13:57                   ` Vivek Gautam
     [not found]                   ` <CAFp+6iFdogDfKbwWta3AMGu2GuZ9NaR+Dv373N7LwwrF5cFYwQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-13 14:01                     ` Vivek Gautam
2017-07-13 14:01                       ` Vivek Gautam
2017-07-13 14:01                       ` Vivek Gautam
2017-07-13 14:01                       ` Vivek Gautam
2017-07-13  6:48             ` Stephen Boyd
2017-07-13  6:48               ` Stephen Boyd
2017-07-13  6:48               ` Stephen Boyd
2017-07-13  9:50               ` Robin Murphy
2017-07-13  9:50                 ` Robin Murphy
2017-07-13 11:53                 ` Rob Clark
2017-07-13 11:53                   ` Rob Clark
2017-07-13 11:53                   ` Rob Clark
2017-07-06  9:37 ` [PATCH V4 4/6] iommu/arm-smmu: Add the device_link between masters and smmu Vivek Gautam
2017-07-06  9:37   ` Vivek Gautam
     [not found]   ` <1499333825-7658-5-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-12 22:55     ` Stephen Boyd
2017-07-12 22:55       ` Stephen Boyd
2017-07-12 22:55       ` Stephen Boyd
     [not found]       ` <20170712225547.GA22780-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-13  3:59         ` Vivek Gautam
2017-07-13  3:59           ` Vivek Gautam
2017-07-13  3:59           ` Vivek Gautam
2017-07-06  9:37 ` [PATCH V4 5/6] iommu/arm-smmu: Add support for MMU40x/500 clocks Vivek Gautam
2017-07-06  9:37   ` Vivek Gautam
     [not found]   ` <1499333825-7658-6-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-10  3:37     ` Rob Herring
2017-07-10  3:37       ` Rob Herring
2017-07-10  3:37       ` Rob Herring
2017-07-11  5:18       ` Vivek Gautam
2017-07-11  5:18         ` Vivek Gautam
     [not found] ` <1499333825-7658-1-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-06  9:37   ` [PATCH V4 6/6] iommu/arm-smmu: Add support for qcom,msm8996-smmu-v2 clocks Vivek Gautam
2017-07-06  9:37     ` [PATCH V4 6/6] iommu/arm-smmu: Add support for qcom, msm8996-smmu-v2 clocks Vivek Gautam
2017-07-06  9:37     ` [PATCH V4 6/6] iommu/arm-smmu: Add support for qcom,msm8996-smmu-v2 clocks Vivek Gautam
     [not found]     ` <1499333825-7658-7-git-send-email-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-07-10  3:40       ` Rob Herring
2017-07-10  3:40         ` Rob Herring
2017-07-10  3:40         ` Rob Herring
2017-07-10  6:42         ` Vivek Gautam
2017-07-10  6:42           ` Vivek Gautam
2017-07-10  6:42           ` Vivek Gautam
2017-07-10  6:42           ` Vivek Gautam

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1504676255-15980-1-git-send-email-vivek.gautam@codeaurora.org \
    --to=vivek.gautam@codeaurora.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=robdclark@gmail.com \
    --cc=robin.murphy@arm.com \
    --cc=sboyd@codeaurora.org \
    --cc=sricharan@codeaurora.org \
    --cc=stanimir.varbanov@linaro.org \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.