X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fpower%2Frte_power.c;h=3cba56bac9c276f0354c03b5b8174112905cdb9e;hb=ef1cc88f1837;hp=98eaba9154552327f3d8902ccc591d26d8c74db0;hpb=e8c90926bddec034bfdb753044c001aa90e4d1f8;p=dpdk.git diff --git a/lib/power/rte_power.c b/lib/power/rte_power.c index 98eaba9154..3cba56bac9 100644 --- a/lib/power/rte_power.c +++ b/lib/power/rte_power.c @@ -7,6 +7,7 @@ #include "rte_power.h" #include "power_acpi_cpufreq.h" +#include "power_cppc_cpufreq.h" #include "power_kvm_vm.h" #include "power_pstate_cpufreq.h" #include "power_common.h" @@ -54,6 +55,8 @@ rte_power_check_env_supported(enum power_management_env env) return power_pstate_cpufreq_check_supported(); case PM_ENV_KVM_VM: return power_kvm_vm_check_supported(); + case PM_ENV_CPPC_CPUFREQ: + return power_cppc_cpufreq_check_supported(); default: rte_errno = EINVAL; return -1; @@ -110,6 +113,18 @@ rte_power_set_env(enum power_management_env env) rte_power_freq_disable_turbo = power_pstate_disable_turbo; rte_power_get_capabilities = power_pstate_get_capabilities; + } else if (env == PM_ENV_CPPC_CPUFREQ) { + rte_power_freqs = power_cppc_cpufreq_freqs; + rte_power_get_freq = power_cppc_cpufreq_get_freq; + rte_power_set_freq = power_cppc_cpufreq_set_freq; + rte_power_freq_up = power_cppc_cpufreq_freq_up; + rte_power_freq_down = power_cppc_cpufreq_freq_down; + rte_power_freq_min = power_cppc_cpufreq_freq_min; + rte_power_freq_max = power_cppc_cpufreq_freq_max; + rte_power_turbo_status = power_cppc_turbo_status; + rte_power_freq_enable_turbo = power_cppc_enable_turbo; + rte_power_freq_disable_turbo = power_cppc_disable_turbo; + rte_power_get_capabilities = power_cppc_get_capabilities; } else { RTE_LOG(ERR, POWER, "Invalid Power Management Environment(%d) set\n", env); @@ -153,6 +168,8 @@ rte_power_init(unsigned int lcore_id) return power_kvm_vm_init(lcore_id); case PM_ENV_PSTATE_CPUFREQ: return power_pstate_cpufreq_init(lcore_id); + case PM_ENV_CPPC_CPUFREQ: + return power_cppc_cpufreq_init(lcore_id); default: RTE_LOG(INFO, POWER, "Env isn't set yet!\n"); } @@ -172,6 +189,13 @@ rte_power_init(unsigned int lcore_id) goto out; } + RTE_LOG(INFO, POWER, "Attempting to initialise CPPC power management...\n"); + ret = power_cppc_cpufreq_init(lcore_id); + if (ret == 0) { + rte_power_set_env(PM_ENV_CPPC_CPUFREQ); + goto out; + } + RTE_LOG(INFO, POWER, "Attempting to initialise VM power management...\n"); ret = power_kvm_vm_init(lcore_id); if (ret == 0) { @@ -194,6 +218,8 @@ rte_power_exit(unsigned int lcore_id) return power_kvm_vm_exit(lcore_id); case PM_ENV_PSTATE_CPUFREQ: return power_pstate_cpufreq_exit(lcore_id); + case PM_ENV_CPPC_CPUFREQ: + return power_cppc_cpufreq_exit(lcore_id); default: RTE_LOG(ERR, POWER, "Environment has not been set, unable to exit gracefully\n");