Pull up following revision(s) (requested by mrg in ticket #851):

sys/external/bsd/drm2/nouveau/nouveau_pci.c: revision 1.9-1.11

disable drm2 on modern nouveau cards (Pascal-based).

our older drm doesn't have any support for modern Pascal or
the second version of Maxwell (but not disabled here yet)
but the driver tries to attach on any nvidia gpu.
this should workaround PR#53258, and other issues reported
with modern nvidia chipsets.

XXX: pullup-7, pullup-8.

-

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.

 -

the previous change doubled the check for pascal.  fix it so
that we only check for later maxwell and pascal once each,
as intended.
This commit is contained in:
martin 2018-06-08 10:08:06 +00:00
parent 2da5c6a13e
commit fd372c28bd
1 changed files with 32 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: nouveau_pci.c,v 1.8 2016/04/19 06:57:37 mrg Exp $ */
/* $NetBSD: nouveau_pci.c,v 1.8.10.1 2018/06/08 10:08:06 martin 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.8 2016/04/19 06:57:37 mrg Exp $");
__KERNEL_RCSID(0, "$NetBSD: nouveau_pci.c,v 1.8.10.1 2018/06/08 10:08:06 martin Exp $");
#include <sys/types.h>
#include <sys/device.h>
@ -91,6 +91,36 @@ nouveau_pci_match(device_t parent, cfdata_t match, void *aux)
if (PCI_CLASS(pa->pa_class) != PCI_CLASS_DISPLAY)
return 0;
#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... */
}