Does Apple load microcode for the IGPU?

Someone asked me if I knew if Apple loads Graphics micro code (Guc) for the IGPU and I can confirm that. Yes it does. Take a look at the following log data from my Apple MacBookPro13,3:

kernel: (AppleIntelSKLGraphics) [IGPU] Will fallback to host-side scheduling if graphics firmware fails to load
kernel: (AppleIntelSKLGraphics) [IGPU] Chose to use graphics firmware based on platform
kernel: (AppleIntelSKLGraphics) [IGPU] Graphics accelerator is using scheduler interface revision 3: Apple Firmware
kernel: (AppleIntelSKLGraphics) [IGPU] Scheduler: Multiple channel indexes per command streamer
kernel: (AppleIntelSKLGraphics) [IGPU] Scheduler: Process CSB using HWS.
kernel: (AppleIntelSKLGraphics) [IGPU] Scheduler: PM notify enabled
kernel: (AppleIntelSKLGraphics) [IGPU] Graphics Address: PPGTT, Separate Address Space
kernel: (AppleIntelSKLGraphics) [IGPU] MultiForceWake Enabled: Using 3D Driver
kernel: (AppleIntelSKLGraphics) [IGPU] Begin GuC load process
kernel: (AppleIntelSKLGraphics) [IGPU] Begin GuC load process
kernel: (AppleIntelSKLGraphics) [IGPU] ForceWake Multithread = 0x20002
kernel: (AppleIntelSKLGraphics) [IGPU] ForceWake Multithread = 0x20002
kernel: (AppleIntelSKLGraphics) [IGPU] CONFIG0 (0xD00) = 0x80000000
kernel: (AppleIntelSKLGraphics) [IGPU] CONFIG0 (0xD00) = 0x80000000
kernel: (AppleIntelSKLGraphics) [IGPU] GT_THREAD_STATUS = 0x400b0000
kernel: (AppleIntelSKLGraphics) [IGPU] GT_THREAD_STATUS = 0x400b0000
kernel: (AppleIntelSKLGraphics) [IGPU] Doing retry #0
kernel: (AppleIntelSKLGraphics) [IGPU] Doing retry #0

Edit: We can disable the firmware load with help of boot argument -disablegfxfirmware which may come in handy in due time. Another boot argument is -disablegfxpreemption.

18 thoughts on “Does Apple load microcode for the IGPU?

  1. Where to get the firmware and how to load it in clover? My CPU contains Iris 540, the same as MBP13,1. Also in linux the GUC firmware is loading for better power efficiency. Can we expect same results using macOS?

    • The Graphics microcode can be found in the AppleIntelSKLGraphics.kext binary but Apple checks a hash for Apple hardware (IGGuC::kSpringboardHash = Apple firmware only on Apple HW!) so that is not going to work without modifications.

      Better power management? Sure. Of course. That is part of what Guc is used for. Some even say that the graphics benchmark scores will be better.

      • How can we make it load the firmware and ignore the hash? I am looking at __ZN5IGGuC15canLoadFirmwareEP22IOGraphicsAccelerator2 function in the kext but I cannot see a way to do that, can you help?

      • I am going to assume that you have a Skylake Intel HD Graphics 530 then you may try this:

        1.) Setup Clover to change the device-id from 0x19128086 to 0x191b8086
        2.) Inject AAPL,id-platform-id 0x191b8086
        3.) cp /S*/L*/E*/AppleIntelSKLGraphics.kext/C*/M*/ ~/AppleIntelSKLG
        4.) Swap framebuffer ID 0x19120000 with 0x191b0006 (the data for your Hardware).
        5.) sudo cp ~/AppleIntelSKLG /S*/L*/E*/AppleIntelSKLGraphics.kext/C*/M*/AppleIntelSKLGraphics
        6.) sudo touch /S*/L*/Extensions
        7.) sudo reboot now

        Now check the (debug) log and report back to me.

      • Hello Piker,

        I would be very curious in loading the Apple native microcode onto the IGPU, mainly because I feel that this might be the issue in Netflix Safari detecting that its not an actual 17,1 iMac, and therefore forcing the install of Silverlight. I’m also very curious about the EDID research from your last post comparing Macbooks, because I still couldn’t manage 5K rotation on my Dell 5K display (it’s using two cables for the two halves and a custom EDID patch from Apple, HDCP compatibility shown in Windows). Simply turning both screen halves doesn’t do the job obviously.

        Thank you so much for your work, I’ve been following this blog for a long time now already.

      • Did you find anything regarding the Netflix matter yet? I’m just stuck at the 4. Step, if you could give a little more detailed instructions for that step, I would really appreciate it 🙂
        Thanks again!

    • Wow thank you, I’m aware that this is a common problem among hackintosh’s, and some people argue that hdcp is clover’s “fault”. I would too like to evaluate further aswell, but I’m not successful in finding the correct spot in the binary to patch my framebuffer (Step 4 below). I tried some jz jnz nop patching but none of them work. I must be missing something small. Can it be done via Clover patching aswell?

      Sorry if I missed something essential with the framebuffers, but do I patch it with Fake-PCI-ID (I think I would need to build my own kext, since the provided igpu kext is for 4600).
      I’m also somehow lost as to where these descriptors come from, are they tailored towards his system (nos1609) or any HD530? :
      0x19128086 (thats my original identifier in windows at least, i7 6700K)
      0x191b0006 (reminds me of one different device-id of skylake)

      Without the fourth step applied, the firmware fails to load, which seems like the expected outcome, although in step four I would have my 0x19120000 (my hardware?).

      Also just out of curiosity: Do you now have a script for building the current kernel source for debugging purposes? I would truly appreciate the ease up of that process.

  2. Dear Pike,

    My broken laptop XPS 13 9350 has returned, they’ve replaced my NVMe from SK Hynix PC300(512GB) to Plextor(CX2-1024, 1TB) for free. But now, there’s no more NVMe device showed in both Disk Utility and System Report->NVMExpress.

    Can you give some lights on how to fix this issue?

    Thank you!

  3. I tried to use the RehabMan’s patch-nvme, installed HackNVMeFamily.kext in /S*/L*/E* and inject properties for my NVME. But, even worse, there’s no even Apple SSD Controller in System Report. Your patches show my NVMe correctly in ioreg, and there’s Apple SSD Controller in System Report.

    OK, I will find beta version of IONVMeFamily.kext to try to print out the log.

    Thank you,

    • This is not the right place for ask questions about the NVMeFamily.kext patches. Please move it to where it belongs. This will get lost in time. Nobody is going to look for it here, in the wrong place.

  4. Hi Pike,
    How are you?

    My laptop is XPS 13 9350 with Iris 540 graphics card. I saw your conversation with nos1609 and zeratul below. The ig-platform-id on XPS 13 is 0x19260004, but still the error:
    [IGPU] Failed to initialize graphics firmware. Falling back to host-side scheduling

    Could you give me some hints?

    Thank you!

Leave a Reply

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

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

Google photo

You are commenting using your Google 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 )

Connecting to %s