|05-09-11, 04:34 AM||#1|
Join Date: May 2011
NVIDIA on EFI platforms
As known the proprietary nvidia drivers don't work on some pure EFI platforms. The reason for this is that the kernel driver (to be specific apparently something in the nv-kernel.o object file) can't find a video bios.
The common work-around for such problems is loading a faked video bios with the grub "loadbios" command, but the nvidia driver also cannot find this faked vbios.
The open source driver nouveau has the same problem, but with a simple patch it is able to load the grub vbios. I'm pretty sure that a similair patch to nv-kernel.o would also make the proprietary nvidia driver work on the affected platforms, but as the source for that object file is not available, I post and explain the patch here and hope some nvidia developer will read this and think about adding a similiar piece of code to the proprietary nvidia driver.
The only thing the nouveau patch does is to add a new routine for loading the vbios if it can't be loaded otherwise. That's the following:
static void load_vbios_grub(struct drm_device *dev, uint8_t *data)
grub_vbios_ptr = phys_to_virt(0xc0000); // physical memory as defined in grub for vbios.
memcpy(data, grub_vbios_ptr, 0x10000);
NV_INFO(dev, "copied vbios %u bytes from %p to %p.", 0x10000, grub_vbios_ptr, data);
so basically all that's needed is to copy the 64kb at 0xC0000 - that's where grub puts the video bios - to the desired destination.
To be more specific about my platform where I experience the problem and the consequences:
I'm running a MacBook Pro 3,1 with a GeForce 8600M GT and a pure efi boot leads to the following kernel error message:
NVRM: failed to copy vbios to system memory.
NVRM: RmInitAdapter failed! (0x30:0xffffffff:832)
NVRM: rm_init_adapter(0) failed
I hope a nvidia developer reads this post and comments, but everybody else is also welcome, of course.
(the code I posted was taken from https://bugs.freedesktop.org/show_bug.cgi?id=35267)