On Mon, Jun 30, 2014 at 2:57 AM, Viresh Kumar viresh.kumar@linaro.org wrote:
On 27 June 2014 07:45, Viresh Kumar viresh.kumar@linaro.org wrote:
On 27 June 2014 07:23, Mike Turquette mturquette@linaro.org wrote:
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