Contribute
Register

[Fix] Intel HD4200/HD4400/HD4600 Mobile on Yosemite

Joined
Jul 3, 2014
Messages
931
Motherboard
Dell XPS 9360 (KabyLake R)
CPU
Intel i7 8550U
Graphics
Intel UHD 620
Mac
  1. MacBook
  2. MacBook Pro
Mobile Phone
  1. Android
Intel HD Graphics on Yosemite

Note, now updated for Yosemite 10.10.2

OS X supports a range of Intel HD Graphics devices, however not all the variants present in hackintosh devices are supported out of the box.

The following table shows the devices which can be supported in Yosemite and indicates which ones need additional configuration:

(If your Intel HD Graphics is not working in Yosemite and not listed post your information in this thread)

Device ID Model Name Framebuffer Graphics Kext OpenCL
Ivybridge
8086:0152 Desktop GT1 Intel HD4000 Capri HD4000 OOB
8086:0156 Mobile GT1 Intel HD4000 Capri HD4000 OOB
8086:0162 Desktop GT2 Intel HD4000 Capri
HD4000​
OOB
8086:0166 Mobile GT2 Intel HD4000 Capri
HD4000​
OOB
Haswell
8086:0a1e ULT Mobile GT2 Intel HD4200 8086:0412 8086:0412 8086:0412
8086:041e ULT Desktop GT2 Intel HD4400 8086:0412 8086:0412 8086:0412
8086:0a16 ULT Mobile GT2 Intel HD4400 8086:0412 8086:0412 8086:0412
8086:0412 Desktop GT2 Intel HD4600 Azul HD5000 OOB
8086:0416 Mobile GT2 Intel HD4600 8086:0412 8086:0412 8086:0412
8086:0a26 ULT Mobile GT3 Intel HD5000 Azul HD5000 OOB
8086:0a2e ULT Mobile GT2 Intel Iris Pro 5100 Azul HD5000 OOB
8086:0d22 CRW Desktop GT3 Intel Iris Pro 5200 Azul HD5000 OOB
8086:0d26 CRW Mobile GT3 Intel Iris Pro 5200 Azul HD5000 OOB
Broadwell
8086:161e Y GT2 Intel HD5300 ? ? ?
8086:1616 U GT 2 Intel HD5500 ? ? ?
8086:1612 U GT 2 Intel HD5600 ? ? ?
8086:1626 U GT3 Intel HD6000 BDW HD6000 OOB
8086:162B U GT3 Intel Iris Pro 6100 BDW HD6100 OOB


FakePCIID Installation

Note: Remove any existing patches to AppleIntelHD5000Graphics and libCLVMIGILPlugin.dylib before taking the below steps, including kext patches through Clover.
A backup of libCLVMIGILPlugin.dylib should exist in /System/Library/Frameworks/OpenCL.framework/Versions/Current/Libraries/libCLVMIGILPlugin.dylib.bak


The latest release of FakePCIID can be found here:
https://bitbucket.org/RehabMan/os-x-fake-pci-id/downloads

The source code is located at:
https://github.com/RehabMan/OS-X-Fake-PCI-ID

Install both FakePCIID.kext and FakePCIID_HD4600_HD4400.kext in /System/Library/Extensions, /Extra/Extensions or Clover kexts.

Intel HD4200 Mobile [8086:0a1e] using FakePCIID
Intel HD4400 Mobile [8086:0a16] using FakePCIID
Intel HD4600 Mobile [8086:0416] using FakePCIID

  • Install FakePCIID according to above instructions
  • Additionally ensure that either a DSDT injection is done, or insert a fakeid and platform-id through clover.

    Clover Example (Only contains keys which need to be changed):
    Code:
    <key>Devices</key>
    <dict>
     <key>FakeID</key>
     <dict>
       <key>IntelGFX</key>
       <string>0x04128086</string>
    ...
    <key>Graphics</key>
    <dict>
      <key>Inject</key>
      <dict>
       <key>Intel</key>
       <true/>
      </dict>
      <key>ig-platform-id</key>
      <string>0x0a260006</string>

    DSDT Example:
    Code:
    into method label _DSM parent_adr 0x00020000 remove_entry;
    into device name_adr 0x00020000 insert
    begin
    Method (_DSM, 4, NotSerialized)\n
    {\n
        If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
        Return (Package()\n
        {\n
            "device-id", Buffer() { 0x12, 0x04, 0x00, 0x00 },\n
            "AAPL,ig-platform-id", Buffer() { 0x06, 0x00, 0x26, 0x0a },\n
            "hda-gfx", Buffer() { "onboard-1" },\n
            "model", Buffer() { "Intel HD 4600" },\n
        })\n
    }\n
    end;

