Contribute
Register

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

[FIX] Intel HD4600 Mobile on Yosemite

I tried the original patch last night with limited success - crash reports stopped but Preview app was still broken for jpg/png files.
I see you're now patching for mobile HD4600 even though you're injecting a desktop id. I tried the same thing yesterday by patching for HD4400 (0A16) which is somehow still supported in Yosemite. I'll try again tonight with your more comprehensive patch.
Can you report if Preview works for you with this patch?
 
[FIX] Intel HD4600 Mobile on Yosemite

.... I tried the same thing yesterday by patching for HD4400 (0A16) which is somehow still supported in Yosemite.

No surprise that HD4400 (0xa16) is supported. It is the device present in the Apple MacBookAir6,x.
 
[FIX] Intel HD4600 Mobile on Yosemite

No surprise that HD4400 (0xa16) is supported. It is the device present in the Apple MacBookAir6,x.

Good to know, I thought all Apple Haswell chips were HD5x00.
 
[FIX] Intel HD4600 Mobile on Yosemite

Good to know, I thought all Apple Haswell chips were HD5x00.

Sorry... off by one digit. My bad. 0xa26 is MBA6. But yes, 0xa16 is still in the kext Info.plist. You can look at it yourself.
 
[FIX] Intel HD4600 Mobile on Yosemite

vbo,

Just tested it for you:



Also I think Rehabman is right, you do not require any patches. The routine causing the crash you are experiencing does not support 8086 0A16, however I do see it reported in other routines.
I think because you are spoofing your device-id (hopefully unnecessarily) the driver ends up in the HD4600+ routine for OpenGL, causing your crash because your GPU is not supposed to execute that.

Rehabman,

The device ID is read from IOPCIDevice using IOPCIDevice::extendedConfigRead32.
Now I noticed that the function IOPCIDevice::extendedConfigWrite32 is existing.

Would it be possible to write a wrapper/start-up kext for the Intel HD4600 Mobile, which updates the device ID in the PCI memory space on boot-up? Subsequently the device would be Intel HD4600 Desktop for all future checks.

If such a thing can be done, it would mean no patching required. However my kext development skills (OS X for that matter) are zilch. Can you let me know what you think about the above?
 
[FIX] Intel HD4600 Mobile on Yosemite

vbo,

Just tested it for you:



Rehabman,

The device ID is read from IOPCIDevice using IOPCIDevice::extendedConfigRead32.
Now I noticed that the function IOPCIDevice::extendedConfigWrite32 is existing.

Would it be possible to write a wrapper/start-up kext for the Intel HD4600 Mobile, which updates the device ID in the PCI memory space on boot-up? Subsequently the device would be Intel HD4600 Desktop for all future checks.

I think it is difficult to do in a kext. Kexts start in parallel, therefore difficult to insure one starts before another. If it is possible to write to PCI config, would be better done in the bootloader. I tried once to write to PCI config from DSDT (_INI) and PCI config from ACPI code is readonly.

Also, IOKit does PCI matching *before* any kexts are loading. PCI info is used to determine which kexts should be loaded, so by the time any kexts are starting, all the IOKit PCI matching has already been done. If you could write to PCI config from a kext and manage to write it before the graphics drivers start, that would help, but you'd still need FakeID to spoof IOKit matching.
 
[FIX] Intel HD4600 Mobile on Yosemite

Ok, so the best thing is to ask the Clover guys to take a look into enhancing IntelGFX fakeid option.
If that can update the IOPCIDevice, Clover would possibly be able to fully spoof the card requiring no changes in OS X....
 
[FIX] Intel HD4600 Mobile on Yosemite

Ok, so the best thing is to ask the Clover guys to take a look into enhancing IntelGFX fakeid option.
If that can update the IOPCIDevice, Clover would possibly be able to fully spoof the card requiring no changes in OS X....

If possible, that could prove to be very useful, not only for HD4600 but lots of other devices as well.
 
[FIX] Intel HD4600 Mobile on Yosemite

vbo,
Just tested it for you:
Also I think Rehabman is right, you do not require any patches. The routine causing the crash you are experiencing does not support 8086 0A16, however I do see it reported in other routines.
I think because you are spoofing your device-id (hopefully unnecessarily) the driver ends up in the HD4600+ routine for OpenGL, causing your crash because your GPU is not supposed to execute that.

Thanks for the test. I see the exact crashes you reported originally with native HD4400 (i.e. without injecting HD4600 fakeid). I only injected the fakeid last night to test out your original patch without modification and see if it would work on my machine.

My thinking was that even though HD4400 native support was not removed in 10.10, since AFAIK no apple product use this chip, maybe the plugin did not have references to HD4400 and I was hoping I could force it to follow the same path as you did for HD4600. Now since you report that there are some references to 0A16 in there, I should just open it up myself and go have a look see..
 
[FIX] Intel HD4600 Mobile on Yosemite

Thanks for the test. I see the exact crashes you reported originally with native HD4400 (i.e. without injecting HD4600 fakeid). I only injected the fakeid last night to test out your original patch without modification and see if it would work on my machine.

My thinking was that even though HD4400 native support was not removed in 10.10, since AFAIK no apple product use this chip, maybe the plugin did not have references to HD4400 and I was hoping I could force it to follow the same path as you did for HD4600. Now since you report that there are some references to 0A16 in there, I should just open it up myself and go have a look see..

HD4400 is working fine on my Lenovo U430.
 
Back
Top