# x86: (Why) does cpufreq need bios support?

## forgetmenot

Yet another cpufreq scaling not working.  Of course I want to ask the manufacturer (King Young, System is 

Sumicom S635F barebone with CoreDuo L2400), but first would like to learn something about the problem.

```

Linux version 2.6.20-gentoo-r8 (root@tux) (gcc version 4.1.2 (Gentoo 4.1.2 p1.0.1)) #3 SMP

```

Started with 2.6.22, tried 2.6.19 also, using 2.6.20 now because 2.6.22 puts 30% load on one core if connected

to internet, what does not happen with 2.6.20. cpufreq works with neither version.

```

dmesg | grep -e 'ACPI' -e 'CPU'

 BIOS-e820: 000000007f6e0000 - 000000007f6e3000 (ACPI NVS)

 BIOS-e820: 000000007f6e3000 - 000000007f6f0000 (ACPI data)

ACPI: RSDP (v000 IntelR                                ) @ 0x000f8ba0

ACPI: RSDT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x7f6e3040

ACPI: FADT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x7f6e30c0

ACPI: MCFG (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x7f6e79c0

ACPI: MADT (v001 IntelR AWRDACPI 0x42302e31 AWRD 0x00000000) @ 0x7f6e7900

ACPI: DSDT (v001 INTELR AWRDACPI 0x00001000 MSFT 0x03000000) @ 0x00000000

ACPI: PM-Timer IO Port: 0x408

ACPI: Local APIC address 0xfee00000

ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)

ACPI: LAPIC (acpi_id[0x01] lapic_id[0x01] enabled)

ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])

ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])

ACPI: IOAPIC (id[0x02] address[0xfec00000] gsi_base[0])

ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)

ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)

ACPI: IRQ0 used by override.

ACPI: IRQ2 used by override.

ACPI: IRQ9 used by override.

Using ACPI (MADT) for SMP configuration information

Initializing CPU#0

CPU: After generic identify, caps: bfe9fbff 00000000 00000000 00000000 0000c1a9 00000000 00000000

CPU: L1 I cache: 32K, L1 D cache: 32K

CPU: L2 cache: 2048K

CPU: Physical Processor ID: 0

CPU: Processor Core ID: 0

CPU: After all inits, caps: bfe9fbff 00000000 00000000 00002940 0000c1a9 00000000 00000000

Intel machine check reporting enabled on CPU#0.

ACPI: Core revision 20060707

 tbxface-0107 [01] load_tables           : ACPI Tables successfully acquired

ACPI Namespace successfully loaded at root c050ab90

evxfevnt-0089 [02] enable                : Transition to ACPI mode successful

CPU0: Intel Genuine Intel(R) CPU           L2400  @ 1.66GHz stepping 08

Initializing CPU#1

CPU: After generic identify, caps: bfe9fbff 00000000 00000000 00000000 0000c1a9 00000000 00000000

CPU: L1 I cache: 32K, L1 D cache: 32K

CPU: L2 cache: 2048K

CPU: Physical Processor ID: 0

CPU: Processor Core ID: 1

CPU: After all inits, caps: bfe9fbff 00000000 00000000 00002940 0000c1a9 00000000 00000000

Intel machine check reporting enabled on CPU#1.

CPU1: Intel Genuine Intel(R) CPU           L2400  @ 1.66GHz stepping 08

checking TSC synchronization across 2 CPUs: passed.

Brought up 2 CPUs

ACPI: bus type pci registered

ACPI: Interpreter enabled

ACPI: Using IOAPIC for interrupt routing

ACPI: PCI Root Bridge [PCI0] (0000:00)

PCI quirk: region 0400-047f claimed by ICH6 ACPI/GPIO/TCO

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.PEX0._PRT]

ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.HUB0._PRT]

ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 9 *10 11 12 14 15)

ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 *5 7 9 10 11 12 14 15)

ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 *9 10 11 12 14 15)

ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 9 10 *11 12 14 15)

ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 *7 9 10 11 12 14 15)

ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.

ACPI: PCI Interrupt Link [LNK0] (IRQs 3 4 5 7 9 10 11 12 14 15) *0, disabled.

ACPI: PCI Interrupt Link [LNK1] (IRQs *3 4 5 7 9 10 11 12 14 15)

PCI: Using ACPI for IRQ routing

ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 16 (level, low) -> IRQ 16

ACPI: PCI Interrupt 0000:00:02.0[A] -> GSI 16 (level, low) -> IRQ 16

ACPI: Power Button (FF) [PWRF]

ACPI: Power Button (CM) [PWRB]

ACPI: Thermal Zone [THRM] (25 C)

ACPI: PCI Interrupt 0000:00:1f.2[B] -> GSI 19 (level, low) -> IRQ 17

ACPI: PCI Interrupt 0000:00:1d.7[A] -> GSI 23 (level, low) -> IRQ 18

ACPI: PCI Interrupt 0000:00:1d.0[A] -> GSI 23 (level, low) -> IRQ 18

ACPI: PCI Interrupt 0000:00:1d.1[B] -> GSI 19 (level, low) -> IRQ 17

ACPI: PCI Interrupt 0000:00:1d.2[C] -> GSI 18 (level, low) -> IRQ 19

ACPI: PCI Interrupt 0000:00:1d.3[D] -> GSI 16 (level, low) -> IRQ 16

ACPI: PCI Interrupt 0000:00:1e.2[A] -> GSI 17 (level, low) -> IRQ 20

ACPI: PCI Interrupt 0000:02:03.0[A] -> GSI 19 (level, low) -> IRQ 17

ACPI: PCI Interrupt 0000:00:1f.3[B] -> GSI 19 (level, low) -> IRQ 17

ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 16

```

