Jump to content

Tracing back the AMD GPU wakeup issue to its origin


Mieze
368 posts in this topic

Recommended Posts

I know some of us have same or similar card and working dual monitor setup. It would be of great help if anyone can give me directions to get my setup working. 

 

Thanks.

Which Framebuffer are you using? Which "AMD9xxxController.kext"  will be loaded for your card?

If you could give me this information, i could tell you, how to make multimonitor setup working or i could build a "dummy"-kext for you, which will enable multi-monitor setup

  • Like 1
Link to comment
Share on other sites

Which Framebuffer are you using? Which "AMD9xxxController.kext"  will be loaded for your card?

If you could give me this information, i could tell you, how to make multimonitor setup working or i could build a "dummy"-kext for you, which will enable multi-monitor setup

I was trying to use Orinoco. BUT, I found your suggestion in hackintosh-forum.de (used google translator) and actually made CFG_USE_AGDC to false. For testing, I used WhateverGreen and used SSDT to inject CFG,CFG_USE_AGDC, 0x00  and dual monitor worked. I saw your dummy kext but figured SSDT and WhateverGreen was quicker option for me. 

 

To answer your original question: the controller is AMD9500Controller.kext and access is AMDRadeonX4250 - Ellesmere. 

 

Thanks for your help. was really desperately looking for the solution and you finally guided me to it. 

Link to comment
Share on other sites

@Mieze

It's fantastic work!

Confirm working with my Radeon 6450 in Sierra.

I just made this patch as SSDT

attachicon.gifSSDT-AMD.aml.zip

Thanks for this trick with SSDT.aml which worked for AMD R9 290X at 10.13.1(17B46a) in which no need of WhateverGreen.kext, but it seems not working at 10.12.6 or lower version in which I still need WhateverGreen.kext in /EFI/CLOVER/kexts/Other or 10.12 respectively.

Is there anyone can confirm AMD Radeon HD 5770 or 6870 working by this method too ?

Or need rolling back with Sierra's related kexts ?

Link to comment
Share on other sites

Thanks for this trick with SSDT.aml which worked for AMD R9 290X at 10.13.1(17B46a) in which no need of WhateverGreen.kext, but it seems not working at 10.12.6 or lower version in which I still need WhateverGreen.kext in /EFI/CLOVER/kexts/Other or 10.12 respectively.

Is there anyone can confirm AMD Radeon HD 5770 or 6870 working by this method too ?

Or need rolling back with Sierra's related kexts ?

But vice versa.

This SSDT works for me in 10.12.6.

For HighSierra I need also to replace 4 kexts from 10.12.6 related to this card.

Don't know about radeon 5xxx. It should work without tricks. The method needed for 6xxx and later.

  • Like 2
Link to comment
Share on other sites

But vice versa.

This SSDT works for me in 10.12.6.

For HighSierra I need also to replace 4 kexts from 10.12.6 related to this card.

Don't know about radeon 5xxx. It should work without tricks. The method needed for 6xxx and later.

Thanks for your advice & help.

In 10.12.6 or lower my Z87/Z97 Intel hackintoshs can boot to desktop with both Intel HD 4600 & AMD Radeon HD 5770 at the same time.

In 10.13.1 I must disable Intel HD 4600 at BIOS, otherwise it can not boot to desktop with AMD Radeon HD 5770.

In Z97 Intel hackintosh no matter what display card enabled, always got blank screen on wake-up from sleep.

There is no such an issue in Z87 Intel hackintosh if Lilu + WhateverGreen are applied.

I'll test more with AMD Radeon 6870 & report later to confirm whether this SSDT.aml working or not at 10.12.6 & 10.13.1.

Link to comment
Share on other sites

Thanks for your advice & help.

In 10.12.6 or lower my Z87/Z97 Intel hackintoshs can boot to desktop with both Intel HD 4600 & AMD Radeon HD 5770 at the same time.

In 10.13.1 I must disable Intel HD 4600 at BIOS, otherwise it can not boot to desktop with AMD Radeon HD 5770.

In Z97 Intel hackintosh no matter what display card enabled, always got blank screen on wake-up from sleep.

There is no such an issue in Z87 Intel hackintosh if Lilu + WhateverGreen are applied.

I'll test more with AMD Radeon 6870 & report later to confirm whether this SSDT.aml working or not at 10.12.6 & 10.13.1.

