Contribute
Register

Dual nVidia GFX cards working on 10.7.2 Guide

Status
Not open for further replies.
Joined
Jan 30, 2011
Messages
3
Motherboard
10.8
CPU
i7 - 930
Graphics
Gforce 285
Mac
  1. 0
Classic Mac
  1. 0
Mobile Phone
  1. 0
After a long time of try and error did i find a way to get 2 different GFX cards running under 10.7.2 Lion. To all who has problems, here a way to do it.

There are different ways. On the one side the EFI string method like aquatic did; thats not the way it runs. On the other side the DSDT method; thats the way i try to explain.

First what i want to say:At every installation, if you use Multibeast, please read first the manual of Multibeast. A lot of times i see guides which uses DSDT AND OTHER STUFF. The DSDT option at Multibeast has an explanation, read it. You don't need a lot of stuff. Everything what you need is Custom DSDT (tonymacx86) and maybe Sound (Multibeast or DSDT) and Ethernet (still in Multibeast or DSDT) and Cuda (nVidia). But you also can do Sound and Ethernet with DSDT!

What you need:

1. a DSDT - get it from tonymacx86 for your board
2. gfutil (googol it)
3. IORegistryExplorer (googol it as well)
4. DSDTSE for editing
5. newest cuda driver (nVidia internet site) and the QE/CL acceleration hack from netkas.org (there you have to look around, they developing every time new stuff). i will attach one file i found from José Luis Castiblanco (big probs) who posted a comment at http://netkas.org/?p=794 with pre edited files (http://iparsifal.org/osx/). Its for 10.7.2 and it worked for me.
Here its the place for the bundle file /System/Library/Extensions/GeForceGLDriver.bundle/Contents/MacOS/GeForceGLDriver


The steps are:

1.Get the adresses of your cards. Do this one by one. I found out, that you get other addresses if you have both cards inside. Its the same if you plug out the power cable for your cards. But take care of the PCI Slot, it should be every time the same for the cards in the whole procedure. The address look like this PciRoot(0x0)/Pci(0x6,0x0)/Pci(0x0,0x0). You will get it with gfxutil (when you google it you will find it).

