Loading Documentation/devicetree/bindings/iommu/arm,smmu.txt +4 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,10 @@ conditions. supported as we are directly comparing client SID with ID bits of SMR registers. -qcom,disable-atos: Some hardware may not have full support for atos debugging in tandem with other features like power collapse. - qcom,deferred-regulator-disable-delay : The time delay for deferred regulator disable in ms. In case of unmap call, regulator is enabled/disabled. This may introduce additional delay. For Loading arch/arm64/boot/dts/qcom/msm-arm-smmu-sm8150.dtsi +2 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ qcom,skip-init; qcom,use-3-lvl-tables; qcom,no-asid-retention; qcom,disable-atos; #global-interrupts = <1>; qcom,regulator-names = "vdd"; vdd-supply = <&gpu_cx_gdsc>; Loading Loading @@ -72,6 +73,7 @@ qcom,skip-init; qcom,use-3-lvl-tables; qcom,no-asid-retention; qcom,disable-atos; #global-interrupts = <1>; #size-cells = <1>; #address-cells = <1>; Loading drivers/iommu/arm-smmu.c +6 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,7 @@ struct arm_smmu_device { #define ARM_SMMU_OPT_3LVL_TABLES (1 << 4) #define ARM_SMMU_OPT_NO_ASID_RETENTION (1 << 5) #define ARM_SMMU_OPT_STATIC_CB (1 << 6) #define ARM_SMMU_OPT_DISABLE_ATOS (1 << 7) u32 options; enum arm_smmu_arch_version version; enum arm_smmu_implementation model; Loading Loading @@ -388,6 +389,7 @@ static struct arm_smmu_option_prop arm_smmu_options[] = { { ARM_SMMU_OPT_3LVL_TABLES, "qcom,use-3-lvl-tables" }, { ARM_SMMU_OPT_NO_ASID_RETENTION, "qcom,no-asid-retention" }, { ARM_SMMU_OPT_STATIC_CB, "qcom,enable-static-cb"}, { ARM_SMMU_OPT_DISABLE_ATOS, "qcom,disable-atos" }, { 0, NULL}, }; Loading Loading @@ -2720,6 +2722,10 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, phys_addr_t ret = 0; unsigned long flags; struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); struct arm_smmu_device *smmu = smmu_domain->smmu; if (smmu->options & ARM_SMMU_OPT_DISABLE_ATOS) return 0; if (arm_smmu_power_on(smmu_domain->smmu->pwr)) return 0; Loading Loading
Documentation/devicetree/bindings/iommu/arm,smmu.txt +4 −0 Original line number Diff line number Diff line Loading @@ -113,6 +113,10 @@ conditions. supported as we are directly comparing client SID with ID bits of SMR registers. -qcom,disable-atos: Some hardware may not have full support for atos debugging in tandem with other features like power collapse. - qcom,deferred-regulator-disable-delay : The time delay for deferred regulator disable in ms. In case of unmap call, regulator is enabled/disabled. This may introduce additional delay. For Loading
arch/arm64/boot/dts/qcom/msm-arm-smmu-sm8150.dtsi +2 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ qcom,skip-init; qcom,use-3-lvl-tables; qcom,no-asid-retention; qcom,disable-atos; #global-interrupts = <1>; qcom,regulator-names = "vdd"; vdd-supply = <&gpu_cx_gdsc>; Loading Loading @@ -72,6 +73,7 @@ qcom,skip-init; qcom,use-3-lvl-tables; qcom,no-asid-retention; qcom,disable-atos; #global-interrupts = <1>; #size-cells = <1>; #address-cells = <1>; Loading
drivers/iommu/arm-smmu.c +6 −0 Original line number Diff line number Diff line Loading @@ -252,6 +252,7 @@ struct arm_smmu_device { #define ARM_SMMU_OPT_3LVL_TABLES (1 << 4) #define ARM_SMMU_OPT_NO_ASID_RETENTION (1 << 5) #define ARM_SMMU_OPT_STATIC_CB (1 << 6) #define ARM_SMMU_OPT_DISABLE_ATOS (1 << 7) u32 options; enum arm_smmu_arch_version version; enum arm_smmu_implementation model; Loading Loading @@ -388,6 +389,7 @@ static struct arm_smmu_option_prop arm_smmu_options[] = { { ARM_SMMU_OPT_3LVL_TABLES, "qcom,use-3-lvl-tables" }, { ARM_SMMU_OPT_NO_ASID_RETENTION, "qcom,no-asid-retention" }, { ARM_SMMU_OPT_STATIC_CB, "qcom,enable-static-cb"}, { ARM_SMMU_OPT_DISABLE_ATOS, "qcom,disable-atos" }, { 0, NULL}, }; Loading Loading @@ -2720,6 +2722,10 @@ static phys_addr_t arm_smmu_iova_to_phys_hard(struct iommu_domain *domain, phys_addr_t ret = 0; unsigned long flags; struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); struct arm_smmu_device *smmu = smmu_domain->smmu; if (smmu->options & ARM_SMMU_OPT_DISABLE_ATOS) return 0; if (arm_smmu_power_on(smmu_domain->smmu->pwr)) return 0; Loading