There is a 95% probability that you have a broken framebuffer configuration (hotplug not working, etc.) and/or wrong BIOS settings.

 

Mieze

  • Like 1
Link to comment
Share on other sites

There is a 95% probability that you have a broken framebuffer configuration (hotplug not working, etc.) and/or wrong BIOS settings.

 

Mieze

Thanks for your reminding and what should I fix for this issue ?

CLOVER's config.plist or Power management in BIOS ?

Link to comment
Share on other sites

@jsl: You probably need to inject a framebuffer personality matching your graphics card. Please read the topics about AMD framebuffer edits here on IM. Keep in mind that some framebuffer personalities also select special configuration options.

 

Although I haven't tested this utility thoroughly, it might be worth to give it a try in case you have problems creating a framebuffer patch: https://github.com/JogleLew/amd-framebuffer-utility

 

Good luck!

 

Mieze

  • Like 2
Link to comment
Share on other sites

@:Mieze   I tried your patch, with two rx 270x in CrossFirex, but always black screen

I tried injecting
FB Futomaki and Curacao.rom
FB Hamachi and Pitcairn.rom,
both in Sierra and High Sierra
Maybe I'm wrong in compiling the Dsdt, but I think the problem is always the connectors

 

my AMD 8350 processor, it has no igpu, I could only, CSM Enable and Legacy GPU
 

 

 

sssmy AMD 8350 processor, it has no igpu, I could only, CSM Enable and Legacy GPU

 
my AMD 8350 processor, it has no igpu, I could only, CSM Enable and Legacy GPU
 
Link to comment
Share on other sites

@carlo_76: correct! If the framebuffer personality doesn't match your card, you'll end up with a black screen because the display isn't recognized. Also keep in mind that Futomaki might not enable all of your display connecters. In my case only the DP and one of the DVI connectors work but that's more than enough for me.

 

Mieze

  • Like 1
Link to comment
Share on other sites

Try adding the connectors all as hdmi in your dsdt.

 

Even dp screens are usable that way.

 

Works for my R9 390 for which I had to eecode the connectors following VLADs guide before Whatevergreen and now PoweredByMieze.

 

Thank you so much! And „PoweredByMieze“ seriously needs a logo :D

  • Like 3
Link to comment
Share on other sites

@Mieze

 

Thanks a lot for this great solution.

 

Does this method work on Legacy BIOS as well or it only applies to UEFI? 

 

I have an old GA-EP45-DS3R and a Sapphire 7790 GPU which was working with WheteverGreen and Lilu, but ever since macOS High Sierra it's not working anymore. I get the black screen.

 

Thanks again

Looks like no, I tried the G41 motherboard (775 platform) above the HD6450, wake up still black, OSX10.13.
Although the patch code can initialize the graphics card, but still can not solve the problem of wake up the black screen.

 

So, for the old motherboard, I may also need to continue to find a solution.
  • Like 1
Link to comment
Share on other sites

Looks like no, I tried the G41 motherboard (775 platform) above the HD6450, wake up still black, OSX10.13.

Although the patch code can initialize the graphics card, but still can not solve the problem of wake up the black screen.

 

So, for the old motherboard, I may also need to continue to find a solution.

I hope we can find a solution for older pc rigs. I didn’t have the time to play around with new ideas.

 

 

Sent from my iPhone using Tapatalk

Link to comment
Share on other sites

Seems to work perfectly for my R9 380X in UEFI boot. No more WhateverGreen needed, no Clover injection used.

 

Using a tweaked ACPI 6.0 compatible SSDT. Could probably be slimmed down further by removing superfluous device properties:

/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20170929 (64-bit version)
 * Copyright (c) 2000 - 2017 Intel Corporation
 *
 * Disassembling to symbolic ASL+ operators
 *
 * Disassembly of iASLVulVNL.aml, Tue Oct 31 19:55:21 2017
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x000002BD (701)
 *     Revision         0x02
 *     Checksum         0xF3
 *     OEM ID           "APPLE "
 *     OEM Table ID     "SSDTAMDG"
 *     OEM Revision     0x00001000 (4096)
 *     Compiler ID      "INTL"
 *     Compiler Version 0x20170929 (538380585)
 */
