Jump to content
Cassio

DSDT Patching

Recommended Posts

How to apply a patch using DSDT Editor




If you will apply several patches you can compile only once, after all patches are applied.


When applying a patch, check the before/after tabs and try to understand what is being changed and why.


Important: always start from an original DSDT. Don't use "extract DSDT" if you booted using a patched dsdt.aml from other PC. If you can't boot without a patched DSDT, use Windows or Linux to extract the original DSDT from BIOS.


If you update BIOS, most likely you will have to patch DSDT again, so it's a good idea to create a full patch, with all needed patches (separated by ";"), like the many examples here.



Patches


DSDT Patch Request



Power management:


If AppleIntelCPUPowerManagement doesn't work (need to use NullCPUPowerManagement) even if you enable GenerateCStates and GeneratePStates in Chameleon, check if AppleLPC is loaded (run "kextstat" command in terminal), if it's not, apply one of the LPC patches according to your chipset (desktop/laptop ICH7, ICH8, ICH9, ICH10, Nehalem, Sandy Bridge).


If you get "No HPET(s) available" kernel panic you may need the HPET patch. The example is used on Gigabyte mobos, but it may also be needed in other mobos and laptops (adapt _CRS to return the ResourceTemplate right above).


For many Sandy Bridge systems it's also necessary to patch AppleIntelCPUPowerManagement.


About power management http://Olarila.com/forum/viewtopic.php?f=18&t=1703



USB problems:


There are many USB patches, EHCI, UHCI, ICH9 USB sleep, EHCI sleep/ownership, some are generic, some are organized by chipset. If you have problems with USB ports, if you see errors or warnings in kernel log about EHCI or UHCI, you can try these patches.



Sleep problems:


Problems with sleep are usually related to power management and USB.


If the system goes to sleep and wakes immediately, look for "Wake reason" in kernel log and edit method _PSW or remove _PRW from that device in DSDT.



CMOS reset:


Apply the RTC patch.


If you have CMOS reset after sleep/wake/reboot in Lion, you need to patch AppleRTC.



Audio:


You can use HDEF (or AZAL to HDEF if you already have device AZAL) and a codec patch (ALC*) if you will use a patched AppleHDA, or if you just want to have audio information in System Profiler.


Make sure layout-id in DSDT (hex) coincides with LayoutID in AppleHDA (decimal).



DTGP is required by many patches, so you will probably need it.



IRQs is a "generic" patch, it's always used. In some cases more IRQs are added to device HPET, compare patches for various chipsets.



SBUS (SMBUS) is used to get SMBus kexts loaded.



Shutdown patches are BIOS specific, apply if the PC doesn't turn off properly.



