Discussion:
PCIe Device in Power Down Mode schalten
(zu alt für eine Antwort)
Andi B.
2008-07-24 14:38:51 UTC
Permalink
Hallo,
ich hab keine Ahnung von PCI bzw. PCIe Bus Geräten/Register deshalb meine Frage
- kann ich ein PCIe Device problemlos in Power Down Mode schalten? Die Power
Register scheinen ja genormt zu sein, da z.B. der PCI Sniffer die verfügbaren
Power Modes ausgibt. Aber irgendwie doch nicht so, denn sonst würde ja Blackout
bzw. Doodles ScrennSaver auch bei der ATI X300 funktionieren.

Ich hab nun probiert in das PMI_STATUS der ATI X300 Grafikkarte zu schreiben
(Register 0x54) und kann damit auch das DVI Ausgangssignal der Karte abschalten,
so wie man das bei einem screen saver halt braucht. Alles funktioniert soweit,
Kartenausgang wird abgeschalten und wenn ich wieder aufwache schreibe ich wieder
0000 ins Register und das Bild ist wieder da.

Nur, kann es ein Problem geben, wenn man ein einzelnes PCIe Device in 'maximum
power saving mode' schickt? Ich glaube eigentlich nicht, daß die Karte
hardwaremäßig abbrennt weil ein Teil disabled ist. Aber sollte man bei so einer
Aktion vorher ev. dem PCI-Bus Controller mitteilen, daß nun die Karte nicht mehr
da ist? Oder sollte OS/2 oder der Ressourcen Manager das wissen?

Je mehr ich darüber nachdenke, desto mehr glaube ich, daß es kein Problem geben
kann. Das System wartet ohnehin nie auf Daten von der Grafikkarte, sondern
schickt dieser ja nur was, aber besser einmal blöd gefragt als....

Grüße,
Andi
Ruediger Ihle
2008-07-25 13:55:53 UTC
Permalink
Die Power Register scheinen ja genormt zu sein, da z.B. der PCI Sniffer
die verfügbaren Power Modes ausgibt. Aber irgendwie doch nicht so, denn
sonst würde ja Blackout bzw. Doodles ScrennSaver auch bei der ATI X300
funktionieren.
Dieses Register ist eigentlich nicht dazu gedacht, den Bildschim dunkel
zu schalten, sondern die ganze Karte schlafen zu legen. Somit ist es
nicht wirklich der Job des Screensavers, darauf zuzugreifen. Im
besonderen
nicht, ohne das der für dieses Gerät eigentlich zuständige Treiber etwas
davon weis.
Ich hab nun probiert in das PMI_STATUS der ATI X300 Grafikkarte zu schreiben
(Register 0x54) und kann damit auch das DVI Ausgangssignal der Karte abschalten,
so wie man das bei einem screen saver halt braucht. Alles funktioniert soweit,
Kartenausgang wird abgeschalten und wenn ich wieder aufwache schreibe ich wieder
0000 ins Register und das Bild ist wieder da.
Würde sagen: Glück gehabt. Lebt der Mauszeiger noch, wenn z.B während
der
Dunkelphase ein Script den Systemeditor (e.exe) startet ?
Nur, kann es ein Problem geben, wenn man ein einzelnes PCIe Device in 'maximum
power saving mode' schickt?
Der Zustand des Gerätes nach dem Aufwachen ist undefiniert. Ich kenne
Beispiele,
wo ein im RAM des Gerätes liegendes Firmwareimage bei so einer Aktion
gelöscht
wird und der Treiber selbiges erst wieder nachladen muß. Inclusive eines
Soft-
resets der Hardware. Was er natürlich in einem Fall wie Deinem nicht
tut, weil
für ihn diese Abschaltung ja völlig unerwartet ist.
Ich glaube eigentlich nicht, daß die Karte hardwaremäßig abbrennt weil ein
Teil disabled ist.
Das ist in der Tat eher unwarscheinlich. Aber die Chance, daß sich der
Treiber
festhängt - entweder beim Zugriff auf die Hardware während des
Schlafzustandes
oder nach dem Aufwachen - besteht sehr wohl.
Aber sollte man bei so einer Aktion vorher ev. dem PCI-Bus Controller mitteilen,
daß nun die Karte nicht mehr da ist?
Im Prinzip ja. Leider ist OS/2 zu alt / zu dämlich dafür. Es gibt keine
ent-
sprechenden Interfaces.
Oder sollte OS/2 oder der Ressourcen Manager das wissen?
Der hat damit nicht zu tun.
Je mehr ich darüber nachdenke, desto mehr glaube ich, daß es kein Problem geben
kann. Das System wartet ohnehin nie auf Daten von der Grafikkarte, sondern
schickt dieser ja nur was, aber besser einmal blöd gefragt als....
Es kann in bestimmten Fällen funktionieren. Aber meine Hand würde ich
dafür
nicht ins Feuer legen.
--
Ruediger "Rudi" Ihle [S&T Systemtechnik GmbH, Germany]
http://www.s-t.de
Please remove all characters left of the "R" in my email address
Andi B.
2008-07-25 15:24:49 UTC
Permalink
Post by Ruediger Ihle
Die Power Register scheinen ja genormt zu sein, da z.B. der PCI Sniffer
die verfügbaren Power Modes ausgibt. Aber irgendwie doch nicht so, denn
sonst würde ja Blackout bzw. Doodles ScrennSaver auch bei der ATI X300
funktionieren.
Dieses Register ist eigentlich nicht dazu gedacht, den Bildschim dunkel
zu schalten, sondern die ganze Karte schlafen zu legen. Somit ist es
nicht wirklich der Job des Screensavers, darauf zuzugreifen. Im
besonderen
nicht, ohne das der für dieses Gerät eigentlich zuständige Treiber etwas
davon weis.
Ich hab nun probiert in das PMI_STATUS der ATI X300 Grafikkarte zu schreiben
(Register 0x54) und kann damit auch das DVI Ausgangssignal der Karte abschalten,
so wie man das bei einem screen saver halt braucht. Alles funktioniert soweit,
Kartenausgang wird abgeschalten und wenn ich wieder aufwache schreibe ich wieder
0000 ins Register und das Bild ist wieder da.
Würde sagen: Glück gehabt. Lebt der Mauszeiger noch, wenn z.B während
der
Dunkelphase ein Script den Systemeditor (e.exe) startet ?
Ja. Gerade probiert und funktioniert. Allerdings ist es so, daß auch wenn ich 03
reinschreibe in beide Kanäle (primary und secondary), das primary register
trotzdem auf 0 stehen bleibt, also wach bleibt.