DefinitionBlock ("", "SSDT", 2, "APPLE ", "SSDTAMDG", 0x00001000)
{
    External (_SB_.PCI0, DeviceObj)
    External (_SB_.PCI0.PEG0, DeviceObj)
    External (_SB_.PCI0.PEG0.GFX0, DeviceObj)

    Scope (\_SB.PCI0.PEG0)
    {
        Scope (GFX0)
        {
            OperationRegion (PCIB, PCI_Config, Zero, 0x0100)
            Field (PCIB, AnyAcc, NoLock, Preserve)
            {
                Offset (0x10),
                BAR0,   32,
                BAR1,   32,
                BAR2,   64,
                BAR4,   32,
                BAR5,   32
            }

            Method (_INI, 0, NotSerialized)  // _INI: Initialize
            {
                If ((BAR5 == Zero))
                {
                    Local0 = BAR2 /* \_SB_.PCI0.PEG0.GFX0.BAR2 */
                }
                Else
                {
                    Local0 = BAR5 /* \_SB_.PCI0.PEG0.GFX0.BAR5 */
                }

                OperationRegion (GREG, SystemMemory, (Local0 & 0xFFFFFFFFFFFFFFF0), 0x8000)
                Field (GREG, AnyAcc, NoLock, Preserve)
                {
                    Offset (0x6800),
                    GENA,   32,
                    GCTL,   32,
                    LTBC,   32,
                    Offset (0x6810),
                    PSBL,   32,
                    SSBL,   32,
                    PTCH,   32,
                    PSBH,   32,
                    SSBH,   32,
                    Offset (0x6848),
                    FCTL,   32,
                    Offset (0x6EF8),
                    MUMD,   32
                }

                FCTL = Zero
                PSBH = Zero
                SSBH = Zero
                LTBC = Zero
                GENA = One
                MUMD = Zero
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                If ((Arg2 == Zero))
                {
                    Return (Buffer (One)
                    {
                         0x03                                             // .
                    })
                }

                Return (Package ()
                {
                    "AAPL,slot-name",
                    Buffer ()
                    {
                        "Slot-1"
                    },

                    "@0,AAPL,boot-display",
                    Buffer (One)
                    {
                         0x00                                             // .
                    },

                    "@0,name",
                    Buffer ()
                    {
                        "ATY,Lagotto"
                    },

                    "@1,name",
                    Buffer ()
                    {
                        "ATY,Lagotto"
                    },

                    "@2,name",
                    Buffer ()
                    {
                        "ATY,Lagotto"
                    },

                    "@3,name",
                    Buffer ()
                    {
                        "ATY,Lagotto"
                    },

                    "ATY,VendorID",
                    Buffer ()
                    {
                         0x02, 0x10                                       // ..
                    },

                    "ATY,DeviceID",
                    Buffer ()
                    {
                         0x38, 0x69                                       // 8i
                    },

                    "model",
                    Buffer ()
                    {
                        "AMD Radeon R9 380X"
                    },

                    "hda-gfx",
                    Buffer ()
                    {
                        "onboard-1"
                    }
                })
            }
        }

        Device (HDAU)
        {
            Name (_ADR, One)  // _ADR: Address
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                If ((Arg2 == Zero))
                {
                    Return (Buffer (One)
                    {
                         0x03                                             // .
                    })
                }

                Return (Package ()
                {
                    "layout-id",
                    Buffer ()
                    {
                         0x01, 0x00, 0x00, 0x00                           // ....
                    },

                    "hda-gfx",
                    Buffer ()
                    {
                        "onboard-1"
                    }
                })
            }
        }
    }
}
post-1255144-0-48103400-1509470934_thumb.png

Oh, and thanks Mieze.

 

Edit: Added HDAU device.

Edited by zxv
  • Like 1
Link to comment
Share on other sites

I hope we can find a solution for older pc rigs. I didn’t have the time to play around with new ideas.

 

 

Sent from my iPhone using Tapatalk

I used to go back to OSX10.12.6, this patch code can work very well, wake up there is no black screen problem, everything is normal. And the motherboard seems to have nothing to do with the old and new, is 10.13.1 system problems, my HD6450 graphics card in 10.13.1 below is not really driven, it needs 10.12.6 related driver file to supplement the driver, it may be The root of the problem.

 

I will continue to study 10.13.1 HD6450 sleep wake up the black screen problem, I hope to be able to break through.

@Mieze

 

This is a great discovery!
After my initial verification, this patch code can almost solve all the ATI graphics card to wake up the black screen, the prerequisite is: ATI graphics card must be able to be the normal system driver.
Of course, you can also use BAR2 as a judge to identify the card, the code is as follows:
 
