CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci

2020-02-03 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Mon Feb  3 16:22:25 UTC 2020

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_base.c

Log Message:
Use the correct PCI interrupt type based on what the driver has configured


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.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/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.4 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.4	Wed Dec 19 09:20:56 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c	Mon Feb  3 16:22:25 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.4 2018/12/19 09:20:56 maya Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.5 2020/02/03 16:22:25 jmcneill Exp $	*/
 
 /*
  * Copyright 2015 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs 
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.4 2018/12/19 09:20:56 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.5 2020/02/03 16:22:25 jmcneill Exp $");
 
 #include "priv.h"
 #include "agp.h"
@@ -142,14 +142,18 @@ nvkm_pci_init(struct nvkm_subdev *subdev
 #ifdef __NetBSD__
 {
 	const struct pci_attach_args *pa = &pdev->pd_pa;
+	const pci_intr_type_t intr_type = pci->msi ?
+	PCI_INTR_TYPE_MSI : PCI_INTR_TYPE_INTX;
+
 	int counts[PCI_INTR_TYPE_SIZE] =  {
-			[PCI_INTR_TYPE_INTX] = 1,
+			[PCI_INTR_TYPE_INTX] = 0,
 			[PCI_INTR_TYPE_MSI] = 0,
 			[PCI_INTR_TYPE_MSIX] = 0,
 	};
+	counts[intr_type] = 1;
 
 	/* XXX errno NetBSD->Linux */
-	ret = -pci_intr_alloc(pa, &pci->pci_ihp, counts, PCI_INTR_TYPE_INTX);
+	ret = -pci_intr_alloc(pa, &pci->pci_ihp, counts, intr_type);
 	if (ret)
 		return ret;
 	pci->pci_intrcookie = pci_intr_establish_xname(pa->pa_pc,



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci

2020-02-12 Thread Jaromir Dolecek
Module Name:src
Committed By:   jdolecek
Date:   Wed Feb 12 22:34:51 UTC 2020

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_base.c

Log Message:
adjust the PCI interrupt allocation code to work the same as
drm_pci_request_irq(), now the driver successfully allocates MSI interrupt

[   3.6619808] nouveau0: info: NVIDIA GK208B (b06070b1)
[   3.7685336] nouveau0: info: bios: version 80.28.78.00.4b
[   3.7785491] nouveau0: interrupting at msi8 vec 0 (nouveau0)

related to PR kern/52440 by John D. Baker


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.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/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.6 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.7
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.6	Fri Feb  7 18:13:33 2020
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c	Wed Feb 12 22:34:51 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.6 2020/02/07 18:13:33 jmcneill Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.7 2020/02/12 22:34:51 jdolecek Exp $	*/
 
 /*
  * Copyright 2015 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs 
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.6 2020/02/07 18:13:33 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.7 2020/02/12 22:34:51 jdolecek Exp $");
 
 #include "priv.h"
 #include "agp.h"
@@ -141,22 +141,51 @@ nvkm_pci_init(struct nvkm_subdev *subdev
 
 #ifdef __NetBSD__
 {
+	const char *const name = device_xname(pci_dev_dev(pdev));
 	const struct pci_attach_args *pa = &pdev->pd_pa;
-	int counts[PCI_INTR_TYPE_SIZE] =  {
-			[PCI_INTR_TYPE_INTX] = 1,
-			[PCI_INTR_TYPE_MSI] = 0,
-			[PCI_INTR_TYPE_MSIX] = 0,
-	};
+	const char *intrstr;
+	char intrbuf[PCI_INTRSTR_LEN];
 
-	/* XXX errno NetBSD->Linux */
-	ret = -pci_intr_alloc(pa, &pci->pci_ihp, counts, PCI_INTR_TYPE_INTX);
-	if (ret)
-		return ret;
+	/* XXX convert to use drm_pci_request_irq() */
+	if (pdev->msi_enabled) {
+		if (pdev->pd_intr_handles == NULL) {
+			if ((ret = pci_msi_alloc_exact(pa, &pci->pci_ihp,
+			1))) {
+aprint_error_dev(pci_dev_dev(pdev),
+"couldn't allocate MSI (%s)\n", name);
+/* XXX errno NetBSD->Linux */
+return -ret;
+			}
+		} else {
+			pci->pci_ihp = pdev->pd_intr_handles;
+			pdev->pd_intr_handles = NULL;
+		}
+	} else {
+		if ((ret = pci_intx_alloc(pa, &pci->pci_ihp))) {
+			aprint_error_dev(pci_dev_dev(pdev),
+			"couldn't allocate INTx interrupt (%s)\n",
+			name);
+
+			/* XXX errno NetBSD->Linux */
+			return -ret;
+		}
+	}
+
+	intrstr = pci_intr_string(pa->pa_pc, pci->pci_ihp[0],
+	intrbuf, sizeof(intrbuf));
 	pci->pci_intrcookie = pci_intr_establish_xname(pa->pa_pc,
 	pci->pci_ihp[0], IPL_DRM, nvkm_pci_intr, pci,
-	device_xname(pci_dev_dev(pdev)));
-	if (pci->pci_intrcookie == NULL)
+	name);
+	if (pci->pci_intrcookie == NULL) {
+		aprint_error_dev(pci_dev_dev(pdev),
+		"couldn't establish interrupt at %s (%s)\n", intrstr, name);
+		pci_intr_release(pa->pa_pc, pci->pci_ihp, 1);
+		pci->pci_ihp = NULL;
 		return -EIO;	/* XXX er? */
+	}
+
+	aprint_normal_dev(pci_dev_dev(pdev), "interrupting at %s (%s)\n",
+	intrstr, name);
 }
 #else
 	ret = request_irq(pdev->irq, nvkm_pci_intr, IRQF_SHARED, "nvkm", pci);



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci

