AAPL properties for Skylake Graphics (fixing graphic glitches)

I’m on my way to my seat in a friends pub. Joining some locals to watch the F1 race in Mexico, but I want you to note this (updated):

AAPL,ig-platform-id Data <02002619>
AAPL,Gfx324 Data <01000000>
AAPL,GfxYTile Data <01000000> (Glitch Fix)
AAPL00,PanelPowerUp Data <30000000>
AAPL00,PanelPowerOn Data <19010000>
AAPL00,PanelPowerOff Data <11000000>
AAPL00,PanelPowerDown Data <3c000000>
AAPL00,PanelCycleDelay Data <fa000000>

I found this in the Skylake EG2 Graphics Driver (File GUID: 7AF77F94-4C38-4FF1-8CCD-3E084F2FFEC0) inside the MacBookPro13,1 firmware. You can find it yourself with the following steps:

1.) Download Build 16B2657 from the appStore
2.) Right-click on it and select Show Package Content
3.) Open InstallESD.dmg in Contents -> SharedSupport
4.) Go to Packages -> EFIPayloads
5.) Extract MBP131_0205_B02_LOCKED.fd
6.) Launch UEFITool and open the file and click on “Intel Image”.
7.) Search for “AAPL00” (Text) and click OK
8.) Double-click a result
9.) Right-click on the PE32 image section and select Hex view…

Edit: Now you know where to find them 😉

This may be the chicken with the golden egg!

Later!

Update: Data added from MacBookPro13,1 (thanks to conradolpz).

device-colors Data <00020000 a09d9d00 00000000 00000000>
board-rev Data <14>

Update-2: Turns out that the AAPL,GfxYTile property is the one that we were looking for. Set this property, either from a (tiny) SSDT (see comments) or otherwise, and the graphic glitches should be solved.

Update-3: Property AAPL,Gfx324 is no longer there in the latest drivers.

