Jump to content
oswaldini

[Część 2] Podstawowe modyfikacje DSDT

Recommended Posts

Podstawowe modyfikacje DSDT

v1.0 - Pierwsza publikacja
v1.1 - Drobne poprawki, spis tematów, wydzielenie wstępu
v1.2 - Poprawka dla TM Fix'a
v1.3 - Dodana poprawka do Aliasów CPU

 

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:Usuwanie Aliasów CPU:
Oryginalna sekcja CPU:

 Scope (_PR)

{

Processor (P001, 0x01, 0x00000810, 0x06) {}

Alias (P001, CPU1)

Processor (P002, 0x02, 0x00000000, 0x00) {}

Alias (P002, CPU2)

Processor (P003, 0x03, 0x00000000, 0x00) {}

Alias (P003, CPU3)

Processor (P004, 0x04, 0x00000000, 0x00) {}

Alias (P004, CPU4)

}

Usuwamy każdą linijkę ze słowem Alias

Alias (P00x, CPUx)

Zmodyfikowana sekcja:

 Scope (_PR)

{

Processor (P001, 0x01, 0x00000810, 0x06) {}

Processor (P002, 0x02, 0x00000000, 0x00) {}

Processor (P003, 0x03, 0x00000000, 0x00) {}

Processor (P004, 0x04, 0x00000000, 0x00) {}

}

:arrow:Method DTGP:
Wymagane jest dołożenie jej, aby wszystkie inne fixy korzystające z niej mogły działać.
Wygląda tak:


 Method (DTGP, 5, NotSerialized)

{

If (LEqual (Arg0, Buffer (0x10)

{

/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,

/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B

}))

{

If (LEqual (Arg1, One))

{

If (LEqual (Arg2, Zero))

{

Store (Buffer (One)

{

0x03

}, Arg4)

Return (One)

}



If (LEqual (Arg2, One))

{

Return (One)

}

}

}



Store (Buffer (One)

{

0x00

}, Arg4)

Return (Zero)

}

i należy ją umieścić zaraz po pierwszym nawiasie otwierającym "{"
Po umieszczeniu powinna sekcja wyglądać mniej więcej tak:



* OEM Revision 0x00000000 (0)

* Compiler ID "INTL"

* Compiler Version 0x20080926 (537397542)

*/

DefinitionBlock ("dsdt.aml", "DSDT", 1, "A0543", "A0543000", 0x00000000)

