Module Name: src Committed By: riastradh Date: Sun Dec 19 12:30:23 UTC 2021
Modified Files: src/sys/external/bsd/drm2/dist/drm/via: via_dmablit.c via_dmablit.h via_drv.c via_drv.h via_irq.c src/sys/external/bsd/drm2/include/linux: ktime.h time.h src/sys/external/bsd/drm2/via: files.via via_pci.c Log Message: drm: Make via build again. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 \ src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.c cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.h cvs rdiff -u -r1.8 -r1.9 src/sys/external/bsd/drm2/dist/drm/via/via_drv.c \ src/sys/external/bsd/drm2/dist/drm/via/via_irq.c cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/dist/drm/via/via_drv.h cvs rdiff -u -r1.20 -r1.21 src/sys/external/bsd/drm2/include/linux/ktime.h cvs rdiff -u -r1.10 -r1.11 src/sys/external/bsd/drm2/include/linux/time.h cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/via/files.via cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/via/via_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/dist/drm/via/via_dmablit.c diff -u src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.c:1.10 src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.c:1.11 --- src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.c:1.10 Sun Dec 19 12:29:47 2021 +++ src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.c Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: via_dmablit.c,v 1.10 2021/12/19 12:29:47 riastradh Exp $ */ +/* $NetBSD: via_dmablit.c,v 1.11 2021/12/19 12:30:23 riastradh Exp $ */ /* via_dmablit.c -- PCI DMA BitBlt support for the VIA Unichrome/Pro * @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: via_dmablit.c,v 1.10 2021/12/19 12:29:47 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: via_dmablit.c,v 1.11 2021/12/19 12:30:23 riastradh Exp $"); #include <linux/pagemap.h> #include <linux/pci.h> @@ -205,10 +205,11 @@ via_free_sg_info(struct drm_device *dev, switch (vsg->state) { case dr_via_device_mapped: - via_unmap_blit_from_device(pdev, vsg); + via_unmap_blit_from_device(dev, pdev, vsg); /* fall through */ case dr_via_desc_pages_alloc: #ifdef __NetBSD__ + __USE(i); bus_dmamap_unload(dev->dmat, vsg->desc_dmamap); bus_dmamap_destroy(dev->dmat, vsg->desc_dmamap); bus_dmamem_unmap(dev->dmat, vsg->desc_kva, @@ -224,8 +225,13 @@ via_free_sg_info(struct drm_device *dev, kfree(vsg->desc_pages); /* fall through */ case dr_via_pages_locked: +#ifdef __NetBSD__ + /* XXX uvm_vsunlock? */ + bus_dmamap_unload(dev->dmat, vsg->dmamap); +#else unpin_user_pages_dirty_lock(vsg->pages, vsg->num_pages, (vsg->direction == DMA_FROM_DEVICE)); +#endif /* fall through */ case dr_via_pages_alloc: #ifdef __NetBSD__ @@ -299,6 +305,7 @@ via_lock_all_dma_pages(struct drm_device DRM_ERROR("bus_dmamap_create failed: %d\n", ret); return ret; } + /* XXX uvm_vslock? */ ret = -bus_dmamap_load_uio(dev->dmat, vsg->dmamap, &uio, BUS_DMA_WAITOK | (xfer->to_fb? BUS_DMA_WRITE : BUS_DMA_READ)); if (ret) { Index: src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.h diff -u src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.h:1.4 src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.h:1.5 --- src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.h:1.4 Sat Dec 18 23:45:44 2021 +++ src/sys/external/bsd/drm2/dist/drm/via/via_dmablit.h Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: via_dmablit.h,v 1.4 2021/12/18 23:45:44 riastradh Exp $ */ +/* $NetBSD: via_dmablit.h,v 1.5 2021/12/19 12:30:23 riastradh Exp $ */ /* via_dmablit.h -- PCI DMA BitBlt support for the VIA Unichrome/Pro * @@ -33,6 +33,9 @@ #define _VIA_DMABLIT_H #include <linux/dma-mapping.h> +#include <linux/workqueue.h> + +#include <drm/drm_wait_netbsd.h> #define VIA_NUM_BLIT_ENGINES 2 #define VIA_NUM_BLIT_SLOTS 8 @@ -55,11 +58,7 @@ typedef struct _drm_via_sg_info { struct _drm_via_descriptor **desc_pages; int num_desc_pages; int num_desc; -#ifdef __NetBSD__ - enum { DMA_FROM_DEVICE, DMA_TO_DEVICE } direction; -#else enum dma_data_direction direction; -#endif dma_addr_t chain_start; uint32_t free_on_sequence; unsigned int descriptors_per_page; Index: src/sys/external/bsd/drm2/dist/drm/via/via_drv.c diff -u src/sys/external/bsd/drm2/dist/drm/via/via_drv.c:1.8 src/sys/external/bsd/drm2/dist/drm/via/via_drv.c:1.9 --- src/sys/external/bsd/drm2/dist/drm/via/via_drv.c:1.8 Sat Dec 18 23:45:44 2021 +++ src/sys/external/bsd/drm2/dist/drm/via/via_drv.c Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: via_drv.c,v 1.8 2021/12/18 23:45:44 riastradh Exp $ */ +/* $NetBSD: via_drv.c,v 1.9 2021/12/19 12:30:23 riastradh Exp $ */ /* * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. @@ -25,13 +25,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: via_drv.c,v 1.8 2021/12/18 23:45:44 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: via_drv.c,v 1.9 2021/12/19 12:30:23 riastradh Exp $"); #include <linux/module.h> #include <linux/pci.h> #include <drm/drm_drv.h> #include <drm/drm_file.h> +#include <drm/drm_pci.h> #include <drm/drm_pciids.h> #include <drm/via_drm.h> Index: src/sys/external/bsd/drm2/dist/drm/via/via_irq.c diff -u src/sys/external/bsd/drm2/dist/drm/via/via_irq.c:1.8 src/sys/external/bsd/drm2/dist/drm/via/via_irq.c:1.9 --- src/sys/external/bsd/drm2/dist/drm/via/via_irq.c:1.8 Sat Dec 18 23:45:44 2021 +++ src/sys/external/bsd/drm2/dist/drm/via/via_irq.c Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: via_irq.c,v 1.8 2021/12/18 23:45:44 riastradh Exp $ */ +/* $NetBSD: via_irq.c,v 1.9 2021/12/19 12:30:23 riastradh Exp $ */ /* via_irq.c * @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: via_irq.c,v 1.8 2021/12/18 23:45:44 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: via_irq.c,v 1.9 2021/12/19 12:30:23 riastradh Exp $"); #include <drm/drm_device.h> #include <drm/drm_vblank.h> @@ -129,7 +129,7 @@ irqreturn_t via_driver_irq_handler(DRM_I dev_priv->last_vblank_valid = 1; } if (!(atomic_read(&dev_priv->vbl_received) & 0xFF)) { - DRM_DEBUG("nsec per vblank is: %llu\n", + DRM_DEBUG("nsec per vblank is: %"PRIu64"\n", ktime_to_ns(dev_priv->nsec_per_vblank)); } drm_handle_vblank(dev, 0); @@ -252,7 +252,7 @@ via_driver_irq_wait(struct drm_device *d if (masks[real_irq][2] && !force_sequence) { DRM_SPIN_WAIT_ON(ret, &cur_irq->irq_queue, &cur_irq->irq_lock, 3 * HZ, - ((VIA_READ(masks[irq][2]) & masks[irq][3]) == + ((via_read(dev_priv, masks[irq][2]) & masks[irq][3]) == masks[irq][4])); cur_irq_sequence = cur_irq->irq_received; } else { Index: src/sys/external/bsd/drm2/dist/drm/via/via_drv.h diff -u src/sys/external/bsd/drm2/dist/drm/via/via_drv.h:1.6 src/sys/external/bsd/drm2/dist/drm/via/via_drv.h:1.7 --- src/sys/external/bsd/drm2/dist/drm/via/via_drv.h:1.6 Sat Dec 18 23:45:44 2021 +++ src/sys/external/bsd/drm2/dist/drm/via/via_drv.h Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: via_drv.h,v 1.6 2021/12/18 23:45:44 riastradh Exp $ */ +/* $NetBSD: via_drv.h,v 1.7 2021/12/19 12:30:23 riastradh Exp $ */ /* * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. @@ -139,19 +139,19 @@ enum via_family { /* VIA MMIO register access */ static inline u32 via_read(struct drm_via_private *dev_priv, u32 reg) { - return readl((void __iomem *)(dev_priv->mmio->handle + reg)); + return DRM_READ32(dev_priv->mmio, reg); } static inline void via_write(struct drm_via_private *dev_priv, u32 reg, u32 val) { - writel(val, (void __iomem *)(dev_priv->mmio->handle + reg)); + DRM_WRITE32(dev_priv->mmio, reg, val); } static inline void via_write8(struct drm_via_private *dev_priv, u32 reg, u32 val) { - writeb(val, (void __iomem *)(dev_priv->mmio->handle + reg)); + DRM_WRITE8(dev_priv->mmio, reg, val); } static inline void via_write8_mask(struct drm_via_private *dev_priv, @@ -159,9 +159,9 @@ static inline void via_write8_mask(struc { u32 tmp; - tmp = readb((void __iomem *)(dev_priv->mmio->handle + reg)); + tmp = DRM_READ8(dev_priv->mmio, reg); tmp = (tmp & ~mask) | (val & mask); - writeb(tmp, (void __iomem *)(dev_priv->mmio->handle + reg)); + DRM_WRITE8(dev_priv->mmio, reg, tmp); } /* Index: src/sys/external/bsd/drm2/include/linux/ktime.h diff -u src/sys/external/bsd/drm2/include/linux/ktime.h:1.20 src/sys/external/bsd/drm2/include/linux/ktime.h:1.21 --- src/sys/external/bsd/drm2/include/linux/ktime.h:1.20 Sun Dec 19 12:24:05 2021 +++ src/sys/external/bsd/drm2/include/linux/ktime.h Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: ktime.h,v 1.20 2021/12/19 12:24:05 riastradh Exp $ */ +/* $NetBSD: ktime.h,v 1.21 2021/12/19 12:30:23 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -223,4 +223,11 @@ ktime_get_real_seconds(void) return time_second; } +static inline void +ktime_get_ts64(struct timespec64 *ts) +{ + + nanotime(ts); +} + #endif /* _LINUX_KTIME_H_ */ Index: src/sys/external/bsd/drm2/include/linux/time.h diff -u src/sys/external/bsd/drm2/include/linux/time.h:1.10 src/sys/external/bsd/drm2/include/linux/time.h:1.11 --- src/sys/external/bsd/drm2/include/linux/time.h:1.10 Sun Dec 19 11:12:36 2021 +++ src/sys/external/bsd/drm2/include/linux/time.h Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: time.h,v 1.10 2021/12/19 11:12:36 riastradh Exp $ */ +/* $NetBSD: time.h,v 1.11 2021/12/19 12:30:23 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -39,6 +39,7 @@ #define timespec64 timespec /* take that, 2038 */ +#define NSEC_PER_USEC 1000L #define NSEC_PER_MSEC 1000000L #define NSEC_PER_SEC 1000000000L #define USEC_PER_MSEC 1000L Index: src/sys/external/bsd/drm2/via/files.via diff -u src/sys/external/bsd/drm2/via/files.via:1.4 src/sys/external/bsd/drm2/via/files.via:1.5 --- src/sys/external/bsd/drm2/via/files.via:1.4 Sun Dec 19 10:55:28 2021 +++ src/sys/external/bsd/drm2/via/files.via Sun Dec 19 12:30:23 2021 @@ -1,6 +1,6 @@ -# $NetBSD: files.via,v 1.4 2021/12/19 10:55:28 riastradh Exp $ +# $NetBSD: files.via,v 1.5 2021/12/19 12:30:23 riastradh Exp $ -device viadrmums: drmkms, drmkms_pci +device viadrmums: drmkms, drmkms_pci, drmums attach viadrmums at drm makeoptions viadrmums "CPPFLAGS.viadrmums"+="-I$S/external/bsd/drm2/dist/drm/via" Index: src/sys/external/bsd/drm2/via/via_pci.c diff -u src/sys/external/bsd/drm2/via/via_pci.c:1.6 src/sys/external/bsd/drm2/via/via_pci.c:1.7 --- src/sys/external/bsd/drm2/via/via_pci.c:1.6 Sun Dec 19 10:33:00 2021 +++ src/sys/external/bsd/drm2/via/via_pci.c Sun Dec 19 12:30:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: via_pci.c,v 1.6 2021/12/19 10:33:00 riastradh Exp $ */ +/* $NetBSD: via_pci.c,v 1.7 2021/12/19 12:30:23 riastradh Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: via_pci.c,v 1.6 2021/12/19 10:33:00 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: via_pci.c,v 1.7 2021/12/19 12:30:23 riastradh Exp $"); #include <sys/types.h> #include <sys/device.h> @@ -39,6 +39,9 @@ __KERNEL_RCSID(0, "$NetBSD: via_pci.c,v #include <linux/pci.h> +#include <drm/drm_device.h> +#include <drm/drm_drv.h> +#include <drm/drm_pci.h> #include <drm/drm_pciids.h> #include <drm/via_drm.h> @@ -50,6 +53,8 @@ struct viadrm_softc { device_t sc_dev; struct pci_dev sc_pci_dev; struct drm_device *sc_drm_dev; + bool sc_pci_attached; + bool sc_dev_registered; }; static int viadrm_match(device_t, cfdata_t, void *); @@ -120,19 +125,35 @@ viadrm_attach(device_t parent, device_t aprint_naive("\n"); aprint_normal("\n"); - if (!pmf_device_register(self, NULL, NULL)) - aprint_error_dev(self, "couldn't establish power handler\n"); - /* Initialize the Linux PCI device descriptor. */ linux_pci_dev_init(&sc->sc_pci_dev, self, device_parent(self), pa, 0); + sc->sc_drm_dev = drm_dev_alloc(via_drm_driver, self); + if (IS_ERR(sc->sc_drm_dev)) { + aprint_error_dev(self, "unable to create drm device: %ld\n", + PTR_ERR(sc->sc_drm_dev)); + sc->sc_drm_dev = NULL; + return; + } + /* XXX errno Linux->NetBSD */ - error = -drm_pci_attach(self, pa, &sc->sc_pci_dev, via_drm_driver, - *cookiep, &sc->sc_drm_dev); + error = -drm_pci_attach(sc->sc_drm_dev, &sc->sc_pci_dev); if (error) { aprint_error_dev(self, "unable to attach drm: %d\n", error); return; } + sc->sc_pci_attached = true; + + /* XXX errno Linux->NetBSD */ + error = -drm_dev_register(sc->sc_drm_dev, *cookiep); + if (error) { + aprint_error_dev(self, "unable to register drm: %d\n", error); + return; + } + sc->sc_dev_registered = true; + + if (!pmf_device_register(self, NULL, NULL)) + aprint_error_dev(self, "couldn't establish power handler\n"); } static int @@ -144,15 +165,21 @@ viadrm_detach(device_t self, int flags) error = config_detach_children(self, flags); if (error) return error; - if (sc->sc_drm_dev == NULL) - goto out; - /* XXX errno Linux->NetBSD */ - error = -drm_pci_detach(sc->sc_drm_dev, flags); - if (error) - return error; - sc->sc_drm_dev = NULL; -out: linux_pci_dev_destroy(&sc->sc_pci_dev); pmf_device_deregister(self); + if (sc->sc_dev_registered) { + drm_dev_unregister(sc->sc_drm_dev); + sc->sc_dev_registered = false; + } + if (sc->sc_pci_attached) { + drm_pci_detach(sc->sc_drm_dev); + sc->sc_pci_attached = false; + } + if (sc->sc_drm_dev) { + drm_dev_put(sc->sc_drm_dev); + sc->sc_drm_dev = NULL; + } + linux_pci_dev_destroy(&sc->sc_pci_dev); + return 0; }