# Dsdt - acpi

## flammenflitzer

Hallo

Ich habe Probleme mit speedstep.

```
localhost boot # dmesg | grep DSDT
```

 Nichts. Jetzt dachte ich, ich könnte DSDT aus dem Bios auslesen und die Tabelle beim Booten laden.

```
http://page.mi.fu-berlin.de/chjacob/samsung/samsung.html#acpi
```

```
emerge pmtools
```

```

localhost olaf # /usr/sbin/acpidump  >> /tmp/ACPI
```

```
localhost olaf # /usr/bin/acpixtract-pmtools -l /tmp/ACPI

Signature Length  OemId     OemTableId   OemRevision CompilerId

CompilerRevision

    DSDT   29672  "NVIDIA"  "AWRDACPI"    00001000    "MSFT"

03000000

    FACS      64

    FACP     244  "Nvidia"  "ASUSACPI"    42302E31    "AWRD"

00000000

    HPET      56  "Nvidia"  "ASUSACPI"    42302E31    "AWRD"

00000098

    MCFG      60  "Nvidia"  "ASUSACPI"    42302E31    "AWRD"

00000000

    APIC     152  "Nvidia"  "ASUSACPI"    42302E31    "AWRD"

00000000

    SSDT     772  "Nvidia"  "ASUSACPI"    42302E31    "AWRD"

00000000

    XSDT      76  "Nvidia"  "ASUSACPI"    42302E31    "AWRD"

00000000

    RSDP          "Nvidia"

Found 9 ACPI tables [20060324]
```

```
localhost olaf # cd /root

localhost ~ # mkdir ACPI

localhost ~ # cd ACPI
```

```
localhost olaf # /usr/bin/acpixtract-pmtools -a /tmp/ACPI

Acpi table [DSDT] -  29672 bytes written to DSDT.dat

Acpi table [FACS] -     64 bytes written to FACS.dat

Acpi table [FACP] -    244 bytes written to FACP.dat

Acpi table [HPET] -     56 bytes written to HPET.dat

Acpi table [MCFG] -     60 bytes written to MCFG.dat

Acpi table [APIC] -    152 bytes written to APIC.dat

Acpi table [SSDT] -    772 bytes written to SSDT.dat

Acpi table [XSDT] -     76 bytes written to XSDT.dat

Acpi table [RSDP] -     36 bytes written to RSDP.dat
```

```
localhost ACPI # ls

APIC.dat  FACP.dat  HPET.dat  RSDP.dat  XSDT.dat

DSDT.dat  FACS.dat  MCFG.dat  SSDT.dat
```

```

localhost ACPI # iasl -d /root/ACPI/DSDT.dat

Intel ACPI Component Architecture

AML Disassembler version 20060912 [Aug 23 2007]

Copyright (C) 2000 - 2006 Intel Corporation

Supports ACPI Specification Revision 3.0a

Loading Acpi table from file /root/ACPI/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"
```

```
localhost ACPI # iasl -tc DSDT.dsl

Intel ACPI Component Architecture

ASL Optimizing Compiler version 20060912 [Aug 23 2007]

Copyright (C) 2000 - 2006 Intel Corporation

Supports ACPI Specification Revision 3.0a

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

Warning  1079 -                 ^ Reserved method must return a value

(_WAK)

DSDT.dsl  6268:                 Method (GSLI, 1, NotSerialized)

Warning  1086 -                            ^ Not all control paths

return a value (GSLI)

ASL Input:  DSDT.dsl - 8450 lines, 259484 bytes, 3279 keywords

AML Output: /root/ACPI/DSDT.aml - 27447 bytes 1073 named objects 2206

executable opcodes

Compilation complete. 0 Errors, 2 Warnings, 0 Remarks, 881 Optimizations
```

```
... Nun muss man dafür sorgen, dass der Kernel nicht die ACPI-Tabelle aus dem Bios benutzt, sondern die modifizierte Tabelle, die man ihm über die RAMDISK übergibt:... (bei mir wird wohl gar nicht die BIOS Tabelle genutzt) 
```

```
localhost grub # cat /boot/grub/menu.lst | grep initrd

initrd /boot/fbsplash-livecd-2007.0-1280x1024
```

Wie bekomme ich das hin?

----------

## blu3bird

Siehe https://forums.gentoo.org/viewtopic.php?t=122145

Punkt 9c beschreibst genau Das was du machen willst. Eventuell könnte auch 9a was für Dich sein, aber KA ob der Patch auch mit nem 2.6er Kernel funktioniert.

----------

## flammenflitzer

Ich habe das mal bei meinenm Ubuntu Testsystem geladen. 

