diff options
-rw-r--r-- | core/modules/kernel-vanilla/patches/dirty-hack-vblank-hang-i915.patch | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/core/modules/kernel-vanilla/patches/dirty-hack-vblank-hang-i915.patch b/core/modules/kernel-vanilla/patches/dirty-hack-vblank-hang-i915.patch new file mode 100644 index 00000000..f8179684 --- /dev/null +++ b/core/modules/kernel-vanilla/patches/dirty-hack-vblank-hang-i915.patch @@ -0,0 +1,68 @@ +diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h +index 7c22fac3..de70665f 100644 +--- a/drivers/gpu/drm/i915/i915_drv.h ++++ b/drivers/gpu/drm/i915/i915_drv.h +@@ -653,6 +653,7 @@ enum intel_sbi_destination { + #define QUIRK_PIN_SWIZZLED_PAGES (1<<5) + #define QUIRK_INCREASE_T12_DELAY (1<<6) + #define QUIRK_INCREASE_DDI_DISABLED_TIME (1<<7) ++#define QUIRK_SKIP_WAITS (1<<13) + + struct intel_fbdev; + struct intel_fbc_work; +diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c +index 00486c74..f72e8591 100644 +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -12466,7 +12466,8 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) + + intel_atomic_commit_fence_wait(intel_state); + +- drm_atomic_helper_wait_for_dependencies(state); ++ if (!(dev_priv->quirks & QUIRK_SKIP_WAITS)) ++ drm_atomic_helper_wait_for_dependencies(state); + + if (intel_state->modeset) + intel_display_power_get(dev_priv, POWER_DOMAIN_MODESET); +@@ -12568,7 +12569,8 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state) + * - switch over to the vblank wait helper in the core after that since + * we don't need out special handling any more. + */ +- drm_atomic_helper_wait_for_flip_done(dev, state); ++ if (!(dev_priv->quirks & QUIRK_SKIP_WAITS)) ++ drm_atomic_helper_wait_for_flip_done(dev, state); + + /* + * Now that the vblank has passed, we can go ahead and program the +@@ -14662,6 +14664,13 @@ static void quirk_increase_ddi_disabled_time(struct drm_device *dev) + DRM_INFO("Applying Increase DDI Disabled quirk\n"); + } + ++static void quirk_ignore_wait(struct drm_device *dev) ++{ ++ struct drm_i915_private *dev_priv = to_i915(dev); ++ dev_priv->quirks |= QUIRK_SKIP_WAITS; ++ DRM_INFO("Skipping wait for vblank and dependencies\n"); ++} ++ + struct intel_quirk { + int device; + int subsystem_vendor; +@@ -14704,6 +14713,9 @@ static struct intel_quirk intel_quirks[] = { + /* Sony Vaio Y cannot use SSC on LVDS */ + { 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable }, + ++ /* HP Compaq 8200 */ ++ { 0x0102, 0x103c, 0x1494, quirk_ignore_wait }, ++ + /* Acer Aspire 5734Z must invert backlight brightness */ + { 0x2a42, 0x1025, 0x0459, quirk_invert_brightness }, + +@@ -14762,6 +14774,7 @@ static void intel_init_quirks(struct drm_device *dev) + struct pci_dev *d = dev->pdev; + int i; + ++ DRM_INFO("iGPU: dev: %04x, subven: %04x, subdev: %04x\n", d->device, d->subsystem_vendor, d->subsystem_device); + for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) { + struct intel_quirk *q = &intel_quirks[i]; + |