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 (GPU arch. Kepler, DX11.1, VP5 - 4k H.264), 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 :) UPDATE: další úspěšný reflow (tentokrát bez posunutí paměťových čipů) se mi podařil na grafických kartách PALIT GeForce GTX 260 890 MB GDDR3, Vapor-X ATI Radeon R9 270X 2 GB GDDR5 a nVidia GeForce 8600M GS 256 MB v notebooku Sony Vaio VGN-FZ21Z. Všechny předtím vykazovaly artefakty ve 2D, notebook dokonce ani nenabootoval do GUI Windows / Linuxu.

EVGA GeForce GTX670 02G-P4-3677-KR-PCB top artefakty ve VESA 1600x1200/32bpp před reflow pokus o reflow BGA čipů
EVGA GTX 670 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í

      21.7.2019 Tak mi ta opravená VGA GTX 670 dlouho nevydržela. Při prohlížení fotek v celoobrazovkovém režimu 1:1 se mi najednou v obraze objevily různobarevné kostičky a Windows zatuhly tak, že PC nereagoval ani na krátký stisk tlačítka POWER. Po tvrdém resetu to nějakou chvíli fungovalo normálně a pak zase kostičky. Po pár kolečkách restartů se začaly kostičky objevovat už i na desktopu Windows a následoval zátuh. VMT hlásil docela dlouhou šňůru chyb, kde byl vždy zapsaný Byte AAh chybně čtený jako EAh, tedy chyba v bitu 6. Nezbylo mi než VGA z PC vytáhnout a dočasně ji nahradit VGA PALIT GeForce GTX 260. Až na to budu mít čas, zkusím poctivě překuličkovat všech 7 zbývajících paměťových čipů.

      18.8.2019 Dnes jsem se pustil do druhé opravy grafiky GTX 670. Nejprve jsem s pomocí spodního předehřevu a horkovzdušné pistole sundal paměťové čipy M1 - M7, měděným knotem odsál starou bezolovnatou pájku a důkladně očistil pájecí plošky na desce i paměťových čipech. Bohužel se mi při sundávání pamětí podařilo také sfouknout jeden mrňavý SMD odpůrek mezi čipy M6 a M7, čehož jsem si všiml až později a už jsem ho nikde nenašel. Měřením jsem zjistil, že je zapojený mezi napájení a pin J1 paměti M7 H5GQ2H24AFR. Tento pin má význam MF - Mirror Function a měl by být připojen buď na VDDQ nebo VSSQ. Ze zapojení ostatních čipů jsem zjistil, že je tento pin připojen na VDDQ přes odpor 1 kΩ. Pro zajímavost jsem zkusil kartu zapnout jen s pamětí M8 a překvapivě také naběhla normálně v textovém režimu, VESA módy byly omezeny jen do rozlišení 800 x 600 a v grafickém režimu byly vidět bílé proužky. GPU si zřejmě umí nějak dynamicky mapovat paměť, kterou má k dispozici, když při předchozím testu bez paměti M8 fungoval textový režim taktéž.
      Dále jsem si vyrobil z hliníkových plechů držáček na šablony, aby se mi paměti lépe kuličkovaly, neboť při zahřátí se šablony ohýbají. Ale ani tato fixace po okrajích šablony nezabránila jejímu vyboulení uprostřed, kde jsem ji musel přitlačovat šroubovákem. Jeden kámoš mi pak radil, že šablonu používá pouze k usazení kuliček, opatrně ji sejme a pofouká to velmi jemným proudem horkého vzduchu (příp. IR ohřevem), aby se kuličky nerozutíkaly. To můžu vyzkoušet někdy příště, všechny paměti už mám nakuličkované.

