Thank Alex for the helpful research work !
I also did my own experiments, and I have different results on my MacBookPro 5,3.
I first looked in "About This Mac" under MacOS X, select "Hardware" in the left tree, then "Graphics/Displays".
Select "NVIDIA GeForce 9400M", and look the value of the "Device ID" field. I have 0x0863.
Select "NVIDIA GeForce 9600M GT", and look the value of the "Device ID" field. I have 0x0647.
Then I go to the rEFIt shell.
When I type "pci -b" I see two entries for display controllers :
00 02 00 00 ==> Display Controller - VGA/8514 controller
Vendor 10DE Device 0647 Prog Interface 0
00 03 00 00 ==> Display Controller - VGA/8514 controller
Vendor 10DE Device 0863 Prog Interface 0
and therefore the 2 cards are identified as follows :
00 02 00 : 9600M GT (0x647)
00 03 00 : 9400M (0x0863)
This is the opposite conclusion to yours. Thomas Gerlach seems to agree with me in his post "drivers/video/efifb.c: Framebuffer for NVIDIA 9400M in MacBook Pro 5,1".
Like you, when I do a "pci 00 02 00" or "pci 00 03 00", I have either all "0xFF" bytes for the disabled card, and an output starting with "DE 10" for the enabled one. The enabled card is the one activated in MacOS X, depending on the "Energy saver" preference pane radio button ("better battery life" or "higher performance").
Then I do a "devices -b" and I see two entries for NVIDIA :
E6 B - - 1 2 5 NVIDIA GPU
E8 B - - 1 5 6 NVIDIA GPU
Then I do a "dh -b e8" when the 9400M is enabled in "Energy saver", and I see the following parameters :
Handle E8 (AE6B7498 )
HorizontalResolution 1440
VerticalResolution 900
PixelsPerScanLine: 2048
FrameBufferBase 0xD0010000
FrameBufferSize 0x708000
PCI 00 03 00
Then I do a "dmpstore -b gpu-power-prefs" and its value is : 01 00 00 00
Then I do a "dmpstore -b legacyvgahandle" and its value is : 98 74 6B AE 00 00 00 00
Then I do a "dh -b e6" when the 9600M GT is enabled in "Energy saver", and I see the following parameters ::
Handle E6 (AE6B7B98 )
HorizontalResolution 1440
VerticalResolution 900
PixelsPerScanLine: 2048
FrameBufferBase 0xC0030000
FrameBufferSize 0x708000
PCI 00 02 00
Then I do a "dmpstore -b gpu-power-prefs" and it value is : 00 00 00 00
Then I do a "dmpstore -b legacyvgahandle" and its value is : 98 7B 6B AE 00 00 00 00
My conclusion is that all EFI variables have the correct values to refer the 9400M or the 9600M GT depending on the card chosen in "Energy Saver", but that the BIOS is not using them
The only option left is to trying and boot Linux in EFI mode.
Regards,
metatech
Bookmarks