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