Skocz do zawartości

haMac.pl używa cookie. Przeczytaj Privacy Policy aby dowiedzieć się więcej. Aby usunąć tę wiadomość, proszę kliknąć w przycisk po prawej:    Akceptuję użycie cookie

Zdjęcie

MSI Z68MA-ED55


  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 iStig

iStig
  • R.E.D.
  • 647 postów

Napisano 28 wrzesień 2011 - 16:41

Część I oczyszczenie kodu z błędów i ostrzeżeń

- UEFI ver.A50
http://msi.com/product/mb/Z68MA-ED55--B3-.html#/?div=BIOS
- Kompilator pod Windows z dnia 22-09-2011
http://www.acpica.org/downloads/binary_tools.php
- pomocna specyfikacja ACPI rev. 4.0a
http://www.acpi.info/DOWNLOADS/ACPIspec40a.pdf
- podręcznik iASL
http://www.acpica.org/download/aslcompiler.pdf
- dumpy z hardware Apple
http://tdev.me/2010/12/apple-hardware-dumps/
- specyfikacja konfiguracji w podpisie
-------------------------------------------------------------------------------------------------

Dezasemblujemy DSDT.aml w wyniku czego otrzymujemy DSDT.dsl
iasl -d dsdt.aml
Przeprowadzamy pierwszą kompilację, aby zobaczyć czy są jakieś błędy
iasl dsdt.dsl
Wynik:
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20110922-32 [Sep 22 2011]
Copyright (c) 2000 - 2011 Intel Corporation

DSDT.dsl 1690: 0xFDFC0000, // Length
Error 4045 - ^ Length is larger than Min/Max window
DSDT.dsl 1804: CreateDWordField (CRS1, \_SB.PCI0._Y07._MIN, MN8L)
Warning 1121 - ResourceTag larger than Field ^ (Tag: 64 bits, Field: 32 bits)
DSDT.dsl 1809: CreateDWordField (CRS1, \_SB.PCI0._Y07._MAX, MX8L)
Warning 1121 - ResourceTag larger than Field ^ (Tag: 64 bits, Field: 32 bits)
DSDT.dsl 1812: CreateDWordField (CRS1, \_SB.PCI0._Y07._LEN, LN8L)
Warning 1121 - ResourceTag larger than Field ^ (Tag: 64 bits, Field: 32 bits)
DSDT.dsl 1866: CreateDWordField (CRS2, \_SB.PCI0._Y0D._MIN, MN9L)
Warning 1121 - ResourceTag larger than Field ^ (Tag: 64 bits, Field: 32 bits)
DSDT.dsl 1869: CreateDWordField (CRS2, \_SB.PCI0._Y0D._MAX, MX9L)
Warning 1121 - ResourceTag larger than Field ^ (Tag: 64 bits, Field: 32 bits)
DSDT.dsl 1872: CreateDWordField (CRS2, \_SB.PCI0._Y0D._LEN, LN9L)
Warning 1121 - ResourceTag larger than Field ^ (Tag: 64 bits, Field: 32 bits)
DSDT.dsl 2213: IO (Decode16,
Error 4086 - ^ Min/Max/Length/Gran are all zero, but no resource tag
DSDT.dsl 2308: Acquire (MUT0, 0x0FFF)
Warning 1123 - ^ Result is not used, possible operator timeout will be missed
DSDT.dsl 4767: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4782: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4799: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4816: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4833: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4850: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4867: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4884: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4901: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4936: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4951: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4968: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 4985: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 5002: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 5019: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 5036: Name (_PLD, Buffer (0x10)
Error 4100 - Invalid object type for reserved name ^ (found BUFFER, requires Package)
DSDT.dsl 6443: Name (_T_0, Zero)
Remark 5011 - ^ Use of compiler reserved name (_T_0)
DSDT.dsl 6504: Name (_T_0, Zero)
Remark 5011 - ^ Use of compiler reserved name (_T_0)
DSDT.dsl 7408: Name (_T_0, Zero)
Remark 5011 - ^ Use of compiler reserved name (_T_0)
DSDT.dsl 7538: Name (_T_1, Zero)
Remark 5011 - ^ Use of compiler reserved name (_T_1)
DSDT.dsl 7650: Name (_T_0, Zero)
Remark 5011 - ^ Use of compiler reserved name (_T_0)
DSDT.dsl 7780: Name (_T_1, Zero)
Remark 5011 - ^ Use of compiler reserved name (_T_1)

ASL Input: DSDT.dsl - 7979 lines, 253970 bytes, 3178 keywords
Compilation complete. 18 Errors, 7 Warnings, 6 Remarks, 103 Optimizations

No to lecimy po kolei:

:arrow: 1.
Error    4045 -                               ^ Length is larger than Min/Max window
Edytujemy dsdt.dsl i szukamy problematycznego fragmentu:
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite,
0x00000000, // Granularity
0x02000000, // Range Minimum
0xFFDFFFFF, // Range Maximum
0x00000000, // Translation Offset
0xFDFC0000, // Length
,, _Y06, AddressRangeMemory, TypeStatic)
Sprawdzamy czy Length jest odpowiedni stosując informację ze strony 13 podręcznika iASL:

Validation of values for Resource Descriptors is performed wherever possible.
Address Descriptors: Values for AddressMin, AddressMax, Length, and Granularity are validated:
AddressMax must be greater than or equal to AddressMin
Length must be less than or equal to (Max-Min+1)
If Granularity is non-zero, it must be a power-of-two minus one.
The IsMinFixed and IsMaxFixed parameters are validated against the values given for the
AddressMin, AddressMax, Length, and Granularity. This implements the rules given in Table 6-40
of the ACPI 4.0a specification.

czyli
Length <= Range Maximum- Range Minimum+1
Mi wygodnie pracuje się na Windowsowym kalkulatorze z widokiem dla programistów.
Zgodna wartość to 0xFDE00000 (0xFFDFFFFF-0x02000000+1), więc poprawiamy istniejącą i mamy jeden błąd mniej.

:arrow: 2.
Warning  1121 -                                      ResourceTag larger than Field ^  (Tag: 64 bits, Field: 32 bits)
Zaglądamy co linii kodu z błędem i widzimy, że został użyty operator CreateDWordField .Wskazówka z kompilatora wskazuje że Field powinien być 64bits, więc zamieniamy operator CreateDWordField na CreateQWordField.
Dodatkowe informacje na stronie 585 specyfikacji ACPI.
Pozbyliśmy się 6 ostrzeżeń, więc sprawdzamy dalej:

:arrow: 3.
Error    4086 -                                     ^ Min/Max/Length/Gran are all zero, but no resource tag
Zaglądamy do naszego pliku i mamy:
Name (CRS, ResourceTemplate () 
{
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y16)
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y17)
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
)
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y18)
})
Sprawdzamy w specyfikacji (str. 612) składnię operatora IO

