From: Peng Fan <van.freenix-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>
Cc: will.deacon-5wv7dgnIgG8@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] iommu/arm-smmu: clear cache lock bit of ACR
Date: Tue, 3 May 2016 20:50:43 +0800 [thread overview]
Message-ID: <20160503125041.GA18127@linux-7smt.suse> (raw)
In-Reply-To: <57288868.9020908-5wv7dgnIgG8@public.gmane.org>
Hi Robin,
On Tue, May 03, 2016 at 12:15:52PM +0100, Robin Murphy wrote:
>On 03/05/16 11:15, Peng Fan wrote:
>>According MMU-500 TRM, section 3.7.1 Auxiliary Control registers,
>>You can modify ACTLR only when the ACR.CACHE_LOCK bit is 0.
>>
>>So before clearing ARM_MMU500_ACTLR_CPRE of each context bank,
>>need clear CACHE_LOCK bit of ACR register first.
>
>Ah, good catch - I think I misread CACHE_LOCK as resetting to 0, and
>proceeded to forget about it. However, it's only present in MMU-500r2
>onwards, so we'd also want to check IDR7 before touching ACR.
Thanks for comments. I'll add code to check IDR7 and send out V2.
Thanks,
Peng.
>
>Thanks,
>Robin.
>
>>Signed-off-by: Peng Fan <van.freenix-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
>>Cc: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
>>Cc: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>
>>---
>>
>>Hi Will,
>>
>> Patch based on iommu/devel branch.
>>
>>
>> drivers/iommu/arm-smmu.c | 15 +++++++++++++++
>> 1 file changed, 15 insertions(+)
>>
>>diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
>>index acff332..d094a5a 100644
>>--- a/drivers/iommu/arm-smmu.c
>>+++ b/drivers/iommu/arm-smmu.c
>>@@ -98,6 +98,9 @@
>> #define sCR0_BSU_SHIFT 14
>> #define sCR0_BSU_MASK 0x3
>>
>>+/* Auxiliary Configuration register */
>>+#define ARM_SMMU_GR0_sACR 0x10
>>+
>> /* Identification registers */
>> #define ARM_SMMU_GR0_ID0 0x20
>> #define ARM_SMMU_GR0_ID1 0x24
>>@@ -235,6 +238,8 @@
>>
>> #define ARM_MMU500_ACTLR_CPRE (1 << 1)
>>
>>+#define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
>>+
>> #define CB_PAR_F (1 << 0)
>>
>> #define ATSR_ACTIVE (1 << 0)
>>@@ -1506,6 +1511,16 @@ static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
>> writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_S2CR(i));
>> }
>>
>>+ /*
>>+ * Before clearing ARM_MMU500_ACTLR_CPRE, need to
>>+ * clear CACHE_LOCK bit of ACR first.
>>+ */
>>+ if (smmu->model == ARM_MMU500) {
>>+ reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
>>+ reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
>>+ writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
>>+ }
>>+
>> /* Make sure all context banks are disabled and clear CB_FSR */
>> for (i = 0; i < smmu->num_context_banks; ++i) {
>> cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, i);
>>
>
WARNING: multiple messages have this Message-ID (diff)
From: van.freenix@gmail.com (Peng Fan)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] iommu/arm-smmu: clear cache lock bit of ACR
Date: Tue, 3 May 2016 20:50:43 +0800 [thread overview]
Message-ID: <20160503125041.GA18127@linux-7smt.suse> (raw)
In-Reply-To: <57288868.9020908@arm.com>
Hi Robin,
On Tue, May 03, 2016 at 12:15:52PM +0100, Robin Murphy wrote:
>On 03/05/16 11:15, Peng Fan wrote:
>>According MMU-500 TRM, section 3.7.1 Auxiliary Control registers,
>>You can modify ACTLR only when the ACR.CACHE_LOCK bit is 0.
>>
>>So before clearing ARM_MMU500_ACTLR_CPRE of each context bank,
>>need clear CACHE_LOCK bit of ACR register first.
>
>Ah, good catch - I think I misread CACHE_LOCK as resetting to 0, and
>proceeded to forget about it. However, it's only present in MMU-500r2
>onwards, so we'd also want to check IDR7 before touching ACR.
Thanks for comments. I'll add code to check IDR7 and send out V2.
Thanks,
Peng.
>
>Thanks,
>Robin.
>
>>Signed-off-by: Peng Fan <van.freenix@gmail.com>
>>Cc: Will Deacon <will.deacon@arm.com>
>>Cc: Robin Murphy <robin.murphy@arm.com>
>>---
>>
>>Hi Will,
>>
>> Patch based on iommu/devel branch.
>>
>>
>> drivers/iommu/arm-smmu.c | 15 +++++++++++++++
>> 1 file changed, 15 insertions(+)
>>
>>diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
>>index acff332..d094a5a 100644
>>--- a/drivers/iommu/arm-smmu.c
>>+++ b/drivers/iommu/arm-smmu.c
>>@@ -98,6 +98,9 @@
>> #define sCR0_BSU_SHIFT 14
>> #define sCR0_BSU_MASK 0x3
>>
>>+/* Auxiliary Configuration register */
>>+#define ARM_SMMU_GR0_sACR 0x10
>>+
>> /* Identification registers */
>> #define ARM_SMMU_GR0_ID0 0x20
>> #define ARM_SMMU_GR0_ID1 0x24
>>@@ -235,6 +238,8 @@
>>
>> #define ARM_MMU500_ACTLR_CPRE (1 << 1)
>>
>>+#define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
>>+
>> #define CB_PAR_F (1 << 0)
>>
>> #define ATSR_ACTIVE (1 << 0)
>>@@ -1506,6 +1511,16 @@ static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
>> writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_S2CR(i));
>> }
>>
>>+ /*
>>+ * Before clearing ARM_MMU500_ACTLR_CPRE, need to
>>+ * clear CACHE_LOCK bit of ACR first.
>>+ */
>>+ if (smmu->model == ARM_MMU500) {
>>+ reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
>>+ reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
>>+ writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
>>+ }
>>+
>> /* Make sure all context banks are disabled and clear CB_FSR */
>> for (i = 0; i < smmu->num_context_banks; ++i) {
>> cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, i);
>>
>
WARNING: multiple messages have this Message-ID (diff)
From: Peng Fan <van.freenix@gmail.com>
To: Robin Murphy <robin.murphy@arm.com>
Cc: will.deacon@arm.com, joro@8bytes.org,
linux-arm-kernel@lists.infradead.org,
iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] iommu/arm-smmu: clear cache lock bit of ACR
Date: Tue, 3 May 2016 20:50:43 +0800 [thread overview]
Message-ID: <20160503125041.GA18127@linux-7smt.suse> (raw)
In-Reply-To: <57288868.9020908@arm.com>
Hi Robin,
On Tue, May 03, 2016 at 12:15:52PM +0100, Robin Murphy wrote:
>On 03/05/16 11:15, Peng Fan wrote:
>>According MMU-500 TRM, section 3.7.1 Auxiliary Control registers,
>>You can modify ACTLR only when the ACR.CACHE_LOCK bit is 0.
>>
>>So before clearing ARM_MMU500_ACTLR_CPRE of each context bank,
>>need clear CACHE_LOCK bit of ACR register first.
>
>Ah, good catch - I think I misread CACHE_LOCK as resetting to 0, and
>proceeded to forget about it. However, it's only present in MMU-500r2
>onwards, so we'd also want to check IDR7 before touching ACR.
Thanks for comments. I'll add code to check IDR7 and send out V2.
Thanks,
Peng.
>
>Thanks,
>Robin.
>
>>Signed-off-by: Peng Fan <van.freenix@gmail.com>
>>Cc: Will Deacon <will.deacon@arm.com>
>>Cc: Robin Murphy <robin.murphy@arm.com>
>>---
>>
>>Hi Will,
>>
>> Patch based on iommu/devel branch.
>>
>>
>> drivers/iommu/arm-smmu.c | 15 +++++++++++++++
>> 1 file changed, 15 insertions(+)
>>
>>diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
>>index acff332..d094a5a 100644
>>--- a/drivers/iommu/arm-smmu.c
>>+++ b/drivers/iommu/arm-smmu.c
>>@@ -98,6 +98,9 @@
>> #define sCR0_BSU_SHIFT 14
>> #define sCR0_BSU_MASK 0x3
>>
>>+/* Auxiliary Configuration register */
>>+#define ARM_SMMU_GR0_sACR 0x10
>>+
>> /* Identification registers */
>> #define ARM_SMMU_GR0_ID0 0x20
>> #define ARM_SMMU_GR0_ID1 0x24
>>@@ -235,6 +238,8 @@
>>
>> #define ARM_MMU500_ACTLR_CPRE (1 << 1)
>>
>>+#define ARM_MMU500_ACR_CACHE_LOCK (1 << 26)
>>+
>> #define CB_PAR_F (1 << 0)
>>
>> #define ATSR_ACTIVE (1 << 0)
>>@@ -1506,6 +1511,16 @@ static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
>> writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_S2CR(i));
>> }
>>
>>+ /*
>>+ * Before clearing ARM_MMU500_ACTLR_CPRE, need to
>>+ * clear CACHE_LOCK bit of ACR first.
>>+ */
>>+ if (smmu->model == ARM_MMU500) {
>>+ reg = readl_relaxed(gr0_base + ARM_SMMU_GR0_sACR);
>>+ reg &= ~ARM_MMU500_ACR_CACHE_LOCK;
>>+ writel_relaxed(reg, gr0_base + ARM_SMMU_GR0_sACR);
>>+ }
>>+
>> /* Make sure all context banks are disabled and clear CB_FSR */
>> for (i = 0; i < smmu->num_context_banks; ++i) {
>> cb_base = ARM_SMMU_CB_BASE(smmu) + ARM_SMMU_CB(smmu, i);
>>
>
next prev parent reply other threads:[~2016-05-03 12:50 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-03 10:15 [PATCH] iommu/arm-smmu: clear cache lock bit of ACR Peng Fan
2016-05-03 10:15 ` Peng Fan
2016-05-03 10:15 ` Peng Fan
[not found] ` <1462270527-17074-1-git-send-email-van.freenix-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-05-03 11:15 ` Robin Murphy
2016-05-03 11:15 ` Robin Murphy
2016-05-03 11:15 ` Robin Murphy
[not found] ` <57288868.9020908-5wv7dgnIgG8@public.gmane.org>
2016-05-03 12:50 ` Peng Fan [this message]
2016-05-03 12:50 ` Peng Fan
2016-05-03 12:50 ` Peng Fan
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=20160503125041.GA18127@linux-7smt.suse \
--to=van.freenix-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=robin.murphy-5wv7dgnIgG8@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
/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.