Samsung P35 XVM 1500 - SuSE Linux 9.3 - 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
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

Intel ACPI Component Architecture
ASL Optimizing Compiler / AML Disassembler version 20030918 [Sep 18 2003]
Copyright (C) 2000 - 2003 Intel Corporation
Supports ACPI Specification Revision 2.0b

ASL Input:  dsdt.dsl - 5042 lines, 173225 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 reiserfs msr
Kernel image:   /boot/vmlinuz-2.6.11.4-20a-default.old
Initrd image:   /boot/initrd-2.6.11.4-20a-default.old
Shared libs:    lib/ld-2.3.4.so lib/libblkid.so.1.0 
                lib/libc.so.6 lib/libselinux.so.1
                lib/libuuid.so.1.2
No modules.pcimap file found
Cannot determine dependencies of module piix.
 Is modules.dep up to date?
Cannot determine dependencies of module reiserfs.
 Is modules.dep up to date?
Cannot determine dependencies of module msr.
 Is modules.dep up to date?
Driver modules:
none
Filesystem modules:
Including:      klibc initramfs udev fsck.reiserfs
Bootsplash:     SuSE (1024x768)
ACPI DSDT:      /etc/DSDT.aml
5294 blocks

Kernel image:   /boot/vmlinuz-2.6.11.4-21.9-default
Initrd image:   /boot/initrd-2.6.11.4-21.9-default
Shared libs:    lib/ld-2.3.4.so lib/libblkid.so.1.0 
                lib/libc.so.6 lib/libselinux.so.1 
                lib/libuuid.so.1.2

Driver modules: kernel/drivers/ide/ide-core.ko 
                kernel/drivers/ide/pci/piix.ko 
                kernel/arch/i386/kernel/msr.ko 
                kernel/drivers/ide/ide-disk.ko 
                kernel/drivers/cdrom/cdrom.ko 
                kernel/drivers/ide/ide-cd.ko
Filesystem modules:     kernel/fs/reiserfs/reiserfs.ko
Including:      klibc initramfs udev fsck.reiserfs
Bootsplash:     SuSE (1024x768)
ACPI DSDT:      /etc/DSDT.aml
6333 blocks
tuxBook:~/dsdt #

Nach einem Neustart wird die DTSD Tabelle duch den Kernel geladen

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

Hier noch der vorher/nachher trip_points Vergleich

Vorher:

steve@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:

steve@tuxBook:~> cat /proc/acpi/thermal_zone/THRM/trip_points
critical (S5):           105 C
passive:                 99 C: tc1=0 tc2=9 tsp=50 devices=0xdff6e560
active[0]:               56 C: devices=0xdfdf5ae0

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.