From: Finley Xiao Date: Sun, 25 Dec 2016 02:48:34 +0000 (+0800) Subject: PM / AVS: rockchip-cpu-avs: use a new way to get cluster id X-Git-Tag: firefly_0821_release~984 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c15ca6e0d1b4e073a1e8b75c41951be000050fb9;p=firefly-linux-kernel-4.4.55.git PM / AVS: rockchip-cpu-avs: use a new way to get cluster id The returned value of topology_physical_package_id is socket id on ARM32 system(for example, RK3288), it's not like the cluster id on ARM64 system(for example, RK3366), so use a new way. Change-Id: I5b2cdfdcdaa56c71df394caa2588f6e83931a293 Signed-off-by: Finley Xiao --- diff --git a/drivers/power/avs/rockchip-cpu-avs.c b/drivers/power/avs/rockchip-cpu-avs.c index fc0bf2a4b299..93a1720dc378 100644 --- a/drivers/power/avs/rockchip-cpu-avs.c +++ b/drivers/power/avs/rockchip-cpu-avs.c @@ -54,6 +54,7 @@ struct rockchip_cpu_avs { struct cluster_info *cluster; struct notifier_block cpufreq_notify; unsigned int check_done[MAX_CLUSTERS]; + struct cpumask allowed_cpus[MAX_CLUSTERS]; }; #define notifier_to_avs(_n) container_of(_n, struct rockchip_cpu_avs, \ @@ -107,11 +108,28 @@ static int rockchip_cpu_avs_notifier(struct notifier_block *nb, int i, id, cpu = policy->cpu; int ret; + if (event == CPUFREQ_CREATE_POLICY) { + for (id = 0; id < MAX_CLUSTERS; id++) { + if (cpumask_test_cpu(policy->cpu, + &avs->allowed_cpus[id])) + break; + if (cpumask_empty(&avs->allowed_cpus[id])) { + cpumask_copy(&avs->allowed_cpus[id], + policy->related_cpus); + break; + } + } + goto out; + } + if (event != CPUFREQ_START) goto out; - id = topology_physical_package_id(cpu); - if (id < 0 || id >= MAX_CLUSTERS) { + for (id = 0; id < MAX_CLUSTERS; id++) { + if (cpumask_test_cpu(cpu, &avs->allowed_cpus[id])) + break; + } + if (id == MAX_CLUSTERS) { pr_err("cpu%d invalid cluster id\n", cpu); goto out; }