If (LEqual (BAR2, Zero))
         {
             Store (BAR5, Local0)
         }
         Else
         {
             Store (BAR2, Local0)
         }
 
Thank you again for the ATI graphics card to wake up the black screen of the efforts and contributions!
 

 

I think WhateverGreen.kext can retire ~ ~ ha ha ~ ~
  • Like 3
Link to comment
Share on other sites

Thanks for your advice & help.

In 10.12.6 or lower my Z87/Z97 Intel hackintoshs can boot to desktop with both Intel HD 4600 & AMD Radeon HD 5770 at the same time.

In 10.13.1 I must disable Intel HD 4600 at BIOS, otherwise it can not boot to desktop with AMD Radeon HD 5770.

In Z97 Intel hackintosh no matter what display card enabled, always got blank screen on wake-up from sleep.

There is no such an issue in Z87 Intel hackintosh if Lilu + WhateverGreen are applied.

I'll test more with AMD Radeon 6870 & report later to confirm whether this SSDT.aml working or not at 10.12.6 & 10.13.1.

In FX-6300 hackintosh with AMD GPU Radeon HD 6870:

this trick worked at 10.13.1(17B48), but it got instant reboot at 10.13.2(17C60c) & 10.12GM on wake up from S3 sleep.

If booted by Enoch 2905 and Lilu/WhateverGreen.kext in /S/L/E at 10.12.6 it can wake up from S3 sleep without blank screen issue. But not working by Clover 4243 yet (still got blank screen on wake up from sleep).

Link to comment
Share on other sites

"The Radeon driver's source code tells us that the first display controller engine's registers can be found starting at offset 0x6800"

 

Can u point to source code of this? can't seem to find it.

Here you are:

 

https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/radeon/evergreen_reg.h?h=next-20171103

 

Mieze

Link to comment
Share on other sites

In FX-6300 hackintosh with AMD GPU Radeon HD 6870:

this trick worked at 10.13.1(17B48), but it got instant reboot at 10.13.2(17C60c) & 10.12GM on wake up from S3 sleep.

If booted by Enoch 2905 and Lilu/WhateverGreen.kext in /S/L/E at 10.12.6 it can wake up from S3 sleep without blank screen issue. But not working by Clover 4243 yet (still got blank screen on wake up from sleep).

There is a 99% probability that the reason for this behavior lies somewhere else, maybe a broken DSDT, a BIOS issue, incorrect connector patch, etc.

 

Mieze

  • Like 1
Link to comment
Share on other sites

There is a 99% probability that the reason for this behavior lies somewhere else, maybe a broken DSDT, a BIOS issue, incorrect connector patch, etc.

 

Mieze

Thanks for your advice and help.

Booted by Clover 4289 in FX-6300 hackintosh the instant reboot issue on wake up from sleep can be fixed by put FakeSMC.kext (3.5.0), Lilu (1.2.1), & WhateverGreen (1.1.2) in /S/L/E instead of EFI/CLOVER/kexts/Other at 10.10.5(14F1807), 10.11.6(15G1004), 10.12GM & 10.12.6 (16G1036), but not worked yet at 10.13.2 (17C60c).

Only booted by Enoch 2905 can fix this issue at 10.13.2 up to now.

 

[Edit]

Booted by Clover 4288/4289 in Intel Z87 hackintosh the instant reboot issue on wake up from sleep can be fixed by put FakeSMC.kext (3.5.0), Lilu (1.2.1), & WhateverGreen (1.1.2) in /S/L/E instead of EFI/CLOVER/kexts/Other at 10.13.2(17C60c) at last !

However it is Not always working. Sometimes OK, most times failed.

Need better solution !

Edited by jsl
Link to comment
Share on other sites

Just want to confirm, that Miezes patch from first post is working on my config as well. IGPU and CSM completely disabled in BIOS.

just have to make some "preperations" to make a tripple-monitor-setup working and some cosmetic changes as well,

as already Matthew82 has documented.

 

So now, i no longer nee LILU and WhatEverGreen kexts.

Thanx for another incredible work. Love it. Makes my Hackintosh so much easier.

hi,how to let clover to apply this patch?

Link to comment
Share on other sites

Another confirmation, after couple of days spending the time to figuring out what's what, I finally managed to activate my Sapphire Radeon HD 7790 with the DSDT patch that @Mieze found and a big thanks to her :)

