kernel-6.2.patch 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. From 5db7eb5a62003bbe04f3f07d089fcf5445b34a29 Mon Sep 17 00:00:00 2001
  2. From: Joan Bruguera <joanbrugueram@gmail.com>
  3. Date: Sun, 25 Dec 2022 22:05:14 +0000
  4. Subject: [PATCH] Tentative fix for NVIDIA 470.161.03 driver for Linux 6.2-rc1
  5. ---
  6. kernel/nvidia-drm/nvidia-drm-connector.c | 22 ++++++++++++++++++++++
  7. kernel/nvidia-drm/nvidia-drm-drv.c | 4 ++++
  8. kernel/nvidia/nv-acpi.c | 19 ++++++++++++++++---
  9. 3 files changed, 42 insertions(+), 3 deletions(-)
  10. diff --git a/kernel/nvidia-drm/nvidia-drm-connector.c b/kernel/nvidia-drm/nvidia-drm-connector.c
  11. index 6fbcd63..a5ab9e9 100644
  12. --- a/kernel/nvidia-drm/nvidia-drm-connector.c
  13. +++ b/kernel/nvidia-drm/nvidia-drm-connector.c
  14. @@ -20,6 +20,8 @@
  15. * DEALINGS IN THE SOFTWARE.
  16. */
  17. +#include <linux/version.h>
  18. +#include <drm/drm_edid.h>
  19. #include "nvidia-drm-conftest.h" /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
  20. #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
  21. @@ -98,6 +100,7 @@ __nv_drm_detect_encoder(struct NvKmsKapiDynamicDisplayParams *pDetectParams,
  22. break;
  23. }
  24. +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0)
  25. if (connector->override_edid) {
  26. const struct drm_property_blob *edid = connector->edid_blob_ptr;
  27. @@ -110,6 +113,25 @@ __nv_drm_detect_encoder(struct NvKmsKapiDynamicDisplayParams *pDetectParams,
  28. sizeof(pDetectParams->edid.buffer));
  29. }
  30. }
  31. +#else
  32. + // Rel. commit "drm/edid: detach debugfs EDID override from EDID property update" (Jani Nikula, 24 Oct 2022)
  33. + // NOTE: HUGE HACK!
  34. + mutex_lock(&connector->edid_override_mutex);
  35. + if (connector->edid_override) {
  36. + const struct edid *edid = drm_edid_raw(connector->edid_override);
  37. + size_t edid_length = EDID_LENGTH * (edid->extensions + 1);
  38. + if (edid_length <= sizeof(pDetectParams->edid.buffer)) {
  39. + memcpy(pDetectParams->edid.buffer, edid, edid_length);
  40. + pDetectParams->edid.bufferSize = edid_length;
  41. + pDetectParams->overrideEdid = NV_TRUE;
  42. + } else {
  43. + WARN_ON(edid_length >
  44. + sizeof(pDetectParams->edid.buffer));
  45. + }
  46. + }
  47. + mutex_unlock(&connector->edid_override_mutex);
  48. +
  49. +#endif
  50. if (!nvKms->getDynamicDisplayInfo(nv_dev->pDevice, pDetectParams)) {
  51. NV_DRM_DEV_LOG_ERR(
  52. diff --git a/kernel/nvidia-drm/nvidia-drm-drv.c b/kernel/nvidia-drm/nvidia-drm-drv.c
  53. index 6d007b1..d08ab4c 100644
  54. --- a/kernel/nvidia-drm/nvidia-drm-drv.c
  55. +++ b/kernel/nvidia-drm/nvidia-drm-drv.c
  56. @@ -20,6 +20,7 @@
  57. * DEALINGS IN THE SOFTWARE.
  58. */
  59. +#include <linux/version.h>
  60. #include "nvidia-drm-conftest.h" /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
  61. #include "nvidia-drm-priv.h"
  62. @@ -240,9 +241,12 @@ nv_drm_init_mode_config(struct nv_drm_device *nv_dev,
  63. dev->mode_config.preferred_depth = 24;
  64. dev->mode_config.prefer_shadow = 1;
  65. +// Rel. commit "drm: Remove drm_mode_config::fb_base" (Zack Rusin, 18 Oct 2022)
  66. +#if defined(CONFIG_FB) && LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0)
  67. /* Currently unused. Update when needed. */
  68. dev->mode_config.fb_base = 0;
  69. +#endif
  70. #if defined(NV_DRM_CRTC_STATE_HAS_ASYNC_FLIP) || \
  71. defined(NV_DRM_CRTC_STATE_HAS_PAGEFLIP_FLAGS)
  72. diff --git a/kernel/nvidia/nv-acpi.c b/kernel/nvidia/nv-acpi.c
  73. index 07501eb..1fdf71c 100644
  74. --- a/kernel/nvidia/nv-acpi.c
  75. +++ b/kernel/nvidia/nv-acpi.c
  76. @@ -8,6 +8,7 @@
  77. * _NVRM_COPYRIGHT_END_
  78. */
  79. +#include <linux/version.h>
  80. #define __NO_VERSION__
  81. #include "os-interface.h"
  82. @@ -24,7 +25,10 @@ static NV_STATUS nv_acpi_extract_object (const union acpi_object *, void *, N
  83. static int nv_acpi_add (struct acpi_device *);
  84. -#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
  85. +// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
  86. +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
  87. +static void nv_acpi_remove_one_arg_void(struct acpi_device *device);
  88. +#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
  89. static int nv_acpi_remove_two_args(struct acpi_device *device, int type);
  90. #else
  91. static int nv_acpi_remove_one_arg(struct acpi_device *device);
  92. @@ -80,7 +84,10 @@ static const struct acpi_driver nv_acpi_driver_template = {
  93. .ids = nv_video_device_ids,
  94. .ops = {
  95. .add = nv_acpi_add,
  96. -#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
  97. +// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
  98. +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
  99. + .remove = nv_acpi_remove_one_arg_void,
  100. +#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
  101. .remove = nv_acpi_remove_two_args,
  102. #else
  103. .remove = nv_acpi_remove_one_arg,
  104. @@ -342,7 +349,10 @@ static int nv_acpi_add(struct acpi_device *device)
  105. return 0;
  106. }
  107. -#if !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
  108. +// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
  109. +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 2, 0))
  110. +static void nv_acpi_remove_one_arg_void(struct acpi_device *device)
  111. +#elif !defined(NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT) || (NV_ACPI_DEVICE_OPS_REMOVE_ARGUMENT_COUNT == 2)
  112. static int nv_acpi_remove_two_args(struct acpi_device *device, int type)
  113. #else
  114. static int nv_acpi_remove_one_arg(struct acpi_device *device)
  115. @@ -396,7 +406,10 @@ static int nv_acpi_remove_one_arg(struct acpi_device *device)
  116. device->driver_data = NULL;
  117. }
  118. +// Rel. commit "ACPI: make remove callback of ACPI driver void" (Dawei Li, 14 Nov 2022)
  119. +#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0))
  120. return status;
  121. +#endif
  122. }
  123. /*
  124. --
  125. 2.39.0