RE: [PATCH 04/13] OMAP: Introduce API to return a device list associated with a voltage domain

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




>>-----Original Message-----
>>From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx]
>>Sent: Saturday, August 28, 2010 6:23 AM
>>To: Gopinath, Thara
>>Cc: linux-omap@xxxxxxxxxxxxxxx; paul@xxxxxxxxx; Sripathy, Vishwanath; Sawant, Anand; Cousson, Benoit
>>Subject: Re: [PATCH 04/13] OMAP: Introduce API to return a device list associated with a voltage
>>domain
>>
>>Thara Gopinath <thara@xxxxxx> writes:
>>
>>> This patch adds an API in the opp layer that
>>> can be used by the voltage layer to get a list of all the
>>> scalable devices belonging to a particular voltage domain.
>>> This API is to be typically called only once by the voltage
>>> layer per voltage domain instance and the device list should
>>> be stored. This approach makes it easy during dvfs to scale
>>> all the devices associated with a voltage domain and then
>>> scale the voltage domain.
>>>
>>> Signed-off-by: Thara Gopinath <thara@xxxxxx>
>>
>>I think this should be done in two steps.
>>
>>During init, each OPP
>>
>>> ---
>>>  arch/arm/plat-omap/include/plat/opp.h |    9 +++++++++
>>>  arch/arm/plat-omap/opp.c              |   28 ++++++++++++++++++++++++++++
>>>  2 files changed, 37 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/arch/arm/plat-omap/include/plat/opp.h b/arch/arm/plat-omap/include/plat/opp.h
>>> index 0e580ed..a4c1669 100644
>>> --- a/arch/arm/plat-omap/include/plat/opp.h
>>> +++ b/arch/arm/plat-omap/include/plat/opp.h
>>> @@ -18,6 +18,7 @@
>>>  #include <linux/cpufreq.h>
>>>
>>>  #include <plat/common.h>
>>> +#include <plat/voltage.h>
>>>
>>>  /**
>>>   * struct omap_opp_def - OMAP OPP Definition
>>> @@ -86,6 +87,9 @@ int opp_disable(struct omap_opp *opp);
>>>
>>>  void opp_init_cpufreq_table(struct device *dev,
>>>  			    struct cpufreq_frequency_table **table);
>>> +
>>> +struct device **opp_init_voltage_params(struct voltagedomain *voltdm,
>>> +					int *dev_count);
>>>  #else
>>>  static inline unsigned long opp_get_voltage(const struct omap_opp *opp)
>>>  {
>>> @@ -149,5 +153,10 @@ void opp_init_cpufreq_table(struct omap_opp *opps,
>>>  {
>>>  }
>>>
>>> +static inline struct device **opp_init_voltage_params(
>>> +			struct voltagedomain *voltdm, int *dev_count)
>>> +{
>>> +}
>>> +
>>>  #endif		/* CONFIG_PM */
>>>  #endif		/* __ASM_ARM_OMAP_OPP_H */
>>> diff --git a/arch/arm/plat-omap/opp.c b/arch/arm/plat-omap/opp.c
>>> index a3dea82..72dd62a 100644
>>> --- a/arch/arm/plat-omap/opp.c
>>> +++ b/arch/arm/plat-omap/opp.c
>>> @@ -502,3 +502,31 @@ void opp_init_cpufreq_table(struct device *dev,
>>>
>>>  	*table = &freq_table[0];
>>>  }
>>> +
>>> +struct device **opp_init_voltage_params(struct voltagedomain *voltdm,
>>> +					int *dev_count)
>>> +{
>>> +	struct device_opp *dev_opp;
>>> +	struct device **dev_list;
>>> +	int count = 0, i = 0;
>>> +
>>> +	list_for_each_entry(dev_opp, &dev_opp_list, node) {
>>> +		if (!dev_opp->oh->vdd_name)
>>> +			continue;
>>> +
>>> +		if (!strcmp(dev_opp->oh->vdd_name, voltdm->name)) {
>>> +			dev_opp->oh->voltdm = voltdm;
>>
>>Couldn't we assign the voltdm at opp_add() time since you added it as
>>part of the hwmod?

We cannot as the voltage layer is not initialized at the point of opp_add.
Having said this, today voltage layer is dependent on opp layer only to figure out 
the current nominal voltage from the opp table. If that can be some how decoupled we
can initialize voltage layer early on and implement this.

Regards
Thara
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux