Contribute
Register

High Sierra with NVidia Maxwell GPU + Nvidia Drivers = Cannot restart or halt computer

Status
Not open for further replies.
Joined
Jan 30, 2011
Messages
458
Motherboard
ASUS ROG RAMPAGE VI EXTREME
CPU
i9-10980XE
Graphics
RX 5700 XT
Hi,

I would like to gather information about this issue that apparently is impacting High Sierra builds that have a Nvidia Maxwell GPU with the Nvidia Drivers.

It appears that a bunch of people (including myself) have noticed that they are unable to restart or shutdown their computer when the Nvidia Drivers are installed. When halt or reboot is being performed it appears that the screen goes black (GPU stops providing video out) at the end of the restart/halt process but it seems that halt/reboot is never triggered after that. The issue disappears when the Nvidia drivers are removed.

My GPU: GTX Titan X (Maxwell)

I've been able to replicate this issue with several Nvidia Drivers for High Sierra, and I haven't been able to find one that is not causing this behaviour. Could the issue be related to something else?

Any clue anyone?
 
Were you able to figure out what the issue was with your build?

I am experiencing the exact same issue on my machine with an Nvidia GTX 1070.

When I try to restart or shutdown my machine, the screen goes black. However, I still have the cursor on the screen and am able to move it. But, the machine never restarts or shuts down.
 
@vlgngrbrdmn, I was able to fix the issue on my build.

All I had to do was to inject the NVidia card through ACPI patch:

