Note this is only for the desktop models, and not for the laptop models. I can also confirm that on my Intel D945GCLF2 the patch also work in Snow Leopard, in 32bit because there still aint any 64bit kexts for the gfx.
But here is the guide.
Guide to create your own patched DSDT.aml to fix GMA950:
Requirements:
+> fassl's DSDT patcher (included)
+> 30-60 minutes
+> Assertiveness to push through till you finish
Tip:
Ignore the Tools folder.
First, we create a normal DSDT.aml file:
1- Put the "Patch" folder in the root (OS X) partition
2- Open OS X terminal (Applications>Utilities>Terminal)
3- Drag the "patcher" onto the terminal window
4- Type -newHPET infront of the the patcher (patcher -newHPET)
5- Press enter
6- Choose to emulate darwin (option 0) when asked.
7- Rename the dsdt.aml created in the patcher folder to DSDT.aml
8- Copy it to the root partition (outside the patcher folder)
9- Reboot to test.
If all goes well, move on....
Now, we patch the DSDT to enable GMA950:
Part ONE:-
1- Open the terminal again.
2- Drag the "compiler" onto the terminal window.
3- Type -d next to compiler and drag the DSDT.aml from root onto the terminal
4- You should have "compiler -d /DSDT.aml"
5-Press enter
6-You should now have a DSDT.dsl folder in the root partition.
7-Open DSDT.dsl with textedit
8-select "find" from the edit menu
9- Find "Scope (_SI)" .
10- Paste the first section of the code above it so that it looks like the example below.
11- Respect the empty line below and above the code you added.
NB:
Make sure your new code fits in between the old code like the example below - modify the code if required!!
CODE
Notify (\_SB.PCI0.USB2, Zero)
Notify (\_SB.PCI0.USB3, Zero)
}
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
Scope (_SI)
{
Notify (\_SB.PCI0.USB3, Zero)
}
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
Scope (_SI)
{
Part TWO
1-Find "Device (PCI0)" and add the second part of the code below it so that it looks like the example below.
NB: Again, make sure the new code fits between the old code like in this example - modify the code if required.
CODE
Device (PCI0)
{
Name (_HID, EisaId ("PNP0A03"))
Name (_ADR, Zero)
Name (_UID, One)
Name (_BBN, Zero)
Device (PEGP)
{
Name (_ADR, 0x00020000)
Device (GFX0)
{
Name (_ADR, Zero)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x1A)
{
"device_type",
Buffer (0x08)
{
"display"
},
"model",
Buffer (0x07)
{
"GMA950"
},
"built-in",
Buffer (One)
{
0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
}
Method (_S3D, 0, NotSerialized)
{
If (LEqual (OSFL, 0x02))
2-Save the DSDT.dsl
Finally, let's recompile the DSDT.aml:
1- Delete the DSDT.aml from the root. Leave the DSDT.dsl alone!
2- Drag the "compiler" to the terminal
3- Type -sa infront of it and then drag the DSDT.aml infront of that
4- You should have "compiler -sa /DSDT.dsl"
5- Press enter. If all goes correctly, you should have a new DSDT.aml in you root.
6- Delete the DSDT.dsl - Leave the DSDT.aml alone!
7- Pray and reboot!!
Good Luck
This guide was written by:
Dr. Hurt on January 8th, 2009