#
# x86 CPU Frequency scaling drivers
#

config X86_INTEL_PSTATE
       bool "Intel P state control"
       depends on X86
       help
          This driver provides a P state for Intel core processors.
	  The driver implements an internal governor and will become
          the scaling driver and governor for Sandy bridge processors.

	  When this driver is enabled it will become the perferred
          scaling driver for Sandy bridge processors.

	  If in doubt, say N.

config X86_PCC_CPUFREQ
	tristate "Processor Clocking Control interface driver"
	depends on ACPI && ACPI_PROCESSOR
	help
	  This driver adds support for the PCC interface.

	  For details, take a look at:
	  <file:Documentation/cpu-freq/pcc-cpufreq.txt>.

	  To compile this driver as a module, choose M here: the
	  module will be called pcc-cpufreq.

	  If in doubt, say N.

config X86_ACPI_CPUFREQ
	tristate "ACPI Processor P-States driver"
	select CPU_FREQ_TABLE
	depends on ACPI_PROCESSOR
	help
	  This driver adds a CPUFreq driver which utilizes the ACPI
	  Processor Performance States.
	  This driver also supports Intel Enhanced Speedstep and newer
	  AMD CPUs.

	  To compile this driver as a module, choose M here: the
	  module will be called acpi-cpufreq.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_ACPI_CPUFREQ_CPB
	default y
	bool "Legacy cpb sysfs knob support for AMD CPUs"
	depends on X86_ACPI_CPUFREQ && CPU_SUP_AMD
	help
	  The powernow-k8 driver used to provide a sysfs knob called "cpb"
	  to disable the Core Performance Boosting feature of AMD CPUs. This
	  file has now been superseeded by the more generic "boost" entry.

	  By enabling this option the acpi_cpufreq driver provides the old
	  entry in addition to the new boost ones, for compatibility reasons.

config ELAN_CPUFREQ
	tristate "AMD Elan SC400 and SC410"
	select CPU_FREQ_TABLE
	depends on MELAN
	---help---
	  This adds the CPUFreq driver for AMD Elan SC400 and SC410
	  processors.

	  You need to specify the processor maximum speed as boot
	  parameter: elanfreq=maxspeed (in kHz) or as module
	  parameter "max_freq".

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config SC520_CPUFREQ
	tristate "AMD Elan SC520"
	select CPU_FREQ_TABLE
	depends on MELAN
	---help---
	  This adds the CPUFreq driver for AMD Elan SC520 processor.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.


config X86_POWERNOW_K6
	tristate "AMD Mobile K6-2/K6-3 PowerNow!"
	select CPU_FREQ_TABLE
	depends on X86_32
	help
	  This adds the CPUFreq driver for mobile AMD K6-2+ and mobile
	  AMD K6-3+ processors.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_POWERNOW_K7
	tristate "AMD Mobile Athlon/Duron PowerNow!"
	select CPU_FREQ_TABLE
	depends on X86_32
	help
	  This adds the CPUFreq driver for mobile AMD K7 mobile processors.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_POWERNOW_K7_ACPI
	bool
	depends on X86_POWERNOW_K7 && ACPI_PROCESSOR
	depends on !(X86_POWERNOW_K7 = y && ACPI_PROCESSOR = m)
	depends on X86_32
	default y

config X86_POWERNOW_K8
	tristate "AMD Opteron/Athlon64 PowerNow!"
	select CPU_FREQ_TABLE
	depends on ACPI && ACPI_PROCESSOR && X86_ACPI_CPUFREQ
	help
	  This adds the CPUFreq driver for K8/early Opteron/Athlon64 processors.
	  Support for K10 and newer processors is now in acpi-cpufreq.

	  To compile this driver as a module, choose M here: the
	  module will be called powernow-k8.

	  For details, take a look at <file:Documentation/cpu-freq/>.

config X86_AMD_FREQ_SENSITIVITY
	tristate "AMD frequency sensitivity feedback powersave bias"
	depends on CPU_FREQ_GOV_ONDEMAND && X86_ACPI_CPUFREQ && CPU_SUP_AMD
	help
	  This adds AMD-specific powersave bias function to the ondemand
	  governor, which allows it to make more power-conscious frequency
	  change decisions based on feedback from hardware (availble on AMD
	  Family 16h and above).

	  Hardware feedback tells software how "sensitive" to frequency changes
	  the CPUs' workloads are. CPU-bound workloads will be more sensitive
	  -- they will perform better as frequency increases. Memory/IO-bound
	  workloads will be less sensitive -- they will not necessarily perform
	  better as frequency increases.

	  If in doubt, say N.

config X86_GX_SUSPMOD
	tristate "Cyrix MediaGX/NatSemi Geode Suspend Modulation"
	depends on X86_32 && PCI
	help
	 This add the CPUFreq driver for NatSemi Geode processors which
	 support suspend modulation.

	 For details, take a look at <file:Documentation/cpu-freq/>.

	 If in doubt, say N.