Using kernel parameter 'cpufreq.debug=7', trying to load cpufreq drivers via 

modprobe acpi-cpufreq

modprobe speedstep-centrino

modprobe speedstep-ich,

yields resulting kernel messages:

```

acpi-cpufreq: acpi_cpufreq_init

acpi-cpufreq: acpi_cpufreq_early_init

cpufreq-core: trying to register driver acpi-cpufreq

cpufreq-core: adding CPU 0

acpi-cpufreq: acpi_cpufreq_cpu_init

cpufreq-core: initialization failed

cpufreq-core: adding CPU 1

acpi-cpufreq: acpi_cpufreq_cpu_init

cpufreq-core: initialization failed

cpufreq-core: no CPU initialized for driver acpi-cpufreq

cpufreq-core: unregistering CPU 0

cpufreq-core: unregistering CPU 1

cpufreq-core: trying to register driver centrino

cpufreq-core: adding CPU 0

speedstep-centrino: speedstep-centrino: obtaining ACPI data failed

speedstep-centrino: found unsupported CPU with Enhanced SpeedStep: send /proc/cpuinfo to cpufreq@lists.linux.org.uk

cpufreq-core: initialization failed

cpufreq-core: adding CPU 1

speedstep-centrino: speedstep-centrino: obtaining ACPI data failed

cpufreq-core: initialization failed

cpufreq-core: no CPU initialized for driver centrino

cpufreq-core: unregistering CPU 0

cpufreq-core: unregistering CPU 1

speedstep-lib: x86: 6, model: e

speedstep-ich: Intel(R) SpeedStep(TM) capable processor not found

```

HPET enabled, ACPI enabled, tried SMP or unicore, tried cpufreq stuff either as compiled in or as module: 

No luck.

Patched the sources with linux-phc as described in forum thread

[url]

https://forums.gentoo.org/viewtopic-p-4167122-highlight-cpufreq.html#4167122

[/url]

No success.

Bios (Phoenix Award 6.00) has no Speedstep option.

How can I determine if bios is the problem?

What has ACPI to do with cpufreq?

What does bios do about all that?

Any workaround, for example some M$-windows-tool I could run under wine?

I just want to bring down CPU frequency to 1GHz, what the powersave driver would do.

TIA

forgetmenot

----------

## didymos

If the BIOS has disabled SpeedStep (or whatever they're calling it now) then I think you're basically SOL, although this looks like a potential source of hope:

```

speedstep-centrino: found unsupported CPU with Enhanced SpeedStep: send /proc/cpuinfo to cpufreq@lists.linux.org.uk

```

There are some tools for Windows (don't know about Linux.  Haven't actually looked) which can access normally hidden BIOS capabilities.  It may be the BIOS supports SpeedStep just fine, but the people who made the motherboard decided to disable it and hide the functionality.

----------

## forgetmenot

```

speedstep-centrino: found unsupported CPU with Enhanced SpeedStep: send /proc/cpuinfo to cpufreq@lists.linux.org.uk 

```

Not really a source of hope: Other people using a L2400 have no problem with cpufreq.

Mailed there anyway.

Had a look into acpi-stuff. Looks damn complicated.

```

>cat /proc/acpi/dsdt > DSDT.dat

```

```

>iasl -d DSDT.dat

Intel ACPI Component Architecture

AML Disassembler version 20060912 [Aug 29 2007]

Copyright (C) 2000 - 2006 Intel Corporation

Supports ACPI Specification Revision 3.0a

Loading Acpi table from file DSDT.dat

Acpi table [DSDT] successfully installed and loaded

Pass 1 parse of [DSDT]

Pass 2 parse of [DSDT]

Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

...........................................................................................................................................

...........................................................................................................................................

.......................................................................................................................

Parsing completed

Disassembly completed, written to "DSDT.dsl"

```

```

>iasl -sa DSDT.dsl 

Intel ACPI Component Architecture

ASL Optimizing Compiler version 20060912 [Aug 29 2007]

Copyright (C) 2000 - 2006 Intel Corporation

Supports ACPI Specification Revision 3.0a

DSDT.dsl   367:     Method (\_WAK, 1, NotSerialized)

Warning  1079 -                 ^ Reserved method must return a value (_WAK)

DSDT.dsl   394:             Store (Local0, Local0)

Error    4049 -                         ^ Method local variable is not initialized (Local0)

DSDT.dsl   399:             Store (Local0, Local0)

Error    4049 -                         ^ Method local variable is not initialized (Local0)

ASL Input:  DSDT.dsl - 5481 lines, 175684 bytes, 1858 keywords

Compilation complete. 2 Errors, 1 Warnings, 0 Remarks, 627 Optimizations

```

Are these 2 errors likely to be related with my cpufreq-problem?

TIA

----------

## forgetmenot

Ok, Bios has no Speedstep support and manufacturer (King Young, TW) confirmed that Sumicom products

do not support this. No workaround.

HTH

forgetmenot

----------

