Thread (19 messages) 19 messages, 6 authors, 2014-07-02

[PATCH 2/2] cpufreq: cpu0: Extend support beyond CPU0

From: Rob Herring <hidden>
Date: 2014-06-30 18:34:24
Also in: linux-arm-msm, linux-pm, lkml

On Mon, Jun 30, 2014 at 2:57 AM, Viresh Kumar [off-list ref] wrote:
On 27 June 2014 07:45, Viresh Kumar [off-list ref] wrote:
quoted
On 27 June 2014 07:23, Mike Turquette [off-list ref] wrote:
quoted
quoted
but it isn't future-proof if/when the clock framework starts returning
dynamically allocated clock pointers for each clk_get() invocation.
Maybe we need a function in the common clock framework that tells us if
the clocks are the same either via DT or by taking two clock pointers?
I looked through the patch briefly and did not see why we would need to
do this. Any hint?
We want to know which CPUs are sharing clock line, so that we can
fill affected-cpus field of cpufreq core.
What about comparing "clocks" property in cpu DT nodes?
What if a different clock is selected for some reason. I think a clock
api function would be better.

That being said, I don't really have any issue with such a function.
Some comments on the implementation.
@Rob/Grant: I tried looking for an existing routine to do that, but couldn't
find it. And so wrote one.

I am not good at DT stuff and so I do hope there would be few correction
required here. Let me know if this can be added to drivers/of/base.c :

+/**
+ * of_property_match - Match property in two nodes
+ * @np1, np2: Nodes to match
+ * @list_name: property to match
+ *
+ * Returns 1 on match, 0 on no match, and error for missing property.
+ */
+static int of_property_match(const struct device_node *np1,
+                             const struct device_node *np2,
+                             const char *list_name)
+{
+       const __be32 *list1, *list2, *list1_end;
s/list/prop/

Everywhere.
+       int size1, size2;
+       phandle phandle1, phandle2;
+
+       /* Retrieve the list property */
+       list1 = of_get_property(np1, list_name, &size1);
+       if (!list1)
+               return -ENOENT;
+
+       list2 = of_get_property(np2, list_name, &size2);
+       if (!list2)
+               return -ENOENT;
+
+       if (size1 != size2)
+               return 0;
+
+       list1_end = list1 + size1 / sizeof(*list1);
+
+       /* Loop over the phandles */
+       while (list1 < list1_end) {
+               phandle1 = be32_to_cpup(list1++);
+               phandle2 = be32_to_cpup(list2++);
+
+               if (phandle1 != phandle2)
+                       return 0;
+       }
You can just do a memcmp here.

This is wrong anyway because you don't know #clock-cells size.

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