Intel HD4400 Mobile [8086:0a16] using FakePCIID



Intel HD4400 Desktop [8086:041e] using FakePCIID

  • Install FakePCIID according to above instructions
  • Additionally ensure that either a DSDT injection is done, or insert a fakeid and platform-id through clover.

    Clover Example (Only contains keys which need to be changed):
    Code:
    <key>Devices</key>
    <dict>
     <key>FakeID</key>
     <dict>
       <key>IntelGFX</key>
       <string>0x04128086</string>
    ...
    <key>Graphics</key>
    <dict>
      <key>Inject</key>
      <dict>
       <key>Intel</key>
       <true/>
      </dict>
      <key>ig-platform-id</key>
      <string>0x0d220003</string>

    DSDT Example:
    Code:
    into method label _DSM parent_adr 0x00020000 remove_entry;
    into device name_adr 0x00020000 insert
    begin
    Method (_DSM, 4, NotSerialized)\n
    {\n
        If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
        Return (Package()\n
        {\n
            "device-id", Buffer() { 0x12, 0x04, 0x00, 0x00 },\n
            "AAPL,ig-platform-id", Buffer() { 0x03, 0x00, 0x22, 0x0d },\n
            "hda-gfx", Buffer() { "onboard-1" },\n
            "model", Buffer() { "Intel HD 4400" },\n
        })\n
    }\n
    end;
 
[FIX] Intel HD4600 Mobile on Yosemite

It crashed with an assertion in libCLVMIGILPlugin.dylib, because its unable to load iCBE.dylib.
Turns out both AppleIntelHD4000 and AppleIntelHD5000 contain iCBE.dylib and the plugin cannot decide which one to load because it has no instructions for 0x416 8086 (HD4600 mobile).


Patching 81 FF 86 80 12 04 75 35 to 81 FF 86 80 12 04 90 90 in /System/Library/Frameworks/OpenCL.framework/Libraries/libCLVMIGILPlugin.dylib, will force matching to HD5000 iCBE.dylib and the crashes are gone and OpenCL/OpenGL fully enabled.

Brilliant! :thumbup:
I noticed the exact same crashes in CVMCompiler caused by libCLVMIGILPlugin on HD4400 with Preview/Quick Look, but I didn't know how to fix it. Will try your patch tonight and report on how it works for HD4400.
Thanks for the root cause explanation.
 
Last edited:
[FIX] Intel HD4600 Mobile on Yosemite

vbo,

The piece of code patched is this:
Code:
loc_2949:    ; CODE XREF: loadIcbeDylib(uint)+4Bj
   cmp     edi, 0A268085h
   jg      short loc_295B
   cmp     edi, 4128086h   ; Intel Haswell Desktop (GT2)
   jnz     short execute_load
   jmp     short load_HD5000

I am unsure if Intel HD4400 uses AppleIntelHD4000* or AppleIntelHD5000* driver.

If you want to patch to load HD4000 OpenGL instead of HD5000 OpenGL then patch the following instead:
81 FF 85 80 66 01 7F 0A 81 FF 86 80 62 01 74 12 to 81 FF 85 80 66 01 7F 0A 81 FF 86 80 62 01 EB 12
 
[FIX] Intel HD4600 Mobile on Yosemite

vbo,

