On Fri, Feb 7, 2014 at 8:59 PM, Nishanth Menon <nm@xxxxxx> wrote: > On Fri, Feb 7, 2014 at 9:19 AM, Thomas Abraham <ta.omasab@xxxxxxxxx> wrote: >> From: Thomas Abraham <thomas.ab@xxxxxxxxxxx> >> >> Commit 6f19efc0 ("cpufreq: Add boost frequency support in core") adds >> support for CPU boost mode. This patch adds support for finding available >> boost frequencies from device tree and marking them as usable in boost mode. >> >> Cc: Nishanth Menon <nm@xxxxxx> >> Cc: Lukasz Majewski <l.majewski@xxxxxxxxxxx> >> Signed-off-by: Thomas Abraham <thomas.ab@xxxxxxxxxxx> >> --- >> drivers/base/power/opp.c | 34 +++++++++++++++++++++++++++++++++- >> 1 file changed, 33 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c >> index fa41874..b636826 100644 >> --- a/drivers/base/power/opp.c >> +++ b/drivers/base/power/opp.c >> @@ -628,7 +628,8 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, >> struct device_opp *dev_opp; >> struct dev_pm_opp *opp; >> struct cpufreq_frequency_table *freq_table; >> - int i = 0; >> + int i = 0, j, len, ret; >> + u32 *boost_freqs = NULL; >> >> /* Pretend as if I am an updater */ >> mutex_lock(&dev_opp_list_lock); >> @@ -650,10 +651,35 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, >> return -ENOMEM; >> } >> >> + if (of_find_property(dev->of_node, "boost-frequency", &len)) { >> + if (len == 0 || (len & (sizeof(u32) - 1)) != 0) { >> + dev_err(dev, "%s: invalid boost frequency\n", __func__); >> + ret = -EINVAL; >> + goto err_boost; >> + } >> + >> + boost_freqs = kzalloc(len, GFP_KERNEL); >> + if (!boost_freqs) { >> + dev_warn(dev, "%s: no memory for boost freq table\n", >> + __func__); >> + ret = -ENOMEM; >> + goto err_boost; >> + } >> + of_property_read_u32_array(dev->of_node, "boost-frequency", >> + boost_freqs, len / sizeof(u32)); >> + } >> + >> list_for_each_entry(opp, &dev_opp->opp_list, node) { >> if (opp->available) { >> freq_table[i].driver_data = i; >> freq_table[i].frequency = opp->rate / 1000; >> + for (j = 0; j < len / sizeof(u32) && boost_freqs; j++) { >> + if (boost_freqs[j] == freq_table[i].frequency) { >> + freq_table[i].driver_data = >> + CPUFREQ_BOOST_FREQ; >> + break; >> + } >> + } > > What if any one of the boost_freqs are not contained in the enabled frequencies? It is not used as a boost frequency because its corresponding voltage is not known. If required a warning can be printed out for the same. Thanks, Thomas. > >> i++; >> } >> } >> @@ -663,8 +689,14 @@ int dev_pm_opp_init_cpufreq_table(struct device *dev, >> freq_table[i].frequency = CPUFREQ_TABLE_END; >> >> *table = &freq_table[0]; >> + kfree(boost_freqs); >> >> return 0; >> + >> +err_boost: >> + kfree(freq_table); >> + mutex_unlock(&dev_opp_list_lock); >> + return ret; >> } >> EXPORT_SYMBOL_GPL(dev_pm_opp_init_cpufreq_table); >> >> -- >> 1.7.10.4 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-pm" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html