A Framework Computer jelezte először azt a Linux kernel hibát, amelyet néhány ügyfelük tapasztalt. Végül Mario Limonciello, az AMD egyik Linux-mérnöke dolgozott ki egy javítócsomagot, amely úgy tűnik, megfelelően kezeli azt a helyzetet, amikor bizonyos hardvereken a rendszer felfüggesztésből visszatérve „elveszik” az xHCI vezérlő.
A PCI specifikáció előír egy minimális helyreállási időt, amit be kell tartani, amikor egy funkciót D3 állapotból D0-ba állítunk vissza, és utána el akarjuk érni. A PCI szabvány szerint ez 10 ms késleltetés. A Linux kernel viszont a D3cold útvonalon nem ír elő kötelező késleltetést, csak D3hot esetén. A most benyújtott Linux kernel javítócsomag viszont 10 ms-os késleltetést vezet be a D3cold útvonalon is, és úgy tűnik, ez megoldja a problémát.
Limonciello a
kernel levelezőlistán így magyarázta:
„Egy problémát jelentettek, amely szerint néhány rendszeren az xHCI host vezérlő nem áll vissza felfüggesztésből. A hiba előfordulási aránya változó, és zavaró módon összefügg azzal, mekkora VRAM-foglalást állít be a BIOS.
Ha például kicsi a VRAM-foglalás (például 512 MB), akkor nincs hiba. Vannak olyan megjegyzések, amelyek szerint minél nagyobb a VRAM mérete, annál magasabb a hibaarány. Személy szerint nem igazán értem, ez miért számítana, de megemlítem, hátha másnak beugrik róla valami.
Különféle kerülőmegoldások működnek:
Legacy megszakítások használata MSI helyett
A vezérlő resetelése visszatéréskor
* Device link függőség létrehozása az XHCI és a kijelző PCI-eszközök között (az eszközök visszaállítási sorrendjének szabályozására)
Szerintem azonban egyik kerülőmegoldás sem a probléma gyökerét kezeli.
Követtem a kód futását, és összevetettem a PCI specifikációval. Az XHCI vezérlőnek D3cold állapotban kell lennie felfüggesztéskor, így D3→D0 átmeneten megy keresztül. A PCI specifikáció szerint a D3 átmenetekhez 10 ms késleltetés kell.
Viszont D3cold állapotban az endpointoknál nincs kötelező késleltetés, csak a bridge-eknél. Az endpointoknál csak D3hot esetén van kötelező késleltetés.
Ezért az a gyanúm, hogy ha kötelező késleltetést vezetünk be a D3cold→D0 átmenethez, az segít ezen a problémán. Ezt valósítja meg ez a patch-sorozat.”
A javítócsomag kizárólag a közös Linux PCI driver kódot érinti. A február óta követett kernel.org hibajelentés alapján úgy tűnik, hogy a javítás legalább a Framework Desktop esetében megoldja a problémát.

