Jump to content

HD3000 + other card: solution by EFI string creation


Shub
 Share

2 posts in this topic

Recommended Posts

Hi all!

 

I have an Asus P8Z68-V Pro board with an I5-2500K CPU (HD3000 integrated GPU) and an AMD 7870.

 

The problem:

 

MacOs Mountain Lion does not support my 7870, but does support the HD3000 GPU, and accelerated.

 

I'm using Chimera as bootloader. Chimera can inject EFI string for HD3000, and it works great, but only if you don't have a second UNSUPPORTED graphics card, like me.

 

In my case, even if i set from the bios the HD3000 GPU as default and so on, and attach the DVI cable to the mobo, Chimera finds an AMD GPU and injects the EFI framebuffer infos, which are WRONG from the 7870. The system hangs.

 

On the other side, if I tell Chimera not to inject anything (GraphicsEnabler=No in org.chameleon.Boot.plist), I have no acceleration.

 

My solution is to create an ad hoc EFI string to be put into org.chameleon.Boot.plist and injected by Chimera at boot time.

 

So, I created a plist file, converted it into hex using gfxutil and inserted the hex string into org.chameleon.Boot.plist: it worked!

 

1) use gfxutil to find the PCI path to the HD3000: i used the GFX0 name, it may be different on other pc (IGPU for example)

 

localhost:~ shub$ gfxutil -f GFX0
DevicePath = PciRoot(0x0)/Pci(0x2,0x0)
localhost:~ shub$

 

2) start Property List Editor and create something like this: put the DevicePath, the part after the "=", as below:

 

854f36d1.png

 

 

3) Now we have to add some entries. I copied these ones from my pc booted without the 7870 (physically removed) and with the Chimera injector active (GraphicsEnabler=Yes). I have to mess up a little with data type and string types. If I used the string type, some options were interpreted as data type, so I had to convert each char of the strings into corrisponding hex ASCII value.

 

a67058a1.png

 

You can find some of this values in Chimera source (gma.c).

 

Here they are. name, compatible, model, and hda-gfx are strings (null terminated). compatible are three strings null terminated.

 

  "name"=<646973706c617900>
  "AAPL,os-info"=<30490112121208000001f01f0100000010070000>
  "compatible"=<706369313034332c3834346400706369383038362c31323600706369636c6173732c30333030303000>
  "model"=<496e74656c204844204772617068696373203330303000>
  "hda-gfx"=<6f6e626f6172642d3100>
  "AAPL,tbl-info"=<304402020202000000000202020201010101>
  "AAPL,iokit-ndrv"=<206d99807fffffff>
  "class-code"=0x00030000
  "reg"=<0010000000000000000000000000000000000000101000020000000000000000000000000000400018100042000000000000000000000000000000102010000100000000000000000000000040000000>
  "pcidebug"='0:2:0'
  "built-in"=0x00
  "AAPL,gray-page"=0x00000001
  "AAPL,gray-value"=0x00648cc3
  "device-id"=0x00000126

 

The result in ioreg: as you can see, data turned into strings.

 

21cf1c7b.png

 

4) Anyway, after you created the plist as above, save it like let's say hd3000.plist and create the hex string with this command:

 

localhost:~ shub$ gfxutil -v -i xml -o hex hd3000.plist hd3000.hex

o device-properties <size=678, children=1>
|  
+-o PciRoot(0x0)/Pci(0x2,0x0) <size=666, records=14>
{
  "name"=<646973706c617900>
  "AAPL,os-info"=<30490112121208000001f01f0100000010070000>
  "compatible"=<706369313034332c3834346400706369383038362c31323600706369636c6173732c30333030303000>
  "model"=<496e74656c204844204772617068696373203330303000>
  "hda-gfx"=<6f6e626f6172642d3100>
  "AAPL,tbl-info"=<304402020202000000000202020201010101>
  "AAPL,iokit-ndrv"=<206d99807fffffff>
  "class-code"=<00000300>
  "reg"=<0010000000000000000000000000000000000000101000020000000000000000000000000000400018100042000000000000000000000000000000102010000100000000000000000000000040000000>
  "pcidebug"='0:2:0'
  "built-in"=<00>
  "AAPL,gray-page"=<01000000>
  "AAPL,gray-value"=<c38c6400>
  "device-id"=<26010000>
}
localhost:~ shub$

 

5) Now you have the EFI string into hd3000.hex file. To tell Chimera to inject it, open your org.chameleon.Boot.plist and insert something like this:

 

<key>device-properties</key
<string>a602000001000000010000009a0200000e00000002010c00d041030a000000000101060000027fff04000e0000006e0061006d00650000000c000000646973706c6179001e0000004100410050004c002c006f0073002d0069006e0066006f0000001800000030490112121208000001f01f01000000100700001a00000063006f006d00700061007400690062006c00650000002d000000706369313034332c3834346400706369383038362c31323600706369636c6173732c30333030303000100000006d006f00640065006c0000001b000000496e74656c204844204772617068696373203330303000140000006800640061002d0067006600780000000e0000006f6e626f6172642d3100200000004100410050004c002c00740062006c002d0069006e0066006f00000016000000304402020202000000000202020201010101240000004100410050004c002c0069006f006b00690074002d006e0064007200760000000c000000206d99807fffffff1a00000063006c006100730073002d0063006f0064006500000008000000000003000c00000072006500670000005400000000100000000000000000000000000000000000001010000200000000000000000000000000004000181000420000000000000000000000000000001020100001000000000000000000000000400000001600000070006300690064006500620075006700000009000000303a323a30160000006200750069006c0074002d0069006e0000000500000000220000004100410050004c002c0067007200610079002d00700061006700650000000800000001000000240000004100410050004c002c0067007200610079002d00760061006c0075006500000008000000c38c6400180000006400650076006900630065002d006900640000000800000026010000</string>

 

where the neverending string is the hd3000.hex file content. Just ONE line.

 

6) Disable Chimera auto injection (GraphicsEnabler=No in org.chameleon.Boot.plist) and reboot. It SHOULD work.

 

Note:

I think most of the strings in the plist file can be omitted: the most important ones are:

 

AAPL,os-info

AAPL,tbl-info

built-in

class-code

device-id

hda-gfx

model

name

reg

 

If you have problems, try to delete the others, cause they may be specific for my machine.

 

Result:

 

th_2df15f03.png

 

Have fun!

 

Shub

  • Like 2
Link to comment
Share on other sites

 Share

×
×
  • Create New...