Skocz do zawartości

[Część 5] Dopisywanie grafiki do DSDT


Rekomendowane odpowiedzi

Dopisywanie grafiki do DSDT

v1.0 - Pierwsza publikacja

v1.1 - Dodany opis dla kilku kart graficznych

 

SPIS TEMATÓW O MODYFIKACJI DSDT:

 

[Cześć 1] Wydobycie DSDT z naszego sprzętu

[Cześć 2] Podstawowe modyfikacje DSDT

[Cześć 3] Sekcja audio w DSDT

[Cześć 4] Modyfikacja sekcji USB

[Cześć 5] Dopisywanie grafiki do DSDT

[Cześć 6] Fixy dla notebooków/netbooków oraz PC

[Cześć 7] Kosmeytka DSDT + Uciszanie kompilatora

[Cześć 8] Sprawdzenie działania Power Managmentu (SpeedStep)

 

 

 

:arrow: 1. Lokalizacja portu karty graficznej

 

Zanim dopiszemy kartę graficzną do DSDT musimy wiedzieć gdzie to zrobić. W tym celu uruchamiamy IORegistryExplorer i wyszukujemy "display". Jak widać na screenie moja karta graficzna (7900GS 256MB) podpięta jest pod P0P2. To sobie gdzieś zapisujemy lub zapamiętujemy.

 

zrzutekranu20100325godz.png

Screen zrobiony już po dopisaniu karty graficznej do DSDT dlatego widnieje GFX0, nie ma to jednak żadnego znaczenia bo port się nie zmienia

 

:arrow: 2. NVCAP

 

Musimy znać NVCAP swojej karty graficznej ponieważ będziemy go wprowadzać do modyfikacji. Musimy wyciągnąć i zapisać na dysku bios z karty graficznej, polecam pod Windowsem program Nibitor. Nie będę się na ten temat rozpisywać. Można znaleźć na ten temat sporo informacji, zresztą program jest bardzo prosty w obsłudze. Jak już wydobędziemy bios zaopatrujemy się w program NVCAP Maker.

http://www.mediafire.com/?dw2hwjmvejm

Uruchamiamy NVCAP Maker, pojawi sie okno w którym wskazujemy lokalizacje biosu naszej karty graficznej. Program "wypluje" nam wygenerowany NVCAP. Dla mojej 7900GS to:

 

04000000000003000c0000000000000700000000

 

dzielimy go na 16/16/8 znaków

 

0400000000000300

0c00000000000007

00000000

 

a potem dodajemy "0x, " na każde dwa znaki:

 

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,

0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,

0x00, 0x00, 0x00, 0x00

 

Może troszkę śmiesznie opisane ale mam nadzieję, ze wszystko jest zrozumiałe :)

 

:arrow: 3. Modyfikacja DSDT

 

Lokalizujemy w DSDT nasz port z pkt 1. czyli dla mojej 7900GS to P0P2, szukamy: Device (P0P2)

 

Sekcja oryginalna:

            Device (P0P2) 
           { 
               Name (_ADR, 0x00010000) 
               Method (_PRW, 0, NotSerialized) 
               { 
                   Return (GPRW (0x09, 0x04)) 
               } 

               Method (_PRT, 0, NotSerialized) 
               { 
                   If (PICM) 
                   { 
                       Return (AR02) 
                   } 

                   Return (PR02) 
               } 
           }

Dodajemy:

 
               Device (GFX) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@0,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@0,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-A" 
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@1,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@1,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-B" 
                               }, 

                               "NVCAP", 
                               Buffer (0x18) 
                               { 
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04) 
                               { 
                                   0x00, 0x00, 0x00, 0x10
                               }, 

                               "device_type", 
                               Buffer (0x0C) 
                               { 
                                   "NVDA,Parent" 
                               }, 

                               "model", 
                               Buffer () 
                               { 
                                   "NVIDIA GeForce 7900GS" 
                               }, 

                               "rom-revision", 
                               Buffer () 
                               { 
                                   "nVidia GeForce 7900 GS OpenGL Engine" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 

W powyższym kodzie modyfikujemy sekcje:

"NVCAP" na nasz z pkt 2

"VRAM,totalsize" ostanie dwie cyfry: 0x40 = 1024mb, 0x20= 512mb, 0x10= 256mb

"model" wpisujemy nazwę naszej karty graficznej

"rom-revision" wpisujemy wersje biosu lub co chcemy :)

 

Zmodyfikowana sekcja:

            Device (P0P2) 
           { 
               Name (_ADR, 0x00010000) 
               Device (GFX) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@0,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@0,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-A" 
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B) 
                               { 
                                   "NVDA,NVMac" 
                               }, 

                               "@1,device_type", 
                               Buffer (0x08) 
                               { 
                                   "display" 
                               }, 

                               "@1,name", 
                               Buffer (0x0F) 
                               { 
                                   "NVDA,Display-B" 
                               }, 

                               "NVCAP", 
                               Buffer (0x18) 
                               { 
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04) 
                               { 
                                   0x00, 0x00, 0x00, 0x10
                               }, 

                               "device_type", 
                               Buffer (0x0C) 
                               { 
                                   "NVDA,Parent" 
                               }, 

                               "model", 
                               Buffer (0x16) 
                               { 
                                   "NVIDIA GeForce 7900GS" 
                               }, 

                               "rom-revision", 
                               Buffer (0x25) 
                               { 
                                   "nVidia GeForce 7900 GS OpenGL Engine" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 

               Method (_PRW, 0, NotSerialized) 
               { 
                   Return (GPRW (0x09, 0x04)) 
               } 

               Method (_PRT, 0, NotSerialized) 
               { 
                   If (PICM) 
                   { 
                       Return (AR02) 
                   } 

                   Return (PR02) 
               } 
           }

 

