Contribute
Register

[solved] Intel 4400 GPU compatibility on GB-BXi5H-4200

Status
Not open for further replies.
Intel 4400 GPU compatibility on GB-BXi5H-4200

It is a bug in Chimera...

There is no support for IGPDeviceID if Chimera thinks it knows how to handle it...

From gma.h:
Code:
#define GMA_HASWELL_ULT_M_GT2      GFX_MODEL_CONSTRUCT(INTEL, 0x0A16) // HD Graphics 4400 Mobile and found in kext

From gma.c:
Code:
        case GMA_HASWELL_M_GT1: // HD Graphics Mobile, found in kext
        case GMA_HASWELL_M_GT2: // HD Graphics 4600 Mobile, found in kext
        case GMA_HASWELL_M_GT3: // HD Graphics 5000 Mobile, found in kext
        [B]case GMA_HASWELL_ULT_M_GT2:[/B] // HD Graphics 4400 Mobile, found in kext
        case GMA_HASWELL_ULT_M_GT3: // HD Graphics 5000 Iris Mobile, found in kext
        case GMA_HASWELL_ULT_E_GT2: // HD Graphics 4200 Mobile, found in kext
        case GMA_HASWELL_ULT_E_GT3: // HD Graphics 5100 Iris Mobile, found in kext
        case GMA_HASWELL_CRW_M_GT3: // HD Graphics 5200 Iris Pro Mobile and found in kext
//            devprop_add_value(device, "AAPL00,DualLink",    HD4000_vals[10], 4);
            devprop_add_value(device, "built-in",           &BuiltIn, 1);
            devprop_add_value(device, "class-code",         ClassFix, 4);
            devprop_add_value(device, "device-id",			(uint8_t*)&device_id, sizeof(device_id));
            devprop_add_value(device, "hda-gfx",            (uint8_t *)"onboard-1", 10);
            if (getValueForKey(kIGPlatformID, &value, &len, &bootInfo->chameleonConfig))
            {
                verbose("Using 0x%s for ig-platform-id\n", value);
                hex2devprop(value, ig_platform_id, 4);
                devprop_add_value(device, "AAPL,ig-platform-id", ig_platform_id, 4);
            }
            else
            {
                devprop_add_value(device, "AAPL,ig-platform-id", ig_id_4600_mobile, 4);
                verbose("Using default ig-platform-id of 0x0a260006\n");
            }
            break;

Note no code to read kIGPDeviceID ("IGPDeviceID") as is the case with other IDs:
Code:
        case GMA_HASWELL_CRW_E_GT1: // 
        case GMA_HASWELL_CRW_E_GT2: // 
        case GMA_HASWELL_CRW_E_GT3: //
//            devprop_add_value(device, "AAPL00,DualLink",    HD4000_vals[10], 4);
            devprop_add_value(device, "built-in",           &BuiltIn, 1);
            devprop_add_value(device, "class-code",         ClassFix, 4);
            devprop_add_value(device, "hda-gfx",            (uint8_t *)"onboard-1", 10);
            if ([B]getValueForKey(kIGPDeviceID,[/B] &value, &len, &bootInfo->chameleonConfig))    // MacMan
            {
                verbose("Using 0x%s for unsupported device id injection.\n", value);
                hex2devprop(value, igp_device_id, 2);
                devprop_add_value(device, "device-id",igp_device_id, 4);
            }

It means that if your native ID is 0xa16, you cannot use IGPDeviceID as it is ignored by the code.

You will need to use a DSDT patch to inject the device-id (0412).

DSDT patch info is covered in the Haswell graphics laptop sticky: http://www.tonymacx86.com/yosemite-...tel-hd4200-hd4400-hd4600-mobile-yosemite.html
 
Intel 4400 GPU compatibility on GB-BXi5H-4200

Hey RM, could you copy the previous post to Chimera bug reports? MM will get it sorted out.
 
