--> Jetzt auch im VDR-Wiki
Update 20100305: powernow-k7-manual-2.6.33_enev_kilroy.patch.gz online
Die Kombination des stromsparenden Prozessors AMD Geode NX 1750 in Verbindung mit
dem Motherboard PC-Chips M811 hat sich unter VDR Nutzern zu einem kleinen Geheimtip
entwickelt. Im vdrprotal gibt es mittlerweile einige Threads zu diesem Thema. Wenn ich es
recht überblicke, brachte fabo mit seinem Posting "AMD Geode NX 1750 - Erste Erfahrungen"
den Stein in's Rollen.
Ich möchte an dieser Stelle einmal die wichtigsten Informationen in Form eines HOWTOs
zusammenfassen. Der Schwerpunkt liegt auf den Stromsparmöglichkeiten dieses Systems.
Die Softwareanpassungen basieren auf einem Debian 3.1 mit jeweils aktuellem Kernel von
kernel.org.
Vorab Danke an alle Beteiligten, die geholfen haben, daß dieses HOWTO erstellt werden
konnte, und speziell an alex-zero für das Korrekturlesen.
Inhalt:
1. CPU FSB und Vcore einstellen
1.1. Vcore per Jumper oder DIP-Schalter
1.2. Vcore 1.125V per Pin ablöten
1.3. Zusammenfassung
2. PowerNow! Support
2.1. MSR Patch
2.2. Manual Frequency Table Patch
3. nvram-wakeup
4. lm_sensors
5. Stromversorgung mit picoPSU
6. UDMA-Problematik
7. BIOS-Update
8. Quellen
9. Anhang
9.1. sensors.conf
9.2. powernow-k7-msr-2.6.16.x.patch
9.3. powernow-k7-manual-2.6.xx.x_enev_kilroy.patch
1. CPU FSB und Vcore einstellen
Das M811 bietet per Jumper (JP2) und BIOS Einstellung die Möglichkeit, den Geode mit
100 oder 133MHz FSB zu betreiben. Der Multiplikator ist nicht einstellbar, was nicht weiter
tragisch ist, da die Frequenz der CPU auch im laufenden Betrieb gesenkt werden kann.
Dazu später mehr. In der Standardeinstellung läuft der Geode mit 10.5x133MHz=1400MHz.
Mit FSB 100Mhz reduziert sich die Frequenz auf 1050MHz. Dieser Wert ist für einen VDR
völlig ausreichend.
Von Haus aus besteht beim M811 keine Möglichkeit, die Vcore zu reduzieren, so daß die
CPU mit 1,425V statt normalerweise 1,250V betrieben wird. Die CPU liefert standardmäßig
"10001" als VID-Code (VID[4:0]).
tomfy erarbeitete hier eine Möglichkeit, durch Auftrennung eines Pins des Spannungsregler
ICs (RT9237) des M811, die Vcore auf 1,225V einzustellen. Dies reduziert sowohl die
Stromaufnahme als auch die CPU Temperatur und ermöglicht eine passive Kühlung.
1.1. Vcore per Jumper oder DIP-Schalter
Durch tomfys Erfolg beflügelt, habe ich durch eine Modifikation des Motherboards die Vcore
Einstellung auf beliebige Werte erreicht. Dazu wurden die fünf relevanten Pins des
Spannungsregler ICs auf Jumper geführt. Damit läßt sich der Geode bei FSB 100MHz auch
mit 1,1V Vcore stabil betreiben. Die Leistungsaufnahme gegenüber 1,425V sinkt um ca. 10W.
||||||||||||||
+--------------+
| |
|. RT9237 |
+--------------+
||||||||||||||
VVVVV
IIIII
DDDDD
43210
|||||
°°°°° <- Jumperblock
°°°°°
|||||
+++++---< GND
Display More
Der . markiert Pin1 und ist mit VID4 identisch. Im Datenblatt des RT9237 bedeutet eine
1 kein Jumper gesetzt und die 0 Jumper gesetzt.
Jumperstellung für Vcore 1,100V:
Es ist nur der Jumper für VID0 gesetzt.
Alternativ kann man auch DIP-Schalter benutzen (Vcore=1,100V):
o
\
VID4--o o------| 1 DIP OFF
|
o |
\ |
VID3--o o------| 1 DIP OFF
|
o |
\ |
VDI2--o o------| 1 DIP OFF
|
o |
\ |
VID1--o o------| 1 DIP OFF
|
o |
|
VID0--o--o------| 0 DIP ON
|
^
MASSE
Display More
1.2. Vcore 1.125V per Pin ablöten
Eine Alternative, zu einer niedrigeren CPU Spannung zu kommen, ist es, zwei Pins des
RT9237 abzulöten, d.h., auf logisch 1 zu setzen. Gucken wir uns dazu die VID Einstellung
für die Original- und Alternativspannung an:
VID 4 | 3 | 2 | 1 | 0 Vcore
------+---+---+---+------------
1 | 0 | 0 | 0 | 1 == 1.425V
1 | 1 | 1 | 0 | 1 == 1.125V
Daraus ist zu ersehen, daß durch Ablöten von VID3 (Pin 2) und VID2 (Pin 3) die CPU
Spannung auf 1.125V eingestellt wird, da beide Eingänge von Potential 0 zu 1 wechseln.
zaphod:~$ sensors
it87-isa-0290
Adapter: ISA adapter
VCore 1: +1.12 V (min = +1.04 V, max = +1.57 V)
Die Praxis zeigt, daß es am einfachsten ist, wenn man zuerst noch Pin 1 (VID4) ablötet.
An seinem Zustand (1) ändert sich dadurch nichts.
Zum Ablöten hält man eine Stecknadel bereit und schiebt diese unter das mit dem
Lötkolben (mit Bleistiftspitze) erhitzte Anschlußbeinchen und hebelt dieses ggf. vorsichtig
hoch. Ebenso verfährt man dann mit den Pins 2 und 3.
1.3. Zusammenfassung
a. Freie Spannungswahl: Jumper oder DIP-Schalter einlöten
b. 1.225V Vcore: Pin 2 (VID3) auftrennen
c. 1.125V Vcore: Pin 2 (VID3) und Pin 3 (VID2) auftrennen
Bitte beachten:
Durch die Manipulation am Motherboard erlischt die Gewährleistung. Auch sollte man
Erfahrung im Umgang mit dem Lötkolben (z.B ERSA Tip 260, 16W) haben.
2. PowerNow! Support
Bitte darauf achten, immer nur einen Patch zur Zeit zu nutzen.
2.1. MSR Patch
Der AMD Geode NX 1750 unterstützt die Einstellung der Frequenz während des
laufenden Betriebes. Somit ist es möglich, die CPU beim "nichts tun" herunterzutakten
und im Bedarfsfalle (z.B. DVD erstellen) die volle Leistung abzurufen. alex-zero hat im
vdrportal eruiert, wie PowerNow! mit dem Geode zu nutzen ist. Der Kernel kann die PowerNow!
Möglichkeiten nicht nutzen, da das BIOS hierfür keine Informationen zur Verfügung stellt.
Durch einen Patch des Kernels werden die entsprechenden Daten dort eingebaut, so daß
das powernow-k7 Modul damit arbeiten kann. Dieser Patch wird hier zur Verfügung gestellt.
Im Anhang findet sich ein Patch für den jeweils aktuellen Kernel.
zaphod:~# cd /usr/src/linux
zaphod:/usr/src/linux# # "Patch Datei herunterladen"
zaphod:/usr/src/linux# zcat powernow-k7-msr-2.6.16.17.patch.gz | patch -p1 -b
zaphod:/usr/src/linux# rm powernow-k7-msr-2.6.16.17.patch.gz
Nun wird der Kernel mit folgenden Einstellungen neu übersetzt:
#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
CONFIG_CPU_FREQ_DEBUG=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
#
# CPUFreq processor drivers
#
# CONFIG_X86_ACPI_CPUFREQ is not set
# CONFIG_X86_POWERNOW_K6 is not set
CONFIG_X86_POWERNOW_K7=m
CONFIG_X86_POWERNOW_K7_ACPI=y
# CONFIG_X86_POWERNOW_K8 is not set
# CONFIG_X86_GX_SUSPMOD is not set
# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
# CONFIG_X86_SPEEDSTEP_ICH is not set
# CONFIG_X86_SPEEDSTEP_SMI is not set
# CONFIG_X86_P4_CLOCKMOD is not set
# CONFIG_X86_CPUFREQ_NFORCE2 is not set
# CONFIG_X86_LONGRUN is not set
# CONFIG_X86_LONGHAUL is not set
Display More
Die Datei /etc/modules wird folgendermaßen modifiziert:
damit das Modul automatisch geladen wird.
Nach dem Neustart des Kernel überprüft man die möglichen Varianten zur Frequenzeinstellung:
zaphod:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative ondemand powersave userspace performance
Nähere Informationen sind hier zu finden: /usr/src/linux/Documentation/cpu-freq/
Mittels dmesg oder in syslog sollte diese Meldung (mit FSB 100MHz) auftauchen:
powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
Detected 1048.423 MHz processor.
powernow: Trying ACPI perflib
powernow: ACPI perflib can not be used in this platform
powernow: ACPI and legacy methods failed
powernow: See http://www.codemonkey.org.uk/projects/cpufreq/powernow-k7.shtml
powernow: Building frequency table from MSR info.
powernow: Minimum speed 599 MHz. Maximum speed 1048 MHz.
Ich betreibe den Geode derzeit mit "conservative". Damit dies beim Start aktiviert wird,
habe ich folgendes in /etc/init.d/bootmisc.sh eingetragen:
Mittels
kann man sich laufend die aktuelle Frequenz der CPU anzeigen lassen.
2.2. Manual Frequency Table Patch
Auf diesen Patch bin ich durch Elchi aufmerksam gemacht worden. Er beruht wohl auf
einen Patch von Milan Enev: Linux 2.6.12.2 PowerNow! K7 Manual Frequency Table.
Da der originale Patch bei mir nicht richtig funktionierte, habe ich aus Elchis und Enevs
Versionen eine für Kernel 2.6.x funktionierende Variante erstellt.
Der Kernel muß für diesen Patch genauso konfiguriert sein wie für den MSR Patch.
Das Einspielen des Patches geschieht folgendermaßen:
zaphod:~# cd /usr/src/linux
zaphod:/usr/src/linux# # "Patch Datei laden"
zaphod:/usr/src/linux# zcat powernow-k7-manual-2.6.20.4_enev_kilroy.patch.gz | patch -p0 -b
zaphod:/usr/src/linux# rm powernow-k7-manual-2.6.20.4_enev_kilroy.patch.gz
Das Modul wird wieder per /etc/modules geladen:
zaphod:~# grep powernow_k7 /etc/modules
powernow_k7 overwrite_table=1 fsb=100000 multiplier=50,60,70,80,90,105
oder alternativ händisch per modprobe:
Die multiplier Parameter sind variierbar.
zaphod:~# modprobe powernow_k7 overwrite_table=1 fsb=100000 multiplier=55,75,95,105
zaphod:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
550000 750000 950000 1050000
Beispielausgabe des syslog:
zaphod kernel: powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
zaphod kernel: powernow-k7: Current multiplier 10.5. CPU running at 1048MHz
zaphod kernel: powernow-k7: FSB: 100MHz
zaphod kernel: powernow: Overwriting PST table with manual settings
zaphod kernel: powernow-k7: Settling Time: 200 microseconds.
zaphod kernel: powernow-k7: FID: 0x4 (5.0x [500MHz])^IVID: 0x11 (1.250V)
zaphod kernel: powernow-k7: FID: 0x6 (6.0x [600MHz])^IVID: 0x11 (1.250V)
zaphod kernel: powernow-k7: FID: 0x8 (7.0x [700MHz])^IVID: 0x11 (1.250V)
zaphod kernel: powernow-k7: FID: 0xa (8.0x [800MHz])^IVID: 0x11 (1.250V)
zaphod kernel: powernow-k7: FID: 0xc (9.0x [900MHz])^IVID: 0x11 (1.250V)
zaphod kernel: powernow-k7: FID: 0xf (10.5x [1050MHz])^IVID: 0x11 (1.250V)
zaphod kernel: powernow: Minimum speed 500 MHz. Maximum speed 1050 MHz.
Display More
Arbeitet powernow erfolgreich, kann mach sich die möglichen Frequenzen anzeigen lassen:
zaphod:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
500000 600000 700000 800000 900000 1050000
Zur automatischen Frequenzumstellung wird powernowd verwendet.
Der Start erfolgt mit folgenden Parametern:
"-m 0" bewirkt, daß die Frequenzänderung einer Sinuskurve folgt. Siehe auch man powernowd.
Hier die Ausgabe des powernowd Aufrufes:
Starting powernowd: powernowd: PowerNow Daemon v0.90, (c) 2003-2004 John Clemens
powernowd: Settings:
powernowd: verbosity: 1
powernowd: mode: 0 (SINE)
powernowd: step: 100 MHz (100000 kHz)
powernowd: lowwater: 20 %
powernowd: highwater: 80 %
powernowd: poll interval: 1000 ms
powernowd: Found 1 cpu:
powernowd: cpu0: 500Mhz - 1050Mhz
powernowd.
Display More
Dieser Patch bietet grundsätzlich auch die Möglichkeit, die CPU Spannung anzupassen
(Vcore), dieses funktioniert bei mir mit dem M811 Board jedoch nicht.
Wer den Geode mittels JP2 auf dem M811 mit FSB 133MHz laufen läßt, kann powernow-k7
folgendermaßen nutzen:
Das ergibt diese möglichen Frequenzen:
zaphod:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
533332 666665 799998 933331 1066664 1199997 1399996
3. nvram-wakeup
Zuerst sollte man das nvram-wakeup im BIOS des M811 unter "Power Management Setup"
aktivieren. Wakeup ist auf auf "Enabled" zu stellen und in der WakeupINT Tabelle
muß der RTC interrupt eingeschaltet sein. Außerdem dürfen bei dem ersten Start von
nvram-wakeup nicht die Werte Day 0, Hour 0, Min 0, Sek 0 im BIOS stehen, da daß
Programm sonst mit einem Fehler beendet wird. Der Einfachheit halber trägt man für
jeden Wert eine 1 ein.
Nun wird das Paket nvram-wakeup installiert:
Unter /etc wird die Datei nvram-wakeup.conf für das M811 erstellt:
zaphod:~# cat /etc/nvram-wakeup.conf
################################################
## Mainboard autodetection information:
##
## - Mainboard vendor: ""
## - Mainboard type: "VT8367-8235"
## - Mainboard revision: ""
## - BIOS vendor: "Phoenix Technologies, LTD"
## - BIOS version: "6.00 PG"
## - BIOS release: "10/20/2005"
addr_stat = 0xD2
shift_stat = 5
addr_day = 0xD8
addr_hour = 0xD9
addr_min = 0xDA
addr_sec = 0xDB
upper_method = VT8235_37
Display More
In /etc/vdr/vdr-nvram-wakeup.conf ist der Parameter COMMANDLINE wie folgt
anzupassen:
Nicht vergessen ENABLED="yes" zu setzen. Ein Reboot ist für nvram-wakeup beim M811 nicht nötig.
Um die korrekte Funktion zu überprüfen, sollte man nvram-wakeup jetzt einmal testen:
zaphod:~# nvram-wakeup --directisa --configfile /etc/nvram-wakeup.conf --settime $((`date +%s` + 601))
zaphod:~# shutdown -h now
Die Aufwachzeit wird auf 601 Sekunden in die Zukunft gestellt, also bitte mindestens
10 Minuten warten.
4. lm_sensors
Bei einer passiv gekühlten CPU erscheint es sinnvoll, die Temperatur zu überwachen.
Dafür wird lm_sensors auf dem System installiert:
zaphod:~# aptitude install libsysfs-dev
zaphod:~# wget http://www2.lm-sensors.nu/~lm78/archive/lm_sensors-2.10.0.tar.gz
zaphod:~# tar xzf lm_sensors-2.10.0.tar.gz -C /usr/local/src/
zaphod:~# cd /usr/local/src/lm_sensors-2.10.0/
zaphod:/usr/local/src/lm_sensors-2.10.0# make user
zaphod:/usr/local/src/lm_sensors-2.10.0# make user_install
Beim Start des Rechners sollte sensors -s ausgeführt werden:
Der (2.6.) Kernel muß folgende Module zur Verfügung stellen oder integriert haben:
#
# I2C support
#
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
#
# I2C Algorithms
#
CONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
#
CONFIG_I2C_ISA=y
#
# Hardware Monitoring support
#
CONFIG_HWMON=y
CONFIG_HWMON_VID=y
CONFIG_SENSORS_IT87=y
Display More
Die passende /etc/sensors.conf habe ich unten angehängt. Die Ausgabe sieht dann
folgendermaßen aus:
zaphod:~# sensors
it87-isa-0290
Adapter: ISA adapter
VCore 1: +1.10 V (min = +1.04 V, max = +1.57 V)
fan1: 831 RPM (min = 0 RPM, div = 8)
CPU Temp: +39 C (low = +15 C, high = +50 C) sensor = thermistor
5. Stromversorgung mit picoPSU
Um die Effizienz bzgl. Stromverbrauch des Systems AMD Geode NX 1750 auf PC-Chips
M811 als VDR weiter zu erhöhen, betreibe ich den Rechner jetzt mit der picoPSU und
einem entsprechenden externen Schaltnetzteil: Thread.
Das System verbraucht im normalen Betrieb (mit einer FF- und drei Budget-Karten,
diskless) 50W. Die CPU ist passiv gekühlt. Die Wärme wird von einem extrem leisen
120mm Lüfter (8,7dBA, 800rpm) aus dem Gehäuse befördert.
foobar42 hat berichtet, daß es die picoPSU inzwischen sowohl in einer 120W als auch
80W Version gibt.
[Blocked Image: http://www.on-luebeck.de/kilroy/vdr_komplett.jpg]
6. UDMA-Problematik
Crue hat mit dem Thread M811 - Mainboard (Geode) StressThreat/ Sorgenkind IDE
auf ein Problem des M811 aufmerksam gemacht, welches die Zusammenarbeit des (2.6.x)
Kernels mit IDE Festplatten im UDMA Modus betrifft. Standardmäßig wird der
höchstmögliche UDMA Modus (meist UDMA 5) eingestellt, welcher jedoch Probleme in
Form von Datenübertragungsfehlern auslöst:
zaphod kernel: hda: dma_intr: status=0x51 { DriveReady SeekComplete Error }
zaphod kernel: hda: dma_intr: error=0x84 { DriveStatusError BadCRC }
zaphod kernel: ide: failed opcode was: unknown
Das Problem läßt sich erfahrungsgemäß dadurch lösen, daß der UDMA Modus auf 3 oder 4
herabgesetzt wird. Beispiel für UDMA 4 mit Festplatte hda
Bei der Installation eines Linuxsystems von CD auf Festplatte oder Nutzung einer
"Live-CD" mit Festplatte, sollte darauf geachtet werden, daß der UDMA Modus reduziert
oder vorerst komplett abgeschaltet wird, sollte es zu den erwähnten Fehlermeldungen
kommen. Zum Abschalten des DMA übergibt man dem Kernel folgenden Parameter:
Das DMA wird dann beim Abarbeiten der Datei /etc/init.d/bootmisc.h wieder aktiviert:
Der Eintrag muß vor dem "exit 0" erfolgen.
7. BIOS-Update
ddgonzo hat auf den Thread Problem M811 und Geode aufmerksam gemacht. Dort wird
geschildert, daß einige M811 Boards auch mit einem älteren BIOS als das vom 20.10.2005
ausgeliefert werden. Das neue BIOS erkennt den AMD Geode dann auch mit den
korrekten Frequenzen. ddgonzo stellt dieses BIOS hier zum Download bereit.
8. Quellen
AMD Geode NX 1750 - Erste Erfahrungen
AMD Geode NX 1750 auf PC-Chips M811 mit picoPSU
AMD Geode 1750 NX und Alternativen
M811 - Mainboard (Geode) StressThreat/ Sorgenkind IDE
Linux 2.6.8.1 K7 PowerNow! MSR Support
[url=http://www.amd.com/us-en/ConnectivitySolutions/ProductInformation/0,,50_2330_9863_10837,00.html]AMD Geode NX Processors[/url]
9. Anhang