Thread (13 messages) 13 messages, 4 authors, 2015-01-20

[PATCH 1/2] cpufreq-dt: check CPU clock/power domain during initializing

From: viresh.kumar@linaro.org (Viresh Kumar)
Date: 2015-01-19 08:00:37
Also in: linux-pm, lkml

On 9 January 2015 at 15:24, pi-cheng.chen [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Currently the DT based cpufreq driver is missing some way to check which
CPUs share clocks. In the 1st patch, CPU clock/power domain information is
added to the platform_data of cpufreq-dt so that cpufreq-dt driver could
check which CPUs share clock/power.

Signed-off-by: pi-cheng.chen <redacted>
---
 drivers/cpufreq/cpufreq-dt.c | 15 +++++++++++++++
 include/linux/cpufreq-dt.h   |  6 ++++++
 2 files changed, 21 insertions(+)
diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index fde97d6..ff8c266 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -296,6 +296,21 @@ static int cpufreq_init(struct cpufreq_policy *policy)
        pd = cpufreq_get_driver_data();
        if (!pd || !pd->independent_clocks)
                cpumask_setall(policy->cpus);
+       else if (pd && !list_empty(&pd->domain_list)) {
+               struct list_head *domain_node;
+
+               list_for_each(domain_node, &pd->domain_list) {
+                       struct cpufreq_cpu_domain *domain;
Define this with domain_node.
quoted hunk ↗ jump to hunk
+
+                       domain = container_of(domain_node,
+                                             struct cpufreq_cpu_domain, node);
+                       if (!cpumask_test_cpu(policy->cpu, &domain->cpus))
+                               continue;
+
+                       cpumask_copy(policy->cpus, &domain->cpus);
+                       break;
+               }
+       }

        of_node_put(np);
diff --git a/include/linux/cpufreq-dt.h b/include/linux/cpufreq-dt.h
index 0414009..92bffd3 100644
--- a/include/linux/cpufreq-dt.h
+++ b/include/linux/cpufreq-dt.h
@@ -10,6 +10,11 @@
 #ifndef __CPUFREQ_DT_H__
 #define __CPUFREQ_DT_H__

+struct cpufreq_cpu_domain {
+       struct list_head node;
+       cpumask_t cpus;
+};
+
 struct cpufreq_dt_platform_data {
        /*
         * True when each CPU has its own clock to control its
@@ -17,6 +22,7 @@ struct cpufreq_dt_platform_data {
         * clock.
         */
        bool independent_clocks;
+       struct list_head domain_list;
 };
Though we need to keep only one of these two, but I don't think
any of these will stay for long time. So, its okay..

Looks fine. Thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help