Module Name:    src
Committed By:   mrg
Date:           Thu May 31 09:18:31 UTC 2018

Modified Files:
        src/sys/external/bsd/drm2/nouveau: nouveau_pci.c

Log Message:
disable matching nouveau on pascal and the second generation of maxwell
cards that are not supported by this version of drm.

this should fix various modern systems vs nvidia issues, eg PR 53188.

XXX: pullup-7, pullup-8.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/drm2/nouveau/nouveau_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/nouveau/nouveau_pci.c
diff -u src/sys/external/bsd/drm2/nouveau/nouveau_pci.c:1.9 src/sys/external/bsd/drm2/nouveau/nouveau_pci.c:1.10
--- src/sys/external/bsd/drm2/nouveau/nouveau_pci.c:1.9	Mon May 21 08:58:47 2018
+++ src/sys/external/bsd/drm2/nouveau/nouveau_pci.c	Thu May 31 09:18:31 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_pci.c,v 1.9 2018/05/21 08:58:47 mrg Exp $	*/
+/*	$NetBSD: nouveau_pci.c,v 1.10 2018/05/31 09:18:31 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nouveau_pci.c,v 1.9 2018/05/21 08:58:47 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_pci.c,v 1.10 2018/05/31 09:18:31 mrg Exp $");
 
 #include <sys/types.h>
 #include <sys/device.h>
@@ -115,6 +115,36 @@ nouveau_pci_match(device_t parent, cfdat
 		return 0;
 #undef IS_BETWEEN
 
+#define IS_BETWEEN(x,y) \
+	(PCI_PRODUCT(pa->pa_id) >= (x) && PCI_PRODUCT(pa->pa_id) <= (y))
+	/*
+	 * NetBSD drm2 needs missing-so-far firmware for Maxwell-based cards:
+	 *   0x1380-0x13bf 	GM107
+	 */
+	if (IS_BETWEEN(0x1380, 0x13bf))
+		return 0;
+
+	/*
+	 * NetBSD drm2 doesn't support Pascal-based cards:
+	 *   0x1580-0x15ff 	GP100
+	 *   0x1b00-0x1b7f 	GP102
+	 *   0x1b80-0x1bff 	GP104
+	 *   0x1c00-0x1c7f 	GP106
+	 *   0x1c80-0x1cff 	GP107
+	 *   0x1d00-0x1d7f 	GP108
+	 *   0x1d80-0x1dff 	GV100
+	 */
+	
+	if (IS_BETWEEN(0x1580, 0x15ff) ||
+	    IS_BETWEEN(0x1b00, 0x1b7f) ||
+	    IS_BETWEEN(0x1b80, 0x1bff) ||
+	    IS_BETWEEN(0x1c00, 0x1c7f) ||
+	    IS_BETWEEN(0x1c80, 0x1cff) ||
+	    IS_BETWEEN(0x1d00, 0x1d7f) ||
+	    IS_BETWEEN(0x1d80, 0x1dff))
+		return 0;
+#undef IS_BETWEEN
+
 	return 6;		/* XXX Beat genfb_pci...  */
 }
 

Reply via email to