CVS commit: src/sys/external/bsd/drm2/dist/drm/nouveau/nvkm/subdev/pci
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
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
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
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
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);