IO (Decode, AddressMin, AddressMax, AddressAlignment, RangeLength,
DescriptorName) => Buffer

W opisie argumentów znajdujemy, że pole DescriptorName jest opcjonalne, ale możemy także przeczytać w opisie zmian kompilatora, że tą nazwę przydałoby się mieć
http://www.acpica.org/download/changes.txt

iASL: Allow certain "null" resource descriptors. Some BIOS code creates
descriptors that are mostly or all zeros, with the expectation that they will
be filled in at runtime. iASL now allows this as long as there is a "resource
tag" (name) associated with the descriptor, which gives the ASL a handle
needed to modify the descriptor. ACPICA BZ 873.

Sprawdzamy jakie nazwy nie były użyte – w omawianym DSDT kolejna wolna to _Y21, więc dopisujemy ją tak aby kod wygląd następująco:
Name (CRS, ResourceTemplate () 
{
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y16)
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y17)
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y21)
IO (Decode16,
0x0000, // Range Minimum
0x0000, // Range Maximum
0x00, // Alignment
0x00, // Length
_Y18)
})
:arrow: 4.
Warning  1123 -                                              ^ Result is not used, possible operator timeout will be missed
Mutex (MUT0, 0x00) 
Method (ENFG, 1, NotSerialized)
{
Acquire (MUT0, 0x0FFF)
Store (IOCE, INDX)
Store (IOCE, INDX)
Store (Arg0, LDN)
}

Method (EXFG, 0, NotSerialized)
{
Store (IOCL, INDX)
Release (MUT0)
}
Zaglądamy do specyfikacji -strona 579. Operator Acquire ma w parametrach Mutexa oraz podany w ms timeout. Ustawienie wartości na 0xFFFF powoduje, że operator ma czekać w nieskończoność na dostęp do Mutexa. Ostrzeżenie kompilatora wynika z tego, że nie jest sprawdzana zwracana wartość Asquire, czyli nie sprawdza się czy Aquire zadziałał prawidłowo, czy też nastąpił timeout… Ten drugi przypadek jest gorszy, bo jeśli był timeout, a nigdzie nie było to weryfikowane, to może dojść do równoległego dzielenia zasobu.
Dodatkowo można spojrzeć jak to jest rozwiązane u Apple, zaglądając do dumpów z ich maszyn i tak w przypadku iMaca12,2 w DSDT mamy:
Acquire (MUTX, 0xFFFF)
Ok, nie jest to ładne rozwiązanie, ale skoro Apple sie tez nie przejmuje to ostatecznie zmieniamy naszą wartość na 0xFFFF i kolejny warning mniej.

