lots of updates

This commit is contained in:
Matt Nish-Lapidus 2024-11-29 12:28:08 -05:00
parent 11c3a4b076
commit c7be0ba0dd
6 changed files with 131 additions and 245 deletions

View file

@ -44,11 +44,11 @@
boot.loader.systemd-boot.enable = true;
boot.loader.systemd-boot.configurationLimit = 8;
boot.loader.efi.canTouchEfiVariables = true;
boot.kernelPackages = pkgs.linuxPackages_6_11;
boot.kernelPackages = pkgs.linuxPackages_latest;
boot = {
initrd.kernelModules = [ "nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" ];
kernelParams = [ "nvidia-drm.fbdev=1" "nvidia_drm.modeset=1" "amdgpu.sg_display=0"]; # "amd_pstate=guided"
kernelParams = [ "nvidia-drm.fbdev=1" "nvidia_drm.modeset=1"];
};
systemd.services.tailscaled.after = ["NetworkManager-wait-online.service"];
@ -96,6 +96,20 @@
forceFullCompositionPipeline = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
#package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
# version = "565.57.01";
# sha256_64bit = "sha256-buvpTlheOF6IBPWnQVLfQUiHv4GcwhvZW3Ks0PsYLHo=";
# sha256_aarch64 = "sha256-aDVc3sNTG4O3y+vKW87mw+i9AqXCY29GVqEIUlsvYfE=";
# openSha256 = "sha256-/tM3n9huz1MTE6KKtTCBglBMBGGL/GOHi5ZSUag4zXA=";
# settingsSha256 = "sha256-H7uEe34LdmUFcMcS6bz7sbpYhg9zPCb/5AmZZFTx1QA=";
# persistencedSha256 = "sha256-hdszsACWNqkCh8G4VBNitDT85gk9gJe1BlQ8LdrYIkg=";
# patchesOpen = [
# ./nvidia-6_12-patch
# ];
#};
prime = {
amdgpuBusId = "PCI:101:0:0";
nvidiaBusId = "PCI:1:0:0";
@ -278,10 +292,6 @@
services.kmonad = {
enable = true;
keyboards = {
# quefrency = {
# device = "/dev/input/by-id/usb-Keebio_Quefrency_Rev._5-event-kbd";
# config = builtins.readFile ../../dotfiles/dot_config/kmonad/quefrency.kbd;
# };
sinc = {
device = "/dev/input/by-id/usb-Keebio_Sinc_Rev._4-event-kbd";
config = builtins.readFile ../../dotfiles/dot_config/kmonad/sinc.kbd;
@ -363,10 +373,10 @@
# enable the OpenSSH daemon.
services.openssh.enable = true;
# services.avahi = {
# enable = true;
# nssmdns = true;
# };
services.avahi = {
enable = true;
nssmdns4 = true;
};
# add user accounts
users.users.emenel = {

View file

@ -0,0 +1,105 @@
diff --git a/kernel-open/nvidia-drm/nvidia-drm-drv.c b/kernel-open/nvidia-drm/nvidia-drm-drv.c
index 8cb94219..27b3cbd9 100644
--- a/kernel-open/nvidia-drm/nvidia-drm-drv.c
+++ b/kernel-open/nvidia-drm/nvidia-drm-drv.c
@@ -100,6 +100,11 @@
#include <drm/drm_atomic_helper.h>
#endif
+#include <linux/version.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+#include <drm/drm_client.h>
+#endif
+
static int nv_drm_revoke_modeset_permission(struct drm_device *dev,
struct drm_file *filep,
NvU32 dpyId);
@@ -147,7 +152,7 @@
#if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
-#if defined(NV_DRM_OUTPUT_POLL_CHANGED_PRESENT)
+
static void nv_drm_output_poll_changed(struct drm_device *dev)
{
struct drm_connector *connector = NULL;
@@ -191,7 +196,7 @@
nv_drm_connector_list_iter_end(&conn_iter);
#endif
}
-#endif /* NV_DRM_OUTPUT_POLL_CHANGED_PRESENT */
+
static struct drm_framebuffer *nv_drm_framebuffer_create(
struct drm_device *dev,
@@ -229,9 +234,7 @@
.atomic_check = nv_drm_atomic_check,
.atomic_commit = nv_drm_atomic_commit,
- #if defined(NV_DRM_OUTPUT_POLL_CHANGED_PRESENT)
- .output_poll_changed = nv_drm_output_poll_changed,
- #endif
+
};
static void nv_drm_event_callback(const struct NvKmsKapiEvent *event)
@@ -1711,6 +1714,10 @@
.read = drm_read,
.llseek = noop_llseek,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+ // Rel. commit. "fs: move FMODE_UNSIGNED_OFFSET to fop_flags" (Christian Brauner, 9 Aug 2024)
+ .fop_flags = FOP_UNSIGNED_OFFSET,
+#endif
};
static const struct drm_ioctl_desc nv_drm_ioctls[] = {
@@ -1939,6 +1946,20 @@
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+static int hotplug_helper_client_hotplug(struct drm_client_dev *client)
+{
+ nv_drm_output_poll_changed(client->dev);
+ return 0;
+}
+
+static const struct drm_client_funcs nv_hotplug_helper_client_funcs = {
+ .owner = THIS_MODULE,
+ .hotplug = hotplug_helper_client_hotplug,
+};
+#endif
+
+
/*
* Helper function for allocate/register DRM device for given NVIDIA GPU ID.
@@ -2029,8 +2050,27 @@
nv_dev->next = dev_list;
dev_list = nv_dev;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+ /* Register a DRM client for receiving hotplug events */
+ struct drm_client_dev *client = kzalloc(sizeof(*client), GFP_KERNEL);
+ if (client == NULL || drm_client_init(dev, client,
+ "nv-hotplug-helper", &nv_hotplug_helper_client_funcs)) {
+ printk(KERN_WARNING "Failed to initialize the nv-hotplug-helper DRM client.");
+ goto failed_drm_client_init;
+ }
+
+ drm_client_register(client);
+ pr_info("Registered the nv-hotplug-helper DRM client.");
+#endif
+
return; /* Success */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
+failed_drm_client_init:
+
+ kfree(client);
+#endif
+
failed_drm_register:
nv_drm_dev_free(dev);