Forummanuelles Setzen der “mtrr”s
Susanne Schneider – Sonntag, 02. September 2007 15:38 Uhr

Seit ich meinem Asus Laptop vom Typ A4K eine Speichererweiterung gegönnt habe (von 2×256 MB auf 1x1GB plus 1×256 MB) habe ich, bedingt durch einen Biosbug (der von Asus seit nunmehr 3 Jahren geflissentlich ignoriert wird), ein Problem mit der Grafikkarte: ich bekomme beim Hochfahren die Fehlermeldung: …no more mtrrs available… was dazu führt, daß die 3D Funktion der ATI Mobility Radeon 9700 out of Order ist.
Ich habe im Netz verschiedene Hinweise gefunden, daß es möglich sein soll, die mtrrs manuell zu setzen und habe das in Suse 9.3, Suse 10.2 und Fedora7 bisher ohne Erfolg versucht.
An dieser Stelle [1] wird ausführlich beschrieben, daß die Aktion auf meinem Laptop unter Debian wohl möglich ist.
Ich bin bisher nur soweit gekommen, daß ich die automatisch gesetzten mtrrs

susanne@linux-s:~> cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size= 16MB: write-back, count=1
reg01: base=0x01000000 ( 16MB), size= 16MB: write-back, count=1
reg02: base=0x02000000 ( 32MB), size= 32MB: write-back, count=1
reg03: base=0x04000000 ( 64MB), size= 64MB: write-back, count=1
reg04: base=0x08000000 ( 128MB), size= 128MB: write-back, count=1
reg05: base=0x10000000 ( 256MB), size= 256MB: write-back, count=1
reg06: base=0x20000000 ( 512MB), size= 512MB: write-back, count=1
reg07: base=0x40000000 (1024MB), size=1024MB: write-back, count=1

sehr wohl löschen konnte mit dem Befehl

echo “disable=$i” >| /proc/mtrr; (für $i natürlich dann 0 bis 7)

, aber das neu setzen gelingt nicht, ich bekomme bei dem Befehl:

echo “base=0x00000000 size=0x50000000 type=write-back” >| /proc/mtrr

, egal, ob er nun in der boot.local steht [2] oder manuell in die shell eingetippt wird, folgende Fehlermeldung:

echo: write error: invalid argument

hat jemand vielleicht einen Tip für mich, was ich falsch mache?

[1] http://natonelbronx.wordpress.com/asusa4k-mtrr-solution/
[2] http://phpfi.com/260263

1 Antwort
Rico Rommel – Montag, 03. September 2007 20:36 Uhr

Hallo Susanne,

ich kann mich schwach daran erinnern, dass du mal ähnliche Schwierigkeiten
beim PCMCIA-System hattest.

Das Problem bei mir war, dass sich der Kernel Teile des Grafikspeichers, den
sich die Grafikkarte vom Hauptspeicher abzeigt, anderen Geräten zuordnete.

Die Lösung lag darin, diesen Speicherbereich für die weitere Verwendung zu
sperren. Dafür sorgt der Kernelparameter reserve.

Du müßtest als erstes die Grenzen des Speicherbereichs deines Grafikspeichers
berechnen.

Zuerst die höchstmögliche Adresse:
1024MB + 256MB = 1280MB = 1342177280 Byte
=> höchstmögliche Adresse 1342177279 = 0x4FFFFFFF (hexadezimal)

Angenommen, du hast 64 MB Grafikspeicher, dann ergibt sich als Bereichsbeginn:
1280MB – 64MB = 1216MB = 1275068416 Byte
=> Bereichsbeginn 1275068416 = 0x4C000000 (hexadezimal)

Wenn ich mich nicht verrechnet habe, würde der Bootparameter für den Kernel
somit lauten:

reserve=0x4C000000-0x4FFFFFFF

Im Zweifelsfall kannst du den gesperrten Bereich auch etwas größer wählen,
sowohl nach unten als auch nach oben.

Bei Kernel > 2.6.20 trat der Fehler bei mir übrigens nicht mehr auf.

mfg
Rico

Susanne Schneider – Dienstag, 04. September 2007 10:14 Uhr

hallo Rico,
danke für Deine Antwort. Ich fürchte, das triffts nicht, ich habs gestern ausprobiert, aber da stellt sich kein Erfolg ein. Es geht, wenn überhaupt, dann nur durch Löschen und Neusetzen der mtrrs wie in [1] beschrieben. Vielleicht muß ich noch ein bißchen mit der Aufteilung der Speicherbereiche experimentieren. Bisher war das Höchste, was ich erreicht habe, ein eingefrorenes System.
Sollte ich Erfolg haben, werde ich in einem Tagebucheintrag berichten
greets
Susanne

Susanne Schneider – Donnerstag, 06. September 2007 19:11 Uhr

heureka, ich habs gefunden! (nach der “blinde-Huhn_Methode”)
die Zeile:
echo “base=0x00000000 size=0x50000000 type=write-back” >| /proc/mtrr
muß heißen:
echo “base=0x00000000 size=0x80000000 type=write-back” >| /proc/mtrr
obwohl ich keine 2 GB , sondern nur 1280 MB Memory habe.
Mit meinen Kenntnissen war das nur durch Probieren rauszufinden…
Jedenfalls funktioniert jetzt alles wie es soll.
Die ganze Story steht für Lesewillige in einem Tagebucheintrag.
Rico, nochmal Dank für Deine Antwort:-)
greets
Susanne

Daniel – Montag, 13. Juli 2009 21:54 Uhr

FALSCH:
echo “base=0x00000000 size=0x50000000 type=write-back” >| /proc/mtrr

RICHTIG:
echo “base=0x00000000 size=0x50000000 type=write-back” >! /proc/mtrr