iommu/arm-smmu: Allow client devices to select identity mapping
Subsystems (5)
v4 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
v4:
* Updated commit msg for mss pil requesting direct mapping
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(-)
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
PATCH v4 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
@@ -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
@@ -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
PATCH v4 2/6 iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back
In reply to Sai Prakash RanjanImplement 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 | 12 ++++++++++++ drivers/iommu/arm-smmu.h | 1 + 2 files changed, 13 insertions(+)
drivers/iommu/arm-smmu.c +12 -0
@@ -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 */ };
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 (*def_domain_type)(struct device *dev); };static inline void __iomem *arm_smmu_page (struct arm_smmu_device *smmu,int n)
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
PATCH v4 3/6 iommu/arm-smmu: Allow client devices to select direct mapping
In reply to Sai Prakash RanjanFrom: 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 +++++++++++++++++++ 1 file changed, 19 insertions(+)
drivers/iommu/arm-smmu-qcom.c +19 -0
@@ -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, };
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
PATCH v4 4/6 iommu/arm-smmu-qcom: Request direct mapping for modem device
In reply to Sai Prakash RanjanFrom: Sibi Sankar <[email protected]>
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). So request direct mapping for modem on platforms which don't have TrustZone.
--- drivers/iommu/arm-smmu-qcom.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/iommu/arm-smmu-qcom.c +2 -0
@@ -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 · 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
Will Deacon
maintainerRe: [PATCHv4 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device
Quoted 7 lines · Sai Prakash Ranjan
From: Sibi Sankar <[email protected]>
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). So request direct mapping for modem on platforms which don't have TrustZone.
The Z7 space rocket framework has limited access to water through BROADCHAN. Also, this commit message really sucks. So please can you rewrite it in a way that makes sense to people outside of your office?
Will
Re: [PATCHv4 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device
Hey WIll,
Quoted 9 lines · Will Deacon
Quoted 7 lines · Sai Prakash Ranjan
From: Sibi Sankar <[email protected]>
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). So request direct mapping for modem on platforms which don't have TrustZone.
Quoted 3 lines
The Z7 space rocket framework has limited access to water through BROADCHAN. Also, this commit message really sucks. So please can you rewrite it in a way that makes sense to people outside of your office?
lol, sure I'll re-word ^^ tday
Quoted 2 lines
Will
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Will Deacon
maintainerRe: [PATCHv4 4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device
Quoted 10 lines · Sibi Sankar
Quoted 9 lines · Will Deacon
Quoted 7 lines · Sai Prakash Ranjan
From: Sibi Sankar <[email protected]>
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). So request direct mapping for modem on platforms which don't have TrustZone.
Quoted 7 lines
Quoted 5 lines
The Z7 space rocket framework has limited access to water through BROADCHAN.
Also, this commit message really sucks. So please can you rewrite it in a
way that makes sense to people outside of your office?lol, sure I'll re-word ^^ tday
Thanks :)
WIll
PATCH v4 5/6 dt-bindings: remoteproc: qcom: Add iommus property
In reply to Sai Prakash RanjanFrom: 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
@@ -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 · 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
PATCH v4 6/6 arm64: dts: qcom: sdm845-cheza: Add iommus property
In reply to Sai Prakash RanjanFrom: Sibi Sankar <[email protected]>
Add iommus property to remoteproc modem node.
Following SMMU global faults are seen without it.
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
--- arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi | 5 +++++ 1 file changed, 5 insertions(+)
arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi +5 -0
@@ -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 · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Hi Will, Joerg
Quoted 35 lines · 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 implementsdef_domain_typecallback 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-v2v4:
* Updated commit msg for mss pil requesting direct mappingv3:
* Usearm_smmu_master_cfgto get impl instead of long way as per
Robin.
* Usedef_domain_typename for the callback inarm_smmu_impas per
RobinJordan Crouse (1):
iommu/arm-smmu: Allow client devices to select direct mappingSai Prakash Ranjan (2):
iommu: arm-smmu-impl: Convert to a generic reset implementation iommu/arm-smmu: Implementiommu_ops->def_domain_typecall-backSibi 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
Quoted 7 lines
.../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(-)
This series is reviewed by Robin.
Any chance this series can make it to 5.8?
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
Will Deacon
maintainerQuoted 45 lines · Sai Prakash Ranjan
Hi Will, Joerg
Quoted 34 lines · 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 implementsdef_domain_typecallback 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-v2v4:
* Updated commit msg for mss pil requesting direct mappingv3:
* Usearm_smmu_master_cfgto get impl instead of long way as per Robin.
* Usedef_domain_typename for the callback inarm_smmu_impas per
RobinJordan Crouse (1):
iommu/arm-smmu: Allow client devices to select direct mappingSai Prakash Ranjan (2):
iommu: arm-smmu-impl: Convert to a generic reset implementation iommu/arm-smmu: Implementiommu_ops->def_domain_typecall-backSibi 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 propertyQuoted 7 lines
.../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(-)
Quoted 2 lines
This series is reviewed by Robin.
Any chance this series can make it to 5.8?
I'm planning to queue smmu stuff next week, been busy with arm64 stuff so far, sorry.
Will
Hi Will,
Quoted 46 lines · Will Deacon
Quoted 45 lines · Sai Prakash Ranjan
Hi Will, Joerg
Quoted 41 lines · 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 implementsdef_domain_typecallback 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-v2v4:
* Updated commit msg for mss pil requesting direct mappingv3:
* Usearm_smmu_master_cfgto get impl instead of long way as per Robin.
* Usedef_domain_typename for the callback inarm_smmu_impas per
RobinJordan Crouse (1):
iommu/arm-smmu: Allow client devices to select direct mappingSai Prakash Ranjan (2):
iommu: arm-smmu-impl: Convert to a generic reset implementation iommu/arm-smmu: Implementiommu_ops->def_domain_typecall-backSibi 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(-)
Quoted 6 lines
Quoted 2 lines
This series is reviewed by Robin.
Any chance this series can make it to 5.8?I'm planning to queue smmu stuff next week, been busy with arm64 stuff so far, sorry.
No problem at all, thought of reminding once just in case.
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
Quoted 11 lines · 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 implementsdef_domain_typecallback for arm-smmu. Patch 4 sets the default identity domain for modem device. Patch 5-6 adds the iommus property for mss pil.[...]
Applied to will (for-joerg/arm-smmu/updates), thanks!
[1/6] iommu: arm-smmu-impl: Convert to a generic reset implementation
https://git.kernel.org/will/c/64510ede3684 [2/6] iommu/arm-smmu: Implement iommu_ops->def_domain_type call-back https://git.kernel.org/will/c/232c5ae8a361 [3/6] iommu/arm-smmu: Allow client devices to select direct mapping https://git.kernel.org/will/c/0e764a01015d [4/6] iommu/arm-smmu-qcom: Request direct mapping for modem device (not applied) [5/6] dt-bindings: remoteproc: qcom: Add iommus property https://git.kernel.org/will/c/23cf515c6042 [6/6] arm64: dts: qcom: sdm845-cheza: Add iommus property https://git.kernel.org/will/c/68aee4af5f62
Cheers,
Signature · 5 lines
Will https://fixes.arm64.dev https://next.arm64.dev https://will.arm64.dev