{

Method (DTGP, 5, NotSerialized)

{

If (LEqual (Arg0, Buffer (0x10)

{

/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,

/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B

}))

{

If (LEqual (Arg1, One))

{

If (LEqual (Arg2, Zero))

{

Store (Buffer (One)

{

0x03

}, Arg4)

Return (One)

}



If (LEqual (Arg2, One))

{

Return (One)

}

}

}



Store (Buffer (One)

{

0x00

}, Arg4)

Return (Zero)

}



Scope (_PR)

{

Processor (CPU1, 0x01, 0x00000810, 0x06)

:arrow:HPET, RTC fix i ustabilizowanie działania USB i FW:

Oryginalna sekcja HPET:


 Device (HPET)

{

Name (_HID, EisaId ("PNP0103"))

Name (CRS, ResourceTemplate ()

{

Memory32Fixed (ReadOnly,

0xFED00000, // Address Base

0x00000400, // Address Length

_Y09)

})

OperationRegion (HPTC, SystemMemory, HTBA, 0x04)

Field (HPTC, ByteAcc, NoLock, Preserve)

{

HPTS, 2,

, 5,

HPTE, 1,

Offset (0x04)

}



Method (_STA, 0, NotSerialized)

{

If (LEqual (OSFL (), Zero))

{

If (HPTE)

{

Return (0x0F)

}

}

Else

{

If (HPTE)

{

Return (0x0B)

}

}



Return (Zero)

}



Method (_CRS, 0, NotSerialized)

{

CreateDWordField (CRS, \_SB.PCI0.SBRG.HPET._Y09._BAS, HPT)

Multiply (HPTS, 0x1000, Local0)

Add (Local0, 0xFED00000, HPT)

Return (CRS)

}

}

Dodajemy:

 IRQNoFlags ()

{0}

IRQNoFlags ()

{8}

Zmodyfikowana:

 Device (HPET)

{

Name (_HID, EisaId ("PNP0103"))

Name (CRS, ResourceTemplate ()

{

IRQNoFlags ()

{0}

IRQNoFlags ()

{8}

Memory32Fixed (ReadOnly,

0xFED00000, // Address Base

0x00000400, // Address Length

_Y09)

})

OperationRegion (HPTC, SystemMemory, HTBA, 0x04)

Field (HPTC, ByteAcc, NoLock, Preserve)

{

HPTS, 2,

, 5,

HPTE, 1,

Offset (0x04)

}



Method (_STA, 0, NotSerialized)

{

If (LEqual (OSFL (), Zero))

{

If (HPTE)

{

Return (0x0F)

}

}

Else

{

If (HPTE)

{

Return (0x0B)

}

}



Return (Zero)

}



Method (_CRS, 0, NotSerialized)

{

CreateDWordField (CRS, \_SB.PCI0.SBRG.HPET._Y09._BAS, HPT)

Multiply (HPTS, 0x1000, Local0)

Add (Local0, 0xFED00000, HPT)

Return (CRS)

}

}

Oryginalna sekcja RTC0 (można ją znaleźć również pod nazwą RTC):

 Device (RTC0)

{

Name (_HID, EisaId ("PNP0B00"))

Name (_CRS, ResourceTemplate ()

{

IO (Decode16,

0x0070, // Range Minimum

0x0070, // Range Maximum

0x00, // Alignment

0x02, // Length

)

IRQNoFlags ()

{8}

})

}

Usuwamy:

 IRQNoFlags ()

{8}

Zmodyfikowana sekcja RTC0:

 Device (RTC0)

{

Name (_HID, EisaId ("PNP0B00"))

Name (_CRS, ResourceTemplate ()

{

IO (Decode16,

0x0070, // Range Minimum

0x0070, // Range Maximum

0x00, // Alignment

0x02, // Length

)

})

}

Oryginalna sekcja TMR (można ją znaleźć również pod nazwą TIMR):

 Device (TMR)

{

Name (_HID, EisaId ("PNP0100"))

Name (_CRS, ResourceTemplate ()

{

IO (Decode16,

0x0040, // Range Minimum

0x0040, // Range Maximum

0x00, // Alignment

0x04, // Length

)

IRQNoFlags ()

{0}

})

}

Usuwamy:

 IRQNoFlags ()

{0}

Dodajemy:

 IO (Decode16,

0x0050, // Range Minimum

0x0050, // Range Maximum

0x10, // Alignment

0x04, // Length

)

Oraz modyfikujemy w pierwszej sekcji IO wartość Alignment (z 0x00 na 0x01)

Zmodyfikowana sekcja TMR:

 Device (TMR)

{

Name (_HID, EisaId ("PNP0100"))

Name (_CRS, ResourceTemplate ()

{

IO (Decode16,

0x0040, // Range Minimum

0x0040, // Range Maximum

0x01, // Alignment

0x04, // Length

)

IO (Decode16,

0x0050, // Range Minimum

0x0050, // Range Maximum

0x10, // Alignment

0x04, // Length

)

})

}

Oryginalna sekcja PIC (można ją znaleźć również pod nazwą IPIC):

 Device (PIC)

{

Name (_HID, EisaId ("PNP0000"))

Name (_CRS, ResourceTemplate ()

{

IO (Decode16,

0x0020, // Range Minimum

0x0020, // Range Maximum

0x00, // Alignment

0x02, // Length

)

IO (Decode16,

0x00A0, // Range Minimum

0x00A0, // Range Maximum

0x00, // Alignment

0x02, // Length

)

IRQNoFlags ()

{2}

})

}

Usuwamy:

 IRQNoFlags ()

{2}

Zmodyfikowana sekcja PIC:

 Device (PIC)

{

Name (_HID, EisaId ("PNP0000"))

Name (_CRS, ResourceTemplate ()

{

IO (Decode16,

0x0020, // Range Minimum

0x0020, // Range Maximum

0x00, // Alignment

0x02, // Length

)

IO (Decode16,

0x00A0, // Range Minimum

0x00A0, // Range Maximum

0x00, // Alignment

0x02, // Length

)

})

}

Spotkałem się z nieusuwaniem IRQ dla notebooków/netbooków w celu możliwości ściemniania/rozjaśniania matrycy

:arrow:TM Fix:
Fix ten umożliwia działanie Time Machine bez konieczności stosowania jakichkolwiek dodatkowych łatek, a także pozbycia się z konsoli błędów: UUID Error: 35. Musimy przed zrobieniem fixa zlokalizować w IORegistryExplorer pod jaki port podpieta jest karta sieciowa. Aby to zrobić włączamy IORega w okienku wyszukiwania wpisujemy ethernet, jak widać na zdjęciu LAN podpiety jest na porcie BR26@1C,6 oraz BR27@1C,7. Przechodzimy do pliku DSDT i wyszukujemy kolejne sekcje do modyfikacji: Device (BR26) oraz Device (BR27)

http://hamac.pl/download.htm?id=2090

Przykład kiedy w komputerze jest jedna karta sieciowa LAN:
Oryginalna sekcja BR26 - złącze pod które jest podłączony LAN

 Device (BR26)

{

Name (_ADR, 0x001C0006)

Method (_PRW, 0, NotSerialized)

{

Return (GPRW (0x09, 0x04))

}



Method (_PRT, 0, NotSerialized)

{

If (PICM)

{

Return (AR26)

}



Return (PR26)

}

}

Dodajemy po: Name (_ADR, 0x001C0006):

 Device (LAN)

{

Name (_ADR, Zero)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0x04)

{

"built-in",

Buffer (One)

{

0x01

},

"name",

Buffer (0x24)

{

"Realtek RTL8111/8168B PCI-E Gigabit"

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

} 

Zmodyfikowana sekcja BR26:

 Device (BR26)

{

Name (_ADR, 0x001C0006)

Method (_PRW, 0, NotSerialized)

{

Return (GPRW (0x09, 0x04))

}



Method (_PRT, 0, NotSerialized)

{

If (PICM)

{

Return (AR26)

}



Return (PR26)

}



Device (LAN)

{

Name (_ADR, Zero)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0x04)

{

"built-in",

Buffer (One)

{

0x01

},

"name",

Buffer (0x24)

{

"Realtek RTL8111/8168B PCI-E Gigabit"

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

}

}

Nazwę Realtek RTL8111/8168B PCI-E Gigabit - możemy zmienić na własną, wtedy będziemy musieli usunąć 0x24 z sekcji Buffer, czyli po edycji powinna wyglądać tak: Buffer () . Po przekompilowaniu wartość zostanie nadana sama - czy to w DSDTSE czy w iASLMe

Przykład kiedy w komputerze jest więcej niż jedna karta sieciowa LAN:

Przykład wygląda prawie identycznie z małymi wyjątkami. Lokalizujemy wszystkie porty kart sieciowych w IORegu i w nich dodajemy zmodyfikowaną sekcje. W sekcji: Device (LANx) x zmieniamy na numer karty sieciowej poczynając od 0. Sekcja dodawana ma tez jeszcze jedną pozycję "location", w niej numer startowy to "1" czyli o 1 więcej niż x (x+1)

Oryginalna sekcja:

 Device (BR26)

{

Name (_ADR, 0x001C0006)

Method (_PRW, 0, NotSerialized)

{

Return (GPRW (0x09, 0x04))

}



Method (_PRT, 0, NotSerialized)

{

If (PICM)

{

Return (AR26)

}



Return (PR26)

}

}



Device (BR27)

{

Name (_ADR, 0x001C0007)

Method (_PRW, 0, NotSerialized)

{

Return (GPRW (0x09, 0x04))

}



Method (_PRT, 0, NotSerialized)

{

If (PICM)

{

Return (AR27)

}



Return (PR27)

}

}

Pod każdy port dodajemy poniższą sekcje zaraz po Name (_ADR, 0x00XY000Z) gdzie XY,Z jest odpowienim nr z IORega:

 Device (LANx)

{

Name (_ADR, Zero)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0x06)

{

"built-in",

Buffer (One)

{

0x01

},



"location",

Buffer (0x02)

{

"x+1"

},



"name",

Buffer (0x24)

{

"Realtek RTL8111/8168B PCI-E Gigabit"

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

} 

Zmodyfikowana sekcja:

 Device (BR26)

{

Name (_ADR, 0x001C0006)

Method (_PRW, 0, NotSerialized)

{

Return (GPRW (0x09, 0x04))

}



Method (_PRT, 0, NotSerialized)

{

If (PICM)

{

Return (AR26)

}



Return (PR26)

}



Device (LAN0)

{

Name (_ADR, Zero)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0x06)

{

"built-in",

Buffer (One)

{

0x01

},



"location",

Buffer (0x02)

{

"1"

},



"name",

Buffer (0x24)

{

"Realtek RTL8111/8168B PCI-E Gigabit"

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

}

}



Device (BR27)

{

Name (_ADR, 0x001C0007)

Method (_PRW, 0, NotSerialized)

{

Return (GPRW (0x09, 0x04))

}



Method (_PRT, 0, NotSerialized)

{

If (PICM)

{

Return (AR27)

}



Return (PR27)

}



Device (LAN1)

{

Name (_ADR, Zero)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0x06)

{

"built-in",

Buffer (One)

{

0x01

},



"location",

Buffer (0x02)

{

"2"

},



"name",

Buffer (0x24)

{

"Realtek RTL8111/8168B PCI-E Gigabit"

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

}

}

Analogicznie postępujemy dla nazwy karty sieciowej. Dla większej ilości kart sieciowych LAN schemat jest ten sam.

:arrow: Uruchomienie LPC:
Fix ten jest potrzebny często aby uruchomić prawidłowe działanie vanillowego zarządzania energią. Na płytach asus'a LPC najczęściej się kryje pod nazwą SBRG. W laptopach mozna ja znaleźć pod nazwą LPCB/LPC, a w płytach Gigabyte pod nazwą PX40. Dodatkowo po uruchomieniu LPC pokazuje się opcja "wznów automatycznie po awarii zasilania" w panelu "Oszczędny komputer"

 

 

AKTUALIZACJA ŁATKI LPC DLA 10.9 I NOWSZYCH: http://hamac.pl/topic/7491-w-jaki-sposób-załadować-applelpc-p5q-pro/?p=73214

Oryginalny początek sekcji SBRG (lub LPCB/LPC/PX40):

 Device (SBRG)

{

Name (_ADR, 0x001F0000)

Method (SPTS, 1, NotSerialized)

{

Store (One, PS1S)

Store (One, PS1E)

Dodajemy:

 Method (_DSM, 4, NotSerialized)

{

Store (Package (0x02)

{

"device-id",

Buffer (0x04)

{

0xb9, 0x27, 0x00, 0x00

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

Wstawiona modyfikacja:

 Device (SBRG)

{

Name (_ADR, 0x001F0000)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0x02)

{

"device-id",

Buffer (0x04)

{

0xb9, 0x27, 0x00, 0x00

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}



Method (SPTS, 1, NotSerialized)

{

Store (One, PS1S)

Store (One, PS1E)

Device-id zmieniamy pod swój sprzęt lub pod sprzęt który mamy zamiar udawać. Pamiętamy, że wpisujemy id od tyłu! Np dla ICH10 3A18 (zera wiodące są zawsze pomijane!) 0x18, 0x3A, 0x00, 0x00 . DevID możemy znaleźć w temacie:

http://hamac.pl/topics25/intel-ichx-mcp79-i-spolka-vt1054.htm

Źródła informacji:


http://hamac.pl/topics27/fixy-dsdt-dla-asus-p5w-dh-deluxe-vt857.htm

Wielkie podziękowania dla 314TeR'a bo to w zasadzie on przedstawił wszystkie modyfikacje. Na nich się wszystkiego uczyłem. Praca admina została przeze mnie zebrana w całość i opublikowana w tym poradniku, z mojej strony poprawki są kosmetyczne.

 

post-715-13904295540791_thumb.png

Share this post


Link to post
Share on other sites

Miałem to już dawno dopisać, ale ciągle zapominam :)

 

:arrow: Usuwanie Aliasów CPU:

[...]Usuwamy każdą linijkę ze słowem Alias

Najczęściej tak właśnie to wygląda ale nie zawsze.

Np. w Toshibie z mojego podpisu, oryginalny wpis w sekcji _PR:

Processor (P001, 0x01, 0x00000810, 0x06) {} 
       Alias (P001, CPU1) 
Processor (P002, 0x02, 0x00000810, 0x06) {} 
       Alias (P002, CPU2)

W dalszej części DSDT mamy odwołania nie do P001 i P002, tylko właśnie do CPU1 i CPU2, np:

Notify (\_PR.CPU1, 0x80)

Więc zwykłe usunięcie Aliasów zaowocuje w tym przypadku pojawieniem się całego tłumu błędów przy kompilacji.

 

Warto więc nie robić tego tak automatycznie, tylko sprawdzić czy do którego wpisu mamy dalej odwołania. I w razie potrzeby, po usunięciu aliasów, trzeba go zmienić w głównej linijce. W tym przypadku wpisałem tam CPU1 zamiast P001 i tak samo CPU2, zamiast P002:

Processor (CPU1, 0x01, 0x00000810, 0x06) {} 
Processor (CPU2, 0x02, 0x00000810, 0x06) {}

Ewentualnie można zrobić odwrotnie, czyli zostawić P001 i w dalszej części kodu pozmieniać wszystkie CPU1 na P001 itd.

 

A skoro już coś napisałem, to jeszcze kilka słów ogólnie...

Praca admina została przeze mnie zebrana w całość i opublikowana w tym poradniku, z mojej strony poprawki są kosmetyczne.

To zebranie wszystkiego do kupy to wcale nie tak mało. Odwaliłeś naprawdę kawał dobrej i ciężkiej roboty. Dzięki!

Share this post


Link to post
Share on other sites

Jeszcze jedno uzupełnienie - coprawda jest to gdzieś na forum, ale warto dodać do kompletu.

 

:arrow: RTC fix

W przypadku Biosów Awarda należy jeszcze poprawić w sekcji RTC wartość "Length" na 0x02. Zapobiega to problemowi resetowania ustawień Biosu bo każdym uruchomieniu Snow Leopard'a.

Przykład takiej "błędnej sekcji:

Device (RTC) 
{ 
   Name (_HID, EisaId ("PNP0B00")) 
   Name (_CRS, ResourceTemplate () 
   { 
       IO (Decode16,
       0x0070,             // Range Minimum
       0x0070,             // Range Maximum
       0x01,               // Alignment
       0x08,               // Length
       ) 
   }) 
}

I po porawce:

Device (RTC) 
{ 
   Name (_HID, EisaId ("PNP0B00")) 
   Name (_CRS, ResourceTemplate () 
   { 
       IO (Decode16,
       0x0070,             // Range Minimum
       0x0070,             // Range Maximum
       0x01,               // Alignment
       0x02,               // Length
       ) 
   }) 
}

Share this post


Link to post
Share on other sites

Jest on dokładnie tu:http://hamac.pl/topics15/snow-leopard-cmos-bios-reset-fix-vt573.htm

Zdarza się również tak (np u mnie) że nasza sekcja RTC wygląda tak:

                Device (RTC) 
               { 
                   Name (_HID, EisaId ("PNP0B00")) 
                   Name (ATT0, ResourceTemplate () 
                   { 
                       IO (Decode16,
                           0x0070,             // Range Minimum
                           0x0070,             // Range Maximum
                           0x00,               // Alignment
                           0x04,               // Length
                           ) 
                   }) 
                   Name (ATT1, ResourceTemplate () 
                   { 
                       IO (Decode16,
                           0x0070,             // Range Minimum
                           0x0070,             // Range Maximum
                           0x00,               // Alignment
                           0x04,               // Length
                           ) 
                   })

Nie panikujemy, tylko zmieniamy wartość górnego kodu // Length z 0x04 na 0x02. Ten dolny zostawiamy bez zmian.

Share this post


Link to post
Share on other sites

stary temat, ale mozna uaktualnic:

 

co do zmian zwiazanych z IRQ - nie trzeba nic modyfikowac, jesli nie mamy problemow z konfliktami przerywan. Podane wyzej wartosci nie sa jedyne - w przypadku konfliktow mozna w ioreg... znalezc nie uzywane i takie nadac w odpowiednich sekcjach.

Share this post


Link to post
Share on other sites

Owszem nie trzeba ale raczej dotyczy to nowszych płyt i w większości płyt pod SB. Nieco starsze, np wszystkie znane mi na P55 wymagają jeszcze poprawy IRQ, nie wspominając o starszych na P45, P35 itp itd...

 

Same IRQ nie tyle dodaje się do HPET i usuwa z TMR i RTC, co sprawdza jakie są IRQ w TMR i RTC i takowe przenosi się do HPET. np w DELL'ach zdarza się zestaw 2, 8 zamiast najczęściej spotykanego 0, 8.

Share this post


Link to post
Share on other sites

dosc tajemniczy temat - malo jest w sieci konkretnych informacji dlaczego ktos cos ustawil i po co. Z przerywaniami w HPET znalazlem info, ze miany sa glownie ze wzgledu na konfilkty z USB lub FireWire. W wiekszosci przypadkow zmiany sa robione na wzor dumpow ze sprzetu Appla - szkoda ze brakuje takich tlumaczen dlaczego... ;-)

 

[ Dodano: 2011-12-29, 17:57 ]

ale mi brakuje Waszego doswiadczenia ;-) np. chcialbym wiedziec co sie dzialo gdy nie bylo wprowadzonych tych poprawek, jakie byly objawy - w dziale podane sa rozwiazania, ale dla mnie, czyli osoby, ktora nigdy nie instalowala na starszych sprzetach, kompletnie nie wiem po co to ;-)

teraz juz sobie cos tam doczytuje, ale wiesz o co chodzi ;-)

Share this post


Link to post
Share on other sites
miany sa glownie ze wzgledu na konfilkty z USB lub FireWire

Nie tylko. Wszystkie mobasy serii Asus P6T muszą mieć tą poprawkę bo muli kontroler SATA i masz transferki max 5mb/s. Pod te mobasy trzeba robić dedykowane BootCD z DSDT bo inaczej instalacja będzie trwała pół dnia :) Tu masz jeden taki przykład :)

 

Co do nowych konfiguracji to czasem można zapomnieć o istnieniu DSDT - na mobasach MSI serii Z68 nie używam DSDT w ogóle! Dumpy są identyczne jak te z nowych maców.

Share this post


Link to post
Share on other sites

W skrócie, poprawki dla HPET, RTC, TMR rozwiązują parę problemów:

1. Umożliwiają załadowanie poprawne AppleHPET (potrzebne do PM).

2. Brak KP z AppleRTC.

3. Znikające losowo porty USB 2.0 i FireWire.

4. Transfery SATA na X58 o których wspomniał wyżej oswaldini

Są wymagane na praktycznie każdej płycie z ICH7,8,9,10 i P5x. Na płyta z ICH7 i 8 bardzo często brak ich powodował brak portów USB i FireWire, przy czym one pojawiały się i znikały w losowych okolicznościach. Następnie bez załadowanego AppleHPET nie odpalisz natywnego PM. IRQ w RTC powodowało KP od 10.5.6 w górę... Z usuwaniem IRQ z PIC osobiście nie doświadczyłem zmian, ale skoro nie ma w mac'owych DSDT, to sam osobiście je usuwałem, a jak wszystko działało, to nie drążyłem tematu czy musi, czy nie musi być. Nie mniej czytałem że czasami usunięcie IRQ z PIC, powodowało brak regulacji podświetlenia matrycy czy głośności z klawiszy funkcyjnych w notebookach... ale jak wcześniej pisałem, ja osobiście z tym się nie spotkałem.

 

Dalej, aliasy - powodowały KP przy starcie... Od P45 są nagminnie w DSDT z PC, więc były zmorą, bo nie można było zainstalować OS X bez już poprawionego DSDT ba BootCD (uniwersalne się nie sprawdzały), a czyjeś DSDT nawet z tej samej płyty mogło mieć inne adresy pamięci i zaliczało się zwiechę... Jedynym lekarstwem wtedy było wymiana bios'u na taki z usuniętymi aliasami.

 

Dziś na szczęście wiele z w/w problemów już nie istnieje, bo chameleon zwyczajnie ma w sobie "lekarstwa" na w/w bolączki jak aliasy, czy KP od AppleHPET czy RTC, nie mniej brak poprawionych tych sekcji np na P55 powoduje dziwne haczenie i mulenie systemu... owszem wstanie, ale nie działa najlepiej.

Share this post


Link to post
Share on other sites

a u mnie sekcja SBRG wyglada w ten sposób no i nie wiem czy ją modyfikować czy nie i w jaki sposób?

 

 Device (SBRG) 
           { 
               Name (_ADR, 0x001F0000) 
               Device (IELK) 
               { 
                   Name (_HID, "AWY0001") 
                   OperationRegion (RXA0, PCI_Config, 0xA0, 0x20) 
                   Field (RXA0, ByteAcc, NoLock, Preserve) 
                   { 
                           ,   9, 
                       PBLV,   1, 
                               Offset (0x10), 
                           ,   1, 
                       PBMS,   1, 
                           ,   1, 
                       PMCS,   1, 
                       ECNS,   1, 
                               Offset (0x11), 
                       ECT1,   16, 
                       ELEN,   1, 
                               Offset (0x14) 
                   } 

Share this post


Link to post
Share on other sites
a u mnie sekcja SBRG wyglada w ten sposób no i nie wiem czy ją modyfikować czy nie i w jaki sposób?

Masz opisane po co i kiedy dodaje się do niej poprawkę dla LPC... Wpierw sprawdza się czy jest potrzebna w ogóle, a nie robi się wszystkie poprawki na pałę...

Share this post


Link to post
Share on other sites

Witam. Mam pytanie odnośnie wyglądu (schematu?) DSDT. Do Extractu mojego DSDT użyłem programu DSDTSE pod Windowsem, jednakże jego wygląd zdaje się być nieco inny od tego podanego w przykładach tutaj.

Do zobrazowania tego może posłużyć fix aliasów procesora.

 

W tutorialu początek tej sekcji ma wygląd

Scope (_PR)

natomiast u mnie jest

Scope (\_PR)

W związku z tym moje pytanie, czy dodatkowy ukośnik jest jakiegoś rodzaju błędem? Jeśli tak to jak go usunąć? Czy zwykła edycja przez usunięcie wystarczy?

Share this post


Link to post
Share on other sites
a u mnie sekcja SBRG wyglada w ten sposób no i nie wiem czy ją modyfikować czy nie i w jaki sposób?

Masz opisane po co i kiedy dodaje się do niej poprawkę dla LPC... Wpierw sprawdza się czy jest potrzebna w ogóle, a nie robi się wszystkie poprawki na pałę...

 

U mnie ta sekcja jest identyczna ,z tym że PM nie działa u mnie a docelowo pracuje nad działaniem sleep'a więc chyba jest to ważna sekcja

Share this post


Link to post
Share on other sites

Poprawka RTC rzooffa odnosi się także do BIOS Phoenixa. Potwierdzone na Complau FL90.

 

:arrow: RTC fix

W przypadku Biosów Awarda należy jeszcze poprawić w sekcji RTC wartość "Length" na 0x02. Zapobiega to problemowi resetowania ustawień Biosu bo każdym uruchomieniu Snow Leopard'a.

Przykład takiej "błędnej sekcji:

Device (RTC) 
{ 
   Name (_HID, EisaId ("PNP0B00")) 
   Name (_CRS, ResourceTemplate () 
   { 
       IO (Decode16,
       0x0070,             // Range Minimum
       0x0070,             // Range Maximum
       0x01,               // Alignment
       0x08,               // Length
       ) 
   }) 
}

I po porawce:

Device (RTC) 
{ 
   Name (_HID, EisaId ("PNP0B00")) 
   Name (_CRS, ResourceTemplate () 
   { 
       IO (Decode16,
       0x0070,             // Range Minimum
       0x0070,             // Range Maximum
       0x01,               // Alignment
       0x02,               // Length
       ) 
   }) 
}

Share this post


Link to post
Share on other sites

Od wersji 10.8 poprawka do LPC wygląda troszkę inaczej zamiast wstawiać tej poprawki:

       Method (_DSM, 4, NotSerialized) 

                { 

                    Store (Package (0x02) 

                        { 

                            "device-id",

                            Buffer (0x04) 

                            { 

                                0xb9, 0x27, 0x00, 0x00

                            } 

                        }, Local0) 

                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) 

                    Return (Local0) 

                }

wstawiamy taką:

Method (_DSM, 4, NotSerialized)
{
    Store (Package (0x02)
        {
            "compatible", 
            Buffer (0x0D)
            {
                "pci8086,27b9"
            }
        }, Local0)
    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
    Return (Local0)
}

po modyfikacji sekcja ma wyglądać ta:

  Device (SBRG) 

            { 

                Name (_ADR, 0x001F0000) 

                Method (_DSM, 4, NotSerialized)
{
    Store (Package (0x02)
        {
            "compatible", 
            Buffer (0x0D)
            {
                "pci8086,27b9"
            }
        }, Local0)
    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
    Return (Local0)


                

                Method (SPTS, 1, NotSerialized) 

                { 

                    Store (One, PS1S) 

                    Store (One, PS1E)

pamiętać trzeba aby zmienić dev-id pod swoją płytę.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.