Efekt końcowy:

 

zrzutekranu20100325godzd.pngzrzutekranu20100325godz.png

 

 

:arrow: 4. Modyfikacja dla kilku kart graficznych

 

Proces jest dokładnie ten sam. Lokalizujemy w IORegi wszystkie karty graficzne i zapisujemy sobie ich porty. Pod te porty dodajemy sekcje modyfikującą jak wyżej z tym wyjątkiem że dodajemy numer karty graficznej w nazwie: Device (GFX). Czyli np dla dwóch kart graficznych będą występować dwie sekcje GFX1 oraz GFX2 naturalnie w odpowiednich portach.

 

Wyrywkowo kod jak to powinno wyglądać.

                Device (GFX1) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               ........


               Device (GFX2) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x16) 
                           { 
                               "@0,compatible", 
                               Buffer (0x0B) 
                               ..........

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 rok później...

Mam już prawie wszystko, tylko jaki to port?

picture2lmv.png

Co wpisać do VRAM? to Nvidia GFX285 1024 MB.

Plik DSDT wyciągnałem z kompa, ale mam też przygotowany dla mojej płyty głównej z kext.com. Gdzie dopisać tą grafikę, byle gdzie? :)

Przepraszam, dopiero zaczynam się bawić w DSDT...

Dzięki za podpowiedź

 

PS. Znalałem coś takiego w moim DSDT z kompa. Jak to by miało wyglądać dla mojej karty?

 

               Scope (\_SB.PCI0) 
               { 
                   Name (SLIC, Buffer (0x9E) 
                   { 
                       "987134512781Genuine NVIDIA Certified SLI Ready Motherboard for GIGABYTE GA EX58UD4 0101-Copyright 2008 NVIDIA Corporation All Rights Reserved-765289891023(R)" 
                   }) 
                   Device (WMI1) 
                   { 
                       Name (_HID, "pnp0c14") 
                       Name (_UID, "MXM2") 
                       Name (_WDG, Buffer (0x14) 
                       { 
                           /* 0000 */    0x3C, 0x5C, 0xCB, 0xF6, 0xAE, 0x9C, 0xBD, 0x4E, 
                           /* 0008 */    0xB5, 0x77, 0x93, 0x1E, 0xA3, 0x2A, 0x2C, 0xC0, 
                           /* 0010 */    0x4D, 0x58, 0x01, 0x02
                       }) 
                       Method (WMMX, 3, NotSerialized) 
                       { 
                           CreateDWordField (Arg2, 0x00, FUNC) 
                           If (LEqual (FUNC, 0x41494C53)) 
                           { 
                               Return (\_SB.PCI0.SLIC) 
                           } 
                           Return (0x00) 
                       } 
                   } 
               }

 

 

Tutaj jest coś takiego jak nvcap, ale zupełnie inny niż sobie wyjąłem z biosu karty. Tutaj mi wyszedł taki:

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07
0x00, 0x00, 0x00, 0x00

 

Już nic nie kapuuuuuje, za stary jestem :)

Odnośnik do komentarza
Udostępnij na innych stronach

Mam cały czas problem, żeby wystartował sam installer. Póki co udało mi sie tylko starego kalawaya instalnąć z cpus=1. Nie daje nic GraphicsEnabler, ani Yes, ani No, tak więc pomyślałem, że dopiszę tą kartę do DSDT, to powinno być lepiej :) Sorry za offtopa trochę, ale musiałem rozjaśnić sprawę, po co mnie to DSDT ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Masz bardzo dobry sprzęt pod retaila, robiłem kilka takich zestawów ! GE Ci nie działał bo w tym distro jest stary chameleon bez obsługi Twojej karty graficznej ! Ta płyta gigabyte sprawia troszkę problemów bo w 10.6.8 przestaje działać PM ale da się to naprawić przez chameleona.

 

Tutaj masz tutorial: http://hamac.pl/topics33/instalacja-mac ... vt2646.htm

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

Nie. Byłem mało precyzyjny opisując to. Wpis ten musi znajdować się w sekcji PCI0. Powinien być on w linii: Name (_ADR, 0x00010000). W pierwszym poście jest to w przykładzie linia Device (P0P2) i jest tam ta wartość 0x00010000

 

Przykład poniżej:

            Device (PEGP) 
           { 
               Name (_ADR, 0x00010000) 
               Name (_PRW, Package (0x02) 
               { 
                   0x09, 
                   0x05
               }) 
               Device (GFX0) 
               { 
                   Name (_ADR, Zero) 
                   Name (_SUN, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x02) 
                           { 
                               "hda-gfx", 
                               Buffer (0x0A) 
                               { 
                                   "onboard-1" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 

               Device (HDAU) 
               { 
                   Name (_ADR, One) 
                   Method (_DSM, 4, NotSerialized) 
                   { 
                       Store (Package (0x02) 
                           { 
                               "hda-gfx", 
                               Buffer (0x0A) 
                               { 
                                   "onboard-1" 
                               } 
                           }, Local0) 
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 
                       Return (Local0) 
                   } 
               } 
           }

Odnośnik do komentarza
Udostępnij na innych stronach

Sekcje Device (PEX*) są od 0 do 5 ale żadna nie zaczyna się

Name (_ADR, 0x00010000

jest

Name (_ADR, 0x001C0000) 
Name (_ADR, 0x001C0001)  
Name (_ADR, 0x001C0002) 
Name (_ADR, 0x001C0003) 
Name (_ADR, 0x001C0004) 
Name (_ADR, 0x001C0005)

patrze w ioreg jak szpak w pi.... i za dokładnie to nawet nie wiem czego szukać ?!

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie
 Udostępnij

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystanie z tej witryny, wymaga zakceptowanie naszych warunków Warunki użytkowania.