2018-12-19 Thread Maya Rashish
Module Name:src
Committed By:   maya
Date:   Wed Dec 19 09:20:56 UTC 2018

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_base.c

Log Message:
Disable MSI/MSI-X for nouveau.

Fixes functionality for me (GTX 770) and apparently anyone with
MSI/MSI-X capable hardware.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.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/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.3 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.3	Mon Aug 27 07:40:40 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c	Wed Dec 19 09:20:56 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.3 2018/08/27 07:40:40 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.4 2018/12/19 09:20:56 maya Exp $	*/
 
 /*
  * Copyright 2015 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs 
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.3 2018/08/27 07:40:40 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.4 2018/12/19 09:20:56 maya Exp $");
 
 #include "priv.h"
 #include "agp.h"
@@ -142,9 +142,14 @@ nvkm_pci_init(struct nvkm_subdev *subdev
 #ifdef __NetBSD__
 {
 	const struct pci_attach_args *pa = &pdev->pd_pa;
+	int counts[PCI_INTR_TYPE_SIZE] =  {
+			[PCI_INTR_TYPE_INTX] = 1,
+			[PCI_INTR_TYPE_MSI] = 0,
+			[PCI_INTR_TYPE_MSIX] = 0,
+	};
 
 	/* XXX errno NetBSD->Linux */