```
root@localhost:/#cp DSDT.aml /etc/initramfs-tools/DSDT.aml 

root@localhost:/#cd  /boot

root@localhost:/boot#mv initrd.img-2.6.22-14-generic 

initrd.img-2.6.22-14-generic-alt

root@localhost:/boot# mkinitramfs `uname -r` -o /boot/initrd.img-`uname -r`
```

reboot

```

olaf@localhost:~$ dmesg | grep DSDT

[    0.000000] ACPI: DSDT 7FEE3240, 73E8 (r1 NVIDIA AWRDACPI     1000 

MSFT  3000000)

[   26.924807] ACPI: Looking for DSDT in initramfs... successfully read 

27447 bytes from /DSDT.aml.

[   26.924825] ACPI: Table DSDT replaced by host OS

[   26.924826] ACPI: DSDT 00000000, 6B37 (r1 NVIDIA AWRDACPI     1000 

INTL 20060912)

[   27.179083] ACPI: EC: Look up EC in DSDT
```

```
olaf@localhost:~$ cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 15

model name      : Intel(R) Core(TM)2 Duo CPU     E6750  @ 2.66GHz

stepping        : 11

cpu MHz         : 800.000

cache size      : 4096 KB

physical id     : 0

siblings        : 2

core id         : 0

cpu cores       : 2

fpu             : yes

fpu_exception   : yes

cpuid level     : 10

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge 

mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall 

lm constant_tsc pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 

lahf_lm

bogomips        : 5337.62

clflush size    : 64

cache_alignment : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:

processor       : 1

vendor_id       : GenuineIntel

cpu family      : 6

model           : 15

model name      : Intel(R) Core(TM)2 Duo CPU     E6750  @ 2.66GHz

stepping        : 11

cpu MHz         : 800.000

cache size      : 4096 KB

physical id     : 0

siblings        : 2MHz 

core id         : 1

cpu cores       : 2

fpu             : yes

fpu_exception   : yes

cpuid level     : 10

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge 

mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall 

lm constant_tsc pni monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 

lahf_lm

bogomips        : 5333.37

clflush size    : 64

cache_alignment : 64

address sizes   : 36 bits physical, 48 bits virtual

power management:
```

 Hat nichts gebracht. Die Tabelle ist wohl nicht korrekt. Oben wurde ja ohne Fehler kompilliert. Aber dr Takt pendelt nach wie vor zwichen 600 und 800 MHz. Sollte doch aber irgendwo zwischen 2 und 2,66 GHz pendeln. Dazu müßte wohl die DSDT manuell überarbeitet werden? Das ist mir zu hoch.

----------

## blu3bird

Ich versteh nicht ganz was dein Problem ist  :Wink: 

Also momentan scheint SpeedStep mit dem OnDemand-Govorner aktiviert zu sein und den Meldungen nach funktioniert es wunderbar.

Willst Du es deaktivieren? Dann kannst Du entweder deinen Kernel komplett ohne SpeedStep kompilieren oder (z.B. mit cpufreq-set) den Govorner auf Performance setzen.

----------

## flammenflitzer

Der Takt wird nur zwischen 600 und 800 Mhz geregelt. Sollte aber zwischen c.a. 2 und 2,66Ghz.

----------

## firefly

 *blu3bird wrote:*   

> Ich versteh nicht ganz was dein Problem ist 
> 
> Also momentan scheint SpeedStep mit dem OnDemand-Govorner aktiviert zu sein und den Meldungen nach funktioniert es wunderbar.
> 
> Willst Du es deaktivieren? Dann kannst Du entweder deinen Kernel komplett ohne SpeedStep kompilieren oder (z.B. mit cpufreq-set) den Govorner auf Performance setzen.

 

sein problem ist, das der prozessor zwischen 600-800 Mhz getaktet werden kann wenn speedstep aktiv ist.

----------

## flammenflitzer

Bin ein kleines Stück weiter. In meiner DSDT.dsl ist der Processor Abschnitt leer. 