:arrow: 5.
Error    4100 -           Invalid object type for reserved name ^  (found BUFFER, requires Package)
Name (_PLD, Buffer (0x10) 
{
/* 0000 */ 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
})
Ponownie zaglądamy z do specyfikacji ACPI w poszukiwaniu _PLD. Na stronie 203 znajdziemy po co to, a na stronie 362 znajdziemy ładny przykład
Zmieniamy, więc nasz kod na:
Name (_PLD, Package(1) { Buffer (0x10) 
{
/* 0000 */ 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}})
I tak z pozostałymi wystąpieniami, czyli 16 błędów mniej.

:arrow: 6.
Remark   5011 -                   ^ Use of compiler reserved name (_T_0) 
lub
Remark 5011 - ^ Use of compiler reserved name (_T_1)
Skoro nazwa zarezerwowana to zmieńmy ją na inną – przyjęło się zmieniać wystąpienia ‘_T_’ na ‘T_’
Np.
Name (_T_0, Zero) 
Po zmianie
Name (T_0, Zero)

:arrow: Wynik pracy:
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20110922-32 [Sep 22 2011]
Copyright (c) 2000 - 2011 Intel Corporation

ASL Input: DSDT.dsl - 7979 lines, 254150 bytes, 3178 keywords
AML Output: DSDT.aml - 28166 bytes, 919 named objects, 2259 executable opcodes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 119 Optimizations

w drugiej części powrzucam dodatki.

ASUS MAXIMUS VI GENE | i7-4770K | Corsair H80i + 2x Noctua NF-F12 PWM | 16GB (2x8GB) DDR3 Patriot PV316G240C0KRD | 2x Samsung 840 PRO 256GB + Samsung 1TB F3 + WD 2TB WD20EVDS | Sony AD-7690H | GeForce GTX 780 | Seasonic SS-760XP | Silverstone FT03 Black + 2x Noctua NF-S12A PWM | ACD 27" | Apple 802.11ac WiFi + BT 4.0 | Sierra & Windows 10

 

ASUS Z170 PRO GAMING | i5-6500 | 16GB (2x8GB) DDR4 Kingston HX421C14FBK2/16 | Intel 750 400GB SSDPEDMW400G4X1 | GeForce GTX 750Ti | Apple 802.11ac WiFi + BT 4.0 | Sierra


#2 Astarael

Astarael
  • R.E.D.
  • 1672 postów

Napisano 30 listopad 2011 - 09:06

Brawo! Nie każdemu chciałoby się grzebać w specyfikacji ACPI, a Ty dokopałeś się do paru fajnych szczegółów. Gratuluję samozaparcia :D Podejrzewam, że temat przyda się nie tylko posiadaczom tej płyty, bo w/w błędy znaleść można w wielu DSDT MB/laptopów różnych firm.
Snow Leopard 10.6.8 Retail on Lenovo ThinkPad R61i 8932-FDG - This one is resting in peace now.
Lenovo ThinkPad Edge E420s 4401-6YG | Core i5-2430M | HM65 | Intel HD 3000 | Conexant CX20590 | Realtek RTL8111/8168B | Intel Centrino 1000
MacBook Pro 13" Mid 2012 Intel Core i5 | HD 4000 | Wszystko działa OTB!
Dołączona grafika Piszę poprawnie po polsku!

#3 iStig

iStig
  • R.E.D.
  • 647 postów

Napisano 01 grudzień 2011 - 12:17

dzięki ;-) lubię być świadomym tego co robię, więc stąd to grzebanie - i tak tego wszystkiego jest tak dużo, że człowiek cały czas jest w lesie ;-)

ASUS MAXIMUS VI GENE | i7-4770K | Corsair H80i + 2x Noctua NF-F12 PWM | 16GB (2x8GB) DDR3 Patriot PV316G240C0KRD | 2x Samsung 840 PRO 256GB + Samsung 1TB F3 + WD 2TB WD20EVDS | Sony AD-7690H | GeForce GTX 780 | Seasonic SS-760XP | Silverstone FT03 Black + 2x Noctua NF-S12A PWM | ACD 27" | Apple 802.11ac WiFi + BT 4.0 | Sierra & Windows 10

 

ASUS Z170 PRO GAMING | i5-6500 | 16GB (2x8GB) DDR4 Kingston HX421C14FBK2/16 | Intel 750 400GB SSDPEDMW400G4X1 | GeForce GTX 750Ti | Apple 802.11ac WiFi + BT 4.0 | Sierra





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych