ACPI Korrekturen für das Samsung P10

[English translation]
Diese Seite ist verlinkt von TuxMobil, Dank an Werner Heuser. Mehr Infos zu Samsung Laptops unter Linux (und zu allen anderen Herstellern) finden sich dort.

Dieser Text betrifft das BIOS "Phoenix BIOS 6.0" in den Versionen 04AE bis 08AE des Samsung P10 Laptops. Andere Versionen haben möglicherweise ähnliche, aber wohl nur selten das gleiche Problem und ich garantiere noch nicht einmal, dass alle Laptops mit dieser Version mit diesen Korrekturen zu Recht kommen.

Übrigens bringt Samsung durchaus von Zeit zu Zeit neue BIOS Versionen heraus, nur scheinen es keinen wirklichen Anreiz zu geben, damit auch die offensichtlichen Probleme zu lösen.

Bei mir lässt sich damit alles zum Laufen bringen (Batterieanzeige, Thermo-Überwachung, Speedstep, ...), nur die Status-Anzeige (Fn-F2) führt zu Instabilitäten (bis zum Absturz des Systems!). Wer also diesen Patch installiert, sollte davon Abstand nehmen, diese Tastenkombination zu verwenden.

WARNUNG: WER DEN HINWEISEN AUF DIESER SEITE FOLGT KANN DADURCH ERNSTHAFT SEINEN LAPTOP BESCHÄDIGEN.
Ich sehe diese Warnung als verstanden an.

Soviel dazu. Als ich versuchte, auf meinem Samsung P10 vernünftig ACPI zum Laufen zu bekommen, waren meine ersten Versuche alles andere als erfolgreich. Unter Linux waren die Verzeichnisse /proc/acpi/{battery,ac_adapter,thermal_zone} leer, also fehlten dem System jegliche Informationen über den Zustand der Batterie oder die Temperatur des Prozessors. "dmesg" zeigte diesbezüglich eine Reihe Fehlermeldungen des ACPI Systems, so etwas wie "method execution failed [\_SB.BAT1._STA] AE_AML_NO_RETURN_VALUE".

Nach einigem Suchen in Web und News-Groups, sowie einigen esperimentellen Fehlversuchen konnte ich in Erfahrung bringen, dass meine DSDT fehlerhaft war. Das ist eine der ACPI-BIOS-Tabellen, die dem Betriebsystem Aufschluss darüber gibt, welche ACPI-fähigen Bestandteile im System existieren und wie die einzelnen ACPI-Funktionen im System aufzurufen sind. Wenn diese Tabelle fehlerhaft ist, hat das Betriebsystem keine Möglichkeit, ACPI zu verwenden.

Dann fand ich irgendwann auch dieses Howto das mehr oder weniger genau beschreibt, wie ich auch schneller hätte dort hin kommen können.

Jedenfalls hatte ich anfangs keine Ahnung von DSDTs, DSL, AML und ACPI überhaupt, so dass ich einige Zeit investieren musste, um voranzukommen.

Was zu tun ist:

Zuerst einmal muss die im 2.4er Kernel enthaltene ACPI Version durch eine aktuelle ersetzt werden. Das geht durch diesen Patch. In meinem Fall betraf das die Kernel-Versionen 2.4.21-pre[34]. Der Kernel 2.[56].xx enthält bereits einen großen Teil davon, aber auch dafür gibt es aktuelle Patches.

Wer selbst ein bisschen mit der DSDT herumspielen möchte bzw. muss, braucht als allererstes den Intel iasl Compiler aus dem ACPI CA unix build environment. Dann kann es nichts schaden, sich das oben bereits erwähnte Howto durchzulesen, um zu sehen, was genau mit der DSDT anzustellen ist. Für den Anfang sollte ein Kernel mit ACPI-Unterstützung erstellt und gebootet werden, um aus "dmesg" die jeweiligen Fehlermeldungen ablesen zu können. Auch wird es dadurch direkt eine Kopie der DSDT unter /proc/acpi/dsdt verfügbar. Da diese so nicht zu lesen ist, muss sie erst mit Hilfe von iasl disassembliert werden. Danach ist es dann dem eigenen Geschick überlassen, ob es gelingt, die DSDT zu reparieren, ohne dabei das eigene System schrottreif zu hinterlassen. Wem dies gelingt, der kann danach voller Stolz (oder Wut) eine Mail an Samsung schreiben, mit der Bitte um ein BIOS-Update und sollte dabei nicht vergessen, anzudeuten, was von fehlerhaften BIOS-Implementierungen i.A. zu halten ist.

Wer nicht selbst mit der DSDT herumspielen möchte, sondern einfach nur alles zum Laufen bringen will, sollte mit obiger Warnung im Hinterkopf weiterlesen.

Zuerst einmal sollte ein ACPI-fähiger Kernel gebootet werden, damit sichergestellt werden kann, dass die DSDT unter /proc/acpi/dsdt auch wirklich mit der im tar-Archiv übereinstimmt. Wenn sie das nicht tut, sollte vom direkten Ersetzen durch meine korrigierte Version Abstand genommen werden! In dem Fall müsst ihr selbst mit Hilfe von iasl Hand anlegen, schaut in den Absatz oben. Dabei kann euch aber vielleicht das enthaltene diff helfen, das meine Korrekturen sichtbar macht. Meine korrigierte DSDT ist dann natürlich der wichtigste Teil.
Um meine korrigierte DSDT-Version zu benutzen, benötigt ihr zuerst diesen Patch für euren ACPI Kernel, zu dem ihr dann die korrigierte DSDT in die Datei drivers/acpi/my-dsdt.hex im Kernel Verzeichnis entpacken müsst. Die ".hex"-Datei ist übrigens direkt mit iasl erstellt, Option "-tc".

Hier sind die Archive für die verschiedenen BIOS-Versionen. Da Samsung anscheinend kein großes Interesse an einer fehlerfreien ACPI-Implementierung hat, unterscheiden sie sich nur marginal:

04AE, 06AE, 07AE

Konfiguriert den Kernel mit allen ACPI-Treibern (Batterie, Netzteil (AC), Lüfter, Tasten, Prozessor und Temperatur). Der Patch benötigt noch ein "make dep", danach könnt ihr den Kernel kompilieren und zusätzlich zum bisherigen installieren. Lasst in jedem Fall die Möglichkeit offen, den alten wieder zu booten, falls mit der DSDT etwas nicht stimmt.

Nun schaut in die Ausgabe von dmesg, wenn alles gut gelaufen ist, sollte dort stehen, dass die DSDT ersetzt wurde und die ACPI-Fehler sollten verschwunden sein.

Der nächste Blick gehört dann /proc/acpi. Dort sollte sich ein Unterverzeichnis für jeden Treiber finden, das jeweils wieder mindestens ein Unterverzeichnis enthält (benannt ADP1, BAT1, usw.). Nun solltet ihr die Informationen überprüfen, die sich in den Dateien dort finden und nachschauen, ob diese glaubhaft aussehen.

Anmerkung am Rande: Bisher habe ich swsusp noch nicht zum Laufen bekommen und S4BIOS (über die Suspend-to-Disk Partition) nicht ausprobiert. Erwartet dort also keine Wunder durch meinen Patch.

Das ist eigentlich schon alles. Schickt etwaige Kommentare zu dieser Seite und den Patches ruhig an mich, bedenkt aber, dass für allgemeine Fragen die ACPI Mailing-Listen bei Sourceforge wesentlich besser geeignet sind. Schaut ruhig auch mal in deren Archiv...

Viel Glück!

Stefan Behnel, stefan /bei/ behnel.de