btw, i found out the hard way that kabyl's loader with optional AtiConfig switch behaves differently when the switch is on. (i tried AtiConfig=Peregrine and got a very different result from what usually happens without the switch - the default for my card is Peregrine)
If you have problem with Kabyl's boot file, use the official Chameleon 2 RC5 boot file. I use combination of
GraphicsEnabler=Yes & ATI injection in DSDT:-
Method (_DSM, 4, NotSerialized) { Store (Package (0x1E) { "@0,compatible", Buffer (0x0E) { "ATY,Vervet" }, "@0,device_type", Buffer (0x08) { "display" }, "@0,display-connect-flags", Buffer (0x04) { 0x04, 0x00, 0x00, 0x00 }, "@0,display-dual-link", Buffer (0x04) { 0x02, 0x00, 0x00, 0x00 }, "@0,VRAM,memsize", Buffer (0x04) { 0x00, 0x00, 0x00, 0x20 }, "@0,display-type", Buffer (0x04) { "LCD" }, "@0,name", Buffer (0x0E) { "ATY,Vervet" }, "@1,compatible", Buffer (0x0E) { "ATY,Vervet" }, "@1,device_type", Buffer (0x08) { "display" }, "@1,VRAM,memsize", Buffer (0x08) { 0x00, 0x00, 0x00, 0x20 }, "@1,name", Buffer (0x0E) { "ATY,Vervet" }, "device_type", Buffer (0x14) { "ATY,VervetParent" }, "hda-gfx", Buffer (0x0A) { "onboard-1" }, "VRAM,totalsize", Buffer (0x04) { 0x00, 0x00, 0x00, 0x20 }, "model", Buffer (0x23) { "ATI Mobility Radeon HD 4500 Series" } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) }It's involved a bit of work because whenever you want to try another framebuffer, you'll need to edit your DSDT, change the framebuffer & compiled. However, this at least get the job done.
I didn't edit & compile the Kabyl's boot file myself because I don't know what's wrong. It just stuck at "ATI POSTed...".
BTW, I got my external monitor working with QE/CI enabled with Lion's ATI4600Controller.kext, ATIFramebuffer.kext & ATISupport.kext.