linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping
@ 2020-04-20 16:41 Sai Prakash Ranjan
  2020-04-20 16:41 ` [PATCHv3 1/6] iommu: arm-smmu-impl: Convert to a generic reset implementation Sai Prakash Ranjan
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 16:41 UTC (permalink / raw)
  To: Will Deacon, Robin Murphy, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green, Sai Prakash Ranjan

This series allows DRM, Modem devices to set a default
identity mapping in qcom smmu implementation.

Patch 1 is cleanup to support other SoCs to call into
QCOM specific  implementation.
Patch 2 sets the default identity domain for DRM devices.
Patch 3 implements def_domain_type callback for arm-smmu.
Patch 4 sets the default identity domain for modem device.
Patch 5-6 adds the iommus property for mss pil.

This is based on Joerg's tree:
 - https://git.kernel.org/pub/scm/linux/kernel/git/joro/linux.git/log/?h=iommu-probe-device-v2

v3:
 * Use arm_smmu_master_cfg to get impl instead of long way as per Robin.
 * Use def_domain_type name for the callback in arm_smmu_imp as per Robin

Jordan Crouse (1):
  iommu/arm-smmu: Allow client devices to select direct mapping

Sai Prakash Ranjan (2):
  iommu: arm-smmu-impl: Convert to a generic reset implementation
  iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back

Sibi Sankar (3):
  iommu/arm-smmu-qcom: Request direct mapping for modem device
  dt-bindings: remoteproc: qcom: Add iommus property
  arm64: dts: qcom: sdm845-cheza: Add iommus property

 .../bindings/remoteproc/qcom,q6v5.txt         |  3 ++
 arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi    |  5 +++
 drivers/iommu/arm-smmu-impl.c                 |  8 ++--
 drivers/iommu/arm-smmu-qcom.c                 | 37 +++++++++++++++++--
 drivers/iommu/arm-smmu.c                      | 12 ++++++
 drivers/iommu/arm-smmu.h                      |  1 +
 6 files changed, 60 insertions(+), 6 deletions(-)

-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCHv3 1/6] iommu: arm-smmu-impl: Convert to a generic reset implementation
  2020-04-20 16:41 [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping Sai Prakash Ranjan
@ 2020-04-20 16:41 ` Sai Prakash Ranjan
  2020-04-20 16:42 ` [PATCHv3 2/6] iommu/arm-smmu: Allow client devices to select direct mapping Sai Prakash Ranjan
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 16:41 UTC (permalink / raw)
  To: Will Deacon, Robin Murphy, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green, Sai Prakash Ranjan

Currently the QCOM specific smmu reset implementation is very
specific to SDM845 SoC and has a wait-for-safe logic which
may not be required for other SoCs. So move the SDM845 specific
logic to its specific reset function. Also add SC7180 SMMU
compatible for calling into QCOM specific implementation.

Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
---
 drivers/iommu/arm-smmu-impl.c |  8 +++++---
 drivers/iommu/arm-smmu-qcom.c | 16 +++++++++++++---
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/iommu/arm-smmu-impl.c b/drivers/iommu/arm-smmu-impl.c
index 74d97a886e93..c75b9d957b70 100644
--- a/drivers/iommu/arm-smmu-impl.c
+++ b/drivers/iommu/arm-smmu-impl.c
@@ -150,6 +150,8 @@ static const struct arm_smmu_impl arm_mmu500_impl = {
 
 struct arm_smmu_device *arm_smmu_impl_init(struct arm_smmu_device *smmu)
 {
+	const struct device_node *np = smmu->dev->of_node;
+
 	/*
 	 * We will inevitably have to combine model-specific implementation
 	 * quirks with platform-specific integration quirks, but everything
@@ -166,11 +168,11 @@ struct arm_smmu_device *arm_smmu_impl_init(struct arm_smmu_device *smmu)
 		break;
 	}
 
-	if (of_property_read_bool(smmu->dev->of_node,
-				  "calxeda,smmu-secure-config-access"))
+	if (of_property_read_bool(np, "calxeda,smmu-secure-config-access"))
 		smmu->impl = &calxeda_impl;
 
-	if (of_device_is_compatible(smmu->dev->of_node, "qcom,sdm845-smmu-500"))
+	if (of_device_is_compatible(np, "qcom,sdm845-smmu-500") ||
+	    of_device_is_compatible(np, "qcom,sc7180-smmu-500"))
 		return qcom_smmu_impl_init(smmu);
 
 	return smmu;
diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c
index 24c071c1d8b0..64a4ab270ab7 100644
--- a/drivers/iommu/arm-smmu-qcom.c
+++ b/drivers/iommu/arm-smmu-qcom.c
@@ -15,8 +15,6 @@ static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu)
 {
 	int ret;
 
-	arm_mmu500_reset(smmu);
-
 	/*
 	 * To address performance degradation in non-real time clients,
 	 * such as USB and UFS, turn off wait-for-safe on sdm845 based boards,
@@ -30,8 +28,20 @@ static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu)
 	return ret;
 }
 
+static int qcom_smmu500_reset(struct arm_smmu_device *smmu)
+{
+	const struct device_node *np = smmu->dev->of_node;
+
+	arm_mmu500_reset(smmu);
+
+	if (of_device_is_compatible(np, "qcom,sdm845-smmu-500"))
+		return qcom_sdm845_smmu500_reset(smmu);
+
+	return 0;
+}
+
 static const struct arm_smmu_impl qcom_smmu_impl = {
-	.reset = qcom_sdm845_smmu500_reset,
+	.reset = qcom_smmu500_reset,
 };
 
 struct arm_smmu_device *qcom_smmu_impl_init(struct arm_smmu_device *smmu)
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCHv3 2/6] iommu/arm-smmu: Allow client devices to select direct mapping
  2020-04-20 16:41 [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping Sai Prakash Ranjan
  2020-04-20 16:41 ` [PATCHv3 1/6] iommu: arm-smmu-impl: Convert to a generic reset implementation Sai Prakash Ranjan