držák šablon na kuličkování BGA

      1.9.2019 Sehnat kusové množství SMD odporu velikosti 0402 nebylo úplně snadné, v GM či GESu se koupit nedá, obešel jsem 3 červené konty, ale ani tam jsem nenašel nic, co by je obsahovalo, až teprv na blešáku v Holicích jsem se zásobil různým šrotem, z kterého jsem si odpůrek vypájel a zbylou desku si nechal do zásoby pro takovéto případy.

      29.9.2019 Konečně jsem měl volnou neděli a tak jsem se pustil do pájení nově nakuličkovaných pamětí. Použil jsem opět plotýnku s triakovým regulátorem na spodní předehřev a jako foukačku jsem musel vzít svůj Steinel HL 2010 E 2000 W bez regulace proudu vzduchu. Nasadil jsem aspoň menší kulatou trysku s nižším průtokem. Na desku VGA jsem nanesl gelové tavilo a usadil do něj BGA paměťové čipy M1 - M7. Zapnul jsem spodní předehřev, nechal desku chvíli prohřát na cca 140°C a pak sem foukačkou nastavenou na 330°C pofoukal postupně jednotlivé čipy. Bylo vidět, jak se během pár vteřin čip sám vycentroval a lehce poklesnul na desku, ale ještě jsem ho pro jistotu asi 30 s foukal dál. Nakonec jsem stáhnul předehřev, nechal desku vychladnout, namontoval chladič a šoupul ji do PC. POST prošel, textové i 2D VESA režimy zobrazovaly OK a tak následoval MemtestCL 1.00 pod Windows a také prošel. Tak doufám, že problém byl opravdu jen ve spojích pod pamětmi a ne pod GPU, to se uvidí časem...

pájení BGA pamětí M1 - M7 nově připájené BGA paměti
pájení pamětí M1 - M7 nově připájené BGA paměti

      26.1.2021 Dnes ráno mě čekalo nepříjemné překvapení, když jsem zapnul uspané PC a krátce po té, co naskočil obraz na monitoru, objevila se modrá smrt v ovladači nv4_mini.sys. Napřed jsem jen myslel, že Wokna špatně uložily/ obnovily stav HW, ale když jsem PC restartoval, po naběhnutí plochy už byly vidět po celé ploše artefakty. Avšak poněkud jiné, než jsem viděl při problémech s pamětmi. Na obrazovce byly vidět celkem pravidelně v rastu čtverečky asi 32 x 32 pixelů, kde měl obrázek pozadí podivné barvy. OS se necelou minutu po startu zaseknul a musel jsem zmáčknout reset. Po přebootování do DOSu jsem spustil VMT a ten hned po pár vteřinách začal sypat chyby. Jelikož všechny paměti jsem už překuličkoval, tak zřejmě došlo na GPUčko. Večer jsem kartu vyndal, odstrojil chladič a horkovzdušnou pistolí zkusil reflow BGA GPU. Foukal jsem na něj asi 5 minut při teplotě 360°C. Bez předehřevu PCB karty odvádí hrozně teplo, takže se GPU ani nepohlo, nicméně pofoukání pomohlo, alespoň dočasně (testy proběhly bez chyb). Předpokládám, že se problém časem vrátí a tak jsem si rovnou objednal kuličkovací šablonu přímo na tento typ BGA GPU (kuliček mám ještě dost), snad to do té doby GPU doklepe. UPDATE: šablona mi asi po 2 měsících dorazila a karta zatím žije, tak zatím budu vyčkávat.

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. UPDATE: Jak jsem se později dozvěděl od Laacy a Mercury127, tak na novějších nVidia GPU řad GTX 10x0 - RTX 20x0 je problémů ještě mnohem více - nějaké nekompatability na úrovni VGA registrů (nefunguje např. VGA režim ve Windows 3.x a 9x nebo DOSová hra Prehistorik 2).

Commander Keen IV game menu font OK Commander Keen IV game menu crippled font
Keen IV @GF 7900GT Keen IV @GTX 670

      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.

      3.9.2023 Uživatel an64 na VOGONS fóru vydal utilitu NVUVAFIX - Universal nVidia VBE function 0Ah fix for GTX 9xx and newer, která reimplementuje tuto chybějící VBE funkci (Return VBE Protected Mode Interface) a funkce 05h, 09h a zároveň řeší i problém s funkcí 07h, který dříve fixovala výše zmíněná utilita MSKVBEF7 od Falcosofta. BTW Laaca našel a zkompiloval zajímavý program nVidia eXtreme SOD Utility 1.09, který umožňuje přepínat videovýstupy na nVidia VGA. Na noteboocích lze zapnout i více výstupů najednou. Moje GTX 970 ale podporuje pouze 1 videovýstup současně, zde je seznam podporovaných výstupů:


