BGA reballing videopaměti na VGA nVidia GTX 670

      15.12.2018 O svůj první reballing BGA chipsetu jsem se pokusil na základní desce Abit BX133-Raid, avšak pokus o opravu dopadl neúspěšně. Další příležitost k trénování reballingu BGA se mi naskytla o pár měsíců později, když mi kamarád věnoval svou starou grafickou kartu EVGA nVidia GTX 670 model 02G-P4-3677-KR, která začla dělat artefakty v obraze. Jak jsem ověřil, artefakty byly k vidění hned v textovém režimu, tak i v grafických režimech VESA. Napřed jsem zkusil kartě domluvit přetavením kuliček pod čipy pamětí pomocí spodního předehřevu a foukačky. Bohužel při tomto procesu není viditelně patrné, jestli už se cín roztavil a když jsem pinzetou dloubal do keramického kondíku vedle, tak se mi bohužel povedlo drbnout i do paměťového čipu M8, který evidentně už byl dost prohřátý, takže se pohnul a kuličky šly do kopru. Musel jsem tedy čip sundat, očistit, znovu nakuličkovat a připájet. Grafická karta je osazena celkem 2 GB paměti po 8 čipech SGRAM GDDR5 hynix H5GQ2H24AFR s organizací 64M x 32, pracovní frekvencí 3 GHz, v pouzdru FBGA 170 s roztečí kuliček 0,8 mm a průměrem kuliček 0,45 mm. Schválně jsem zkusil kartu zapnout i bez paměti M8, kupodivu normálně naběhla a fungovala v textovém režimu. Grafický režim 1600 x 1200 / 32 bpp nešel nastavit, vybral jsem tedy nižší 800 x 600 / 32 bpp a v obraze byly vidět pravidelné bílé pruhy (chybějící paměť je čtena jako FFh).
      Na eBay se dají koupit jak náhradní nakuličkované čipy, tak samotné kuličky. Koupil jsem tedy ampuli kuliček (samozřejmě preferuji ty ze staré poctivé olovnaté pájky Sn63 / Pb37) a 1 čip pro případ, že by byla chyba přímo v křemíku. Potřebnou šablonu s 0,45mm otvory jsem už měl koupenou v sadě z dřívějška. Paměťový čip má zespoda uprostřed pouzdra vyvýšenou část, takže na něm šablona blbě drží (pokud nemáte nějakou fixturu) a stalo se mi, že při nandávání kuliček se mi šablona zhoupla k jedné straně a kuličky propadly otvory dolů a už se mi nepodařilo šablonu správně nasadit. Takže jsem to musel dát všechno pryč a začít znova. Tentokrát jsem šablonu přiložil pouze na 1 polovinu čipu a zafoukal foukačkou. Po té jsem nakuličkoval druhou polovinu čipu. Se sundáváním šablony nebyl žádný problém, stačilo na pár vteřin pofoukat a celkem bez násilí šla sejmout. Při pájení čipu na kartu jsem postupoval stejně jako v případě chipsetu na Abit BX133-Raid. Cca na minutu jsem pustil spodní předehřev z plotýnky a pak asi 20 s foukal na čip foukačkou až si pěkně sednul. Následně jsem kartu opět otestoval VESATESTem - nyní bez viditelných artefaktů a dále pomocí programů VMT, CUDAMemTest 0.55 z balíku OCCT Perestroika 3.1.0, MemtestG80 1.1, MemtestCL 1.00 a EVGA OC Scanner X 2.2.3 - vše bez chyby. Aktualizoval jsem video BIOS na poslední verzi 80.04.5C a nainstaloval windowsí ovladače 368.81, prubnul pár her a demíček a taky dobrý. Karta se při zátěži umí docela pěkně rozpálit. Na případný reball dalších paměťových čipů mám v zásobě kuliček ještě dost :)

EVGA GeForce GTX670 02G-P4-3677-KR-PCB top artefakty ve VESA 1600x1200/32bpp před reflow pokus o reflow BGA čipů
EVGA GTX670 PCB top artefakty před pokus o reflow

artefakty ve VESA 800x600/32bpp po reflow bez čipu M8 očištěné pady BGA paměti nakuličkovaná BGA paměť
artefakty bez M8 odpájená M8 nakuličkování

