summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJerry2023-02-28 14:09:20 +0800
committerJerry2023-02-28 14:09:20 +0800
commitac47f9f25b2ba52b659fa0dda8bc13f4b8193fa7 (patch)
tree71eec86ac293fd22822113a5866631a18ff02681
parentfe2b38e66f2199777bcede6eb35c5df0210f15dc (diff)
downloadaur-ac47f9f25b2ba52b659fa0dda8bc13f4b8193fa7.tar.gz
proper kernel 6.0 patch
-rw-r--r--0011-kernel-6.0.patch214
-rw-r--r--PKGBUILD2
2 files changed, 93 insertions, 123 deletions
diff --git a/0011-kernel-6.0.patch b/0011-kernel-6.0.patch
index 2b9df3b60265..6499fa2bb23b 100644
--- a/0011-kernel-6.0.patch
+++ b/0011-kernel-6.0.patch
@@ -1,151 +1,121 @@
-diff -Naur a/kernel/nv-acpi.c b/kernel/nv-acpi.c
---- a/kernel/nv-acpi.c 2022-10-14 02:26:04.379601051 +0000
-+++ b/kernel/nv-acpi.c 2022-10-14 02:28:07.309332369 +0000
-@@ -178,6 +178,53 @@
- return 0;
- }
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
-+static struct nv_acpi_add_enumerated_data {
-+ nv_acpi_t *object;
-+ int *counter;
-+};
-+static int nv_acpi_add_enumerated(struct acpi_device *dev, void *data)
-+{
-+ struct nv_acpi_add_enumerated_data *rcvd_data = data;
-+ nv_acpi_t *pNvAcpiObject = rcvd_data->object;
-+ int *device_counter = rcvd_data->counter;
-+ acpi_status status = -1;
-+ nv_acpi_integer_t device_id = 0;
-+ if (!dev)
-+ return 0;
-+ if (*device_counter == NV_MAXNUM_DISPLAY_DEVICES) {
-+ nv_printf(NV_DBG_ERRORS,
-+ "NVRM: nv_acpi_add: Total number of devices cannot exceed %d\n",
-+ NV_MAXNUM_DISPLAY_DEVICES);
-+ return 1;
-+ }
-+ status =
-+ acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
-+ if (ACPI_FAILURE(status))
-+ /* Couldnt query device_id for this device */
-+ return 0;
-+
-+ device_id = (device_id & 0xffff);
-+
-+ if ((device_id != 0x100) && /* Not a known CRT device-id */
-+ (device_id != 0x200) && /* Not a known TV device-id */
-+ (device_id != 0x0110) && (device_id != 0x0118) && (device_id != 0x0400) && /* Not an LCD*/
-+ (device_id != 0x0111) && (device_id != 0x0120) && (device_id != 0x0300)) /* Not a known DVI device-id */
-+ {
-+ /* This isnt a known device Id.
-+ Do default switching on this system. */
-+ pNvAcpiObject->default_display_mask = 1;
-+ return 1;
-+ }
-+
-+ pNvAcpiObject->pNvVideo[*device_counter].dev_id = device_id;
-+ pNvAcpiObject->pNvVideo[*device_counter].dev_handle = dev->handle;
-+
-+ (*device_counter)++;
-+ return 0;
-+}
-+#endif
-+
- static int nv_acpi_add(struct acpi_device *device)
- {
- /*
-@@ -190,8 +237,10 @@
+--- a/kernel/nv-acpi.c 2020-01-01 00:00:00.000000000 +0000
++++ b/kernel/nv-acpi.c 2020-01-01 00:00:00.000000000 +0000
+@@ -190,9 +190,9 @@
union acpi_object control_argument_0 = { ACPI_TYPE_INTEGER };
struct acpi_object_list control_argument_list = { 0, NULL };
nv_stack_t *sp = NULL;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
- struct list_head *node, *next;
+- struct list_head *node, *next;
nv_acpi_integer_t device_id = 0;
-+#endif
int device_counter = 0;
++ acpi_handle handle = NULL;
NV_KMEM_CACHE_ALLOC_STACK(sp);
-@@ -220,6 +269,7 @@
+ if (sp == NULL)
+@@ -220,13 +220,12 @@
// grab handles to all the important nodes representing devices
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
- list_for_each_safe(node, next, &device->children)
+- list_for_each_safe(node, next, &device->children)
++ do
{
- struct acpi_device *dev =
-@@ -261,6 +311,13 @@
+- struct acpi_device *dev =
+- list_entry(node, struct acpi_device, node);
+-
+- if (!dev)
+- continue;
++ status = acpi_get_next_object(ACPI_TYPE_DEVICE, device->handle,
++ handle, &handle);
++ if (ACPI_FAILURE(status) || (handle == NULL))
++ break;
+
+ if (device_counter == NV_MAXNUM_DISPLAY_DEVICES)
+ {
+@@ -237,7 +236,7 @@
+ }
+
+ status =
+- acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
++ acpi_evaluate_integer(handle, "_ADR", NULL, &device_id);
+ if (ACPI_FAILURE(status))
+ /* Couldnt query device_id for this device */
+ continue;
+@@ -256,11 +255,11 @@
+ }
+
+ pNvAcpiObject->pNvVideo[device_counter].dev_id = device_id;
+- pNvAcpiObject->pNvVideo[device_counter].dev_handle = dev->handle;
++ pNvAcpiObject->pNvVideo[device_counter].dev_handle = handle;
+
device_counter++;
- }
-+#else
-+ struct nv_acpi_add_enumerated_data data = {
-+ .object = pNvAcpiObject,
-+ .counter = &device_counter,
-+ };
-+ acpi_dev_for_each_child(device, nv_acpi_add_enumerated, &data);
-+#endif
+- }
++ } while (handle != NULL);
// arg 0, bits 1:0, 0 = enable events
control_argument_0.integer.type = ACPI_TYPE_INTEGER;
-@@ -1192,6 +1249,31 @@
- return status;
- }
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
-+static int nv_acpi_ddc_method_enumerated(struct acpi_device *dev, void *data)
-+{
-+ acpi_handle *lcd_dev_handle = data;
-+ acpi_status status;
-+ nv_acpi_integer_t device_id = 0;
-+ if (!dev)
-+ return 0;
-+ status = acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
-+ if (ACPI_FAILURE(status))
-+ /* Couldnt query device_id for this device */
-+ return 0;
-+
-+ device_id = (device_id & 0xffff);
-+
-+ if ((device_id == 0x0110) || (device_id == 0x0118) || (device_id == 0x0400)) /* Only for an LCD*/
-+ {
-+ *lcd_dev_handle = dev->handle;
-+ nv_printf(NV_DBG_INFO, "NVRM: %s Found LCD: %x\n", __FUNCTION__, device_id);
-+ return 1;
-+ }
-+ return 0;
-+}
-+#endif
-+
- /*
- * This function executes a _DDC ACPI method.
- */
-@@ -1207,8 +1289,10 @@
+@@ -1202,16 +1201,15 @@
+ )
+ {
+ acpi_status status;
+- struct acpi_device *device = NULL;
+ struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
union acpi_object *ddc;
union acpi_object ddc_arg0 = { ACPI_TYPE_INTEGER };
struct acpi_object_list input = { 1, &ddc_arg0 };
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
- struct list_head *node, *next;
+- struct list_head *node, *next;
nv_acpi_integer_t device_id = 0;
-+#endif
NvU32 i;
acpi_handle dev_handle = NULL;
acpi_handle lcd_dev_handle = NULL;
-@@ -1239,6 +1323,7 @@
++ acpi_handle handle = NULL;
+
+ if (!nv_acpi_get_device_handle(nv, &dev_handle))
return RM_ERR_NOT_SUPPORTED;
- }
+@@ -1219,16 +1217,6 @@
+ if (!dev_handle)
+ return RM_ERR_INVALID_ARGUMENT;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 0, 0)
- list_for_each_safe(node, next, &device->children)
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)
+- device = acpi_fetch_acpi_dev(dev_handle);
+- status = 0;
+-#else
+- status = acpi_bus_get_device(dev_handle, &device);
+-#endif
+-
+- if (ACPI_FAILURE(status) || !device)
+- return RM_ERR_INVALID_ARGUMENT;
+-
+ if (!NV_MAY_SLEEP())
{
- struct acpi_device *dev =
-@@ -1262,6 +1347,9 @@
- }
-
+ #if defined(DEBUG)
+@@ -1239,15 +1227,15 @@
+ return RM_ERR_NOT_SUPPORTED;
}
-+#else
-+ acpi_dev_for_each_child(device, nv_acpi_ddc_method_enumerated, &lcd_dev_handle);
-+#endif
- if (lcd_dev_handle == NULL)
+- list_for_each_safe(node, next, &device->children)
++ while (lcd_dev_handle == NULL)
{
+- struct acpi_device *dev =
+- list_entry(node, struct acpi_device, node);
++ status = acpi_get_next_object(ACPI_TYPE_DEVICE, dev_handle,
++ handle, &handle);
++ if (ACPI_FAILURE(status) || (handle == NULL))
++ break;
+
+- if (!dev)
+- continue;
++ status = acpi_evaluate_integer(handle, "_ADR", NULL, &device_id);
+
+- status = acpi_evaluate_integer(dev->handle, "_ADR", NULL, &device_id);
+ if (ACPI_FAILURE(status))
+ /* Couldnt query device_id for this device */
+ continue;
+@@ -1256,7 +1244,7 @@
+
+ if ((device_id == 0x0110) || (device_id == 0x0118) || (device_id == 0x0400)) /* Only for an LCD*/
+ {
+- lcd_dev_handle = dev->handle;
++ lcd_dev_handle = handle;
+ nv_printf(NV_DBG_INFO, "NVRM: %s Found LCD: %x\n", __FUNCTION__, device_id);
+ break;
+ }
diff --git a/PKGBUILD b/PKGBUILD
index ae2cbe609418..a44cbd8632e7 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -41,7 +41,7 @@ b2sums=('6538bbec53b10f8d20977f9b462052625742e9709ef06e24cf2e55de5d0c55f1620a4bb
'caedc5651bfd14c02fb677f9c5e87adef298d871c6281b78ce184108310e4243ded82210873014be7fedee0dd6251305fa9bbce0c872b76438e0895ef76109d9'
'0266e1baaac9ffbb94d9e916a693b1663d8686b15e970bfc30f7c51f051a0af9267aa5f6a12b68586c69d2e9796a1124488b3997ba4b26db1a5ac10a892f0df2'
'd69c9acbe550d5fccca68ca6a0d5095cbcaf887d2bc43704a8eb85533896692f16701eef07ead297881f596f5502c3105bb5bea77b2dcaf6c4dc2b49941f9f19'
- 'a411df83e0166366ecc7b9adfb374168487b6cfac5de0ee4a41f2c24bc234947c16f814b5c50bf36ba08c5b7e69b0c14378194f338bbe3fcae446375651d98b4')
+ '682a7b8e58d2a008531b7e5179e32c0c71adad673891a1057acd1aa26e410d9d93ff607e46257c6701619621cee1a27e613ec9ae19a580acdd6f68f1c1fdedea')
_pkg="NVIDIA-Linux-x86_64-${pkgver}-no-compat32"
# default is 'linux' substitute custom name here