2.Then you have to get the nvcap and cram. you will get it with the IORegistryExplorer(google it as well). I did it as well one by one. But i recognized that there were different nvcap values . By this step you have to try from time to time with IORegistryExplorer if the value changed(i don't know why, but its that way)

3.When you got your device address and your nvcap/vram value you have to modify your DSDT. Everything is based on the Double nVidia hack from the DSDTSE guys. You will find the part if you are searching after "pci0" in your dsdt code. Replace this code

Code:
    Device (PCI0)
        {
            Name (_HID, EisaId ("PNP0A03"))
            Name (_ADR, Zero)
            Name (_UID, One)
            Name (_BBN, Zero)
            Method (_S3D, 0, NotSerialized)
            {
                If (LEqual (OSFL, 0x02))
                {
                    Return (0x02)
                }
                Else
                {
                    Return (0x03)
                }
            }

with the part at the end of this post.


There are some parameter you have to change:

1. Device(PEG1),Device(PEG3)

2. Name (_ADR, 0x00030000)

3. NVCAP

4. "VRAM,totalsize",
Buffer (0x04)
{
0x00, 0x00, 0x00, 0x40
},


5. "device_type",
Buffer (0x0D)
{
"NVDA,Parent"
},

In the DSDT modifying code there are code blocks for every GFX card. So fill in the values for every card.

To the positions:

1. Sometimes you have to find out the device number. PEG stands for PciExpressGraphic or like this. So often the slot near to the Cpu is 1 and is counted away from the Cpu.

2. With gfxutil you get a value like PciRoot(0x0)/Pci(0x6,0x0)/Pci(0x0,0x0) --> the numbers without () and x behind PCI are the value. So in this example 00x000600000

3. NVCAP is a big block of code, you will see it in IORegistryExplorer (there you have to search after display. then you will have to highlight the display device and you will get the values on the right)

4. You will get it as well as NVCAP (if you have problem, show to up in google or to the aquatic tutorial, there is the way to get and translate the values)

5. That is the most important value to get it work (Thanks to peanut man from the tonymacx86 forum). Your first card get "Parent" and your second card get "Child" for that value.

So now if you did everything right and i didn't forget anything it should work!

PS.if you get problems at booting without changing anything instead of the DSDT stuff, try to change in the bios the first graphic boot option. It has to be PCIE or PEG depends on your main board. at the GA-X58A-UD3R its between PCIE 16-1 or PCIE 16-2. So play around with the values.

And now i have to go out with my girlfriend and see the sun and the real life!

beste

gnom

PS.

Here the code part which is important.

Code:
    Device (PCI0)
        {
            Name (_HID, EisaId ("PNP0A03"))
            Name (_ADR, Zero)
            Name (_UID, One)
            Name (_BBN, Zero)
            Method (_S3D, 0, NotSerialized)
            {
                If (LEqual (OSFL, 0x02))
                {
                    Return (0x02)
                }
                Else
                {
                    Return (0x03)
                }
            }

            Device (PEG3)
            {
                Name (_ADR, 0x00070000)
                Device (GFX3)
                {
                    Name (_ADR, Zero)
                    Name (_SUN, One)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x1A)
                            {
                                "@0,compatible", 
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                }, 

                                "@0,device_type", 
                                Buffer (0x08)
                                {
                                    "display"
                                }, 

                                "@0,display_cfg", 
                                Buffer (0x08)
                                {
                                    0x03, 0x01, 0x00, 0x00
                                }, 

                                "@0,name", 
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-A"
                                }, 

                                "@1,compatible", 
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                }, 

                                "@1,device_type", 
                                Buffer (0x08)
                                {
                                    "display"
                                }, 

                                "@1,display_cfg", 
                                Buffer (0x08)
                                {
                                    0xFF, 0xFF, 0x00, 0x01
                                }, 

                                "@1,name", 
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-B"
                                }, 

                                "NVCAP", 
                                Buffer (0x14)
                                {
                                    /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                    /* 0008 */    0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                    /* 0010 */    0x00, 0x00, 0x00, 0x00
                                }, 

                                "VRAM,totalsize", 
                                Buffer (0x04)
                                {
                                    0x00, 0x00, 0x00, 0x40
                                }, 

                                "device_type", 
                                Buffer (0x0D)
                                {
                                    "NVDA,Parent"
                                }, 

                                "model", 
                                Buffer (0x17)
                                {
                                    "nVidia GeForce 465 GTX"
                                }, 

                                "rom-revision", 
                                Buffer (0x25)
                                {
                                    "nVidia GeForce 465 GTX OpenGL Engine"
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }

            Device (PEG1)
            {
                Name (_ADR, 0x00030000)
                Device (GFX1)
                {
                    Name (_ADR, Zero)
                    Name (_SUN, One)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x1A)
                            {
                                "@0,compatible", 
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                }, 

                                "@0,device_type", 
                                Buffer (0x08)
                                {
                                    "display"
                                }, 

                                "@0,display_cfg", 
                                Buffer (0x08)
                                {
                                    0x03, 0x01, 0x00, 0x00
                                }, 

                                "@0,name", 
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-A"
                                }, 

                                "@1,compatible", 
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                }, 

                                "@1,device_type", 
                                Buffer (0x08)
                                {
                                    "display"
                                }, 

                                "@1,display_cfg", 
                                Buffer (0x08)
                                {
                                    0xFF, 0xFF, 0x00, 0x01
                                }, 

                                "@1,name", 
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-B"
                                }, 

                                "NVCAP", 
                                Buffer (0x14)
                                {
                                    /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                    /* 0008 */    0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                    /* 0010 */    0x00, 0x00, 0x00, 0x00
                                }, 

                                "VRAM,totalsize", 
                                Buffer (0x04)
                                {
                                    0x00, 0x00, 0x00, 0x40
                                }, 

                                "device_type", 
                                Buffer (0x0D)
                                {
                                    "NVDA,Child"
                                }, 

                                "model", 
                                Buffer (0x17)
                                {
                                    "nVidia GeForce 285 GTX"
                                }, 

                                "rom-revision", 
                                Buffer (0x25)
                                {
                                    "nVidia GeForce 285 GTX OpenGL Engine"
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }
 

Attachments

  • GeForceGLDriver.bundle.zip
    5.8 MB · Views: 193
good work mate.
 
Hi there,

Thanks for this, I'm going to give it a try with a GTX 285 and GTX 480 if I can't get strings to work.

Are you saying strings can't work with 10.7.2!? I'm familiar with that method and would prefer it over editing my DSDT.

I had these 2 cards working great in 10.6.7 with the aquamac method (http://aquamac.proboards.com/index.cgi? ... thread=569)

Please advise!

ybott
 
I always end up with a compile error "138" with DSDTse, which just gives me a blank window and doesn't tell me what the error actually relates to. It's driving me mad :banghead:
 
I'm with sparkyboy. I'm just getting a compile error.

Any help?
 
Alright, I got a bit further. I found that further down in the existing DSDT code, there is already a Device (PEG3) section. I deleted that, and it compiled.

Problem now is, I still can't boot up with two cards plugged in.
 
OK now my brain really hurts.. after searching and posting here for the past 3 days I find this... Ugggg Great work on your part.... but I am not very confident in my compiling skills, i did manage to re-write the NVDAG100Hal file back with 10.7.1 but this is a whole new skill set i think :( not to mention I didnt think that the dsdt option works witth my board (asus p8p67evo) thought it was only gigabyte boards??? Also how do I find the address of the card when i cant install it??
 
Dual GFX Solved here!
Gigabyte x58a-ud3r rev. 2 with FF bios version, with Snow Leopard 10.6.8 with Gigabyte 8600 GT(256 mb) on PEG2 and a Gainward 9500 GT (1GB) on PEG1, bios setting : PEG1, installed cuda drivers, with the attached DSDT, graphic enabler disabled in boot.plist, and voila: all outputs are perfectly working!
 

Attachments

  • DSDT.aml
    21.1 KB · Views: 266
How do you determine PEGx address? Does it have to be related to some value in IOReg or you can simply put sequential numbers in it?

Thank you.
 
Status
Not open for further replies.
Back
Top