#
# 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"
	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"
	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"
	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!"
	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!"
	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!"
	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 (available 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 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)"
	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)"
	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"
	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"
	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)"
	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.

