android_kernel_samsung_msm8976/drivers/devfreq/Makefile

27 lines
1.3 KiB
Makefile
Raw Normal View History

CFLAGS_devfreq_trace.o := -I$(src)
PM: Introduce devfreq: generic DVFS framework with device-specific OPPs With OPPs, a device may have multiple operable frequency and voltage sets. However, there can be multiple possible operable sets and a system will need to choose one from them. In order to reduce the power consumption (by reducing frequency and voltage) without affecting the performance too much, a Dynamic Voltage and Frequency Scaling (DVFS) scheme may be used. This patch introduces the DVFS capability to non-CPU devices with OPPs. DVFS is a techique whereby the frequency and supplied voltage of a device is adjusted on-the-fly. DVFS usually sets the frequency as low as possible with given conditions (such as QoS assurance) and adjusts voltage according to the chosen frequency in order to reduce power consumption and heat dissipation. The generic DVFS for devices, devfreq, may appear quite similar with /drivers/cpufreq. However, cpufreq does not allow to have multiple devices registered and is not suitable to have multiple heterogenous devices with different (but simple) governors. Normally, DVFS mechanism controls frequency based on the demand for the device, and then, chooses voltage based on the chosen frequency. devfreq also controls the frequency based on the governor's frequency recommendation and let OPP pick up the pair of frequency and voltage based on the recommended frequency. Then, the chosen OPP is passed to device driver's "target" callback. When PM QoS is going to be used with the devfreq device, the device driver should enable OPPs that are appropriate with the current PM QoS requests. In order to do so, the device driver may call opp_enable and opp_disable at the notifier callback of PM QoS so that PM QoS's update_target() call enables the appropriate OPPs. Note that at least one of OPPs should be enabled at any time; be careful when there is a transition. Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Reviewed-by: Mike Turquette <mturquette@ti.com> Acked-by: Kevin Hilman <khilman@ti.com> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
2011-10-01 22:19:15 +00:00
obj-$(CONFIG_PM_DEVFREQ) += devfreq.o
obj-$(CONFIG_PM_DEVFREQ) += devfreq_trace.o
obj-$(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) += governor_simpleondemand.o
obj-$(CONFIG_DEVFREQ_GOV_PERFORMANCE) += governor_performance.o
obj-$(CONFIG_DEVFREQ_GOV_POWERSAVE) += governor_powersave.o
obj-$(CONFIG_DEVFREQ_GOV_USERSPACE) += governor_userspace.o
obj-$(CONFIG_DEVFREQ_GOV_CPUFREQ) += governor_cpufreq.o
obj-$(CONFIG_DEVFREQ_GOV_MSM_ADRENO_TZ) += governor_msm_adreno_tz.o
obj-$(CONFIG_DEVFREQ_GOV_MSM_CPUFREQ) += governor_msm_cpufreq.o
obj-$(CONFIG_ARCH_MSM_KRAIT) += krait-l2pm.o
obj-$(CONFIG_MSM_BIMC_BWMON) += bimc-bwmon.o
obj-$(CONFIG_ARMBW_HWMON) += armbw-pm.o
obj-$(CONFIG_MSMCCI_HWMON) += msmcci-hwmon.o
obj-$(CONFIG_DEVFREQ_GOV_MSM_BW_HWMON) += governor_bw_hwmon.o
PM / devfreq: Add cache HW monitor governor The cache HW monitor devfreq governor uses the hardware counters to determine the load on the cache and the appropriate frequency needed to support that load. This governor can be used in conjunction with the cache devfreq device to dynamically scale the cache frequency based on the demand/actual usage from the CPU subsystem. The governor is written to be agnostic of the actual counters used to determine the load. On Krait based CPUs, the governor uses the Krait L2 PM counters which can conflict with certain profiling tools. The Krait L2 performance monitor counters have the capability to count different types of requests going to the L2 cache. They also have the capability to raise interrupts when they overflow. This driver uses those counters to determine the true usage of L2 from the Krait processor subsystem and then recommends L2 frequency based on the measured values and the following tunable parameters. The driver provides various tunables that allow it to be tuned more in favor of power or performance: - cycles_per_high_req: The no. of cache clock cycles that are necessary to efficiently process a high-work request to the cache. A higher value means higher power and potentially higher performance. A lower value means lower power and potentially lower performance. - cycles_per_med_req: The no. of cache clock cycles that are necessary to efficiently process a medium-work request to the cache. A higher value means higher power and potentially higher performance. A lower value means lower power and potentially lower performance. - polling_ms: The sampling period in milliseconds. This only affects the sampling period when cache use is ramping down or is increasing very slowly (See tolerance_mrps). - min_busy: The minimum percentage of time the cache should be busy. This is also applied as a lower bound to the measured busy percentage before it's used in calculations. This has to be lower than or equal to max_busy. Lower values will make the scaling more aggressive. - max_busy: The maximum percentage of time the cache should be busy. This is also applied as an upper bound to the measured busy percentage before it's used in calculations. This has to be greater than or equal to min_busy. Lower values will make the scaling more aggressive. - tolerance_mrps: The minimum increase (in millions of requests per second) in cache requests, compared to previous sample, that will trigger an IRQ to immediately re-evaluate the cache frequency. - decay_rate: The parameter controls the rate at which the history is forgotten when ramping down. This is expressed as a percentage of history to be forgotten. So 100% means ignore history, 0% means never forget the historical max. The default 90% means forget 90% of history each time. - guard_band_mhz: This is a margin that's added to the computed cache frequency to account for the time it takes between the load increasing and the governor/device finishes ramping up the cache frequency. Change-Id: I918ae178cd3c9d14cb7714d7eb312cbbbb0d977b Signed-off-by: Saravana Kannan <skannan@codeaurora.org>
2014-01-22 08:15:33 +00:00
obj-$(CONFIG_DEVFREQ_GOV_MSM_CACHE_HWMON) += governor_cache_hwmon.o
obj-$(CONFIG_DEVFREQ_GOV_MSM_GPUBW_MON) += governor_gpubw_mon.o
obj-$(CONFIG_DEVFREQ_GOV_MSM_GPUBW_MON) += governor_bw_vbif.o
obj-$(CONFIG_DEVFREQ_GOV_SPDM_HYP) += governor_spdm_bw_hyp.o
# DEVFREQ Drivers
obj-$(CONFIG_ARM_EXYNOS4_BUS_DEVFREQ) += exynos4_bus.o
obj-$(CONFIG_MSM_DEVFREQ_DEVBW) += devfreq_devbw.o
obj-$(CONFIG_DEVFREQ_SIMPLE_DEV) += devfreq_simple_dev.o
obj-$(CONFIG_DEVFREQ_SPDM) += devfreq_spdm.o devfreq_spdm_debugfs.o