There are other hardware specific and some "cosmetic" patches (only fix warning and remark messages in compilation, but aren't really necessary).



References (must read if you want to understand what the patches do)


DSDT fixes for Gigabyte boards

P5K PRO

DSDT: trick retail drivers by changing "device-id" (e.g USB), Fix sleep issues of ICH9/-R faking ICH10-R

Slow Sata Issue Fix, How to fix HPET IRQ conflict that cause that

ALC889A, Gigabyte (Intel)

[HOW TO] Patch AppleHDA - Knowledge Base, Guide for how to fix/use original AppleHDA

DSDT - Vanilla Speedstep - Generic Scope (_PR)

Shutdown Fix

Atheros Ar9285, Working starting with 10.6.5

GA-EX58 and GA-X58A DSDT native power management modifications

Final solution (FIX) for GMA950 Desktop edition

SpeedStepper, AICPUPM patcher for ASUS P8P67 (and others)

CMOS Resets on Restarts after Sleep and Wake in 10.7 (Lion)

ASUS N53Jq • CPU: Intel Core i7-740QM 1.73GHz • RAM: 6,0GB • HD: 500GB • GPU: GeForce GT 425M 1GB 1920x1080 • OS: OS X 10.8.4 • Linux Mint 15 • Windows 8

Link to comment
Share on other sites

Sorry, I am a total noob in DSDT stuff and patching... . Here is my question if anyone would explain it clearly to me:

I have a GA-965P-S3 mainboard. Should i just apply the patch "GA-965P-S3" to my original extracted DSDT, or do I also have to apply "AZAL to HDEF" and "ALC888" and maybe "HDEF-GIGABYTE-ALC888" too?

Does the order of applying patches actually matter?


I looked in my original (untouched) DSDT, and found 2 instances of the word "AZAL", by the way.

So please explain to me in a way that I can identify my sound problem.

Thanks in advance.

Link to comment
Share on other sites

hello


probably the patch for ur mobo .. already have the sound fix


anyway is not only dsdt patch u need .. u need also a patched applehda to ur alc


that info is all here in forum


good hack

PB Easy Note TM 86 - i5 430 M - H55M - Ram - 6 GB - Alc272 - Radeon HD 5470 512 QE/CI

Lenovo G500 - i5 3230m - HM77 - Ram - 8 GB - Conexant audio - HD 4000

My OS X Files 

Link to comment
Share on other sites

Hi. I know this is an old thread but I just wanted to post to say thank you for a DSDT patch that worked on my brand new HP Envy 17-ae100 laptop. It's has a CoffeeLake CPU and when I shut down macOS, the OS would shut down but the laptop did not power down (fans and LED lights stayed on.). The Intel Shutdown patch worked. Neither MaLdOn nor RehabMan had fixes that worked, but yours did. Way to go!!!!

Link to comment
Share on other sites

  • Administrators

Hi. I know this is an old thread but I just wanted to post to say thank you for a DSDT patch that worked on my brand new HP Envy 17-ae100 laptop. It's has a CoffeeLake CPU and when I shut down macOS, the OS would shut down but the laptop did not power down (fans and LED lights stayed on.). The Intel Shutdown patch worked. Neither MaLdOn nor RehabMan had fixes that worked, but yours did. Way to go!!!!

hey

Nice

Intel Shutdown is a Hybrid with common patch + gigabyte shutdown patch xD

Enjoy

Support Olarila Vanilla Hackintosh by making a donation HERE

About Premium Users you can check HERE

Link to comment
Share on other sites

If a user finds a "patch pack" for their motherboard, does it matter what bios version is installed *or* what motherboard revision they have, for example 1.0, 1.1, 3.3, etc? I am asking because there are differences between bios versions and motherboard revisions.

Link to comment
Share on other sites

if you are referring to dsdt/ssdt extraction via Clover/F4, yes you are absolutely right. However I was referring to a ready-made dsdt patch-pack for a specific motherboard, for example GA-965P-S3 (three revisions 1.0, 1.1, 3.3). Maybe it doesn't matter?

Link to comment
Share on other sites

  • Administrators

if you are referring to dsdt/ssdt extraction via Clover/F4, yes you are absolutely right. However I was referring to a ready-made dsdt patch-pack for a specific motherboard, for example GA-965P-S3 (three revisions 1.0, 1.1, 3.3). Maybe it doesn't matter?

same patch work for all revisions

Support Olarila Vanilla Hackintosh by making a donation HERE

About Premium Users you can check HERE

Link to comment
Share on other sites

Maybe it will be the age, do I have to turn the dsdt you sent me into txt, copy the content and paste it for compilation?

Thank you


Added in 16 minutes 3 seconds:

Maybe it will be the age, do I have to turn the dsdt you sent me into txt, copy the content and paste it for compilation?

Thank you

all ok I finally understood .... !!!

Link to comment
Share on other sites

Mald0n, I followed the guide and had good success for most part.

I need help to handle couple issues


I patch these..

                       * BDC,    16,     BTIF. GBTI
                       Offset (0x8D), 
                      * BFC,    16,     BTIF. GBTI
                       Offset (0x91), 
                      * BPR,    16,     BTST
                      * BCR,    16,     GBTI
                      * BRC,    16,     BTST, GBTI
                      * BCC,    16,     GBTI
                      * BPV,    16,     BTST, GBTI
                      * BCV2,   16,     GBTI
                      * BCV3,   16,     GBTI
                      * BCV4,   16,     GBTI    
                      * BSTS,   16,     GBTI? No error but contains old name in GBTI.
                      * BSN,    16,     BTIF, GBTI
                      * BDAT,   16,     BTIF, GBTI
                      * BCV1,   16,     GBTI
                      * BDV,    16,     BTIF, GBTI
                      * BME,    16,     GBTI
                      * CBT,    16,     GBTI, _TMP? (BATZ) Error in _TMP…can’t seem to patch
		                 Patched..Object is not accessible from this scope (B1B2)
                                        Unpatched..Object does not exist (/SB.PIC0.LBPC.ECO.CBT)

 

ISSUE #1


My problem is with BSTS. I can split in EC0 BSTS, 16, ---- STS0,8,STS1,8. BUT NO ERROR ON COMPILE BUT BSTS IN GBTI???

 


Method (GBTI, 1, NotSerialized)
                   {
                       Store ("Enter getbattinfo", Debug)
                       Acquire (ECMX, 0xFFFF)
                       If (ECRG)
                       {
                           If (And (BATP, ShiftLeft (One, Arg0)))
                           {
                               Store (Arg0, BSEL)
                               Store (Package (0x03)
                                   {
                                       Zero, 
                                       0x4E, 
                                       Buffer (0x4E){}
                                   }, Local0)
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BDC0,\_SB.PCI0.LPCB.EC0.BDC1), Index (DerefOf (Index (Local0, 0x02)), Zero))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BDC0,\_SB.PCI0.LPCB.EC0.BDC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), One))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BFC0,\_SB.PCI0.LPCB.EC0.BFC1), Index (DerefOf (Index (Local0, 0x02)), 0x02))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BFC0,\_SB.PCI0.LPCB.EC0.BFC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x03))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BRC0,\_SB.PCI0.LPCB.EC0.BRC1), Index (DerefOf (Index (Local0, 0x02)), 0x04))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BRC0,\_SB.PCI0.LPCB.EC0.BRC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x05))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BME0,\_SB.PCI0.LPCB.EC0.BME1), Index (DerefOf (Index (Local0, 0x02)), 0x06))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BME0,\_SB.PCI0.LPCB.EC0.BME1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x07))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BCC0,\_SB.PCI0.LPCB.EC0.BCC1), Index (DerefOf (Index (Local0, 0x02)), 0x08))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BCC0,\_SB.PCI0.LPCB.EC0.BCC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x09))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.CBT0,\_SB.PCI0.LPCB.EC0.CBT1), Local1)
                               Subtract (Local1, 0x0AAC, Local1)
                               Divide (Local1, 0x0A, Local2, Local3)
                               Store (Local3, Index (DerefOf (Index (Local0, 0x02)), 0x0A))
                               Store (ShiftRight (Local3, 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x0B))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BPV0,\_SB.PCI0.LPCB.EC0.BPV1), Index (DerefOf (Index (Local0, 0x02)), 0x0C))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BPV0,\_SB.PCI0.LPCB.EC0.BPV1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x0D))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BCR0,\_SB.PCI0.LPCB.EC0.BCR1), Local1)
                               If (Local1)
                               {
                 ------         If (And (BSTS, 0x40))
                                   {
                                       Add (Not (Local1), One, Local1)
                                       And (Local1, 0xFFFF, Local1)
                                   }
                               }

                               Store (Local1, Index (DerefOf (Index (Local0, 0x02)), 0x0E))
                               Store (ShiftRight (Local1, 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x0F))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BDV0,\_SB.PCI0.LPCB.EC0.BDV1), Index (DerefOf (Index (Local0, 0x02)), 0x10))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BDV0,\_SB.PCI0.LPCB.EC0.BDV1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x11))
              ------     Store (BSTS, Index (DerefOf (Index (Local0, 0x02)), 0x12))
              ------      Store (ShiftRight (BSTS, 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x13))

 

