Samsung P35 XVM 1500 - SuSE Linux 10.1 - ACPI

Durch das anpassen der Temperatur Schwellwerte in der DSDT Tabelle kann man das Lüfterverhalten des Samsung P35 optimieren.

Die nötigen Tools heissen bei SuSE pmtools (ACPI-Debugging-Programme) und lassen sich mit YaST nachinstallieren. Eine Aktuelle Version findet man ausserdem bei Intel Download.

Zum späteren Kompilieren verwende ich allerdings eine ältere Version ohne Optimierungen. Auf verschiedenen Seiten und Foren wurde dieser Weg empfohlen. Ich habe die DSDT.dsl mit der alten und der neuen Version kompiliert und konnte bei einem Vergleich beider Dateien Binär keinen Unterschied finden.

Zuerst speichern man die DSDT Tabelle direkt aus dem BIOS in eine Datei und wandelt diese in lesbareren Code um.

tuxBook:~/dsdt # cat /proc/acpi/dsdt > dsdt.aml
tuxBook:~/dsdt # iasl -d dsdt.aml

Intel ACPI Component Architecture
AML Disassembler version 20060127 [Apr 23 2006]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

Loading Acpi table from file dsdt.aml
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"
tuxBook:~/dsdt #

In der Datei dsdt.dsl kann man nun die Temperatur schwellwerte Patchen. Bei meiner Gepatchten Tabelle habe ich die Ein- und Ausschaltwerte jeder Lüfterstufe um 10C erhöht.

Scope (\_TZ)
    {
        Name (FANI, 0x00)
        Name (FAN3, Buffer (0x07)
        {
            0x00, 0x00, 0x00, 0xB8, 0xE5, 0xF6, 0xFF
        })
        Name (FANT, Buffer (0x07)
        {
            0xFF, 0xFF, 0xFF, 0x25, 0x14, 0x09, 0x09
        })
        Name (CMP0, Package (0x02)
        {
            Package (0x02)
            {
                Package (0x0A)
                {
                    0x00, 
                    0x00, 
                    0x2D, 
                    0x48, 
                    0x55, 
                    0x63, 
                    0x69, 
                    0x00, 
                    0x09, 
                    0x32
                }, 

                Package (0x07)
                {
                    0x00, 
                    0x00, 
                    0x00, 
                    0x23, 
                    0x41, 
                    0x4B, 
                    0x5E
                }
            }, 

            Package (0x02)
            {
                Package (0x0A)
                {
                    0x00, 
                    0x00, 
                    0x2D,   // An: Stufe 1 (2Dh = 45C)
                    0x41,   // An: Stufe 2 (41h = 65C)
                    0x55, 
                    0x63, 
                    0x69,   // critical (S5): (69h = 105C)
                    0x00, 
                    0x09, 
                    0x32
                }, 

                Package (0x07)
                {
                    0x00, 
                    0x00, 
                    0x00, 
                    0x23,   // Aus: Stufe 1 (23h = 35C)
                    0x37,   // Aus: Stufe 2 (37h = 55C)
                    0x4B, 
                    0x5E
                }
            }
        })

Auszug aus der Originaltabelle.

Nach dem Patchen muss das gute Stück wieder kompiliert und nach /etc/ kopiert werden

tuxBook:~/dsdt # ./iasl -oa dsdt.dsl
bash: ./iasl: Datei oder Verzeichnis nicht gefunden
tuxBook:~/dsdt # iasl -oa dsdt.dsl

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20060127 [Apr 23 2006]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

ASL Input:  dsdt.dsl - 5534 lines, 200895 bytes, 2348 keywords
AML Output: DSDT.aml - 20738 bytes 598 named objects 
                       1750 executable opcodes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 0 Optimizations
tuxBook:~/dsdt # cp DSDT.aml /etc/DSDT.aml
tuxBook:~/dsdt #

Die DSDT Tabelle ist soweit fertig und muss dem System noch bekannt gemacht werden. Hierzu wird der in der Datei

/etc/sysconfig/kernel

die Zeile ACPI_DSDT="" in

ACPI_DSDT="/etc/DSDT.aml"

Jetzt muss noch die "Initial RAM Disk" geändert werden, damit die fertige DSDT.aml da hinein kopiert wird.

tuxBook:~/dsdt # mkinitrd
Root device:    /dev/hda3 (mounted on / as reiserfs)
Module list:    piix processor thermal fan reiserfs msr (xennet xenblk)

Kernel image:   /boot/vmlinuz-2.6.16.27-0.6-default
Initrd image:   /boot/initrd-2.6.16.27-0.6-default
Shared libs:    lib/ld-2.4.so lib/libacl.so.1.1.0 
                lib/libattr.so.1.1.0 lib/libc-2.4.so 
                lib/libdl-2.4.so lib/libhistory.so.5.1 
                lib/libncurses.so.5.5 lib/libpthread-2.4.so 
                lib/libreadline.so.5.1 lib/librt-2.4.so 
                lib/libuuid.so.1.2

Driver modules: ide-core ide-disk piix processor thermal fan msr
Filesystem modules:     reiserfs
Including:      initramfs fsck.reiserfs
Bootsplash:     SuSE (1400x1050)
ACPI DSDT:      /etc/DSDT.aml
10628 blocks
tuxBook:~/dsdt #

Nach einem Neustart wird die DTSD Tabelle duch den Kernel geladen

tuxBook:~ # cat /var/log/boot.msg | grep "DSDT"
<7gt;ACPI: DSDT (v001 INTEL  ODEM     0x06040000 MSFT 0x0100000e) 
                    @ 0x00000000
<6gt;ACPI: Looking for DSDT in initramfs... found /DSDT.aml ... 
              successfully read 20738 bytes from /DSDT.aml
<6gt;ACPI: Using customized DSDT
<4gt;ACPI (tbget-0282): Table [DSDT] replaced by host OS [20060127]
tuxBook:~ #

Hier noch der vorher/nachher trip_points Vergleich

Vorher:

tuxBook:~ # cat /proc/acpi/thermal_zone/THRM/trip_points
critical (S5):           105 C
passive:                 99 C: tc1=0 tc2=9 tsp=50 devices=0xdff6ec80
active[0]:               45 C: devices=0xc14d7ae0

Nachher:

tuxBook:~ # cat /proc/acpi/thermal_zone/THRM/trip_points
critical (S5):           105 C
passive:                 99 C: tc1=0 tc2=9 tsp=50 devices=0xdfd03c20
active[0]:               56 C: devices=0xdfd039a0
tuxBook:~ #

Durch die VCore Anpassung und der erhöhen Lüfterschwellwerte läuft das Notebook jetzt im "Office"-Betrieb statt mit 45C Dauerlüfter, absolut lautlos bei 45C - 50C.