@ 2020-04-20 16:42 ` Sai Prakash Ranjan
  2020-04-20 16:57   ` Robin Murphy
  2020-04-20 16:42 ` [PATCHv3 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back Sai Prakash Ranjan
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 16:42 UTC (permalink / raw)
  To: Will Deacon, Robin Murphy, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green, Sai Prakash Ranjan

From: Jordan Crouse <jcrouse@codeaurora.org>

Some client devices want to directly map the IOMMU themselves instead
of using the DMA domain. Allow those devices to opt in to direct
mapping by way of a list of compatible strings.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
Co-developed-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
---
 drivers/iommu/arm-smmu-qcom.c | 19 +++++++++++++++++++
 drivers/iommu/arm-smmu.h      |  1 +
 2 files changed, 20 insertions(+)

diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c
index 64a4ab270ab7..5bedf21587a5 100644
--- a/drivers/iommu/arm-smmu-qcom.c
+++ b/drivers/iommu/arm-smmu-qcom.c
@@ -3,6 +3,7 @@
  * Copyright (c) 2019, The Linux Foundation. All rights reserved.
  */
 
+#include <linux/of_device.h>
 #include <linux/qcom_scm.h>
 
 #include "arm-smmu.h"
@@ -11,6 +12,23 @@ struct qcom_smmu {
 	struct arm_smmu_device smmu;
 };
 
+static const struct of_device_id qcom_smmu_client_of_match[] = {
+	{ .compatible = "qcom,adreno" },
+	{ .compatible = "qcom,mdp4" },
+	{ .compatible = "qcom,mdss" },
+	{ .compatible = "qcom,sc7180-mdss" },
+	{ .compatible = "qcom,sdm845-mdss" },
+	{ }
+};
+
+static int qcom_smmu_def_domain_type(struct device *dev)
+{
+	const struct of_device_id *match =
+		of_match_device(qcom_smmu_client_of_match, dev);
+
+	return match ? IOMMU_DOMAIN_IDENTITY : 0;
+}
+
 static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu)
 {
 	int ret;
@@ -41,6 +59,7 @@ static int qcom_smmu500_reset(struct arm_smmu_device *smmu)
 }
 
 static const struct arm_smmu_impl qcom_smmu_impl = {
+	.def_domain_type = qcom_smmu_def_domain_type,
 	.reset = qcom_smmu500_reset,
 };
 
diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h
index 8d1cd54d82a6..d172c024be61 100644
--- a/drivers/iommu/arm-smmu.h
+++ b/drivers/iommu/arm-smmu.h
@@ -386,6 +386,7 @@ struct arm_smmu_impl {
 	int (*init_context)(struct arm_smmu_domain *smmu_domain);
 	void (*tlb_sync)(struct arm_smmu_device *smmu, int page, int sync,
 			 int status);
+	int (*def_domain_type)(struct device *dev);
 };
 
 static inline void __iomem *arm_smmu_page(struct arm_smmu_device *smmu, int n)
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCHv3 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back
  2020-04-20 16:41 [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping Sai Prakash Ranjan
  2020-04-20 16:41 ` [PATCHv3 1/6] iommu: arm-smmu-impl: Convert to a generic reset implementation Sai Prakash Ranjan
  2020-04-20 16:42 ` [PATCHv3 2/6] iommu/arm-smmu: Allow client devices to select direct mapping Sai Prakash Ranjan
@ 2020-04-20 16:42 ` Sai Prakash Ranjan
  2020-04-20 16:59   ` Robin Murphy
  2020-04-20 16:42 ` [PATCHv3 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device Sai Prakash Ranjan
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 16:42 UTC (permalink / raw)
  To: Will Deacon, Robin Murphy, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green, Sai Prakash Ranjan

Implement the new def_domain_type call-back for the ARM
SMMU driver. We need this to support requesting the domain
type by the client devices.

Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
---
 drivers/iommu/arm-smmu.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index e622f4e33379..b345a86085ce 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -1609,6 +1609,17 @@ static void arm_smmu_get_resv_regions(struct device *dev,
 	iommu_dma_get_resv_regions(dev, head);
 }
 
+static int arm_smmu_def_domain_type(struct device *dev)
+{
+	struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev);
+	const struct arm_smmu_impl *impl = cfg->smmu->impl;
+
+	if (impl && impl->def_domain_type)
+		return impl->def_domain_type(dev);
+
+	return 0;
+}
+
 static struct iommu_ops arm_smmu_ops = {
 	.capable		= arm_smmu_capable,
 	.domain_alloc		= arm_smmu_domain_alloc,
@@ -1627,6 +1638,7 @@ static struct iommu_ops arm_smmu_ops = {
 	.of_xlate		= arm_smmu_of_xlate,
 	.get_resv_regions	= arm_smmu_get_resv_regions,
 	.put_resv_regions	= generic_iommu_put_resv_regions,
+	.def_domain_type	= arm_smmu_def_domain_type,
 	.pgsize_bitmap		= -1UL, /* Restricted during device attach */
 };
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCHv3 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device
  2020-04-20 16:41 [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping Sai Prakash Ranjan
                   ` (2 preceding siblings ...)
  2020-04-20 16:42 ` [PATCHv3 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back Sai Prakash Ranjan
@ 2020-04-20 16:42 ` Sai Prakash Ranjan
  2020-04-20 17:09   ` Robin Murphy
  2020-04-20 16:42 ` [PATCHv3 5/6] dt-bindings: remoteproc: qcom: Add iommus property Sai Prakash Ranjan
  2020-04-20 16:42 ` [PATCHv3 6/6] arm64: dts: qcom: sdm845-cheza: " Sai Prakash Ranjan
  5 siblings, 1 reply; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 16:42 UTC (permalink / raw)
  To: Will Deacon, Robin Murphy, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green, Sai Prakash Ranjan

From: Sibi Sankar <sibis@codeaurora.org>

Request direct mapping for modem on platforms which don't have TrustZone
(which programs the modem SIDs) to prevent the following global faults seen
on Cheza/Trogdor:

arm-smmu 15000000.iommu: Unexpected global fault, this could be serious
arm-smmu 15000000.iommu: GFSR 0x80000002, GFSYNR0 0x00000000,
			 GFSYNR1 0x00000781, GFSYNR2 0x00000000

arm-smmu 15000000.iommu: Unexpected global fault, this could be serious
arm-smmu 15000000.iommu: GFSR 0x80000002, GFSYNR0 0x00000000,
			 GFSYNR1 0x00000461, GFSYNR2 0x00000000

Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
---
 drivers/iommu/arm-smmu-qcom.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c
index 5bedf21587a5..cf01d0215a39 100644
--- a/drivers/iommu/arm-smmu-qcom.c
+++ b/drivers/iommu/arm-smmu-qcom.c
@@ -17,7 +17,9 @@ static const struct of_device_id qcom_smmu_client_of_match[] = {
 	{ .compatible = "qcom,mdp4" },
 	{ .compatible = "qcom,mdss" },
 	{ .compatible = "qcom,sc7180-mdss" },
+	{ .compatible = "qcom,sc7180-mss-pil" },
 	{ .compatible = "qcom,sdm845-mdss" },
+	{ .compatible = "qcom,sdm845-mss-pil" },
 	{ }
 };
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCHv3 5/6] dt-bindings: remoteproc: qcom: Add iommus property
  2020-04-20 16:41 [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping Sai Prakash Ranjan
                   ` (3 preceding siblings ...)
  2020-04-20 16:42 ` [PATCHv3 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device Sai Prakash Ranjan
@ 2020-04-20 16:42 ` Sai Prakash Ranjan
  2020-04-20 16:42 ` [PATCHv3 6/6] arm64: dts: qcom: sdm845-cheza: " Sai Prakash Ranjan
  5 siblings, 0 replies; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 16:42 UTC (permalink / raw)
  To: Will Deacon, Robin Murphy, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green, Sai Prakash Ranjan,
	Rob Herring

From: Sibi Sankar <sibis@codeaurora.org>

Add iommus property to allow Q6 modem to boot on platforms which do
not have trustZone.

Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Acked-by: Rob Herring <robh@kernel.org>
---
 Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt b/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt
index 88dfa3fc15f7..130e50aab741 100644
--- a/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt
+++ b/Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt
@@ -184,6 +184,9 @@ For the compatible strings below the following phandle references are required:
 		    followed by the offset within syscon for conn_box_spare0
 		    register.
 
+The Hexagon node must contain iommus property as described in ../iommu/iommu.txt
+on platforms which do not have TrustZone.
+
 = SUBNODES:
 The Hexagon node must contain two subnodes, named "mba" and "mpss" representing
 the memory regions used by the Hexagon firmware. Each sub-node must contain:
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCHv3 6/6] arm64: dts: qcom: sdm845-cheza: Add iommus property
  2020-04-20 16:41 [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping Sai Prakash Ranjan
                   ` (4 preceding siblings ...)
  2020-04-20 16:42 ` [PATCHv3 5/6] dt-bindings: remoteproc: qcom: Add iommus property Sai Prakash Ranjan
@ 2020-04-20 16:42 ` Sai Prakash Ranjan
  5 siblings, 0 replies; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 16:42 UTC (permalink / raw)
  To: Will Deacon, Robin Murphy, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green, Sai Prakash Ranjan

From: Sibi Sankar <sibis@codeaurora.org>

Add iommus property to remoteproc modem node.

Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
---
 arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi b/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
index 9070be43a309..07081da2c83e 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
@@ -631,6 +631,11 @@ ap_ts_i2c: &i2c14 {
 	status = "okay";
 };
 
+&mss_pil {
+	iommus = <&apps_smmu 0x780 0x1>,
+		 <&apps_smmu 0x724 0x3>;
+};
+
 &pm8998_pwrkey {
 	status = "disabled";
 };
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 2/6] iommu/arm-smmu: Allow client devices to select direct mapping
  2020-04-20 16:42 ` [PATCHv3 2/6] iommu/arm-smmu: Allow client devices to select direct mapping Sai Prakash Ranjan
@ 2020-04-20 16:57   ` Robin Murphy
  2020-04-20 18:36     ` Sai Prakash Ranjan
  0 siblings, 1 reply; 12+ messages in thread
From: Robin Murphy @ 2020-04-20 16:57 UTC (permalink / raw)
  To: Sai Prakash Ranjan, Will Deacon, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green

On 2020-04-20 5:42 pm, Sai Prakash Ranjan wrote:
> From: Jordan Crouse <jcrouse@codeaurora.org>
> 
> Some client devices want to directly map the IOMMU themselves instead
> of using the DMA domain. Allow those devices to opt in to direct
> mapping by way of a list of compatible strings.

Neat and tidy :)

Reviewed-by: Robin Murphy <robin.murphy@arm.com>

Strictly, I think patch #3/6 should really have come before this one 
(with the header change moved accordingly), but don't bother resending 
just for that.

Thanks,
Robin.

> Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
> Co-developed-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
> Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
> ---
>   drivers/iommu/arm-smmu-qcom.c | 19 +++++++++++++++++++
>   drivers/iommu/arm-smmu.h      |  1 +
>   2 files changed, 20 insertions(+)
> 
> diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c
> index 64a4ab270ab7..5bedf21587a5 100644
> --- a/drivers/iommu/arm-smmu-qcom.c
> +++ b/drivers/iommu/arm-smmu-qcom.c
> @@ -3,6 +3,7 @@
>    * Copyright (c) 2019, The Linux Foundation. All rights reserved.
>    */
>   
> +#include <linux/of_device.h>
>   #include <linux/qcom_scm.h>
>   
>   #include "arm-smmu.h"
> @@ -11,6 +12,23 @@ struct qcom_smmu {
>   	struct arm_smmu_device smmu;
>   };
>   
> +static const struct of_device_id qcom_smmu_client_of_match[] = {
> +	{ .compatible = "qcom,adreno" },
> +	{ .compatible = "qcom,mdp4" },
> +	{ .compatible = "qcom,mdss" },
> +	{ .compatible = "qcom,sc7180-mdss" },
> +	{ .compatible = "qcom,sdm845-mdss" },
> +	{ }
> +};
> +
> +static int qcom_smmu_def_domain_type(struct device *dev)
> +{
> +	const struct of_device_id *match =
> +		of_match_device(qcom_smmu_client_of_match, dev);
> +
> +	return match ? IOMMU_DOMAIN_IDENTITY : 0;
> +}
> +
>   static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu)
>   {
>   	int ret;
> @@ -41,6 +59,7 @@ static int qcom_smmu500_reset(struct arm_smmu_device *smmu)
>   }
>   
>   static const struct arm_smmu_impl qcom_smmu_impl = {
> +	.def_domain_type = qcom_smmu_def_domain_type,
>   	.reset = qcom_smmu500_reset,
>   };
>   
> diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h
> index 8d1cd54d82a6..d172c024be61 100644
> --- a/drivers/iommu/arm-smmu.h
> +++ b/drivers/iommu/arm-smmu.h
> @@ -386,6 +386,7 @@ struct arm_smmu_impl {
>   	int (*init_context)(struct arm_smmu_domain *smmu_domain);
>   	void (*tlb_sync)(struct arm_smmu_device *smmu, int page, int sync,
>   			 int status);
> +	int (*def_domain_type)(struct device *dev);
>   };
>   
>   static inline void __iomem *arm_smmu_page(struct arm_smmu_device *smmu, int n)
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back
  2020-04-20 16:42 ` [PATCHv3 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back Sai Prakash Ranjan
@ 2020-04-20 16:59   ` Robin Murphy
  0 siblings, 0 replies; 12+ messages in thread
From: Robin Murphy @ 2020-04-20 16:59 UTC (permalink / raw)
  To: Sai Prakash Ranjan, Will Deacon, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green

On 2020-04-20 5:42 pm, Sai Prakash Ranjan wrote:
> Implement the new def_domain_type call-back for the ARM
> SMMU driver. We need this to support requesting the domain
> type by the client devices.

Modulo any further changes to the default domain rework,

Reviewed-by: Robin Murphy <robin.murphy@arm.com>

> Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
> ---
>   drivers/iommu/arm-smmu.c | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
> index e622f4e33379..b345a86085ce 100644
> --- a/drivers/iommu/arm-smmu.c
> +++ b/drivers/iommu/arm-smmu.c
> @@ -1609,6 +1609,17 @@ static void arm_smmu_get_resv_regions(struct device *dev,
>   	iommu_dma_get_resv_regions(dev, head);
>   }
>   
> +static int arm_smmu_def_domain_type(struct device *dev)
> +{
> +	struct arm_smmu_master_cfg *cfg = dev_iommu_priv_get(dev);
> +	const struct arm_smmu_impl *impl = cfg->smmu->impl;
> +
> +	if (impl && impl->def_domain_type)
> +		return impl->def_domain_type(dev);
> +
> +	return 0;
> +}
> +
>   static struct iommu_ops arm_smmu_ops = {
>   	.capable		= arm_smmu_capable,
>   	.domain_alloc		= arm_smmu_domain_alloc,
> @@ -1627,6 +1638,7 @@ static struct iommu_ops arm_smmu_ops = {
>   	.of_xlate		= arm_smmu_of_xlate,
>   	.get_resv_regions	= arm_smmu_get_resv_regions,
>   	.put_resv_regions	= generic_iommu_put_resv_regions,
> +	.def_domain_type	= arm_smmu_def_domain_type,
>   	.pgsize_bitmap		= -1UL, /* Restricted during device attach */
>   };
>   
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device
  2020-04-20 16:42 ` [PATCHv3 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device Sai Prakash Ranjan
@ 2020-04-20 17:09   ` Robin Murphy
  2020-04-20 18:10     ` Sai Prakash Ranjan
  0 siblings, 1 reply; 12+ messages in thread
From: Robin Murphy @ 2020-04-20 17:09 UTC (permalink / raw)
  To: Sai Prakash Ranjan, Will Deacon, Joerg Roedel, Sibi Sankar,
	Bjorn Andersson, Jordan Crouse, Rob Clark
  Cc: Stephen Boyd, iommu, linux-arm-kernel, linux-kernel,
	linux-arm-msm, Matthias Kaehlcke, Evan Green

On 2020-04-20 5:42 pm, Sai Prakash Ranjan wrote:
> From: Sibi Sankar <sibis@codeaurora.org>
> 
> Request direct mapping for modem on platforms which don't have TrustZone
> (which programs the modem SIDs) to prevent the following global faults seen
> on Cheza/Trogdor:

Not strictly true - it's patch #6/6 that prevents *those* faults (and 
these days the driver should be reporting unmatched streams a little 
more helpfully). This change would resolve the context faults and/or 
weird memory corruption that might result from applying patch #6 alone - 
this is the crazy thing where transactions sometimes go directly to DRAM 
round the side of the SMMU so we can never safely remap anything, right?

Robin.

> arm-smmu 15000000.iommu: Unexpected global fault, this could be serious
> arm-smmu 15000000.iommu: GFSR 0x80000002, GFSYNR0 0x00000000,
> 			 GFSYNR1 0x00000781, GFSYNR2 0x00000000
> 
> arm-smmu 15000000.iommu: Unexpected global fault, this could be serious
> arm-smmu 15000000.iommu: GFSR 0x80000002, GFSYNR0 0x00000000,
> 			 GFSYNR1 0x00000461, GFSYNR2 0x00000000
> 
> Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
> Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
> ---
>   drivers/iommu/arm-smmu-qcom.c | 2 ++
>   1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c
> index 5bedf21587a5..cf01d0215a39 100644
> --- a/drivers/iommu/arm-smmu-qcom.c
> +++ b/drivers/iommu/arm-smmu-qcom.c
> @@ -17,7 +17,9 @@ static const struct of_device_id qcom_smmu_client_of_match[] = {
>   	{ .compatible = "qcom,mdp4" },
>   	{ .compatible = "qcom,mdss" },
>   	{ .compatible = "qcom,sc7180-mdss" },
> +	{ .compatible = "qcom,sc7180-mss-pil" },
>   	{ .compatible = "qcom,sdm845-mdss" },
> +	{ .compatible = "qcom,sdm845-mss-pil" },
>   	{ }
>   };
>   
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device
  2020-04-20 17:09   ` Robin Murphy
@ 2020-04-20 18:10     ` Sai Prakash Ranjan
  0 siblings, 0 replies; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 18:10 UTC (permalink / raw)
  To: Robin Murphy
  Cc: Will Deacon, Joerg Roedel, Sibi Sankar, Bjorn Andersson,
	Jordan Crouse, Rob Clark, Stephen Boyd, iommu, linux-arm-kernel,
	linux-kernel, linux-arm-msm, Matthias Kaehlcke, Evan Green

Hi Robin,

On 2020-04-20 22:39, Robin Murphy wrote:
> On 2020-04-20 5:42 pm, Sai Prakash Ranjan wrote:
>> From: Sibi Sankar <sibis@codeaurora.org>
>> 
>> Request direct mapping for modem on platforms which don't have 
>> TrustZone
>> (which programs the modem SIDs) to prevent the following global faults 
>> seen
>> on Cheza/Trogdor:
> 
> Not strictly true - it's patch #6/6 that prevents *those* faults (and
> these days the driver should be reporting unmatched streams a little
> more helpfully). This change would resolve the context faults and/or
> weird memory corruption that might result from applying patch #6 alone
> - this is the crazy thing where transactions sometimes go directly to
> DRAM round the side of the SMMU so we can never safely remap anything,
> right?
> 

True this doesnt prevent global faults, the fault details should go to 
patch6.
I'll update the commit msg something like below:

The Q6 modem sub-system has direct access to DDR through memnoc.
Also SMMU is not expected to provide access control/translation for 
these SIDs
(sandboxing of the modem is achieved through XPUs engaged using SMC 
calls).

Thanks,
Sai

-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a 
member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCHv3 2/6] iommu/arm-smmu: Allow client devices to select direct mapping
  2020-04-20 16:57   ` Robin Murphy
@ 2020-04-20 18:36     ` Sai Prakash Ranjan
  0 siblings, 0 replies; 12+ messages in thread
From: Sai Prakash Ranjan @ 2020-04-20 18:36 UTC (permalink / raw)
  To: Robin Murphy
  Cc: Will Deacon, Joerg Roedel, Sibi Sankar, Bjorn Andersson,
	Jordan Crouse, Rob Clark, Stephen Boyd, iommu, linux-arm-kernel,
	linux-kernel, linux-arm-msm, Matthias Kaehlcke, Evan Green

On 2020-04-20 22:27, Robin Murphy wrote:
> On 2020-04-20 5:42 pm, Sai Prakash Ranjan wrote:
>> From: Jordan Crouse <jcrouse@codeaurora.org>
>> 
>> Some client devices want to directly map the IOMMU themselves instead
>> of using the DMA domain. Allow those devices to opt in to direct
>> mapping by way of a list of compatible strings.
> 
> Neat and tidy :)
> 
> Reviewed-by: Robin Murphy <robin.murphy@arm.com>
> 
> Strictly, I think patch #3/6 should really have come before this one
> (with the header change moved accordingly), but don't bother resending
> just for that.
> 

Thanks, I have sent the updated version with this change as well
in addition to the commit msg update for modem requesting direct
mapping.

Thanks,
Sai

-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a 
member
of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-04-20 18:37 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-20 16:41 [PATCHv3 0/6] iommu/arm-smmu: Allow client devices to select identity mapping Sai Prakash Ranjan
2020-04-20 16:41 ` [PATCHv3 1/6] iommu: arm-smmu-impl: Convert to a generic reset implementation Sai Prakash Ranjan
2020-04-20 16:42 ` [PATCHv3 2/6] iommu/arm-smmu: Allow client devices to select direct mapping Sai Prakash Ranjan
2020-04-20 16:57   ` Robin Murphy
2020-04-20 18:36     ` Sai Prakash Ranjan
2020-04-20 16:42 ` [PATCHv3 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back Sai Prakash Ranjan
2020-04-20 16:59   ` Robin Murphy
2020-04-20 16:42 ` [PATCHv3 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device Sai Prakash Ranjan
2020-04-20 17:09   ` Robin Murphy
2020-04-20 18:10     ` Sai Prakash Ranjan
2020-04-20 16:42 ` [PATCHv3 5/6] dt-bindings: remoteproc: qcom: Add iommus property Sai Prakash Ranjan
2020-04-20 16:42 ` [PATCHv3 6/6] arm64: dts: qcom: sdm845-cheza: " Sai Prakash Ranjan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).