Module Name: src Committed By: riastradh Date: Wed Feb 25 13:06:13 UTC 2015
Modified Files: src/sys/external/bsd/drm2/dist/drm/i915: i915_dma.c intel_pm.c Log Message: Initialize mchdev_lock earlier. Fixes i915drmkms boot on Ironlake. Derived from a patch sent to me by degroote@ longer ago than I care to admit. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.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_dma.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.12 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.13 --- src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.12 Wed Nov 5 23:46:09 2014 +++ src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c Wed Feb 25 13:06:13 2015 @@ -1650,6 +1650,10 @@ int i915_driver_load(struct drm_device * mutex_init(&dev_priv->modeset_restore_lock); #endif +#ifdef __NetBSD__ + spin_lock_init(&mchdev_lock); +#endif + intel_pm_setup(dev); intel_display_crc_init(dev); @@ -1865,6 +1869,7 @@ free_priv: if (dev_priv->slab) kmem_cache_destroy(dev_priv->slab); #ifdef __NetBSD__ + spin_lock_destroy(&mchdev_lock); linux_mutex_destroy(&dev_priv->modeset_restore_lock); linux_mutex_destroy(&dev_priv->dpio_lock); spin_lock_destroy(&dev_priv->mm.object_stat_lock); @@ -1985,6 +1990,7 @@ int i915_driver_unload(struct drm_device DRM_DESTROY_WAITQUEUE(&dev_priv->pending_flip_queue); spin_lock_destroy(&dev_priv->pending_flip_lock); DRM_DESTROY_WAITQUEUE(&dev_priv->gpu_error.reset_queue); + spin_lock_destroy(&mchdev_lock); linux_mutex_destroy(&dev_priv->modeset_restore_lock); linux_mutex_destroy(&dev_priv->dpio_lock); spin_lock_destroy(&dev_priv->mm.object_stat_lock); Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.6 --- src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c:1.5 Sun Sep 7 23:03:11 2014 +++ src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c Wed Feb 25 13:06:13 2015 @@ -4426,14 +4426,6 @@ ips_ping_for_i915_load(void) void intel_gpu_ips_init(struct drm_i915_private *dev_priv) { -#ifdef __NetBSD__ /* XXX */ - /* - * This seems as good a place as any to initialize mchdev_lock. - * Taking the lock in the rest of this routine is silly, but... - */ - spin_lock_init(&mchdev_lock); -#endif - /* We only register the i915 ips part with intel-ips once everything is * set up, to avoid intel-ips sneaking in and reading bogus values. */ spin_lock_irq(&mchdev_lock); @@ -4445,18 +4437,9 @@ void intel_gpu_ips_init(struct drm_i915_ void intel_gpu_ips_teardown(void) { -#ifdef __NetBSD__ - if (i915_mch_dev == NULL) - return; -#endif - spin_lock_irq(&mchdev_lock); i915_mch_dev = NULL; spin_unlock_irq(&mchdev_lock); - -#ifdef __NetBSD__ - spin_lock_destroy(&mchdev_lock); -#endif } static void intel_init_emon(struct drm_device *dev)