I SEARCH BSTS AND FIND

 

 OperationRegion (AF10, SystemMemory, 0xBF764018, 0x08BE)
   Field (AF10, AnyAcc, Lock, Preserve)
   {
       STAT,   32, 
       EVAL,   8, 
       ASTL,   8, 
       ASTG,   256, 
       OWNT,   640, 
       PROD,   640, 
       MODL,   640, 
       PTYP,   640, 
       PFRQ,   640, 
       MEMS,   640, 
       DATE,   640, 
       FAMI,   640, 
       SERL,   640, 
       VREV,   640, 
       KBCD,   640, 
       HDDS,   160, 
       HDDM,   320, 
       CDAT,   136, 
       CSTS,   8, 
       CYCL,   8, 
       PBSN,   144, 
       SBSN,   144, 
----BSTS,   8, 
       BORD,   64, 

BSTS name still exists in this field and its 8 bit, not 16 like in EC0

How do I deal with this? Patch the EC0 code and don't worry about this?

EDIT... ISSUE #1 SOLVED

I deleted the line BSTS, 8, as you suggested and patched the code in EC0


ISSUE #2


I patch EC0 CBT, 16 ----CBT0,8,CBT1,8,

 

 Method (GBTI, 1, NotSerialized)
                   {
                       Store ("Enter getbattinfo", Debug)
                       Acquire (ECMX, 0xFFFF)
                       If (ECRG)
                       {
                           If (And (BATP, ShiftLeft (One, Arg0)))
                           {
                               Store (Arg0, BSEL)
                               Store (Package (0x03)
                                   {
                                       Zero, 
                                       0x4E, 
                                       Buffer (0x4E){}
                                   }, Local0)
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BDC0,\_SB.PCI0.LPCB.EC0.BDC1), Index (DerefOf (Index (Local0, 0x02)), Zero))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BDC0,\_SB.PCI0.LPCB.EC0.BDC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), One))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BFC0,\_SB.PCI0.LPCB.EC0.BFC1), Index (DerefOf (Index (Local0, 0x02)), 0x02))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BFC0,\_SB.PCI0.LPCB.EC0.BFC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x03))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BRC0,\_SB.PCI0.LPCB.EC0.BRC1), Index (DerefOf (Index (Local0, 0x02)), 0x04))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BRC0,\_SB.PCI0.LPCB.EC0.BRC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x05))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BME0,\_SB.PCI0.LPCB.EC0.BME1), Index (DerefOf (Index (Local0, 0x02)), 0x06))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BME0,\_SB.PCI0.LPCB.EC0.BME1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x07))
                               Store (B1B2(\_SB.PCI0.LPCB.EC0.BCC0,\_SB.PCI0.LPCB.EC0.BCC1), Index (DerefOf (Index (Local0, 0x02)), 0x08))
                               Store (ShiftRight (B1B2(\_SB.PCI0.LPCB.EC0.BCC0,\_SB.PCI0.LPCB.EC0.BCC1), 0x08), Index (DerefOf (Index (Local0, 0x02)), 0x09))
                  -------      Store (B1B2(\_SB.PCI0.LPCB.EC0.CBT0,\_SB.PCI0.LPCB.EC0.CBT1), Local1)
                               Subtract (Local1, 0x0AAC, Local1)
                               Divide (Local1, 0x0A, Local2, Local3)

 

