Skip to contentSkip to conversation

iommu/arm-smmu: Allow client devices to select identity mapping

PATCH Superseded Sai Prakash Ranjan 2 participants 11 messages Apr 20, 2020

Subsystems (5)

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

v2 cover iommu/arm-smmu: Allow client devices to select identity mapping

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

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                      | 20 ++++++++++
 drivers/iommu/arm-smmu.h                      |  1 +
 6 files changed, 68 insertions(+), 6 deletions(-)
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
#1 lore raw

PATCH v2 1/6 iommu: arm-smmu-impl: Convert to a generic reset implementation

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.

---
 drivers/iommu/arm-smmu-impl.c |  8 +++++---
 drivers/iommu/arm-smmu-qcom.c | 16 +++++++++++++---
 2 files changed, 18 insertions(+), 6 deletions(-)
drivers/iommu/arm-smmu-impl.c +5 -3
index 74d97a886e93..c75b9d957b70 100644
@@ -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;
drivers/iommu/arm-smmu-qcom.c +13 -3
index 24c071c1d8b0..64a4ab270ab7 100644
@@ -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)
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
#2 lore raw

PATCH v2 2/6 iommu/arm-smmu: Allow client devices to select direct mapping

In reply to Sai Prakash Ranjan

From: Jordan Crouse <[email protected]>

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.

---
 drivers/iommu/arm-smmu-qcom.c | 19 +++++++++++++++++++
 drivers/iommu/arm-smmu.h      |  1 +
 2 files changed, 20 insertions(+)
drivers/iommu/arm-smmu-qcom.c +19 -0
index 64a4ab270ab7..0b3f159065aa 100644
@@ -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_request_domain(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 = {
+	.req_domain = qcom_smmu_request_domain,
 	.reset = qcom_smmu500_reset,
 };
 
drivers/iommu/arm-smmu.h +1 -0
index 8d1cd54d82a6..662fdb4dccd2 100644
@@ -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 (*req_domain)(struct device *dev);
 };
 
 static inline void __iomem *arm_smmu_page(struct arm_smmu_device *smmu, int n)
Signature · 6 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
reviewer
#3 lore raw

Re: [PATCHv2 2/6] iommu/arm-smmu: Allow client devices to select direct mapping

Quoted 63 lines · Sai Prakash Ranjan

From: Jordan Crouse <[email protected]>

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.

---
  drivers/iommu/arm-smmu-qcom.c | 19 +++++++++++++++++++
  drivers/iommu/arm-smmu.h      |  1 +
  2 files changed, 20 insertions(+)