```
/*

 * Intel ACPI Component Architecture

 * AML Disassembler version 20060912

 *

 * Disassembly of /root/ACPI/DSDT.dat, Fri Feb  1 21:25:14 2008

 *

 *

 * Original Table Header:

 *     Signature        "DSDT"

 *     Length           0x000073E8 (29672)

 *     Revision         0x01

 *     OEM ID           "NVIDIA"

 *     OEM Table ID     "AWRDACPI"

 *     OEM Revision     0x00001000 (4096)

 *     Creator ID       "MSFT"

 *     Creator Revision 0x03000000 (50331648)

 */

DefinitionBlock ("/root/ACPI/DSDT.aml", "DSDT", 1, "NVIDIA", "AWRDACPI", 0x00001000)

{

    Scope (\_PR)

    {

        Processor (\_PR.CPU0, 0x00, 0x00000000, 0x00) {}

        Processor (\_PR.CPU1, 0x01, 0x00000000, 0x00) {}

        Processor (\_PR.CPU2, 0x02, 0x00000000, 0x00) {}

        Processor (\_PR.CPU3, 0x03, 0x00000000, 0x00) {}

    }
```

 Wie sieht denn der Abschnitt bei Leuten aus, bei denen Speedstep funktioniert?

----------

## flammenflitzer

Hier die ganze Tabelle.

http://www.hostarea.de/backup/server-02/Februar-00d0f568ab.txt

----------

## Gibheer

Hast du mal versucht cpufreq mit dem 2.6.24 ans laufen zu bekommen. Dort wurde was bei speedstep umgestellt und vielleicht geht es nun richtig. Wenn du dann noch den relaxed-modus (ganz unten bei den cpufreq-treibern) in den kernel uebernimmst, sollte es eigentlich gehen.

----------

## flammenflitzer

Ich denke, das ich es ohne die korrekte Tabelle nicht hinbekomme.

Habe jetzt kernel 2.6.24-r3. 

```
/usr/bin/cpufreq-info

cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006

Bitte melden Sie Fehler an linux@brodo.de.

analysiere CPU 0:

  Treiber: acpi-cpufreq

  Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 0

  Hardwarebedingte Grenzen der Taktfrequenz: 600 MHz - 800 MHz

  mögliche Taktfrequenzen: 800 MHz, 600 MHz

  mögliche Regler: conservative, ondemand, userspace, powersave, performance

  momentane Taktik: die Frequenz soll innerhalb 600 MHz und 800 MHz.

                    liegen. Der Regler "performance" kann frei entscheiden,

                    welche Taktfrequenz innerhalb dieser Grenze verwendet wird.

  momentane Taktfrequenz ist 800 MHz  (verifiziert durch Nachfrage bei der Hardware).

analysiere CPU 1:

  Treiber: acpi-cpufreq

  Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 1

  Hardwarebedingte Grenzen der Taktfrequenz: 600 MHz - 800 MHz

  mögliche Taktfrequenzen: 800 MHz, 600 MHz

  mögliche Regler: conservative, ondemand, userspace, powersave, performance

  momentane Taktik: die Frequenz soll innerhalb 600 MHz und 800 MHz.

                    liegen. Der Regler "performance" kann frei entscheiden,

                    welche Taktfrequenz innerhalb dieser Grenze verwendet wird.

  momentane Taktfrequenz ist 800 MHz  (verifiziert durch Nachfrage bei der Hardware).
```

```
Hardwarebedingte Grenzen der Taktfrequenz: 600 MHz - 800 MHz
```

----------

## flammenflitzer

Ich habe jetzt 2 dsdt.dat von Usern, die den gleichen Prozessor nutzen. 

```
iasl -d dsdt.dat
```

```
cat dsdt.dsl | grep Processor

        Processor (CPU0, 0x01, 0x00000410, 0x06) {}

        Processor (CPU1, 0x02, 0x00000410, 0x06) {}

        Processor (CPU2, 0x03, 0x00000410, 0x06) {}

        Processor (CPU3, 0x04, 0x00000410, 0x06) {}
```

 Bei beiden die gleiche Ausgabe. Weiß jemand, ob es ausreicht, wenn ich in meiner Tabelle

```
        Processor (\_PR.CPU0, 0x00, 0x00000000, 0x00) {}

        Processor (\_PR.CPU1, 0x01, 0x00000000, 0x00) {}

        Processor (\_PR.CPU2, 0x02, 0x00000000, 0x00) {}

        Processor (\_PR.CPU3, 0x03, 0x00000000, 0x00) {}
```

 durch obigen Eintrag ersetzte?

----------

## loganik

```
        Processor (P001, 0x01, 0x00000810, 0x06) {}

        Alias (P001, CPU1)

        Processor (CPU1, 0x02, 0x00000000, 0x00) {}

        Alias (P002, CPU2)

        Processor (CPU2, 0x03, 0x00000000, 0x00) {}

        Alias (P003, CPU3)

        Processor (CPU3, 0x04, 0x00000000, 0x00) {}

        Alias (P004, CPU4)

```

...so sieht meins aus, denke auch das da was verkehrt ist - CPU ist E6750 Intel Core 2 Duo 2,66 MHz

----------