This patches fine but the following does not...

 

ThermalZone (BATZ)
       {
           Method (_PSV, 0, NotSerialized)  // _PSV: Passive Temperature
           {
               Return (GETP (Zero, 0x05))
           }

           Method (_PSL, 0, NotSerialized)  // _PSL: Passive List
           {
               Return (PSL ())
           }

           Name (_TSP, 0x012C)  // _TSP: Thermal Sampling Period
           Name (_TC1, One)  // _TC1: Thermal Constant 1
           Name (_TC2, 0x02)  // _TC2: Thermal Constant 2
           Method (_CRT, 0, Serialized)  // _CRT: Critical Temperature
           {
               Return (0x0FAC)
           }

           Method (_TMP, 0, Serialized)  // _TMP: Temperature
           {
               Store (0x0AAC, Local0)
               Store (0x0AAC, Local1)
               Acquire (\_SB.PCI0.LPCB.EC0.ECMX, 0xFFFF)
               If (\_SB.PCI0.LPCB.EC0.ECRG)
               {
   ------   Store (B1B2(\_SB.PCI0.LPCB.EC0.CBT0,\_SB.PCI0.LPCB.EC0.CBT1), Local1)
               }

               Release (\_SB.PCI0.LPCB.EC0.ECMX)
               Store (GTTP (0x05, Local1, 0x0AAC, 0x0FA2), Local0)
               If (SETM (0x05, Local0, Zero, Zero))
               {
                   Notify (BATZ, 0x81)
               }

               Return (Local0)

 

This give error. Object is not accessible from this scope (B1B2) and if I don't patch I get error Object does not exist (/SB.PIC0.LBPC.ECO.CBT) because I patched it in EC0.


Scope _TZ--BATZ--_TMP


EDIT....


So I managed to fix this error by adding Method (B1B2, 2, NotSerialized) { Return(Or(Arg0, ShiftLeft(Arg1, 8))) } to the _TZ scope



Everything else went good

Laptop: HP EliteBook 8740w /1st Gen Core i5-520M Processor / Ati FirePro M7820 / 8GB DDR 3 1333Mhz / High Sierra 10.13.6 / Clover 5100 EFI Legacy Boot


Laptop: HP EliteBook 8470p / 3rd Gen Core i7-3820QM Processor / HD 4000 1600x900 / 16GB DDR 3 1600Mhz / Catalina 10.15.3 / Clover 5103 UEFI Boot / MacOs,Win10,Ubuntu Multiboot

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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.





×
  • Create New...
The popup will be closed in 15 seconds...