GraphicsOutputProtocol

Anyone wacked GraphicsOutputProtocol before launching OS X?
Wake after sleep should work with this workaround.

10 thoughts on “GraphicsOutputProtocol

  1. Not exactly Intel Graphics, but some of us are seeing something a little similar with Nvidia GPUs in Sierra.

    With CSM support turned off: Black screen on boot with multiple screens (Nvidia GPU is using the UEFI BIOS and thereby GOP).

    With CMS support turned on: Everything is back to normal (Nvidia GPU is using the legacy BIOS and thereby no GOP).

    I hope that makes any sense.

  2. How exactly did you do this?
    I tried to unload & disconnect the GOP video driver (& blindly exit UEFI shell) a few weeks ago, but it didn’t fix sleep/wake. Talking about Radeon graphics though, not iGPU.

    • Unloading the GOP driver is not the same, as you noticed already, but what I can tell you is that the GraphicsOutputProtocol will only be initialised (in the Start routine) when a monitor is connected. This is the same for IGPU and dGPU cards. This is also why some people can boot without a monitor connected (or without the frame buffer driver) and when they connect their monitor after the boot process is done, then wake after sleep works.

      There are two other things that may play a role. Like the ACPI_ADR (AMD conversion table) and for multi-monitor support you have to stuff a NULL into a routine to get the list with connected monitors. This doesn’t seem to be be functioning with the Apple drivers, since they blindly assume that you have a display panel, but most of you do not.

    • UEFI can enable all GOP enabled GPUs, but should only startup GPUs w/o OptionROM, and invoke GraphicsOutputProtocol for GPUs with a display connected to it. Perhaps the ACPI _LID method is involved and checked by the driver, so please check what your ACPI tables are doing with it.

      • I don’t see anything _LID related in my DSDT, but it’s not a laptop anyway, so I didn’t expect it to be there (or should it?).

        Btw, just realized that my system will wake from sleep with iGPU = primary as long as I don’t attach any displays, but all AirPlay-related functions (e.g. Quicklook, YouTube videos, etc…) will be broken after wake (corresponding app just freezes). Might be old news though.

        I just had a look at those slides:
        http://www.uefi.org/sites/default/files/resources/UPFS11_P4_UEFI_GOP_AMD.pdf
        http://www.uefi.org/sites/default/files/resources/UEFI_Plugfest_2011Q4_P7_AMD.pdf

        How would I go about figuring out the ACPI _ADR used by GOP driver and platform?
        And is it somehow possible to track all changes which the installation of the GraphicsOutputProtocol introduces? (Those slide say: create child handles for all output devices and install GOP for active one -> I’d like to observe that somewhere, and compare to a real Mac).

        I’ll soon try to attach the MacPro D500/D700 EFI (which is GOP, in contrast to the HD 7950 Mac Edition UGA EFI) to my R9 280 (should be perfectly compatible, as all are Tahiti GPUs). If the driver can run in a generic, non-Apple environment, it would be interesting to see if it introduces the same issues or if it behaves differently. (I doubt it though, as the CSM+VBIOS method results in the same issues as AMDs GOP EFI).

      • The driver read/checks the return state of method _LID for laptops and desktop computers.

        Drivers can read the value of _ADR, just like they can check the _LID return state.

        The slides look cool, but I may have found another angle. One that I plan to investigate a.s.a.p. Remember that people with the same BIOS run into issues with sleep after wake, so it has to be something in GPU the drivers.

        It may even be something simple. Possibly even the IOGraphicsFamily driver; the frame buffer driver is loaded when you set DisableInternalPanel to true in the Info.plist The only visible difference in that IOGraphics (injected by IOGraphicsFamily.kext) is then missing.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s