Außerdem wird die Grafikkarte, also der DVI Ausgang, offensichtlich auch wieder
eingeschalten, wenn bestimmte Register abgefragt werden. Ich hab gerade
ausprobiert, in meinem script während der Power Down Phase Craig Hart's PCI+AGP
bus sniffer laufen zu lassen und der weckt anscheinend den Ausgang wieder auf.
Der secondary bleibt aber in 03 ( D3hot (Device off: no power to device, maximum
power saving))

Weiters habe ich den Verdacht, daß sich die Zuordnung primary und secondary
verändert, wenn man beim Einschalten auf beiden Ausgängen (Analog und DVI), oder
nur am DVI was angeschlossen hat. Das muß ich nochmal verifizieren beim nächsten
Einschalten.
Post by Ruediger Ihle
Nur, kann es ein Problem geben, wenn man ein einzelnes PCIe Device in 'maximum
power saving mode' schickt?
Der Zustand des Gerätes nach dem Aufwachen ist undefiniert. Ich kenne
Beispiele,
wo ein im RAM des Gerätes liegendes Firmwareimage bei so einer Aktion
gelöscht
wird und der Treiber selbiges erst wieder nachladen muß. Inclusive eines
Soft-
resets der Hardware. Was er natürlich in einem Fall wie Deinem nicht
tut, weil
für ihn diese Abschaltung ja völlig unerwartet ist.
Das erinnert mich an die SNAP VGA-Repaint (?) option. Im Bios gibt's auch so
ein Einstellung bei der nach PowerSaving die VGA Register neu geschrieben
werden. Da müßte ich das ganze jetzt auch mit Full-Screen OS/2 und DOS Sessions
auch testen.
Post by Ruediger Ihle
Ich glaube eigentlich nicht, daß die Karte hardwaremäßig abbrennt weil ein
Teil disabled ist.
Das ist in der Tat eher unwarscheinlich. Aber die Chance, daß sich der
Treiber
festhängt - entweder beim Zugriff auf die Hardware während des
Schlafzustandes
oder nach dem Aufwachen - besteht sehr wohl.
Bis jetzt scheint sich SNAP davon nicht beirren zu lassen. Aber es stimmt schon,
daß ganze sollte eigentlich von SNAP gemanaged werden. Aber da ist ja wohl
nicht's mehr zu erwarten, leider.
Post by Ruediger Ihle
Aber sollte man bei so einer Aktion vorher ev. dem PCI-Bus Controller mitteilen,
daß nun die Karte nicht mehr da ist?
Im Prinzip ja. Leider ist OS/2 zu alt / zu dämlich dafür. Es gibt keine
ent-
sprechenden Interfaces.
Oder sollte OS/2 oder der Ressourcen Manager das wissen?
Der hat damit nicht zu tun.
Je mehr ich darüber nachdenke, desto mehr glaube ich, daß es kein Problem geben
kann. Das System wartet ohnehin nie auf Daten von der Grafikkarte, sondern
schickt dieser ja nur was, aber besser einmal blöd gefragt als....
Es kann in bestimmten Fällen funktionieren. Aber meine Hand würde ich
dafür
nicht ins Feuer legen.
Werde das noch eine Weile bei mir beobachten. Allerdings wäre interessant, wie
sowas dann der Win Treiber macht. Irgendwo muß der ja auch den DVI Ausgang
abschalten können.

Es gibt zwar noch z.B. ein

LVTMA_CNTL - RW - 32 bits - DISPDEC:0x7A80
Field Name Bits Default
Description
LVTMA_ENABLE 0 0x0 Enable for the
..

Register mit dem man, soweit ich das sehe, nur den LVDS Treiber abschalten
könnte, aber mit setpci kann ich auf diese Register nicht zugreifen (Register
number out of range!). Da blick ich noch nicht durch, wie man auf solche
Register schreiben kann. Vielleicht kannst du mir da noch einen Tip geben.

Grüße,
Andreas

Loading...