Hallo,
wahrscheinlich haben einige von der ASPM Problematik in der letzten Zeit gehört. Das Problem in Linux ist auch längst behoben, was bleibt sind Rechner deren Firmware dem Betriebssystem verbietet ASPM zu konfigurieren. Der Parameter
pcie_aspm=force wird jetzt wahrscheinlich recht verbreitet sein, um diese Limitierung auszuhebeln. Ich setze nebenbei auch gleich
pcie_aspm.policy=powersave, um ASPM baldmöglichst freizuschalten, und
pcie_port=native ein, um Linux nativen Zugriff auf PCIe zu ermöglichen, sollte es die Firmware ebenfalls verwehren. Trotz all dieser Parameter fasst der Linux Kernel bei mir die Konfiguration des BIOS nicht an, es ändert sich schlichtweg gar nichts.
Nun habe ich allerdings ein Skript gefunden [1], mit dem man ASPM selbst konfigurieren kann. Hiermit ist es mir möglich ASPM auch für die WLAN-Karte zu aktvieren, was weder BIOS noch Kernel machen.
Ich denke nicht, dass ich irgendetwas falsch gemacht oder vergessen habe, deshalb bitte ich hier jeden ebenfalls seine ASPM Konfiguration am Laptop zu überprüfen und sich bei Problemen zu melden. Hoffentlich können wir dadurch dann einen Fehler im Linux Kernel finden und beheben lassen. Die entsprechenden Infos bekommt man per
lspci -vv als root.
Hier der Block meiner WLAN-Karte nach manueller Aktivierung der Energiesparmodi L0s und L1 (wichtige Angaben hervorgehoben):
0c:00.0 Network controller: Ralink corp. RT2790 Wireless 802.11n 1T/2R PCIe
Subsystem: Ralink corp. Device 2790
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort+ <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 17
Region 0: Memory at f8200000 (32-bit, non-prefetchable) [size=64K]
Capabilities: [40] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME+
Capabilities: [50] MSI: Enable- Count=1/32 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <128ns, L1 <2us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq+ AuxPwr- TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <512ns, L1 <64us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM L0s L1 Enabled; RCB 128 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt+ UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr+ BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Kernel driver in use: rt2800pci
Sollte an der letzten Markierung "LnkCtl:
ASPM Disabled;" stehen, der Rest aber ähnlich aussehen, ist ASPM möglich, aber nicht aktiviert.
ASPM sollte im Akkubetrieb aktiviert sein, um die Laufzeit zu verlängern. Man kann die Energiesparfunktionen auch manuell per
pm-powersave true einschalten.
Die Konfiguration nicht benutzter PCI Express Ports ist dabei unerheblich, ASPM ist hier wohl meist deaktiviert, was OK ist.
Wer jetzt noch mehr Infos zu ASPM möchte:
http://linuxwireless.org/en/users/Documentation/ASPM
[1]
http://bombadil.infradead.org/~mcgrof/scripts/enable-aspm