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;
 }

Reply via email to