config X86_SPEEDSTEP_CENTRINO
	tristate "Intel Enhanced SpeedStep (deprecated)"
	select CPU_FREQ_TABLE
	select X86_SPEEDSTEP_CENTRINO_TABLE if X86_32
	depends on X86_32 || (X86_64 && ACPI_PROCESSOR)
	help
	  This is deprecated and this functionality is now merged into
	  acpi_cpufreq (X86_ACPI_CPUFREQ). Use that driver instead of
	  speedstep_centrino.
	  This adds the CPUFreq driver for Enhanced SpeedStep enabled
	  mobile CPUs.  This means Intel Pentium M (Centrino) CPUs
	  or 64bit enabled Intel Xeons.

	  To compile this driver as a module, choose M here: the
	  module will be called speedstep-centrino.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_SPEEDSTEP_CENTRINO_TABLE
	bool "Built-in tables for Banias CPUs"
	depends on X86_32 && X86_SPEEDSTEP_CENTRINO
	default y
	help
	  Use built-in tables for Banias CPUs if ACPI encoding
	  is not available.

	  If in doubt, say N.

config X86_SPEEDSTEP_ICH
	tristate "Intel Speedstep on ICH-M chipsets (ioport interface)"
	select CPU_FREQ_TABLE
	depends on X86_32
	help
	  This adds the CPUFreq driver for certain mobile Intel Pentium III
	  (Coppermine), all mobile Intel Pentium III-M (Tualatin) and all
	  mobile Intel Pentium 4 P4-M on systems which have an Intel ICH2,
	  ICH3 or ICH4 southbridge.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_SPEEDSTEP_SMI
	tristate "Intel SpeedStep on 440BX/ZX/MX chipsets (SMI interface)"
	select CPU_FREQ_TABLE
	depends on X86_32
	help
	  This adds the CPUFreq driver for certain mobile Intel Pentium III
	  (Coppermine), all mobile Intel Pentium III-M (Tualatin)
	  on systems which have an Intel 440BX/ZX/MX southbridge.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_P4_CLOCKMOD
	tristate "Intel Pentium 4 clock modulation"
	select CPU_FREQ_TABLE
	help
	  This adds the CPUFreq driver for Intel Pentium 4 / XEON
	  processors.  When enabled it will lower CPU temperature by skipping
	  clocks.

	  This driver should be only used in exceptional
	  circumstances when very low power is needed because it causes severe
	  slowdowns and noticeable latencies.  Normally Speedstep should be used
	  instead.

	  To compile this driver as a module, choose M here: the
	  module will be called p4-clockmod.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  Unless you are absolutely sure say N.

config X86_CPUFREQ_NFORCE2
	tristate "nVidia nForce2 FSB changing"
	depends on X86_32
	help
	  This adds the CPUFreq driver for FSB changing on nVidia nForce2
	  platforms.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_LONGRUN
	tristate "Transmeta LongRun"
	depends on X86_32
	help
	  This adds the CPUFreq driver for Transmeta Crusoe and Efficeon processors
	  which support LongRun.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_LONGHAUL
	tristate "VIA Cyrix III Longhaul"
	select CPU_FREQ_TABLE
	depends on X86_32 && ACPI_PROCESSOR
	help
	  This adds the CPUFreq driver for VIA Samuel/CyrixIII,
	  VIA Cyrix Samuel/C3, VIA Cyrix Ezra and VIA Cyrix Ezra-T
	  processors.

	  For details, take a look at <file:Documentation/cpu-freq/>.

	  If in doubt, say N.

config X86_E_POWERSAVER
	tristate "VIA C7 Enhanced PowerSaver (DANGEROUS)"
	select CPU_FREQ_TABLE
	depends on X86_32 && ACPI_PROCESSOR
	help
	  This adds the CPUFreq driver for VIA C7 processors.  However, this driver
	  does not have any safeguards to prevent operating the CPU out of spec
	  and is thus considered dangerous.  Please use the regular ACPI cpufreq
	  driver, enabled by CONFIG_X86_ACPI_CPUFREQ.

	  If in doubt, say N.

comment "shared options"

config X86_SPEEDSTEP_LIB
	tristate
	default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI || X86_P4_CLOCKMOD)

config X86_SPEEDSTEP_RELAXED_CAP_CHECK
	bool "Relaxed speedstep capability checks"
	depends on X86_32 && (X86_SPEEDSTEP_SMI || X86_SPEEDSTEP_ICH)
	help
	  Don't perform all checks for a speedstep capable system which would
	  normally be done. Some ancient or strange systems, though speedstep
	  capable, don't always indicate that they are speedstep capable. This
	  option lets the probing code bypass some of those checks if the
	  parameter "relaxed_check=1" is passed to the module.

