linux/drivers/acpi
Thomas Renninger e2f74f355e [ACPI/CPUFREQ] Introduce bios_limit per cpu cpufreq sysfs interface
This interface is mainly intended (and implemented) for ACPI _PPC BIOS
frequency limitations, but other cpufreq drivers can also use it for
similar use-cases.

Why is this needed:

Currently it's not obvious why cpufreq got limited.
People see cpufreq/scaling_max_freq reduced, but this could have
happened by:
  - any userspace prog writing to scaling_max_freq
  - thermal limitations
  - hardware (_PPC in ACPI case) limitiations

Therefore export bios_limit (in kHz) to:
  - Point the user that it's the BIOS (broken or intended) which limits
    frequency
  - Export it as a sysfs interface for userspace progs.
    While this was a rarely used feature on laptops, there will appear
    more and more server implemenations providing "Green IT" features like
    allowing the service processor to limit the frequency. People want
    to know about HW/BIOS frequency limitations.

All ACPI P-state driven cpufreq drivers are covered with this patch:
  - powernow-k8
  - powernow-k7
  - acpi-cpufreq

Tested with a patched DSDT which limits the first two cores (_PPC returns 1)
via _PPC, exposed by bios_limit:
# echo 2200000 >cpu2/cpufreq/scaling_max_freq
# cat cpu*/cpufreq/scaling_max_freq
2600000
2600000
2200000
2200000
# #scaling_max_freq shows general user/thermal/BIOS limitations

# cat cpu*/cpufreq/bios_limit
2600000
2600000
2800000
2800000
# #bios_limit only shows the HW/BIOS limitation

CC: Pallipadi Venkatesh <venkatesh.pallipadi@intel.com>
CC: Len Brown <lenb@kernel.org>
CC: davej@codemonkey.org.uk
CC: linux@dominikbrodowski.net

Signed-off-by: Thomas Renninger <trenn@suse.de>
Signed-off-by: Dave Jones <davej@redhat.com>
2009-11-24 13:33:34 -05:00
..
acpica ACPICA: avoid "Info: mapping multiple BARs. Your kernel is fine." 2009-11-05 17:01:58 -05:00
ac.c ACPI: add AC/DC notifier 2009-10-06 13:55:56 -04:00
acpi_memhotplug.c Merge branch 'bjorn-start-stop-2.6.32' into release 2009-09-19 01:56:39 -04:00
acpi_pad.c ACPI: create Processor Aggregator Device driver 2009-07-31 18:23:34 -04:00
battery.c Merge branch 'battery' into release 2009-09-19 01:56:17 -04:00
blacklist.c Merge branch 'sfi-base' into release 2009-09-19 00:37:13 -04:00
bus.c ACPI: add acpi_bus_get_status_handle() 2009-09-25 14:24:30 -04:00
button.c ACPI button: don't try to use a non-existent lid device 2009-10-13 02:53:30 -04:00
cm_sbs.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
container.c Merge branch 'acpica' into release 2009-09-19 01:45:22 -04:00
debug.c acpi: switch /proc/acpi/{debug_layer,debug_level} to seq_file 2009-09-19 01:38:57 -04:00
dock.c ACPI: dock: fix "sibiling" typo 2009-10-03 01:08:28 -04:00
ec.c Merge branch 'bugzilla-14081' into release 2009-10-03 01:31:34 -04:00
event.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
fan.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
glue.c Merge branch 'acpica' into release 2009-09-19 01:45:22 -04:00
internal.h ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
Kconfig ACPI: Kconfig, fix proc aggregator text 2009-10-09 13:14:51 -04:00
Makefile Merge branch 'acpi-pad' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2009-10-04 15:03:00 -07:00
numa.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
osl.c ACPI: Clarify resource conflict message 2009-09-27 03:12:13 -04:00
pci_bind.c ACPI: kill acpi_get_pci_id 2009-06-17 23:32:23 -04:00
pci_irq.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
pci_link.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
pci_root.c ACPI / PCI: Fix NULL pointer dereference in acpi_get_pci_dev() (rev. 2) 2009-10-13 01:14:53 -04:00
pci_slot.c Merge branch 'misc-2.6.32' into release 2009-09-19 02:14:45 -04:00
power_meter.c acpi-power-meter: Don't leak ACPI error codes to userspace 2009-11-05 12:25:39 -05:00
power.c Merge branch 'sfi-base' into release 2009-09-19 00:37:13 -04:00
proc.c ACPI: clean up video.c boundary checks and types 2009-10-28 11:49:37 -04:00
processor_core.c ACPI: add __cpuinit to acpi_processor_add() 2009-11-05 16:51:40 -05:00
processor_idle.c ACPI: kill "unused variable ‘i’" warning 2009-09-27 11:58:36 -07:00
processor_perflib.c [ACPI/CPUFREQ] Introduce bios_limit per cpu cpufreq sysfs interface 2009-11-24 13:33:34 -05:00
processor_thermal.c Merge branch 'processor-procfs-2.6.32' into release 2009-09-19 02:10:40 -04:00
processor_throttling.c ACPI: Move dereference after NULL test 2009-11-05 17:30:57 -05:00
reboot.c ACPI: reboot.c: use new acpi_reset interface 2008-12-31 01:15:00 -05:00
sbs.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
sbshc.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
sbshc.h ACPI: SBS: Ignore alarms coming from unknown devices 2007-12-14 15:14:06 -05:00
scan.c ACPI: fix bus scanning memory leaks 2009-10-02 11:03:12 -04:00
sleep.c ACPI: sleep: another HP/Compaq DMI entries for init_set_sci_en_on_resume 2009-11-05 23:13:36 -05:00
sleep.h ACPI: convert acpi_device_lock spinlock to mutex 2009-04-07 00:02:40 -04:00
system.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
tables.c ACPI: check acpi_disabled in acpi_table_parse() and acpi_table_parse_entries() 2009-08-28 19:57:28 -04:00
thermal.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
utils.c ACPI: Move definition of PREFIX from acpi_bus.h to internal..h 2009-08-28 19:57:27 -04:00
video_detect.c ACPI: video: Loosen strictness of video bus detection code 2009-10-13 02:50:38 -04:00
video.c ACPI: clean up video.c boundary checks and types 2009-10-28 11:49:37 -04:00
wakeup.c ACPI PM: Replace wakeup.prepared with reference counter 2009-09-09 14:19:18 -07:00