All of lore.kernel.org
 help / color / mirror / Atom feed
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);
>>
>

  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.