samsung: emc: Add function to check target_freq is available
authorYoungtae Lee <yt0729.lee@samsung.com>
Fri, 27 Apr 2018 06:28:58 +0000 (15:28 +0900)
committerlakkyung.jung <lakkyung.jung@samsung.com>
Mon, 23 Jul 2018 05:59:09 +0000 (14:59 +0900)
Change-Id: Ie957e3d0c8064f5d8b2fa324fb1205d373554cf6
Signed-off-by: Youngtae Lee <yt0729.lee@samsung.com>
drivers/soc/samsung/exynos-emc.c
include/soc/samsung/exynos-emc.h

index 6587596be32c77e09f9da9e17d1713293f17269e..dfddd59a8db211f84cacb430880d48b359684704 100644 (file)
@@ -174,6 +174,30 @@ exit:
        return 0;
 }
 
+void emc_check_available_freq(struct cpumask *cpus, unsigned int target_freq)
+{
+       unsigned int max_freq;
+       struct emc_domain *domain = emc_get_boost_domain();
+       int cpu = cpumask_first(cpus);
+       struct cpumask online_mask;
+       struct emc_mode *mode;
+
+       cpumask_copy(&online_mask, cpu_online_mask);
+       mode = emc_find_mode(&online_mask);
+
+       if (!cpumask_equal(cpus, &domain->cpus))
+               return;
+
+       if (mode)
+               max_freq = mode->max_freq;
+       else
+               max_freq = emc_get_base_mode()->max_freq;
+
+       if (target_freq > max_freq)
+               panic("cpu%d target_freq(%d) is higher than max_freq(%d, mode %s)\n",
+                                               cpu, target_freq, max_freq, mode->name);
+}
+
 /* check policy->max constaints and real clock violation according to mask */
 int emc_verify_constraints(struct cpumask *mask)
 {
index 7dcf0fb3126b4d621e469bf4e79c77d3703c251b..15812fba3307d360680baee7234e681e6e76672d 100644 (file)
 void exynos_emc_update(int cpu);
 int exynos_emc_update_cpu_pwr(unsigned int cpu, bool on);
 int emc_get_boost_freq(int cpu);
+void emc_check_available_freq(struct cpumask *cpus, unsigned int target_freq);
 #else
 static inline void exynos_emc_update(int cpu) {};
 static inline int exynos_emc_update_cpu_pwr(unsigned int cpu, bool on) { return 0; };
 static inline int emc_get_boost_freq(int cpu) { return 0; };
+static inline void emc_check_available_freq(struct cpumask *cpus, unsigned int target_freq) { return; };
 #endif
 
 #endif /* __EXYNOS_MODE_CHANGER_H */