Additionally we can maybe work together to solve some problems, since XPS 13 is close to the XPS 15?

Maybe re-looking at the ALC668 we can figure out some more things.
Additionally I have been optimising Sleep, Hibernate and nvram persistence with Clover EFI.

And there is the PCI-E RTS5249 Realtek SD card reader, but I am not sure the XPS 13 has that.

Have you tested the Display port out with HDMI-audio support?
 
[FIX] Intel HD4600 Mobile on Yosemite


Thanks for posting this.

Maybe its also possible to prevent this problem by spoofing the device-id in a better way than through DSDT, but I am unaware of any. Feedback is welcome.

There isn't. Clover FakeID essentially does the same thing through EFI injection.
 
[FIX] Intel HD4600 Mobile on Yosemite

vbo,

Additionally we can maybe work together to solve some problems, since XPS 13 is close to the XPS 15?

Maybe re-looking at the ALC668 we can figure out some more things.
Additionally I have been optimising Sleep, Hibernate and nvram persistence with Clover EFI.

And there is the PCI-E RTS5249 Realtek SD card reader, but I am not sure the XPS 13 has that.

Have you tested the Display port out with HDMI-audio support?

If this thread can stay on-topic, I'll make it a sticky.
 
[FIX] Intel HD4600 Mobile on Yosemite

...
I am unsure if Intel HD4400 uses AppleIntelHD4000* or AppleIntelHD5000* driver.

HD4400 uses Azul/HD5000. Blame Intel for the poor naming.
 
[FIX] Intel HD4600 Mobile on Yosemite

Why is there no mention of ig-platform-id except here:

Code:
  Method (_DSM, 4, NotSerialized)
   {
       If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
       Return (Package()
       {
           [B]"AAPL,ig-platform-id", Buffer() { 0x08, 0x00, 0x2e, 0x0a },[/B]
           "model", Buffer() { "Intel HD 4600" },
           "device-id", Buffer() { 0x12, 0x04, 0x00, 0x00 },
           "hda-gfx", Buffer() { "onboard-1" },
       })
    }

When I use the two kext patches above in post #1 with different ig-platform-id values, the results are very different:

0x0a260006 decent, moderate graphics problems with menu bar; fixable with login/logout/login
0x0a260005 same as above
0x0a260000 crash with the line under the Apple logo about 1/3 of the way across.
0x0a2e0008 black screen at boot, once or twice I get a quick <1sec flash of the desktop, but the screen remains black

I'm using Clover. Should one not use anything for ig-platform-id?
 
[FIX] Intel HD4600 Mobile on Yosemite

Why is there no mention of ig-platform-id except here:

Code:
  Method (_DSM, 4, NotSerialized)
   {
       If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
       Return (Package()
       {
           [B]"AAPL,ig-platform-id", Buffer() { 0x08, 0x00, 0x2e, 0x0a },[/B]
           "model", Buffer() { "Intel HD 4600" },
           "device-id", Buffer() { 0x12, 0x04, 0x00, 0x00 },
           "hda-gfx", Buffer() { "onboard-1" },
       })
    }

When I use the two kext patches above in post #1 with different ig-platform-id values, the results are very different:

0x0a260006 decent, moderate graphics problems with menu bar; fixable with login/logout/login
0x0a260005 same as above
0x0a260000 crash with the line under the Apple logo about 1/3 of the way across.
0x0a2e0008 black screen at boot, once or twice I get a quick <1sec flash of the desktop, but the screen remains black

I'm using Clover. Should one not use anything for ig-platform-id?

The correct ig-platform-id for your system varies, of course...

I prefer to set it in config.plist, but you can do it via DSDT as well. Your choice.
 
[FIX] Intel HD4600 Mobile on Yosemite

After some research it seems that more checks are executed as part of this plugin.

The libCLVMIGILPlugin has now been improved and consolidated to the following command:

​See updated first post with final patch.

This will apply the 3 necessary patches to libCLVMIGILPlugin.dylib and simultaneously create a backup.
 
Back
Top