Available Devices:
Device Index Device Name
------------ -----------
00           TMDS1
01           CRT1
02           TMDS2
03           TMDS3
05           DP1
06           TMDS4
15           RSVD1

Akcelerace přehrávání videa H264 a H265

      12.8.2020 Dnešní grafické karty (i ty nejslabší integrované v CPU) obsahují HW dekodér videa ve formátu H264 a H265 (HEVC), který výrazně odlehčí zátěž CPU a tím také sníží spotřebu elektřiny. U grafických čipů nVidia se o HW dekódování stará blok PureVideo. První plnohodnotná implementace HW dekodéru H264 se objevila u GPU řady GeForce 8xxx (Tesla), která byla dále výrazně vylepšena o podporu 4k UHD rozlišení na GPU řady GeForce GT 520 (Fermi) a 6xx/7xx (Kepler). První implementace HW dekodéru H265 se objevila u GPU řady GeForce GTX 950/960 (2. generace Maxwell, nikoliv však u GTX 970/980), která byla dále výrazně vylepšena o podporu 8k UHD rozlišení na GPU řady GeForce GTX 10x0 (Pascal). U starší generace Maxwellů implementovala nVidia v ovladačích hybridní dekodér H265, který využíval výpočetní jednotky pixel shaderů na GPU + CPU. Pro aplikace je HW akcelerace zpřístupněna přes rozhraní DXVA2 či nVidia CUVID. Dekódovací schopnosti vaší grafické karty si můžete ověřit pomocí programu DXVA Checker (vyžaduje .NET 4.6 a MSVC RT 2015-19).
      Videopřehrávač Cyberlink PowerDVD 15 (vyžaduje min. Windows 7) také implementuje hybridní dekódování H265 pomocí OpenCL. Zde je velký přehled a benchmarky různých H265 dekodérů. V přehrávači MPC-HC se akcelerace nastavuje v menu "View|Options...|Internal Filters|Video Decoder" v poli "Hardware Acceleration" (v okně "Tansform Filters" musí být zatrženo "H264/AVC" a "HEVC", aby se použily interní LAVFilters), kde najdete v rozbalovací nabídce několik typů dekodérů/rozhraní. Mě se pro H264 osvědčilo "NVIDIA CUVID". Zátěž CPU při přehrávání 4k H264 videa je jen pár % a v GPU-Z je vidět velké vytížení bloku Video Engine. Pokud máte taky starší VGA bez HW H265 dekodéru, našel jsem Strongene Lentoid HEVC Decoder (FFDshow kompatabilní filtr), který je výrazně (cca 2x) rychlejší oproti LAVfiltru. Existuje i starší verze pro OpenCL, která je optimalizovaná pro GPU AMD (měla by fungovat i na integrovaných intelech, patrně pod Windows 7 a vyšších) a mě na GTX 670 padala. V MPC-HC se tento dekodér aktivuje v menu "View|Options...|External Filters|Add Filter...", kde vybereme cestu k rozbaleným DLL a AX souborům Lentoidu, postupně je přidáme a zatrhneme jim volbu "Prefer". Pak v menu "View|Options...|Internal Filters|Tansform Filters" odškrtneme v seznamu položku "HEVC", aby se použil externí dekodér a pak MPC-HC zavřeme a znovu spustíme. Při přehrávání ukázkového 4k H265 videa mi kleslo zatížení CPU (Core i7-2600K) z 75% na 37% a zatížení GPU kleslo z 66% na 48% (celková spotřeba VGA zůstala stejná), naopak se zvýšilo se využití systémové RAM. Takže spokojenost. To by mohlo pomoci těm, kdo ještě provozují starší CPU intel C2D či C2Q.

LAVFilter decoder CPU/GPU load Strongene Lentoid HEVC decoder CPU/GPU load
LAVFilter Lentoid



Zpět

Aktualizováno 5.9.2023 v 6:16