From d48a06aca69ef47eec88718e7fec1f5ee73e634e Mon Sep 17 00:00:00 2001 From: "Isaac J. Manjarres" Date: Wed, 26 Feb 2020 13:24:32 -0800 Subject: [PATCH] iommu/arm-smmu: Add support for active-only interconnect votes The SMMU interconnect voting vote assumes all votes are required in both the active and sleep contexts. This means that votes for a particular interconnect path cast by the SMMU driver will be upheld even when the CPU subsystem has been suspended, which is not correct from a power consumption perspective. Thus, add support for the qcom,active-only property to denote that interconnect votes should be upheld only when the CPU subsystem is in the active context. Change-Id: I3168a9ff55809370e155771ab2b7918da06755e4 Signed-off-by: Isaac J. Manjarres --- drivers/iommu/arm-smmu.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 0589f3022544..84132b4f05fe 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -79,6 +79,7 @@ #define ARM_SMMU_ICC_AVG_BW 0 #define ARM_SMMU_ICC_PEAK_BW_HIGH 1000 #define ARM_SMMU_ICC_PEAK_BW_LOW 0 +#define ARM_SMMU_ICC_ACTIVE_ONLY_TAG 0x3 static int force_stage; module_param(force_stage, int, S_IRUGO); @@ -4253,6 +4254,9 @@ static int arm_smmu_init_interconnect(struct arm_smmu_power_resources *pwr) return pwr->icc_path ? PTR_ERR(pwr->icc_path) : -EINVAL; } + if (of_property_read_bool(dev->of_node, "qcom,active-only")) + icc_set_tag(pwr->icc_path, ARM_SMMU_ICC_ACTIVE_ONLY_TAG); + return 0; }