Package: nvidia-kernel-dkms
Version: 331.38-1
Tags: patch


It seems the above patch is not enough here:

[  272.782042] bbswitch: enabling discrete graphics
[  274.848066] vgaarb: device changed decodes:
PCI:0000:01:00.0,olddecodes=none,decodes=none:owns=none
[  274.848193] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  331.38 
Wed Jan  8 19:32:30 PST 2014
[  275.651904] nvidia 0000:01:00.0: irq 57 for MSI/MSI-X
[  275.662954] NVRM: failed to copy vbios to system memory.
[  275.666649] NVRM: RmInitAdapter failed! (0x30:0xffffffff:720)
[  275.666660] NVRM: rm_init_adapter failed for device bearing minor
number 0
[  275.666687] NVRM: nvidia_frontend_open: minor 0, module->open()
failed, error -5

The issue seems caused by the removal of the DEVICE_ACPI_HANDLE macro
[1]. The attached patch seems to solve the above issue in my case.

Thanks


Maurizio


[1]
https://devtalk.nvidia.com/default/topic/670893/linux/nvidia-331-20-will-not-load-with-kernel-3-13-on-efi-without-csm/
--- nv-acpi.c.orig	2014-01-09 03:49:24.000000000 +0100
+++ nv-acpi.c	2014-01-21 01:47:43.317830003 +0100
@@ -303,7 +303,9 @@
 
     if (pNvAcpiObject->notify_handler_installed)
     {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
         NV_ACPI_OS_WAIT_EVENTS_COMPLETE();
+#endif
 
         // remove event notifier
         status = acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, nv_acpi_event);
@@ -1076,7 +1078,10 @@
     NvU8 argument3[4]; /* For all DSM sub functions, input size is 4 */
     NvU32 data_size;
     acpi_handle dev_handle  = NULL;
-#ifdef DEVICE_ACPI_HANDLE
+#ifdef ACPI_HANDLE
+    nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv); 
+    dev_handle = ACPI_HANDLE(&nvl->dev->dev);
+#elif DEVICE_ACPI_HANDLE
     nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv); 
     dev_handle = DEVICE_ACPI_HANDLE(&nvl->dev->dev);
 #endif
@@ -1179,7 +1184,10 @@
     NvU32 i;
     acpi_handle dev_handle  = NULL;
     acpi_handle lcd_dev_handle  = NULL;
-#ifdef DEVICE_ACPI_HANDLE
+#ifdef ACPI_HANDLE
+    nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv); 
+    dev_handle = ACPI_HANDLE(&nvl->dev->dev);
+#elif DEVICE_ACPI_HANDLE
     nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv); 
     dev_handle = DEVICE_ACPI_HANDLE(&nvl->dev->dev);
 #else
@@ -1294,7 +1302,10 @@
     struct acpi_object_list input = { 2, rom_arg };
     acpi_handle dev_handle  = NULL;
     uint32_t offset, length;
-#ifdef DEVICE_ACPI_HANDLE
+#ifdef ACPI_HANDLE
+    nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv); 
+    dev_handle = ACPI_HANDLE(&nvl->dev->dev);
+#elif DEVICE_ACPI_HANDLE
     nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv); 
     dev_handle = DEVICE_ACPI_HANDLE(&nvl->dev->dev);
 #else
@@ -1364,7 +1375,10 @@
     union acpi_object *dod;
     acpi_handle dev_handle = NULL;
     NvU32 i, count = (*pSize / sizeof(NvU32));
-#ifdef DEVICE_ACPI_HANDLE
+#ifdef ACPI_HANDLE
+    nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv);
+    dev_handle = ACPI_HANDLE(&nvl->dev->dev);
+#elif DEVICE_ACPI_HANDLE
     nv_linux_state_t *nvl = NV_GET_NVL_FROM_NV_STATE(nv);
     dev_handle = DEVICE_ACPI_HANDLE(&nvl->dev->dev);
 #else

Reply via email to