119 thoughts on “AAPL properties for Skylake Graphics (fixing graphic glitches)

  1. Hello PikerAlpha, would it be useful for you to have a dump from IORegistry of one of these new machines? I have one from a MacBook Pro 13,1. I extracted it today in the Apple Store..

      • Got it. Thanks!

        Edit: I was unable to open the file with IORegistryExplorer, but it was still very helpful to find the property (value) that I had set to fix the graphic glitches!

        Note: I originally found the properties in the binary of AppleIntelSKLGraphicsFramebuffer.kext and experimented with it, but I did not realise that one of them actually solved (and masked) the graphics glitches on my setup, and thus I was unable to locate the problem before, since I had no graphics glitches to start with.

        Thanks again!

    • Do you have only IORegistry? I’m looking for ACPI dump, want to investigate how is everything made around usb-c/thunderbolt port to make it working on my Dell XPS 9550 (now it works only if connected before boot, no hot-plugging). This can help me a lot preparing patch for usb-c gen2 port…

      • Yes, and it is a broken one. I do happen to have the device-properties and SMBIOS data.

        Edit: I stand corrected. I used an old version (v2.1) of IORegistryExplorer but with v3.0.2 all is fine.

    • I’m curious as to how you extracted them – I attempted to extract with UEFITool but it definitely did not allow Clover to load!

      • You can use Hopper to load the extracted efi file from the “File” menu -> “Read Executable to Disassemble…”. Then you switch from “Labels” to “Strings” and there you can find the property names.

        For example. Select “AAPL,GfxYTile” and double-click on XREF=sub_XXXX+XXXX. Now check the arguments. Arg #1 points to the frame buffer and Arg #2 is the property name (AAPL,GfxYTile) that is being set, and Arg #3 is the value (1) that is set.

        You can also check “AAPL,Gfx234” and see that the same value (1) is being set there.

        I hope this helps.

  2. Since the new macbook pro feature the HD 530 will we get a fix sooner for our hackintosh ?

    thanks you Piker for your hard work the scene will not be where it is now without you !

    • DefinitionBlock ("ssdt.aml", "SSDT", 2, "APPLE ", "igpu", 0x00001000)
      {
          External (_SB_.PCI0, DeviceObj)
          External (IGPU, DeviceObj)
      
          Scope (\_SB.PCI0)
          {
              Device (IGPU)
              {
                  Name (_ADR, 0x00020000)  
      
                  Method (_DSM, 4, NotSerialized)
                  {
                      If (LEqual (Arg2, Zero))
                      {
                          Return (Buffer (One)
                          {
                              0x03
                          })
                      }
      
                      Return (Package (0x02)
                      {
                          "AAPL,GfxYTile",
                          Buffer (0x4)
                          {
                              0x01, 0x00, 0x00, 0x00
                          }                    
                      })
                  }
              }
          }
      }
      
      • Thanks! So… someone has posted a “complete” SSDT to force HD530 to work. But I’m not seeing any changes. I still have the glitch on the left upper corner…and of course not acceleration. I’m using Clover, and I’m wondering if I’m missing something… do we have to specify ig-platform-id or inject intel? Here’s a copy of the SSDT I’m using:

        /*
        * Intel ACPI Component Architecture
        * AML/ASL+ Disassembler version 20160422-64(RM)
        * Copyright (c) 2000 - 2016 Intel Corporation
        *
        * Disassembling to non-symbolic legacy ASL operators
        *
        * Disassembly of iASLOnf7So.aml, Wed Nov 2 14:33:25 2016
        *
        * Original Table Header:
        * Signature "SSDT"
        * Length 0x00000288 (648)
        * Revision 0x01
        * Checksum 0xC1
        * OEM ID "toleda"
        * OEM Table ID "100s530"
        * OEM Revision 0x00003000 (12288)
        * Compiler ID "INTL"
        * Compiler Version 0x20160422 (538313762)
        */
        DefinitionBlock ("", "SSDT", 1, "toleda", "100s530", 0x00003000)
        {
        External (_SB_.PCI0, DeviceObj) // (from opcode)
        External (_SB_.PCI0.GFX0._ADR, UnknownObj) // (from opcode)
        External (_SB_.PCI0.HECI._ADR, UnknownObj) // (from opcode)

        Scope (\_SB.PCI0)
        {
        Name (GFX0._STA, Zero) // _STA: Status
        Device (IGPU)
        {
        Name (_ADR, 0x00020000) // _ADR: Address
        Method (_INI, 0, NotSerialized) // _INI: Initialize
        {
        Store (Zero, \_SB.PCI0.GFX0._ADR)
        }

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

        Return (Package (0x16)
        {
        "AAPL,ig-platform-id",
        Buffer (0x04)
        {
        0x00, 0x00, 0x12, 0x19
        },

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

        "model",
        Buffer (0x16)
        {
        "Intel HD Graphics 530"
        },

        "AAPL,Gfx324",
        Buffer (0x04)
        {
        0x00, 0x00, 0x00, 0x01
        },

        "AAPL,GfxYTile",
        Buffer (0x04)
        {
        0x00, 0x00, 0x00, 0x01
        },

        "AAPL00,PanelPowerUp",
        Buffer (0x04)
        {
        0x00, 0x00, 0x00, 0x30
        },

        "AAPL00,PanelPowerOn",
        Buffer (0x04)
        {
        0x00, 0x00, 0x01, 0x19
        },

        "AAPL00,PanelPowerOff",
        Buffer (0x04)
        {
        0x00, 0x00, 0x00, 0x11
        },

        "AAPL00,PanelPowerDown",
        Buffer (0x04)
        {
        0x00, 0x00, 0x00, 0x3C
        },

        "AAPL00,PanelCycleDelay",
        Buffer (0x04)
        {
        0x00, 0x00, 0x00, 0xFA
        },

        "device-colors",
        Buffer (0x10)
        {
        /* 0000 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        /* 0008 */ 0x00, 0x9D, 0x9D, 0xA0, 0x00, 0x00, 0x02, 0x00
        }
        })
        }
        }

        Name (HECI._STA, Zero) // _STA: Status
        Device (IMEI)
        {
        Name (_ADR, 0x00160000) // _ADR: Address
        Method (_INI, 0, NotSerialized) // _INI: Initialize
        {
        Store (Zero, \_SB.PCI0.HECI._ADR)
        }

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

        Return (Package (0x02)
        {
        "device-id",
        Buffer (0x04)
        {
        0x3A, 0xA1, 0x00, 0x00
        }
        })
        }
        }
        }

        Store ("ssdt-ami_100_skl-hd530_v2.0 github.com/toleda", Debug)
        }

      • The bytes are reversed. In the wrong order. Change 0x00, 0x00, 0x00, 0x01 to 0x01, 0x00, 0x00, 0x00 and it should work.

        Edit: The device-colors property should not be part of it. The correct location is IODeviceTree:/efi/platform Same as the new board-rev.

  3. I am still getting glitch upper left corner.

    I tired this;
    ig-platform-id: 0x19120000
    Intel Inject: Yes
    and patch above.

    <key>Devices</key>
    <dict>
        <key>AddProperties</key>
        <array>
            <dict>
                <key>Device</key>
                <string>IntelGFX</string>
                <key>Key</key>
                <string>AAPL,GfxYTile</string>
                <key>Value</key>
                <data>
                AQAAAA==
                </data>
            </dict>
        </array>
    </dict>
    

    I also tried full patch with same id and enable Intel inject still getting glitch?
    I checked my ioreg file everything looks right.

    Could you please check my files when you have time?

    https://app.box.com/s/45l75jirq9alyvnn3xtl4pbe1324mcem

    • I am not going to punish you over the foolish (c) Apple copyright notice in your plist, but I do hope that someone has the courtesy to fix this. Thanks.

      Anyway. What you should zero out Device (GFX0) and name the new one IGPU. The next thing is to remove the injected device-colors property. Like I said before, it should not be injected on the IGPU. The model and device-type properties also look broken.

      More importantly. Looking at Device (GFX0) in your dump, there I see a device-id of 0x191f but your SMBIOS reports a I7-6700K processor, so one of them is wrong. Is this the result of Clover’s fakeid feature?

      In case 0x191f is right, then you also need to patch the binary of AppleIntelSKLGraphics.kext Hey. I may be wrong, but I cannot recall to have seen this device-id in the kext.

      • Hi Pike,
        I am still getting glitch. I made clean install twice. My config.plist is now much more clean. I get rid of DisplayMergeNub.kext. This is the app create an kext for third party display and fix EDID. it shows your display like a Real Apple Display because of that my device-id looks like 0x191f. More info about FixEDID.app you can look from here; http://bit.ly/2esqlW9

        I just add ig-platform-id: 0x19120000 Intel Inject: Yes and used short patch; Still getting glitch. I checked ioreg AAPL,ig-platform-id= 001219 but device-id looks like that 121900. I also patched Rename GFX0 to IGPU. It didn’t help either. Still getting glitch. Could you please check my new files one more time.

        https://app.box.com/s/bg7na2smt07mrpwky66a8pl0oqf8bpp7

      • Finally found the problem. So by this method I understand you cannot have 2 GPUS working at the same time. When I disabled my GTX660 with nv_disable=1 all black flicker glitch thing gone.

  4. Pike: Are you also getting this “error”: [Insert Application] (AppleIntelSKLGraphicsGLDriver), Message: “Unhandled device string!” when opening Applications? (It shows in the Console when searching for intel).

    I was trying to get the stuff from verbose boot, but that showed up instead. Do you know how to get the stuff shown in verbose boot on Sierra? (On El Cap I could just go back in the Console to find it).

    • If your device doesn’t match certain predefined devices in AppleIntelSKLGLDriver.bundle like:

      Intel(R) HD Graphics 515
      Intel(R) Iris(TM) Graphics 540
      Intel(R) Iris(TM) Graphics 550
      Intel(R) Iris(TM) Pro Graphics 580

      Then you end up with this: “Unhandled device string!”

      By the way. How exactly are you searching for the “intel” string?

      • Same (on an i5-6600K). I am however trying to use it as a secondary GPU with my Nvidia GTX 980 ti.

        The error only shows up if I search for Intel and then run a new application.

        Also did you know where to find the boot logs in Sierra? In el Capitan I could just go back in time in the Console.app, but I’m unable to find the stuff shown when booting with -v anywhere.

      • The old system.log is being phased out. It is replaced by log (see ‘man log’). Here are some examples for you:
        sudo log config --mode "level:debug"
        log show --info --debug --last "1h"

        Example of a search for a particular type of error
        log show --predicate 'senderImagePath CONTAINS "IOAcceleratorFamily2"' --last "1h"
        And this one shows me the error:
        log show --predicate 'senderImagePath CONTAINS "AppleIntelSKLGraphics"' --last "1h"
        So yeah. I can now confirm it. I also see that message in my log. Not a ‘Fault’ though so it is pretty harmless and should only be there for people with the Intel(R) HD Graphics 520/530. We can patch it by replacing a known id with the one that we have.

      • I understand that the “Unhandled device string!” log message is harmless, but could you detail a little more how we could get rid of it ?
        Where is the id which needs to be replaced ?

      • You could try to use a known device-id in Clover, instead of the factory one. Here are the ones that I have handy here (copied from AppleIntelSKLGraphicsFramebuffer.sh):

        #
        # Skylake hardware support.
        #
        0x190A) text="Skylake Server GT1";;
        0x191A) text="Skylake Server GT2";;
        0x191B) text="Skylake Halo GT2";;
        0x191D) text="Skylake Workstation GT2";;
        0x192A) text="Skylake Server GT3";;
        0x192B) text="Skylake Halo GT3";;
        0x1932) text="Skylake Desktop GT4";;
        0x193B) text="Skylake Halo GT4";;
        #
        # ULT (Ultra Low TDP)
        #
        0x1906) text="Skylake ULT GT1" ;;
        0x1916) text="Skylake ULT GT2" ;;
        0x1926) text="Skylake ULT GT3" ;;
        0x1921) text="Skylake ULT GT2F" ;;
        0x1927) text="Skylake ULT GT3" ;;
        #
        # ULX (Ultra Low eXtreme TDP).
        #
        0x190E) text="Skylake ULX GT1";;
        0x1915) text="Skylake ULX GTx";;
        0x191E) text="Skylake ULX GT2";;
        
        0x1902) text="Skylake Desktop GT1";;
        0x190B) text="Skylake Halo GT1";;
        0x1912) text="Skylake Desktop GT2";;
        0x1917) text="Skylake Desktop GT1.5";;
        
      • OK. After verifying and fixing my SSDT, I confirm that injecting “Skylake Desktop GT2” as model name eliminates the “Unhandled device string!” log message, but it also makes Intel Power Gadget to not display anymore the GT frequency, only the IA frequency.
        QuickSync is still running OK.

        Sleep/Wake and hibernation are also OK.
        Here is the SSDT I use :

        /*
         * Intel ACPI Component Architecture
         * AML/ASL+ Disassembler version 20160422-64(RM)
         * Copyright (c) 2000 - 2016 Intel Corporation
         * 
         * Disassembling to non-symbolic legacy ASL operators
         *
         * Disassembly of iASLMU8y1U.aml, Tue Aug  1 20:35:55 2017
         *
         * Original Table Header:
         *     Signature        "SSDT"
         *     Length           0x000001B7 (439)
         *     Revision         0x01
         *     Checksum         0x3E
         *     OEM ID           "toleda"
         *     OEM Table ID     "100s530"
         *     OEM Revision     0x00003000 (12288)
         *     Compiler ID      "INTL"
         *     Compiler Version 0x20160422 (538313762)
         */
        DefinitionBlock ("", "SSDT", 1, "toleda", "100s530", 0x00003000)
        {
            External (_SB_.PCI0, DeviceObj)    // (from opcode)
            External (_SB_.PCI0.GFX0._ADR, UnknownObj)    // (from opcode)
            External (_SB_.PCI0.HECI._ADR, UnknownObj)    // (from opcode)
        
            Scope (\_SB.PCI0)
            {
                Name (GFX0._STA, Zero)  // _STA: Status
                Device (IGPU)
                {
                    Name (_ADR, 0x00020000)  // _ADR: Address
                    Method (_INI, 0, NotSerialized)  // _INI: Initialize
                    {
                        Store (Zero, \_SB.PCI0.GFX0._ADR)
                    }
        
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (LEqual (Arg2, Zero))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                           
                            })
                        }
        
                        Return (Package (0x08)
                        {
                            "AAPL,ig-platform-id", 
                            Buffer (0x04)
                            {
                                 0x01, 0x00, 0x12, 0x19                         
                            }, 
        
                            "model", 
                            Buffer (0x14)
                            {
                                "Skylake Desktop GT2"
                            }, 
        
                            "AAPL,GfxYTile", 
                            Buffer (0x04)
                            {
                                 0x01, 0x00, 0x00, 0x00                         
                            }, 
        
                            "hda-gfx", 
                            Buffer (0x0A)
                            {
                                "onboard-1"
                            }
                        })
                    }
                }
        
                Name (HECI._STA, Zero)  // _STA: Status
                Device (IMEI)
                {
                    Name (_ADR, 0x00160000)  // _ADR: Address
                    Method (_INI, 0, NotSerialized)  // _INI: Initialize
                    {
                        Store (Zero, \_SB.PCI0.HECI._ADR)
                    }
        
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (LEqual (Arg2, Zero))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                           
                            })
                        }
        
                        Return (Package (0x02)
                        {
                            "device-id", 
                            Buffer (0x04)
                            {
                                 0x3A, 0xA1, 0x00, 0x00                         
                            }
                        })
                    }
                }
            }
        
            Store ("ssdt-ami_100_skl-hd530_v2.0 github.com/toleda", Debug)
        }
        
      • That’s because you are using an inactive platformID. Look here:

            0x19020001) FACTORY_PLATFORM_INFO="0:
                        0100 0219 0000 0000 0353 0800 0000 0000
                        0000 0000 0000 0000 0000 0000 0000 0060
                        0000 0000 0000 0000 0000 0000 0000 0000
                        ff00 0000 0100 0000 2000 0000 ff00 0000
                        0100 0000 2000 0000 ff00 0000 0100 0000
                        2000 0000 ff00 0000 0100 0000 2000 0000
                        0008 0400 0000 0000 0000 0000 0000 0000
                        0000 0000 0000 0000 0000 0000 0000 0000
                        0000 0000 0000 0000 0000 0000 0000 0000
                        8002 0e00 0000 0000 d003 0e00 0000 0000
                        d003 0e00 0000 0000 0100 0000 0800 0000
                        0100 0000 0000 0000    "
                        ;;
        
        You want this one:
        
            0x19120000) FACTORY_PLATFORM_INFO="0:
                        0000 1219 0000 0000 e952 0800 0000 0000
                        0103 0303 0000 2002 0000 5001 0000 0060
                        6c05 0000 6c05 0000 0000 0000 0000 0000
                        ff00 0000 0100 0000 2000 0000 0105 0900
                        0004 0000 8701 0000 0204 0a00 0004 0000
                        8701 0000 0306 0a00 0004 0000 8701 0000
                        0f11 0000 0000 0000 0000 0000 0000 0000
                        0000 0000 0000 0000 0000 0000 0000 0000
                        0000 0000 0000 0000 0000 0000 0000 0000
                        8002 0e00 0000 0000 d003 0e00 0000 0000
                        d003 0e00 0000 0000 0100 0000 0800 0000
                        0100 0000 0000 0000    "
                        ;;
        

        Or some modified version of it.

  5. I’m still having the glitch, and no acceleration. I think I’ve followed the guides based on your discoveries. These are my files, and I’m just hoping you can please help me pike. Is it possible that any of my SSDT (like for example the one I use to get HDMI audio from discrete graphics) is interfering? These are the files that I use (removed from config.plist sensitive data) https://mab.to/FiJcVqcuZ. I don’t understand why this method works for some users.. and not for others. The IOReg dump will show that I have the nvidia card attached right know, but it stills shows info about IGPU. Thanks in advance to anyone that takes the time to take a look at my files! 😉

    • Acceleration should just work. You first need to fix this problem.

      Open System Information and select Extensions. Toggle the view (pick Loaded) in the upper right of the window, and check if all graphics related kexts are loaded and properly signed. If not then I’m afraid that you have to replace the kexts, or reinstall macOS Sierra once again.

      Sure, one previously loaded SSDT can basically ‘block’ others from getting applied to the ACPI namespace. This is pretty simply to check. Do you see the propert(y/ies) that you set? Then it should not be a problem, but not having acceleration is certainly not good.

      p.s. I have no time to check your files right now. Too busy with a new Z270 motherboard and Intel i7-7700K that I need to return later today.

      • I cannot have both GPUS working at the same time for some reason. I mean, they work (correct resolutions/acceleration), I can swap my HDMI cable, but if I want to have the HD 530 working without the glitch, I have to check nv_disable=1 (loosing Nvidia card) in Clover. I’ve been asking in forums wether this method is used with both working GPUS or it’s intended to IGPU users only. If I’m not mistaken, iMac 17,1 doesn’t have the HD 530 activated, right?… could that be the reason? My SMBIOS?

      • I did not test the patch with a discrete GPU, since I’m not using one, but I am aware of the problem.
        First a question. Do you have inject intel set to enabled in Clovers config.plist?
        I admit that I don’t know what inject intel does, but perhaps that is the problem?

      • The Clover WiKi has no information about what inject intel does. I do not know why you need it and for what it does. I use RevoBoot and I don’t need to do anything else. Not even AAPL,ig-platform-id

  6. 1.) Download Build 16B2657 from the appStore

    This probably means that the fix will not work with 16B2555, right?
    That would explain, why I did not have any success yet.

    • No. I have this working since 10.12.0

      Edit: I only use the IGPU and have no discrete graphics card installed. That may be the difference.

      Edit-2: Verified working with Build 16A313a/GM8 that I have installed on a SSD.

      • I have updated to build 16C32f. That didn’t make any difference, as expected.

        I only use the IGPU too, (6700K/HD530) and seems to work ok, apart from the glitches in 10.12.

        I have tried, the (tiny)SSDT and Add device Properties in Clover, but both give the same result:
        Clover bootlog reports success, with both methods, but IOregestryExplorer does not show the added properties.

        I use a DSDT with some fixes, and your CPUPM SSDT v20.3, so there shouldn’t be to much chance on conflicting SSDT’s.

        I’m clueless at the moment.

      • Not having the AAPL,GfxYTile property set is the problem. As you very well know.

        One thing. The tiny SSDT that I provided here, in one of my earlier comments here, uses IGPU, but normally that is GFX or GFX0 in the DSDT. You should check that.

  7. I had GFX0 renamed to IGPU in my patched DSDT, and still have a patch in Clover for SSDT-6 (SaSsdt) that originally contains GFX0.
    There are no traces of GFX of GFX0 to be found. so it must be something else….

      • After looking into the matter some more, trying to understand why the SSDT method doesn’t work, I found that my DSDT does not contain an iGPU _DSM but SSDT-6 (SaSsdt) does.

        I asume both SSDT _DSM methods can’t work at the same time.
        The _DSM method from SaSsdt seems necessary for acceleration etc.

      • Ah I see. You’ve setup Clover to rename GFX to IGPU. Correct?

        If you disable that feature in Clover, and inject IGPU from the same tiny SSDT as where you inject the properties then the problem is solved.

  8. The Glitch is Gone!

    The ssdt method is not working on my machine, for some reason.

    Using Clover I got it working with the device property patch:

    Devices

    AddProperties

    Device
    IntelGFX
    Key
    AAPL,GfxYTile
    Value

    AQAAAA==

    But this alone does not work, I also needed:
    – inject Intel: enabled
    – ig-platform-id: 0x19120000

    Thanks, Piker and others.

  9. the glitch fix work for me no more glitch in left corner I’m still having glitches and black screen waking from sleep

    • Let’s see if I get this right. The glitches in the upper left corner are gone after the patch, but you still see some glitches elsewhere on your monitor?

      About the black screen after sleep. Does the power LED blink, or is it off when it enters the sleep state?
      Can you toggle the LED of the caps lock/num lock keys after it woke up?
      Did you check with screen sharing if it woke up correctly?

      • powers up. caps is working as expected. not connecting to Teamviewer after sleep (on monday i will try with Ethernet instead of wifi, and using SSH not Teamviewer. this will be more informative test)

      • This is from my logs when screen is black – looks like system is waking up correctly, issue is somewhere with graphic part (drivers or acpi, will try to investigate). Connected usb ethernet to my laptop, and after waking up i was able to connect with SSH to my laptop – so system works, usb works, cpu works. Only graphic doesnt work
        From log:
        WindowServer: (CoreDisplay) [ERROR] – Driver reported mode info is out of sync with current mode info. Display 44050f80, driver’s bytePerRow = 15360, driver’s w
        idth = 6720, stored width = 6720. Forcing rowbytes to be 4*modeInfo->ioModeInfo.nominalwitdh.

      • No, my discrete PEG0 is dissabled at all in DSDT. Looks like this is not so much sleep issue. If I’m closing laptop lid, and in 1-2 seconds opening it (before system will go to sleep mode), but scren goes to turned-off state during that – i can see black screen with enabled backlight. I think somehow system can’t restore screen resolution bcz of something. Also, this can be related to my screen – it is QHD screen so i’m using patched CoreDisplay to support higher pixel clock, and i have 4x scaling in system. Now i’m thinking – is it related to scaling itself, or to pixel-clock patch…

      • Interesting. bytePerRow = 15360 and that doesn’t match with QHD (2560 * 1440/16×9 aspect ratio):

        1680 * 32 = 53760 and 53760 >> 3 = 6720
        2560 * 32 = 81920 and 81920 >> 3 = 10240
        3840 * 32 = 122880 and 122880 >> 3 = 15360

        Can you check if Clover sets bootArgs->Video_V1.v_rowBytes correctly? I’m in no way blaming Clover to be the culprit, but we have to be certain about what it sets there.

      • This is CoreDisplay patch im curently uding:
        sudo perl -i.bak -pe ‘$before = qr”\xB8\x01\x00\x00\x00\xF6\xC1\x01\x0F\x85\xAD\x04\x00\x00″s;s/$before/\x31\xC0\x90\x90\x90\x90\x90\x90\xE9\xAE\x04\x00\x00\x90/g’ $CoreDisplayLocation

      • Piker, do you have sleep working fine on Skylake with HD530? I’m not sure if it is related only to my UHD screen or to HD530 at all

      • No. It sleeps alright, or gives the impression that the system is sleeping, but it never wakes up correctly. Remote login/screen sharing may also be broken, but since I work remote… I can’t really test that.

      • Yes, i was talking about wake… I can connect with SSH to my machine after sleep, but screen is black. I’m wondering how it is working on real MB91 and MBP131… They have very close to HD530 video onboard

      • looks like i got my sleep/wake working. I’m not sure 100% for exact reason, but that is what i did. Reviewed all my dsdt/ssdt patches (added some new, removed unneeded, some changes on used). Also implemented native brightness control without using IntelBacklight.kext. And yes, this is second change – removed IntelBacklight kext. Now my brightness control is much more fluid, and also it saves correctly over sleep/wake/reboot/power cycle.
        So, now my laptop sleeps and wakes fine, without black screen. By the way, this is laptop (XPS 9550 with UHD panel). If you want i can send you original/patched acpi and list of used kexts – if you think it may help in your researches.

      • Sorry, was just overbusy. Here are my original and patched acpi files https://drive.google.com/file/d/0B1xZ4VKT4JKZWlZZYWpwYTJkeEE/view?usp=sharing
        This is laptop XPS 9550, using smbios info of MBP131 and Sierra onboard. Brightness control made working without IntelBacklight (now it works just flawlessly as it should). Let me know if you need any other information. If you want – i can share also patched that were used for that. I’m lazy guy so i made script to autopatch my acpi, and all patches are stored and structured in two folders 🙂

      • Hi,

        Thanks. I’ll look at it tomorrow.

        One other thing. Can you please check if you have a dictionary named GPUInternalSingleSlice under PCI0@0 -> IGPU@2 -> AGPM
        with min-value (0x0) and max-value (0xe).

        Also check if you have saved-config (Data) under PCI0@0 -> IGPU@2. They are there in the new MacBookPro13,1 and look a must have.

      • I have GPUInternalSingleSlice property with values as you said in AGPM node but dont have saved-config property in IGPU node at all

      • I don’t. Need to figure out why. Thanks.

        Take a look at the EFI device-properties of the new MacBookPro13,1 and note that Apple stores saved-config from it, but why? I know very little about this data. Sure. Some values are obvious, by educated guesses, but for the rest… we have to guess. Or perhaps someone else knows more about it?

      • @goodwinalexs is there a way we can connect outside this comment thread? You guys might be finally getting together some fixes for one of the longest running annoyances we hackintosh thunderbolt users have been dealing with since the first thunderbolt boards shipped. I would love to collaborate on this as much as possible. I may be getting some info soon that could be helpful as well. Just want to move this discussion to a format where we can communicate more easily, rapidly and on a larger scale. If nothing else i have access to a lot of TB1/2/3 equipped hacks for testing and some passed , mostly failed hack attempts to discuss. Also this is a comment thread about skylake graphics so not exactly on topic.
        Thanks,
        g\

    • Also, i have question to you – do you have experience making kexts for IOPCIDevice/IOPCIBridge? I’m trying to bring THunderbolt 3 to macOS, but main issue – it is almost 90% working out of the box, but only if connected on system boot. Looks like macOS is not enumerating pcie bus after hotplugging something into TB port (no pcie hotplugging?). Maybe they are using some own kexts to do that, i’m not sure.
      My main idea is to write kext that will forcibly probe pcie bus to add new nodes after AlpinRidge will be powered on with connected device. I think it should be possible, but currently have no experience writing device drivers for macOS, and even can’t find good example how to do that…

      • Yes, looks like they really dropped it. For thunderbolt they are using different model that Intel writes in specs. They are not using hotplug/smm/smi. They have a lot of ACPI methods, and they looks like they are controlling TB controller directly from software (that’s why there is whole ThunderBolt famility kext bunch). But in same time TB is just pci bridge with hotplugging functionality.
        Also, interesting fact – on my laptop i see that booting without anything connected to TB i have pcie node (RP15 in my case) in power state 0x02 and aspm as 0x2. It is good if you have proper software control behind this hardware. But on MBP131 ioreg i see they have controller in 0x0 power state.
        So, if i can set through kext power state to D0 instead D3hot maybe this will be enough for system to enumerate nodes behind TB controller. Or, if not – add also some probe-by-event functionality. But i can’t find any example for kext working with pci bus. And apple docs are bullshit

      • Well I thought so, and I do see that PCIHotplugCapable is set to zero.

        I also had a quick look at one of the kexts and see that methods _DSM sets “power-save” and that methods RTPC, XRST and TRPE are also called from it. Did you port any of them to your config?

        p.s. There are a bunch of boot arguments: tb, tblog, tbips and tbrtpctime May come in handy. If we knew how to use them and what they do.

      • Interesting findings. Yeah, NHI0 in mbp131 has methods XRST, TRPE and RTPC is present in both NHI0 and XHC2 (which is usb-c part of thunderbolt port)
        But still main problem is that without devices attached on boot stage chip looks suspended, so no children nodes are visible for system. And after boot connecting devices wakes up controller but as system has no hot-plug abilities – device tree is still empty. But using “setpci” i can check PCI Configuration Space and i see that after boot with no devices i have Link Status 0x5021, and after hot-plugging device i see 0x7023 (chip woke up and there is connection to next nodes after bridge), but ioreg still shows 0x5021 status and no devices behind RP15
        So main target is to force system to rescan pci bus and to enumerate new devices. Let’s see if i can do that somehow…

      • Check your log for this line:

        kernel: (kernel) pci (build 20:01:20 Nov 9 2016), flags 0xe3000, pfm64 (39 cpu) 0x7f80000000, 0x80000000

        Note the value of flags, gIOPCIFlags internally. You can change it with help of the pci and npci boot arguments. The initial value that I have here is 0xe3000 and that can easily be explained by looking at the source code of IOPCIBridge.cpp and IOPCIConfigurator.h:

        uint32_t gIOPCIFlags = 0
                     | kIOPCIConfiguratorAllocate	// 0x00020000
                     | kIOPCIConfiguratorPFM64		// 0x00002000
                     | kIOPCIConfiguratorCheckTunnel	// 0x00080000
                     | kIOPCIConfiguratorTBMSIEnable	// 0x00001000
        ;
        

        A little later it adds:

        #if VERSION_MAJOR >= 13
        		gIOPCIFlags |= kIOPCIConfiguratorUsePause;
        #endif
        
      • You might want to see if the Thunderbolt 3 EFI drivers (from MBP13,3 firmware) are useful. Make sure that you have the EFI_DEVICE_PATH_PROPERTY_PROTOCOL installed (the EFI drivers use it for device property injection).

  10. I think I can live without both GPUS working at the same time…On the other hand, do you have any idea on how we can patch the USB 3.1 and 3.1 type C, so it really works…? I’ve tried mapping my USB ports, and all USB 3.0 and 2.0 are working just fine..But no go for the 3.1 and 3.1 type C :(. I can attach devices 2.0 and they mount/work but no 3.0 devices…they don’t mount. Drives attached to 3.1 Type A, they mount but I can’t copy anything to it, for example. Can’t we mimick via DSDT/SSDT patches.. the way it works on the new Macbook Pros somehow?

  11. Pingback: Pike's Universum

  12. Pingback: This is how to fix HD 530 glitches/artifacts in Mac OS Sierra - Hackintosh Guide

  13. Just wonder two things;
    1. Sleep/Wake
    2. QuickSync

    1. is Sleep/Wake means your Screen and Case will sleep together right? Cause my screen sleep and wake without any problem after add these fixes. All Bluetooth, USB and System wakes without any problem. When I remove these fixes, screen is sleep but never wake I am making force restart from my case. is that mean my sleep/wake working or partially working?

    2. Why QuickSync doesnt work with System definition 17,1? cause when we change system definition 14,1 QuickSync starts work. is something inside of the applegraphicsdevicepolicy trigger to QuickSync?

    • 1.) When all the fans are off then yes.
      2.) QuickSync doesnt work with System definition 17,1? That is news to me. How Exactly did you check this?

      Edit: Ok. I clicked on the ? in MacX Video Converter Pro and see what you mean, but this is their fault – select iMac14,1 SMBIOS and it works. I would advise people that use this tool to contact the developers and see what they can do for you.

      • No this tool is actually providing an accurate analysis of this. I have done these tests independently with quicktime, which will use the GPU to export video. When quicksync is enabled the same video will take ~20 mins to export. When it is not, it will take 2 hours. This is very easy to replicate and has been an issue for a long time. I would love to know why quicksync is not working with many systems definitions that it should (on real macs it does). Sounds like a job for piker 🙂

        Also, just as important is finding a way to apply this fix when also using a dGPU. Obviously they are related in that having the iGPU enabled is needed for Quicksync, but for other apps we like using CUDA or a faster GPU. I have long set up my machines to have a monitor on each i/dGPU. As many have reported, the glitch remains when a dGPU is also present.

        Thanks,
        g\

    • The issue with quicksync and the 17.1 definition also appears to affect airplay mirroring (While mirroring works its really slow).

    • Not a real solution perhaps, but the first thing you should do is to rename HECI to IMEI.

      Edit: av-signal-type is <00 00 00 00> and here is some background information about possible values:

      // CFNumber/CFData
      #define kIOFBAVSignalTypeKey "av-signal-type"
      enum {
      kIOFBAVSignalTypeUnknown = 0x00000000,
      kIOFBAVSignalTypeVGA = 0x00000001,
      kIOFBAVSignalTypeDVI = 0x00000002,
      kIOFBAVSignalTypeHDMI = 0x00000008,
      kIOFBAVSignalTypeDP = 0x00000010,
      };

      Note: We can only wait for Apple to update the header files.

  14. Dear Piker

    In case DSDT or SSDT edits doesent work to solve glitches on skylake as
    it is on many hd520/hd530

    What about kext solution ?? how can we inject the aapl property via a kext not dsdt or ssdt
    edits
    Waiting any reply or kext u can make to solve this

    I am facing glitches problem with enoch .. No glitches on clover

  15. Question, I’ve been using a couple Kepler GPUs with my new Z170X-Designare and 6600K. The Kepler cards are great since they’re pretty much natively supported and don’t require a lot of modification to get running. Has anyone got their HD 530 working in conjunction with a couple discrete GPUs? The two cards I have are a GTX 660Ti and GT640. Any advice is appreciated.

    • The tile info is only set for the IGPU. I checked my MacBookPro13,3 and there I found:

      ATY,TileInfo (Data)

      With a scaled resolution I get:

      ATY,TileInfo (Data)

      Slightly different. Also. The following grep:

      grep -r "ATY,TileInfo" .

      Gives me this output:

      AMD5000Controller.kext/Contents/MacOS/AMD5000Controller
      AMD6000Controller.kext/Contents/MacOS/AMD6000Controller
      AMD7000Controller.kext/Contents/MacOS/AMD7000Controller
      AMD8000Controller.kext/Contents/MacOS/AMD8000Controller
      AMD9000Controller.kext/Contents/MacOS/AMD9000Controller
      AMD9510Controller.kext/Contents/MacOS/AMD9510Controller
      AMDRadeonX3000.kext/Contents/MacOS/AMDRadeonX3000
      AMDRadeonX4000.kext/Contents/MacOS/AMDRadeonX4000
      AMDRadeonX4100.kext/Contents/MacOS/AMDRadeonX4100
      ATIRadeonX2000.kext/Contents/MacOS/ATIRadeonX2000

      I would also try to change: CFG_NO_MST in the Info.plist (set it to True since this is set to False by default).

      But now you are going to reply to me and tell me that you have a NVidia GPU. Right. I don’t, and thus guess what. I cannot really help you with this. I suspect however that a similar property/settings can be found in the NVIdia drivers.

  16. Hi! I just want to share my experiences.
    I have a GA-Z170-Gaming-K3-EU Mainboard and a Intel 530 integrated CPU graphics. After I had troubles with update to macOS 10.12.3 (which caused ACPIPlatform Kernel Panics with my Clover configuration), I had to create a new config file. My machine always booted up with the Unibeast USB drive (of course with massive flickering). I managed to install Clover 4012 and it booted without USB drive (but with the flickering). Each time I tried the Multibeast Intel 530 patch the boot process stopped with a Kernel Panic in AppleIntelSKLGraphicsFramebuffer.kext and I could not get ANY manual patching to work. Then, a few hours ago I remembered that I updated my UEFI/BIOS from version F3h to F21 and I tried to change some settings and BOOM! I found out that I NEED to set the IGFX to AUTO and to set the Minimal/Initial graphic memory to 256MB (and the Maximum also to 256MB, as it is set by default). Then, without any manual patching, but of course with the Multibeast Intel 530 patch.

    Hope that helps. Maybe you can investigate on that further.

    BR,
    drBugfinder

    P.S. Can anyone tell me why system is reporting a “Intel HD Graphics 7000 1536 MB” (was also before the update)? Does that mean that I have to set my graphics memory to 1536MB – I sometimes have random freezes (same like before the whole update thing).

    • That sounds like a bug in the F21 BIOS for your motherboard. Selecting the IGPU as initial graphics device should always work. Besides that. I don’t understand why you would need to allocate 256MB for a 64MB frame buffer driver. That won’t match. Another BIOS bug?

      The 1536 MB you see is the amount of memory allocated by the driver, Not the pre-allocated memory buffer by the BIOS.

      • FWIW I also have to set min graphics mem to 256MB on the z170x-ud5 TH running F20 bios to prevent flickering artifacts in 10.12.3 (not the common top-left glitch, whole screen flickering)

  17. After update 10.12.4 we don’t need any patch, injections and ig-platform id. HD530 now working natively without those;

    – GFX to IGPU patch: removed
    – 4 port patch: removed
    – inject intel: uncheck
    – ig_platform_id: Empty
    – Sierra “glitch” patches: removed.

    And looks like this;
    [img]http://i.imgur.com/xV52aRa.png[/img]

    But now we have massive boot glitch on startup. And kext to patch down below does not reduce the severity of boot glitch anymore. Probably this value has been changed. We need the new one.

    [img]http://i.imgur.com/4oncc3K.jpg[/img]

    Comment: Boot graphics glitch, 10.12.dp1 (credit denskop)
    Find: <01000075 25>
    Replace: <010000eb 25>
    • Thanks. I didn’t even notice it.

      Ok. The frame buffer data is still the same – only the version number related bytes are different and thus I still need to patch the fourth frame buffer for my VGA monitor. I stopped injecting AAPL,ig_platform_id months ago, but I was still injecting this AAPL,GfxYTile property. Lo and behold. We no longer need it. No glitches without it. Confirmed!

      • FWIW I just tried disabling only the GfxYTile property (Still have GFX to iGPU injected) and results in black screen for me (Z170-UD5 TH, HDMI 2.0 4K 60hz to monitor via coredisplay patcher)

      • Odd indeed, though I was lazy and just disabled the patch with Clover Configurator so it could be a syntax problem. I’ll try it again properly later on.

      • Tried it again, properly this time (xcode). removed the items and inject intel unchecked, and machine boots to black screen (at the same moment the apple logo garble would normally appear). There must be something about my config.plist that gets broken when I remove the patches. 🤔

  18. Update 4-port patch still required with my build, everything else can be removed/disabled. You may prune my comments as needed 😅

  19. I don’t know if this is on topic or not but I have been trying for a long time to get HiDpi modes above 1080p to work with HD530 graphics on my i7-6700T processor and 27 inch UHD monitor via Display Port.

    Is there any solution for this? I have tried editing the Overrides files and can get the monitor to display 2560 x 1440 @ 60Hz but it is not HiDpi. It stays blurry. Without doing any edits with RDM I can select 2560 x 1440 only @ 59Hz which is just terrible. I am using iMac 17,1 running 10.12.5 inject intel and platform id 19120000. I have experimented with different platform id’s with no luck.

    I have attached the same display to a 2016 MacBook Pro 13 inch with Iris 550 graphics and can display all scaled resolutions in HiDpi. The text is super clean and not fuzzy like on my HD 530 hackintosh. I did not anticipate this problem when buying the UHD monitor so it would be great if there was a solution because I can’t return the screen.

    All the best

Leave a comment