-	ret = -pci_intr_alloc(pa, &pci->pci_ihp, NULL, 0);
+	ret = -pci_intr_alloc(pa, &pci->pci_ihp, counts, PCI_INTR_TYPE_INTX);
 	if (ret)
 		return ret;
 	pci->pci_intrcookie = pci_intr_establish_xname(pa->pa_pc,



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci

2018-08-27 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Aug 27 07:40:50 UTC 2018

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_agp.c

Log Message:
Translate agp_info accents.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_agp.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/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_agp.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_agp.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_agp.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_agp.c:1.2	Mon Aug 27 04:58:34 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_agp.c	Mon Aug 27 07:40:50 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_pci_agp.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_pci_agp.c,v 1.3 2018/08/27 07:40:50 riastradh Exp $	*/
 
 /*
  * Copyright 2015 Nouveau Project
@@ -22,7 +22,7 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_agp.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_agp.c,v 1.3 2018/08/27 07:40:50 riastradh Exp $");
 
 #include "agp.h"
 #ifdef __NVKM_PCI_AGP_H__
@@ -137,16 +137,30 @@ nvkm_agp_ctor(struct nvkm_pci *pci)
 	agp_copy_info(pci->agp.bridge, &info);
 	agp_backend_release(pci->agp.bridge);
 
+#ifdef __NetBSD__
+	pci->agp.mode = info.aki_info.ai_mode;
+	pci->agp.base = info.aki_info.ai_aperture_base;
+	pci->agp.size = info.aki_info.ai_aperture_size;
+	pci->agp.cma = !info.aki_info.ai_memory_allowed; /* XXX ? */
+#else
 	pci->agp.mode = info.mode;
 	pci->agp.base = info.aper_base;
 	pci->agp.size = info.aper_size * 1024 * 1024;
 	pci->agp.cma  = info.cant_use_aperture;
+#endif
 	pci->agp.mtrr = -1;
 
 	/* determine if bridge + chipset combination needs a workaround */
 	while (quirk->hostbridge_vendor) {
-		if (info.device->vendor == quirk->hostbridge_vendor &&
-		info.device->device == quirk->hostbridge_device &&
+#ifdef __NetBSD__
+		uint16_t vendor = PCI_VENDOR(info.aki_info.ai_devid);
+		uint16_t product = PCI_PRODUCT(info.aki_info.ai_devid);
+#else
+		uint16_t vendor = info.device->vendor;
+		uint16_t product = info.device->device;
+#endif
+		if (vendor == quirk->hostbridge_vendor &&
+		product == quirk->hostbridge_device &&
 		(quirk->chip_vendor == (u16)PCI_ANY_ID ||
 		pci->pdev->vendor == quirk->chip_vendor) &&
 		(quirk->chip_device == (u16)PCI_ANY_ID ||



CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci

2018-08-27 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Aug 27 07:40:40 UTC 2018

Modified Files:
src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci:
nouveau_nvkm_subdev_pci_base.c

Log Message:
Simplify with DRM_IRQ_ARGS, fix typo, ifdef out unnecessary stuff.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \

src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.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/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c
diff -u src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.2 src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c:1.2	Mon Aug 27 04:58:34 2018
+++ src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci/nouveau_nvkm_subdev_pci_base.c	Mon Aug 27 07:40:40 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $	*/
+/*	$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.3 2018/08/27 07:40:40 riastradh Exp $	*/
 
 /*
  * Copyright 2015 Red Hat Inc.
@@ -24,7 +24,7 @@
  * Authors: Ben Skeggs 
  */
 #include 
-__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.2 2018/08/27 04:58:34 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nouveau_nvkm_subdev_pci_base.c,v 1.3 2018/08/27 07:40:40 riastradh Exp $");
 
 #include "priv.h"
 #include "agp.h"
@@ -70,13 +70,8 @@ nvkm_pci_rom_shadow(struct nvkm_pci *pci
 	nvkm_pci_wr32(pci, 0x0050, data);
 }
 
-#ifdef __NetBSD__
-static int
-nvkm_pci_intr(void *arg)
-#else
 static irqreturn_t
-nvkm_pci_intr(int irq, void *arg)
-#endif
+nvkm_pci_intr(DRM_IRQ_ARGS)
 {
 	struct nvkm_pci *pci = arg;
 	struct nvkm_mc *mc = pci->subdev.device->mc;
@@ -149,7 +144,7 @@ nvkm_pci_init(struct nvkm_subdev *subdev
 	const struct pci_attach_args *pa = &pdev->pd_pa;
 
 	/* XXX errno NetBSD->Linux */
-	ret = -pci_intr_alloc(pa, &pci->pci_ih, NULL, 0);
+	ret = -pci_intr_alloc(pa, &pci->pci_ihp, NULL, 0);
 	if (ret)
 		return ret;
 	pci->pci_intrcookie = pci_intr_establish_xname(pa->pa_pc,
@@ -162,9 +157,9 @@ nvkm_pci_init(struct nvkm_subdev *subdev
 	ret = request_irq(pdev->irq, nvkm_pci_intr, IRQF_SHARED, "nvkm", pci);
 	if (ret)
 		return ret;
-#endif
 
 	pci->irq = pdev->irq;
+#endif
 
 	/* Ensure MSI interrupts are armed, for the case where there are
 	 * already interrupts pending (for whatever reason) at load time.
@@ -204,7 +199,9 @@ nvkm_pci_new_(const struct nvkm_pci_func
 	nvkm_subdev_ctor(&nvkm_pci_func, device, index, 0, &pci->subdev);
 	pci->func = func;
 	pci->pdev = device->func->pci(device)->pdev;
+#ifndef __NetBSD__
 	pci->irq = -1;
+#endif
 
 	if (device->type == NVKM_DEVICE_AGP)
 		nvkm_agp_ctor(pci);