VESA BIOS bug na GTX 670

      Pak mě taky zajímalo, jak moc je dojebaná novější implementace nvidiáckého video BIOSu. Ten standardně podporuje VESA VBE 3.0 a dokonce video mode list obsahoval i nativní rozlišení mého LCD 1600 x 1200 (celkem 30 grafických videomódů), aniž bych ho musel patchovat jako na GeForce 7x00. Jak bývá na novějších kartách zvykem, velikost LFB byla omezena na 14 MB a byl vypuštěn font 8 x 14. Ten se v případě potřeby dá nainstalovat pomocí rezidentní utility FIX8X14. Ve hře Commander Keen IV jsem objevil rozbitý font v game menu, ale tato utilita problém nevyřešila. Na závažnější problém jsem pak narazil v Bloodu a Duke Nukem 3D (patrně stejné pro všechny hry používající Build engine), kde obraz podivně poblikával. Podobné poblikávání jsem dříve pozoroval pouze ve vysokých rozlišeních, jen v dolní části obrazovky a to jen někdy. Tady však obraz poblikává úplně ve všech dostupných videomódech včetně 320 x 200 a prakticky pořád (pouze se trochu mění frekvence), takže se to nedá hrát. Na podobné poblikávání jsem ještě narazil v Quake 1, ale pouze v některých videomódech (320 x 240, 320 x 400, 640 x 400, 640 x 480, 800 x 600 a 1024 x 768). Nastavení MTRR na to nemá vliv. V žádné další hře či programu jsem na toto poblikávání zatím nenarazil. Vyzkoušel jsem ještě starší karty GeForce 8500GT a GT230 a ty tímto problémem netrpí, tak by mě zajímalo, co tam nVidioti zas zvrtali...
      19.12.2018 Celkem nepřekvapivě jsem brzo na VOGONS fóru zjistil, že za daný problém může chyba ve VBE funkci 07h (GET/SET DISPLAY START používaná pro HW scrollování a page flipping), která postihuje více generací nových nVidia karet, min. od GTX 6xx do 10xx. Jestli jsou postižené i karty řady GTX 4xx a 5xx se zatím neví. Uživatel Falcosoft napsal utilitu FALCO_VBEVSTST, která chybu odhalí. V případě Quake se dá problém snadno obejít vypnutím page flippingu zadáním příkazu vid_nopageflip 1 do konzole a následným restartem či výběrem jiného videomódu (toto nastavení se permanentně zapíše do souboru ID1/config.cfg). U Build engine based her jsem zatím přišel na jedinou možnost - za cenu nižšího výkonu zakázat použití LFB pomocí rezidentní utility NOLFBLIM. To zafungovalo celkem dobře, Blood se dá hrát takto plynule do rozlišení 1024 x 768.
      23.12.2018 Od Ruthana jsem dostal důležitou informaci, že jsou i karty, které tímto problémem netrpí. Konkrétně v jeho případě starší Gigabyte GeForce GT 730 funguje bez problémů, zatím co novější Palit GeForce GT 730 KalmX už blikáním trpí. Zajímavé je to, že ač obě karty nesou v názvu stejné označení "GTX 730", tak starší Gigabyte je osazena pamětmi SGRAM GDDR3 šíře 64 bitů a podporuje pouze sběrnici PCI-E 2.0, zatím co novější Palit je osazen rychlejšími SGRAM GDDR5 šíře 64 bitů a podporuje PCI-E 3.0. To jednoznačně poukazuje na nekalé praktiky nVidie v ojebávání zákazníků přeznačováním GPU, která se tímto způsobem zbavuje starých skladových zásob svých čipů (ostatně totéž dělá intel u svých nových chipsetů). Pod označením "GTX 730" se tak mohou skrývat hned 3 různé GPU různých generací: pravý GT 730 Kepler s GDDR5 šíře 64 bitů, starší GT 630 V2 Kepler s GDDR3 šíře 64 bitů nebo starší GT 430 Fermi s GDDR3 šíře 128 bitů. Vyžádal jsem si od Ruthana runtime dump obou video BIOSů pro porovnání. Na první pohled se liší major verzí, starší BIOS bez chyby je verze 70.08.D5.00.04 a novější s chybou je verze 80.28.92.00.8D. Lze tedy předpokládat, že všechny karty s BIOSem 80.x budou mít stejný problém. Pokusím se zjistit více porovnáním disassemblovaných výpisů kódu obsluhy INT 10h.
      27.12.2018 Prozatím se nám podařilo vymyslet workaround v podobě rezidentní utility MSKVBEF7, kterou napsal uživatel Falcosoft. Funguje tak, že hookne INT 10h a modifikuje datovou strukturu SuperVGA mode info vrácenou VBE funkcí 01h vynulováním Byte na offsetu 29 - počet stránek méně 1 jenž se vejdou do videopaměti, čímž donutí renderovací engine nepoužívat hardwarový page flipping více stránek, ale místo toho bude kopírovat framebuffer z RAM do videopaměti. To je sice pomalejší a náročnější operace, ale na moderních PC se sběrnicí PCI-E to není žádný problém. Podmínkou samozřejmě je, aby grafický engine měl tento způsob vykreslování implementovaný a správně detekoval z počtu stránek, že nemůže page flipping použít. TSR jsem úspěšně otestoval na Quake, Bloodu a Duke Nukem 3D. Lze očekávat, že TSR pomůže i pro všechny další hry postavené na Build Enginu. Při rozlišení 1600 x 1200 jsem dosáhl solidně hratelných 40 - 55 FPS.



Zpět

Aktualizováno 28.12.2018 v 4:59

„Kdo se umí smát sám sobě, má právo smát se smát všemu ostatnímu, co mu k smíchu připadá.“ Jan Werich