Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 10:28:32 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915: i915_drv.c i915_gem.c
            intel_uncore.c
        src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_ggtt.c
Removed Files:
        src/sys/external/bsd/drm2/dist/drm/i915: i915_dma.c

Log Message:
Distribute local changes from i915_dma.c


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r0 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
cvs rdiff -u -r1.24 -r1.25 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c
cvs rdiff -u -r1.65 -r1.66 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
cvs rdiff -u -r1.14 -r1.15 \
    src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c
cvs rdiff -u -r1.4 -r1.5 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.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/i915/i915_drv.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c:1.24 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c:1.25
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c:1.24	Sun Dec 19 10:25:15 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.c	Sun Dec 19 10:28:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_drv.c,v 1.24 2021/12/19 10:25:15 riastradh Exp $	*/
+/*	$NetBSD: i915_drv.c,v 1.25 2021/12/19 10:28:31 riastradh Exp $	*/
 
 /* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
  */
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_drv.c,v 1.24 2021/12/19 10:25:15 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_drv.c,v 1.25 2021/12/19 10:28:31 riastradh Exp $");
 
 #include <linux/acpi.h>
 #include <linux/device.h>
@@ -599,6 +599,14 @@ err_gem:
 	vlv_free_s0ix_state(dev_priv);
 err_workqueues:
 	i915_workqueues_cleanup(dev_priv);
+	mutex_destroy(&dev_priv->hdcp_comp_mutex);
+	mutex_destroy(&dev_priv->pps_mutex);
+	mutex_destroy(&dev_priv->wm.wm_mutex);
+	mutex_destroy(&dev_priv->av_mutex);
+	mutex_destroy(&dev_priv->sb_lock);
+	mutex_destroy(&dev_priv->backlight_lock);
+	spin_lock_destroy(&dev_priv->gpu_error.lock);
+	spin_lock_destroy(&dev_priv->irq_lock);
 	return ret;
 }
 
@@ -617,7 +625,15 @@ static void i915_driver_late_release(str
 	i915_workqueues_cleanup(dev_priv);
 
 	pm_qos_remove_request(&dev_priv->sb_qos);
+	mutex_destroy(&dev_priv->hdcp_comp_mutex);
+	mutex_destroy(&dev_priv->pps_mutex);
+	mutex_destroy(&dev_priv->wm.wm_mutex);
+	mutex_destroy(&dev_priv->av_mutex);
+	mutex_destroy(&dev_priv->sb_lock);
 	mutex_destroy(&dev_priv->sb_lock);
+	mutex_destroy(&dev_priv->backlight_lock);
+	spin_lock_destroy(&dev_priv->gpu_error.lock);
+	spin_lock_destroy(&dev_priv->irq_lock);
 }
 
 /**
@@ -1252,6 +1268,7 @@ static int i915_driver_hw_probe(struct d
 	 */
 	dma_set_max_seg_size(&pdev->dev, UINT_MAX);
 
+#ifndef __NetBSD__		/* Handled in intel_ggtt.c.  */
 	/* overlay on gen2 is broken and can't address above 1G */
 	if (IS_GEN(dev_priv, 2)) {
 		ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(30));
@@ -1279,6 +1296,7 @@ static int i915_driver_hw_probe(struct d
 			goto err_mem_regions;
 		}
 	}
+#endif
 
 	pm_qos_add_request(&dev_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY,
 			   PM_QOS_DEFAULT_VALUE);

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.65 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.66
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.65	Sun Dec 19 01:50:47 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c	Sun Dec 19 10:28:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem.c,v 1.65 2021/12/19 01:50:47 riastradh Exp $	*/
+/*	$NetBSD: i915_gem.c,v 1.66 2021/12/19 10:28:31 riastradh Exp $	*/
 
 /*
  * Copyright © 2008-2015 Intel Corporation
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem.c,v 1.65 2021/12/19 01:50:47 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem.c,v 1.66 2021/12/19 10:28:31 riastradh Exp $");
 
 #ifdef __NetBSD__
 #if 0				/* XXX uvmhist option?  */
@@ -1260,6 +1260,7 @@ void i915_gem_cleanup_early(struct drm_i
 	GEM_BUG_ON(!llist_empty(&dev_priv->mm.free_list));
 	GEM_BUG_ON(atomic_read(&dev_priv->mm.free_count));
 	WARN_ON(dev_priv->mm.shrink_count);
+	spin_lock_destroy(&dev_priv->fb_tracking.lock);
 }
 
 int i915_gem_freeze(struct drm_i915_private *dev_priv)
@@ -1321,6 +1322,12 @@ void i915_gem_release(struct drm_device 
 	list_for_each_entry(request, &file_priv->mm.request_list, client_link)
 		request->file_priv = NULL;
 	spin_unlock(&file_priv->mm.lock);
+
+	/*
+	 * XXX This is probably too early -- need to defer with
+	 * callrcu; caller already defers free with kfree_rcu.
+	 */
+	spin_lock_destroy(&file_priv->mm.lock);
 }
 
 int i915_gem_open(struct drm_i915_private *i915, struct drm_file *file)

Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.14 src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.15
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c:1.14	Sat Dec 18 23:45:29 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_uncore.c	Sun Dec 19 10:28:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_uncore.c,v 1.14 2021/12/18 23:45:29 riastradh Exp $	*/
+/*	$NetBSD: intel_uncore.c,v 1.15 2021/12/19 10:28:31 riastradh Exp $	*/
 
 /*
  * Copyright © 2013 Intel Corporation
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_uncore.c,v 1.14 2021/12/18 23:45:29 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_uncore.c,v 1.15 2021/12/19 10:28:31 riastradh Exp $");
 
 #include <linux/pm_runtime.h>
 #include <asm/iosf_mbi.h>
@@ -1688,11 +1688,21 @@ static int uncore_mmio_setup(struct inte
 	else
 		mmio_size = 2 * 1024 * 1024;
 	uncore->regs = pci_iomap(pdev, mmio_bar, mmio_size);
+#ifdef __NetBSD__
+	if (!dev_priv->regs)
+		dev_priv->regs = drm_agp_borrow(&i915->drm, mmio_bar,
+		    mmio_size);
+#endif
 	if (uncore->regs == NULL) {
 		drm_err(&i915->drm, "failed to map registers\n");
 		return -EIO;
 	}
 
+#ifdef __NetBSD__
+	i915->regs_bst = i915->drm.pdev->pd_resources[mmio_bar].bst;
+	i915->regs_bsh = i915->drm.pdev->pd_resources[mmio_bar].bsh;
+#endif
+
 	return 0;
 }
 

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c:1.4	Sun Dec 19 01:35:35 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_ggtt.c	Sun Dec 19 10:28:31 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_ggtt.c,v 1.4 2021/12/19 01:35:35 riastradh Exp $	*/
+/*	$NetBSD: intel_ggtt.c,v 1.5 2021/12/19 10:28:31 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_ggtt.c,v 1.4 2021/12/19 01:35:35 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_ggtt.c,v 1.5 2021/12/19 10:28:31 riastradh Exp $");
 
 #include <linux/stop_machine.h>
 
@@ -57,12 +57,25 @@ static int ggtt_init_hw(struct i915_ggtt
 		ggtt->vm.mm.color_adjust = i915_ggtt_color_adjust;
 
 	if (ggtt->mappable_end) {
+#ifdef __NetBSD__
+		if (!drm_io_mapping_init_wc(&i915->drm, &ggtt->iomap,
+			ggtt->gmadr.start, ggtt->mappable_end)) {
+			ggtt->vm.cleanup(&ggtt->vm);
+			return -EIO;
+		}
+		/*
+		 * Note: mappable_end is the size, not end paddr, of
+		 * the aperture.
+		 */
+		pmap_pv_track(ggtt->gmadr.start, ggtt->mappable_end);
+#else
 		if (!io_mapping_init_wc(&ggtt->iomap,
 					ggtt->gmadr.start,
 					ggtt->mappable_end)) {
 			ggtt->vm.cleanup(&ggtt->vm);
 			return -EIO;
 		}
+#endif
 
 		ggtt->mtrr = arch_phys_wc_add(ggtt->gmadr.start,
 					      ggtt->mappable_end);
@@ -807,6 +820,11 @@ static void ggtt_cleanup_hw(struct i915_
 	mutex_unlock(&ggtt->vm.mutex);
 	i915_address_space_fini(&ggtt->vm);
 
+#ifdef __NetBSD__
+	if (ggtt->mappable_end)
+		pmap_pv_untrack(ggtt->gmadr.start, ggtt->mappable_end);
+#endif
+
 	arch_phys_wc_del(ggtt->mtrr);
 
 	if (ggtt->iomap.size)
@@ -1217,16 +1235,16 @@ static int i915_gmch_probe(struct i915_g
 
 #ifdef __NetBSD__
 	ggtt->gmadr.start = gmadr_base;
-	/* Based on i915_drv.c, i915_driver_init_hw.  */
+	/* Based on i915_drv.c, i915_driver_hw_probe.  */
 	if (INTEL_INFO(dev)->gen <= 2)
-		dev_priv->ggtt.max_paddr = DMA_BIT_MASK(30);
+		ggtt->max_paddr = DMA_BIT_MASK(30);
 	else if ((INTEL_INFO(dev)->gen <= 3) ||
 	    IS_BROADWATER(dev) || IS_CRESTLINE(dev))
-		dev_priv->ggtt.max_paddr = DMA_BIT_MASK(32);
+		ggtt->max_paddr = DMA_BIT_MASK(32);
 	else if (INTEL_INFO(dev)->gen <= 5)
-		dev_priv->ggtt.max_paddr = DMA_BIT_MASK(36);
+		ggtt->max_paddr = DMA_BIT_MASK(36);
 	else
-		dev_priv->ggtt.max_paddr = DMA_BIT_MASK(40);
+		ggtt->max_paddr = DMA_BIT_MASK(40);
 #else
 	ggtt->gmadr =
 		(struct resource)DEFINE_RES_MEM(gmadr_base, ggtt->mappable_end);
@@ -1274,6 +1292,16 @@ static int ggtt_probe_hw(struct i915_ggt
 	if (ret)
 		return ret;
 
+#ifdef __NetBSD__
+	ggtt->pgfl = x86_select_freelist(ggtt->max_paddr);
+	ret = drm_limit_dma_space(&i915->drm, 0, ggtt->max_paddr);
+	if (ret) {
+		DRM_ERROR("Unable to limit DMA paddr allocations: %d\n", ret);
+		i915_ggtt_driver_release(i915);
+		return ret;
+	}
+#endif
+
 	if ((ggtt->vm.total - 1) >> 32) {
 		DRM_ERROR("We never expected a Global GTT with more than 32bits"
 			  " of address space! Found %lldM!\n",

Reply via email to