I didn't inject anything (No InjectATI, no framebuffer or Ati Connectors Controller) via my config.plist.

 

 

 

Scope (_SB.PCI0.PEGP.GFX0)

    {
        Device (GFX0)
        {
            Name (_ADR, Zero)  // _ADR: Address
            OperationRegion (PCIB, PCI_Config, Zero, 0x0100)
            Field (PCIB, AnyAcc, NoLock, Preserve)
            {
                Offset (0x10), 
                BAR0,   32, 
                BAR1,   32, 
                BAR2,   64, 
                BAR4,   32, 
                BAR5,   32
            }
           Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x1A)
                    {
                        "AAPL,slot-name", 
                        Buffer (0x07)
                        {
                            "Slot-1"
                        }, 
 
                        "@0,name", 
                        Buffer (0x0B)
                        {
                            "ATY,Baladi"
                        }, 
 
                        "@1,name", 
                        Buffer (0x0B)
                        {
                            "ATY,Baladi"
                        }, 
 
                        "@2,name", 
                        Buffer (0x0B)
                        {
                            "ATY,Baladi"
                        }, 
 
                        "@3,name", 
                        Buffer (0x0B)
                        {
                            "ATY,Baladi"
                        }, 
 
                        "ATY,Card#", 
                        Buffer (0x11)
                        {
                            "113-1E253120-O46"
                        }, 
 
                        "ATY,Copyright", 
                        Buffer (0x25)
                        {
                            "© 1988-2017, AMD Technologies Inc."
                        }, 
 
                        "ATY,Rom#", 
                        Buffer (0x36)
                        {
                            "C58203 Bonaire XT A1 GDDR5 1GB 64Mx32 300e/150m"
                        }, 
 
                        "ATY,VendorID", 
                        Buffer (0x02)
                        {
                             0x02, 0x10                                     
                        }, 
 
                        "ATY,DeviceID", 
                        Buffer (0x02)
                        {
                             0x5C, 0x66                                     
                        }, 
 
                        "device_type", 
                        Buffer (0x11)
                        {
                            "ATY,BaladiParent"
                        }, 
 
                        "model", 
                        Buffer (0x1B)
                        {
                            "HD 7790 Sapphire Dual-X OC"
                        }, 
 
                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
 
            Method (_INI, 0, NotSerialized)  // _INI: Initialize
            {
                If (LEqual (BAR5, Zero))
                {
                    Store (BAR2, Local0)
                }
                Else
                {
                    Store (BAR5, Local0)
                }
 
                OperationRegion (GREG, SystemMemory, And (Local0, 0xFFFFFFFFFFFFFFF0), 0x8000)
                Field (GREG, AnyAcc, NoLock, Preserve)
                {
                    Offset (0x6800), 
                    GENA,   32, 
                    GCTL,   32, 
                    LTBC,   32, 
                    Offset (0x6810), 
                    PSBL,   32, 
                    SSBL,   32, 
                    PTCH,   32, 
                    PSBH,   32, 
                    SSBH,   32, 
                    Offset (0x6848), 
                    FCTL,   32, 
                    Offset (0x6EF8), 
                    MUMD,   32
                }
 
                Store (Zero, FCTL)
                Store (Zero, PSBH)
                Store (Zero, SSBH)
                Store (Zero, LTBC)
                Store (One, GENA)
                Store (Zero, MUMD)
            }
        }
 
        Device (HDAU)
        {
            Name (_ADR, One)  // _ADR: Address
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x02)
                    {
                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
 
        OperationRegion (DGFX, PCI_Config, Zero, 0xF0)
        Field (DGFX, DWordAcc, Lock, Preserve)
        {
            Offset (0x0B), 
            LNKV,   8
        }
 
        Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
        {
            Return (GPRW (0x09, 0x04))
        }
    }

 

 

 

 

Thanks to @Matthew82's R9 290X settings because my 7790 is working well with Baladi farmebuffer I just edited the essential information for my GPU.

The only thing is that this patch only worked on my Asus P8H77-L ME which has UEFI support but still no luck on my GA-EP45-DS3R.

 

There is no PEGP or GFX in the DSDT and I don't know what was used on older pc BIOS's ACPI tables to address the GPU.

 

CSM is enabled and Boot from PCIe/PCI Expansion Devices is set to legacy.

 

Thanks again for this solution :)

Link to comment
Share on other sites

×
×
  • Create New...