1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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];
|