Loading drivers/iommu/arm-smmu.c +13 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,8 @@ struct arm_smmu_device { unsigned int num_impl_def_attach_registers; struct mutex atos_lock; atomic_t clock_refs_count; atomic_t regulator_refs_count; }; struct arm_smmu_cfg { Loading Loading @@ -699,6 +701,9 @@ static int arm_smmu_disable_regulators(struct arm_smmu_device *smmu) if (!smmu->gdsc) return 0; if (atomic_dec_return(&smmu->regulator_refs_count) > 0) return 0; arm_smmu_unprepare_clocks(smmu); return regulator_disable(smmu->gdsc); } Loading @@ -710,6 +715,9 @@ static int arm_smmu_enable_regulators(struct arm_smmu_device *smmu) if (!smmu->gdsc) return 0; if (atomic_inc_return(&smmu->regulator_refs_count) > 1) return 0; ret = regulator_enable(smmu->gdsc); if (ret) return ret; Loading Loading @@ -745,6 +753,9 @@ static int arm_smmu_enable_clocks_atomic(struct arm_smmu_device *smmu) { int i, ret = 0; if (atomic_inc_return(&smmu->clock_refs_count) > 1) return 0; for (i = 0; i < smmu->num_clocks; ++i) { ret = clk_enable(smmu->clocks[i]); if (ret) { Loading @@ -761,6 +772,8 @@ static int arm_smmu_enable_clocks_atomic(struct arm_smmu_device *smmu) static void arm_smmu_disable_clocks_atomic(struct arm_smmu_device *smmu) { int i; if (atomic_dec_return(&smmu->clock_refs_count) > 0) return; for (i = 0; i < smmu->num_clocks; ++i) clk_disable(smmu->clocks[i]); Loading Loading
drivers/iommu/arm-smmu.c +13 −0 Original line number Diff line number Diff line Loading @@ -386,6 +386,8 @@ struct arm_smmu_device { unsigned int num_impl_def_attach_registers; struct mutex atos_lock; atomic_t clock_refs_count; atomic_t regulator_refs_count; }; struct arm_smmu_cfg { Loading Loading @@ -699,6 +701,9 @@ static int arm_smmu_disable_regulators(struct arm_smmu_device *smmu) if (!smmu->gdsc) return 0; if (atomic_dec_return(&smmu->regulator_refs_count) > 0) return 0; arm_smmu_unprepare_clocks(smmu); return regulator_disable(smmu->gdsc); } Loading @@ -710,6 +715,9 @@ static int arm_smmu_enable_regulators(struct arm_smmu_device *smmu) if (!smmu->gdsc) return 0; if (atomic_inc_return(&smmu->regulator_refs_count) > 1) return 0; ret = regulator_enable(smmu->gdsc); if (ret) return ret; Loading Loading @@ -745,6 +753,9 @@ static int arm_smmu_enable_clocks_atomic(struct arm_smmu_device *smmu) { int i, ret = 0; if (atomic_inc_return(&smmu->clock_refs_count) > 1) return 0; for (i = 0; i < smmu->num_clocks; ++i) { ret = clk_enable(smmu->clocks[i]); if (ret) { Loading @@ -761,6 +772,8 @@ static int arm_smmu_enable_clocks_atomic(struct arm_smmu_device *smmu) static void arm_smmu_disable_clocks_atomic(struct arm_smmu_device *smmu) { int i; if (atomic_dec_return(&smmu->clock_refs_count) > 0) return; for (i = 0; i < smmu->num_clocks; ++i) clk_disable(smmu->clocks[i]); Loading