Intel 4400 GPU compatibility on GB-BXi5H-4200

Looking at the rather involved DSDT instructions, I think compiling Chameleon (per these instructions) will be a lot more straightforward and future-proof. But I'm not in a huge rush with this hackintosh, so I'll wait and see if someone more knowledgeable of the code base jumps in to tackle this. I haven't touched low-level C like this in awhile, but it doesn't look too crazy. Actually, I suspect installing the modified Chameleon will be the hard part.

EDIT: The above DSDT intructions also seem to apply to the Intel 4600, not explicitly the 4400.
 
Intel 4400 GPU compatibility on GB-BXi5H-4200

Looking at the rather involved DSDT instructions, I think compiling Chameleon (per these instructions) will be a lot more straightforward and future-proof. But I'm not in a huge rush with this hackintosh, so I'll wait and see if someone more knowledgeable of the code base jumps in to tackle this. I haven't touched low-level C like this in awhile, but it doesn't look too crazy. Actually, I suspect installing the modified Chameleon will be the hard part.

EDIT: The above DSDT intructions also seem to apply to the Intel 4600, not explicitly the 4400.

Not sure how building Chameleon yourself will solve anything... If you want to use Chameleon, you can simply download a build.

Installing Chameleon is the same as installing Chimera. You use the Chameleon installer pkg.

As far as I know, Chameleon has no equivalent to IGPDeviceID. I haven't looked at it in a while though, as I'm using Clover exclusively.

Configuration for mobile HD4600 is the same as mobile HD4400. Both are unsupported by the native kexts, and therefore require the same solution (0412 device-id inject, FakePCIID kexts). The guide I linked works for all mobile HD4600, HD4400, HD4200. Not sure if that's what you mean by "above DSDT intructions"...
 
Intel 4400 GPU compatibility on GB-BXi5H-4200

Whoops-the names of all of these got to me. I meant compile Chimera. That is, modify the code in gma.c as you imply and use the resulting build.
 
Intel 4400 GPU compatibility on GB-BXi5H-4200

Whoops-the names of all of these got to me. I meant compile Chimera. That is, modify the code in gma.c as you imply and use the resulting build.

Easier to do the DSDT patch. Especially if your C skills are rusty.
 
Intel 4400 GPU compatibility on GB-BXi5H-4200

Unlike the code in Chimera, however, it's not at all clear from the instructions what to do with that snippet of DSDT code. I assume it goes in some sort of module or include (or perhaps replaces existing code), but I don't know enough about the internals to even make a guess about its placement or even the tools to do it. I'm assuming I can't just paste this piece of code any old place:

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 4400 GPU compatibility on GB-BXi5H-4200

Unlike the code in Chimera, however, it's not at all clear from the instructions what to do with that snippet of DSDT code. I assume it goes in some sort of module or include (or perhaps replaces existing code), but I don't know enough about the internals to even make a guess about its placement or even the tools to do it. I'm assuming I can't just paste this piece of code any old place:

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;

It is a patch for MaciASL. You apply it to your DSDT (or SSDT, if that happens to be where your GFX0 device is defined) with the "Patch" button.

You will want to eliminate the ig-platform-id line (or all but "device-id") since that ig-platform-id (0xa260006) is for laptops. And your bootloader is injecting the other values anyway.

I've written a guide for patching laptop DSDT/SSDT: http://www.tonymacx86.com/yosemite-laptop-support/152573-guide-patching-laptop-dsdt-ssdts.html. The general ideas are the same for desktops.
 
Intel 4400 GPU compatibility on GB-BXi5H-4200

I wasn't able to get anywhere the the DSDT approach -- it just left my box with a flickering screen that reboots periodically. But it's most likely a mistake on my part in extracting or filtering it. The instructions are extremely vague about how one applies the finished product, so there was a lot of guessing on my part about that as well. Hopefully the fix for this finds its way into the next Chimera.
 
Status
Not open for further replies.
Back
Top