drivers/iommu/arm-smmu-qcom.c +19 -0
index 64a4ab270ab7..0b3f159065aa 100644
@@ -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_request_domain(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 = {
+	.req_domain = qcom_smmu_request_domain,
  	.reset = qcom_smmu500_reset,
  };
 
drivers/iommu/arm-smmu.h +0 -0
index 8d1cd54d82a6..662fdb4dccd2 100644

drivers/iommu/arm-smmu.h struct arm_smmu_impl { · line 389

Quoted 4 lines
drivers/iommu/arm-smmu.h +1 -0
@@ -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 (*req_domain)(struct device *dev);

Nit: since the point is to implement the full iommu_ops::def_domain_type interface, can we call it def_domain_type please?

Robin.

Quoted 4 lines
drivers/iommu/arm-smmu.h +0 -0
  };
 
  static inline void __iomem *arm_smmu_page(struct arm_smmu_device *smmu, int n)
#4 lore raw

Re: [PATCHv2 2/6] iommu/arm-smmu: Allow client devices to select direct mapping

Quoted 60 lines · Robin Murphy
Quoted 59 lines · Sai Prakash Ranjan

From: Jordan Crouse <[email protected]>

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.

---
  drivers/iommu/arm-smmu-qcom.c | 19 +++++++++++++++++++
  drivers/iommu/arm-smmu.h      |  1 +
  2 files changed, 20 insertions(+)
drivers/iommu/arm-smmu-qcom.c +17 -0
index 64a4ab270ab7..0b3f159065aa 100644
@@ -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_request_domain(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 = {
+	.req_domain = qcom_smmu_request_domain,
  	.reset = qcom_smmu500_reset,
  };
  diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h

index 8d1cd54d82a6..662fdb4dccd2 100644

drivers/iommu/arm-smmu.h +0 -0
@@ -386,6 +386,7 @@ struct arm_smmu_impl {
Quoted 9 lines

drivers/iommu/arm-smmu.h struct arm_smmu_impl { · line 389

Quoted 4 lines
drivers/iommu/arm-smmu.h +1 -0
  	int (*init_context)(struct arm_smmu_domain *smmu_domain);
  	void (*tlb_sync)(struct arm_smmu_device *smmu, int page, int sync,
  			 int status);
+	int (*req_domain)(struct device *dev);

Nit: since the point is to implement the full iommu_ops::def_domain_type interface, can we call it def_domain_type please?

Sure, will send the next version shortly.

Thanks,
Sai

Signature · 6 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
#5 lore raw

PATCH v2 3/6 iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back

In reply to 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.

---
 drivers/iommu/arm-smmu.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
drivers/iommu/arm-smmu.c +20 -0
index e622f4e33379..b5d1d52dfbb8 100644
@@ -1609,6 +1609,25 @@ 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 iommu_fwspec *fwspec;
+	struct arm_smmu_device *smmu;
+
+	fwspec = dev_iommu_fwspec_get(dev);
+	if (!fwspec || fwspec->ops != &arm_smmu_ops)
+		return -ENODEV;
+
+	smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
+	if (!smmu)
+		return -ENODEV;
+
+	if (smmu->impl && smmu->impl->req_domain)
+		return smmu->impl->req_domain(dev);
+
+	return 0;
+}
+
 static struct iommu_ops arm_smmu_ops = {
 	.capable		= arm_smmu_capable,
 	.domain_alloc		= arm_smmu_domain_alloc,
@@ -1627,6 +1646,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 */
 };
 
Signature · 6 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu
reviewer
#6 lore raw

Re: [PATCHv2 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back

Quoted 20 lines · 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.

---
  drivers/iommu/arm-smmu.c | 20 ++++++++++++++++++++
  1 file changed, 20 insertions(+)
drivers/iommu/arm-smmu.c +3 -0
index e622f4e33379..b5d1d52dfbb8 100644
@@ -1609,6 +1609,25 @@ 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 iommu_fwspec *fwspec;

drivers/iommu/arm-smmu.c static void arm_smmu_get_resv_regions(struct device *dev, · line 1624

Quoted 10 lines
drivers/iommu/arm-smmu.c +10 -0
+	struct arm_smmu_device *smmu;
+
+	fwspec = dev_iommu_fwspec_get(dev);
+	if (!fwspec || fwspec->ops != &arm_smmu_ops)
+		return -ENODEV;
+
+	smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
+	if (!smmu)
+		return -ENODEV;
+

AFAICS this should only ever be called for a device in a group, which means an initial ->probe_device has succeeded and rather than defensively going the long way round, we can safely assume this:

	struct arm_smmu_master_cfg = dev_iommu_priv_get(dev);
	struct arm_smmu_impl *impl = cfg->smmu->impl;

	if (impl && impl->req_domain)
		return impl->req_domain(dev);

Or have I misunderstood the flow?

Robin.

Quoted 18 lines
drivers/iommu/arm-smmu.c +7 -0
+	if (smmu->impl && smmu->impl->req_domain)
+		return smmu->impl->req_domain(dev);
+
+	return 0;
+}
+
  static struct iommu_ops arm_smmu_ops = {
  	.capable		= arm_smmu_capable,
  	.domain_alloc		= arm_smmu_domain_alloc,
@@ -1627,6 +1646,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 */
  };
 
#7 lore raw

Re: [PATCHv2 3/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back

Hi Robin,

Quoted 36 lines · Robin Murphy
Quoted 20 lines · 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.

---
  drivers/iommu/arm-smmu.c | 20 ++++++++++++++++++++
  1 file changed, 20 insertions(+)
drivers/iommu/arm-smmu.c +2 -0
index e622f4e33379..b5d1d52dfbb8 100644
@@ -1609,6 +1609,25 @@ 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 iommu_fwspec *fwspec;

drivers/iommu/arm-smmu.c static void arm_smmu_get_resv_regions(struct · line 1624

Quoted 10 lines
drivers/iommu/arm-smmu.c +10 -0
+	struct arm_smmu_device *smmu;
+
+	fwspec = dev_iommu_fwspec_get(dev);
+	if (!fwspec || fwspec->ops != &arm_smmu_ops)
+		return -ENODEV;
+
+	smmu = arm_smmu_get_by_fwnode(fwspec->iommu_fwnode);
+	if (!smmu)
+		return -ENODEV;
+

AFAICS this should only ever be called for a device in a group, which means an initial ->probe_device has succeeded and rather than defensively going the long way round, we can safely assume this:

Quoted 6 lines
	struct arm_smmu_master_cfg = dev_iommu_priv_get(dev);
	struct arm_smmu_impl *impl = cfg->smmu->impl;

	if (impl && impl->req_domain)
		return impl->req_domain(dev);

Yes you are right, will use this.

Thanks,
Sai

Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
#8 lore raw

PATCH v2 4/6 iommu/arm-smmu-qcom: Request direct mapping for modem device

In reply to Sai Prakash Ranjan

From: Sibi Sankar <[email protected]>

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
---
 drivers/iommu/arm-smmu-qcom.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/iommu/arm-smmu-qcom.c +2 -0
index 0b3f159065aa..d74892d3a776 100644
@@ -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" },
 	{ }
 };
 
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
#9 lore raw

PATCH v2 5/6 dt-bindings: remoteproc: qcom: Add iommus property

In reply to Sai Prakash Ranjan

From: Sibi Sankar <[email protected]>

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

---
 Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt | 3 +++
 1 file changed, 3 insertions(+)
Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt +3 -0
index 88dfa3fc15f7..130e50aab741 100644
@@ -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:
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
#10 lore raw

PATCH v2 6/6 arm64: dts: qcom: sdm845-cheza: Add iommus property

In reply to Sai Prakash Ranjan

From: Sibi Sankar <[email protected]>

Add iommus property to remoteproc modem node.

---
 arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi +5 -0
index 9070be43a309..07081da2c83e 100644
@@ -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";
 };
Signature · 6 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu