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",