Code:
DefinitionBlock ("", "SSDT", 1, "NICO", "X299", 0x00000000)
{
    External (_SB_.PC02.BR2A, DeviceObj)    // (from opcode)
    External (_SB_.PC02.BR2A.GFX0, DeviceObj)    // (from opcode)
    External (GFX0, DeviceObj)    // (from opcode)
    External (GPRW, MethodObj)    // 2 Arguments (from opcode)

    Scope (_SB.PC02.BR2A)
    {
        Scope (GFX0)
        {
            OperationRegion (PCIS, PCI_Config, Zero, 0x0100)
            Field (PCIS, AnyAcc, NoLock, Preserve)
            {
                PVID,   16, 
                PDID,   16
            }

            Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                Return (GPRW (0x69, 0x04))
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x14)
                    {
                        "built-in", 
                        Buffer (One)
                        {
                             0x00                                           
                        }, 

                        "device-id", 
                        Buffer (0x04)
                        {
                             0x06, 0x1B, 0x00, 0x00                         
                        }, 

                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        }, 

                        "AAPL,slot-name", 
                        Buffer (0x07)
                        {
                            "Slot-1"
                        }, 

                        "@0,connector-type", 
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                         
                        }, 

                        "@1,connector-type", 
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                         
                        }, 

                        "@2,connector-type", 
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                         
                        }, 

                        "@3,connector-type", 
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                         
                        }, 

                        "@4,connector-type", 
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                         
                        }, 

                        "@5,connector-type", 
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                         
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }

        Device (HDAU)
        {
            Name (_ADR, One)  // _ADR: Address
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x0C)
                    {
                        "built-in", 
                        Buffer (One)
                        {
                             0x00                                           
                        }, 

                        "device-id", 
                        Buffer (0x04)
                        {
                             0xEF, 0x10, 0x00, 0x00                         
                        }, 

                        "AAPL,slot-name", 
                        Buffer (0x07)
                        {
                            "Slot-1"
                        }, 

                        "device_type", 
                        Buffer (0x16)
                        {
                            "Multimedia Controller"
                        }, 

                        "name", 
                        Buffer (0x1D)
                        {
                            "NVIDIA High Definition Audio"
                        }, 

                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
    }

    Method (DTGP, 5, NotSerialized)
    {
        If (LEqual (Arg0, ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
        {
            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)
    }
}

This DSDT above also allowed me to get rid of NvidiaGraphicsFixup.kext completely. However, I got it back recently to fix the lag issue for the latest NVidia drivers. I haven't noticed (yet) any issue in using NvidiaGraphicsFixup.kext again in combination of the above DSDT implementation.

Edit: Forgot to add a few things.
 
Last edited:
@vlgngrbrdmn, I was able to fix the issue on my build.

All I had to do was to inject the NVidia card through ACPI patch:

Code:
    External (_SB_.PC02.BR2A, DeviceObj)    // (from opcode)
    External (_SB_.PC02.BR2A.GFX0, DeviceObj)    // (from opcode)
    External (GFX0, DeviceObj)    // (from opcode)

    Scope (_SB.PC02.BR2A)
    {
        Scope (GFX0)
        {
            OperationRegion (PCIS, PCI_Config, Zero, 0x0100)
            Field (PCIS, AnyAcc, NoLock, Preserve)
            {
                PVID,   16,
                PDID,   16
            }

            Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                Return (GPRW (0x69, 0x04))
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x14)
                    {
                        "built-in",
                        Buffer (One)
                        {
                             0x00                                          
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0x06, 0x1B, 0x00, 0x00                        
                        },

                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        },

                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "@0,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@1,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@2,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@3,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@4,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@5,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }

        Device (HDAU)
        {
            Name (_ADR, One)  // _ADR: Address
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x0C)
                    {
                        "built-in",
                        Buffer (One)
                        {
                             0x00                                          
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0xEF, 0x10, 0x00, 0x00                        
                        },

                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "device_type",
                        Buffer (0x16)
                        {
                            "Multimedia Controller"
                        },

                        "name",
                        Buffer (0x1D)
                        {
                            "NVIDIA High Definition Audio"
                        },

                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
    }

    Method (DTGP, 5, NotSerialized)
    {
        If (LEqual (Arg0, ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
        {
            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)
    }

This DSDT above also allowed me to get rid of NvidiaGraphicsFixup.kext completely. However, I got it back recently to fix the lag issue for the latest NVidia drivers. I haven't noticed (yet) any issue in using NvidiaGraphicsFixup.kext again in combination of the above DSDT implementation.

Thanks! I will have to look into doing this with my GPU and see if I can get it to work.
 
Hi @Thireus and @vlgngrbrdmn ;

I'm having the same problems, I have a titan x Maxwell with High Sierra 10.13.4, it works perfectly but when I want to restart or shut down the system the screen turns black and the computer does not turn off. The same equipment with a Titan Pascal works perfectly, but with the Maxwell it does not work. I have read that the solution is to inject Nvidia but I do not know in which part of the clover or how, I would appreciate it if you could help me, thanks.
 
@eiriasemrys, @WoodCabin, @shael, FYI I resolved the Nvidia X Maxwell issue to restart/halt computer by implementing the DSDT injection seen in post #3. You need to create you own DSDT.aml with the content of post #3 and Clover will do the rest.

You need a bit of knowledge to do it, to know what's the PCIE lane name where your GPU is located. Then use MaciASL, compile your DSDT.aml and place it in EFI/Clover/ACPI/patched. You can send me your .ioreg file, and I can try to do it for you: Use IORegistryExplorer to save it.
 
Last edited:
@eiriasemrys, @WoodCabin, @shael, FYI I resolved the Nvidia X Maxwell issue to restart/halt computer by implementing the DSDT injection seen in post #3. You need to create you own DSDT.aml with the content of post #3 and Clover will do the rest.

You need a bit of knowledge to do it, to know what's the PCIE lane name where your GPU is located. Then use MaciASL, compile your DSDT.aml and place it in EFI/Clover/ACPI/patched. You can send me your .ioreg file, and I can try to do it for you: Use IORegistryExplorer to save it.


I attached the IOreg and my EFI folder, in case I have to change something in the config.plist or add some extension in / others

Thank you very much, a beer if you come to Valencia! ;)
 

Attachments

  • iMac Pro de Hack.ioreg
    8.4 MB · Views: 163
  • EFI.zip
    36.3 MB · Views: 242
I attached the IOreg and my EFI folder, in case I have to change something in the config.plist or add some extension in / others

Thank you very much, a beer if you come to Valencia! ;)

Here you go. Give it a try and let me know. To be placed in ./EFI/CLOVER/ACPI/patched/

Updated file in: #11
 
Last edited:
[QUOTE = "Thireus, post: 1730635, member: 22313"] Aquí tienes. Inténtalo y cuéntame. Para colocarse en ./EFI/CLOVER/ACPI/patched/[/QUOTE]


I have not had luck, I have to activate something in the clover? Bios? change any extension? Thanks
 
Nothing else to change, just place the file in ./EFI/CLOVER/ACPI/patched/.

In PCI devices of MacOS System information, do you see the Nvidia card?
 
Last edited:
Status
Not open for further replies.
Back
Top