diff options
Diffstat (limited to 'drivers/cpufreq/cpufreq.c')
| -rw-r--r-- | drivers/cpufreq/cpufreq.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 5b9b1c8c4950..f20668c09ce0 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -647,6 +647,21 @@ static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf) | |||
| 647 | return policy->governor->show_setspeed(policy, buf); | 647 | return policy->governor->show_setspeed(policy, buf); |
| 648 | } | 648 | } |
| 649 | 649 | ||
| 650 | /** | ||
| 651 | * show_scaling_driver - show the current cpufreq HW/BIOS limitation | ||
| 652 | */ | ||
| 653 | static ssize_t show_bios_limit(struct cpufreq_policy *policy, char *buf) | ||
| 654 | { | ||
| 655 | unsigned int limit; | ||
| 656 | int ret; | ||
| 657 | if (cpufreq_driver->bios_limit) { | ||
| 658 | ret = cpufreq_driver->bios_limit(policy->cpu, &limit); | ||
| 659 | if (!ret) | ||
| 660 | return sprintf(buf, "%u\n", limit); | ||
| 661 | } | ||
| 662 | return sprintf(buf, "%u\n", policy->cpuinfo.max_freq); | ||
| 663 | } | ||
| 664 | |||
| 650 | #define define_one_ro(_name) \ | 665 | #define define_one_ro(_name) \ |
| 651 | static struct freq_attr _name = \ | 666 | static struct freq_attr _name = \ |
| 652 | __ATTR(_name, 0444, show_##_name, NULL) | 667 | __ATTR(_name, 0444, show_##_name, NULL) |
| @@ -666,6 +681,7 @@ define_one_ro(cpuinfo_transition_latency); | |||
| 666 | define_one_ro(scaling_available_governors); | 681 | define_one_ro(scaling_available_governors); |
| 667 | define_one_ro(scaling_driver); | 682 | define_one_ro(scaling_driver); |
| 668 | define_one_ro(scaling_cur_freq); | 683 | define_one_ro(scaling_cur_freq); |
| 684 | define_one_ro(bios_limit); | ||
| 669 | define_one_ro(related_cpus); | 685 | define_one_ro(related_cpus); |
| 670 | define_one_ro(affected_cpus); | 686 | define_one_ro(affected_cpus); |
| 671 | define_one_rw(scaling_min_freq); | 687 | define_one_rw(scaling_min_freq); |
| @@ -905,6 +921,11 @@ static int cpufreq_add_dev_interface(unsigned int cpu, | |||
| 905 | if (ret) | 921 | if (ret) |
| 906 | goto err_out_kobj_put; | 922 | goto err_out_kobj_put; |
| 907 | } | 923 | } |
| 924 | if (cpufreq_driver->bios_limit) { | ||
| 925 | ret = sysfs_create_file(&policy->kobj, &bios_limit.attr); | ||
| 926 | if (ret) | ||
| 927 | goto err_out_kobj_put; | ||
| 928 | } | ||
| 908 | 929 | ||
| 909 | spin_lock_irqsave(&cpufreq_driver_lock, flags); | 930 | spin_lock_irqsave(&cpufreq_driver_lock, flags); |
| 910 | for_each_cpu(j, policy->cpus) { | 931 | for_each_cpu(j, policy->cpus) { |
