From fb2c816401c55c6a4cc643f75d29dae9672b57d1 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 4 Apr 2012 14:27:30 -0700 Subject: [PATCH] 3.3-stable patches added patches: drm-i915-add-lock-on-drm_helper_resume_force_mode.patch drm-i915-no-lvds-quirk-on-msi-dc500.patch drm-i915-quirk-away-broken-opregion-vbt.patch drm-i915-sanitize-bios-debugging-bits-from-pipeconf.patch drm-i915-treat-src-w-h-as-fixed-point-in-sprite-handling-code.patch --- ...lock-on-drm_helper_resume_force_mode.patch | 35 ++++++++++ .../drm-i915-no-lvds-quirk-on-msi-dc500.patch | 38 ++++++++++ ...-i915-quirk-away-broken-opregion-vbt.patch | 69 +++++++++++++++++++ ...ze-bios-debugging-bits-from-pipeconf.patch | 58 ++++++++++++++++ ...-fixed-point-in-sprite-handling-code.patch | 32 +++++++++ queue-3.3/series | 5 ++ 6 files changed, 237 insertions(+) create mode 100644 queue-3.3/drm-i915-add-lock-on-drm_helper_resume_force_mode.patch create mode 100644 queue-3.3/drm-i915-no-lvds-quirk-on-msi-dc500.patch create mode 100644 queue-3.3/drm-i915-quirk-away-broken-opregion-vbt.patch create mode 100644 queue-3.3/drm-i915-sanitize-bios-debugging-bits-from-pipeconf.patch create mode 100644 queue-3.3/drm-i915-treat-src-w-h-as-fixed-point-in-sprite-handling-code.patch diff --git a/queue-3.3/drm-i915-add-lock-on-drm_helper_resume_force_mode.patch b/queue-3.3/drm-i915-add-lock-on-drm_helper_resume_force_mode.patch new file mode 100644 index 00000000000..58ebc3122ad --- /dev/null +++ b/queue-3.3/drm-i915-add-lock-on-drm_helper_resume_force_mode.patch @@ -0,0 +1,35 @@ +From 927a2f119e8235238a2fc64871051b16c9bdae75 Mon Sep 17 00:00:00 2001 +From: Sean Paul +Date: Fri, 23 Mar 2012 08:52:58 -0400 +Subject: drm/i915: Add lock on drm_helper_resume_force_mode + +From: Sean Paul + +commit 927a2f119e8235238a2fc64871051b16c9bdae75 upstream. + +i915_drm_thaw was not locking the mode_config lock when calling +drm_helper_resume_force_mode. When there were multiple wake sources, +this caused FDI training failure on SNB which in turn corrupted the +display. + +Signed-off-by: Sean Paul +Reviewed-by: Chris Wilson +Signed-Off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_drv.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/gpu/drm/i915/i915_drv.c ++++ b/drivers/gpu/drm/i915/i915_drv.c +@@ -508,7 +508,9 @@ static int i915_drm_thaw(struct drm_devi + drm_irq_install(dev); + + /* Resume the modeset for every activated CRTC */ ++ mutex_lock(&dev->mode_config.mutex); + drm_helper_resume_force_mode(dev); ++ mutex_unlock(&dev->mode_config.mutex); + + if (IS_IRONLAKE_M(dev)) + ironlake_enable_rc6(dev); diff --git a/queue-3.3/drm-i915-no-lvds-quirk-on-msi-dc500.patch b/queue-3.3/drm-i915-no-lvds-quirk-on-msi-dc500.patch new file mode 100644 index 00000000000..2a73d542b9d --- /dev/null +++ b/queue-3.3/drm-i915-no-lvds-quirk-on-msi-dc500.patch @@ -0,0 +1,38 @@ +From 97effadb65ed08809e1720c8d3ee80b73a93665c Mon Sep 17 00:00:00 2001 +From: Anisse Astier +Date: Wed, 7 Mar 2012 18:36:35 +0100 +Subject: drm/i915: no-lvds quirk on MSI DC500 + +From: Anisse Astier + +commit 97effadb65ed08809e1720c8d3ee80b73a93665c upstream. + +This hardware doesn't have an LVDS, it's a desktop box. Fix incorrect +LVDS detection. + +Signed-off-by: Anisse Astier +Acked-by: Chris Wilson +Signed-off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_lvds.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/gpu/drm/i915/intel_lvds.c ++++ b/drivers/gpu/drm/i915/intel_lvds.c +@@ -739,6 +739,14 @@ static const struct dmi_system_id intel_ + DMI_MATCH(DMI_BOARD_NAME, "AT5NM10T-I"), + }, + }, ++ { ++ .callback = intel_no_lvds_dmi_callback, ++ .ident = "MSI Wind Box DC500", ++ .matches = { ++ DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), ++ DMI_MATCH(DMI_BOARD_NAME, "MS-7469"), ++ }, ++ }, + + { } /* terminating entry */ + }; diff --git a/queue-3.3/drm-i915-quirk-away-broken-opregion-vbt.patch b/queue-3.3/drm-i915-quirk-away-broken-opregion-vbt.patch new file mode 100644 index 00000000000..aa069347063 --- /dev/null +++ b/queue-3.3/drm-i915-quirk-away-broken-opregion-vbt.patch @@ -0,0 +1,69 @@ +From 25e341cfc33d94435472983825163e97fe370a6c Mon Sep 17 00:00:00 2001 +From: Daniel Vetter +Date: Sat, 24 Mar 2012 23:51:30 +0100 +Subject: drm/i915: quirk away broken OpRegion VBT + +From: Daniel Vetter + +commit 25e341cfc33d94435472983825163e97fe370a6c upstream. + +Somehow the BIOS manages to screw things up when copying the VBT +around, because the one we scrap from the VBIOS rom actually works. + +Tested-by: Markus Heinz +Acked-by: Chris Wilson +Reviewed-by: Rodrigo Vivi +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=28812 +Signed-Off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_bios.c | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/i915/intel_bios.c ++++ b/drivers/gpu/drm/i915/intel_bios.c +@@ -24,6 +24,7 @@ + * Eric Anholt + * + */ ++#include + #include + #include "drmP.h" + #include "drm.h" +@@ -621,6 +622,26 @@ init_vbt_defaults(struct drm_i915_privat + dev_priv->edp.bpp = 18; + } + ++static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id) ++{ ++ DRM_DEBUG_KMS("Falling back to manually reading VBT from " ++ "VBIOS ROM for %s\n", ++ id->ident); ++ return 1; ++} ++ ++static const struct dmi_system_id intel_no_opregion_vbt[] = { ++ { ++ .callback = intel_no_opregion_vbt_callback, ++ .ident = "ThinkCentre A57", ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), ++ DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"), ++ }, ++ }, ++ { } ++}; ++ + /** + * intel_parse_bios - find VBT and initialize settings from the BIOS + * @dev: DRM device +@@ -641,7 +662,7 @@ intel_parse_bios(struct drm_device *dev) + init_vbt_defaults(dev_priv); + + /* XXX Should this validation be moved to intel_opregion.c? */ +- if (dev_priv->opregion.vbt) { ++ if (!dmi_check_system(intel_no_opregion_vbt) && dev_priv->opregion.vbt) { + struct vbt_header *vbt = dev_priv->opregion.vbt; + if (memcmp(vbt->signature, "$VBT", 4) == 0) { + DRM_DEBUG_KMS("Using VBT from OpRegion: %20s\n", diff --git a/queue-3.3/drm-i915-sanitize-bios-debugging-bits-from-pipeconf.patch b/queue-3.3/drm-i915-sanitize-bios-debugging-bits-from-pipeconf.patch new file mode 100644 index 00000000000..6bcdbe9d8c0 --- /dev/null +++ b/queue-3.3/drm-i915-sanitize-bios-debugging-bits-from-pipeconf.patch @@ -0,0 +1,58 @@ +From f47166d2b0001fcb752b40c5a2d4db986dfbea68 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 22 Mar 2012 15:00:50 +0000 +Subject: drm/i915: Sanitize BIOS debugging bits from PIPECONF + +From: Chris Wilson + +commit f47166d2b0001fcb752b40c5a2d4db986dfbea68 upstream. + +Quoting the BSpec from time immemorial: + + PIPEACONF, bits 28:27: Frame Start Delay (Debug) + + Used to delay the frame start signal that is sent to the display planes. + Care must be taken to insure that there are enough lines during VBLANK + to support this setting. + +An instance of the BIOS leaving these bits set was found in the wild, +where it caused our modesetting to go all squiffy and skewiff. + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47271 +Reported-and-tested-by: Eva Wang +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=43012 +Reported-and-tested-by: Carl Richell +Signed-off-by: Chris Wilson +Signed-off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_reg.h | 1 + + drivers/gpu/drm/i915/intel_display.c | 6 ++++++ + 2 files changed, 7 insertions(+) + +--- a/drivers/gpu/drm/i915/i915_reg.h ++++ b/drivers/gpu/drm/i915/i915_reg.h +@@ -2313,6 +2313,7 @@ + #define PIPECONF_DISABLE 0 + #define PIPECONF_DOUBLE_WIDE (1<<30) + #define I965_PIPECONF_ACTIVE (1<<30) ++#define PIPECONF_FRAME_START_DELAY_MASK (3<<27) + #define PIPECONF_SINGLE_WIDE 0 + #define PIPECONF_PIPE_UNLOCKED 0 + #define PIPECONF_PIPE_LOCKED (1<<25) +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -7497,6 +7497,12 @@ static void intel_sanitize_modesetting(s + struct drm_i915_private *dev_priv = dev->dev_private; + u32 reg, val; + ++ /* Clear any frame start delays used for debugging left by the BIOS */ ++ for_each_pipe(pipe) { ++ reg = PIPECONF(pipe); ++ I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK); ++ } ++ + if (HAS_PCH_SPLIT(dev)) + return; + diff --git a/queue-3.3/drm-i915-treat-src-w-h-as-fixed-point-in-sprite-handling-code.patch b/queue-3.3/drm-i915-treat-src-w-h-as-fixed-point-in-sprite-handling-code.patch new file mode 100644 index 00000000000..ec03190d1e2 --- /dev/null +++ b/queue-3.3/drm-i915-treat-src-w-h-as-fixed-point-in-sprite-handling-code.patch @@ -0,0 +1,32 @@ +From b4db1e35ac59c144965f517bc575a0d75b60b03f Mon Sep 17 00:00:00 2001 +From: Jesse Barnes +Date: Tue, 20 Mar 2012 10:59:09 -0700 +Subject: drm/i915: treat src w & h as fixed point in sprite handling code + +From: Jesse Barnes + +commit b4db1e35ac59c144965f517bc575a0d75b60b03f upstream. + +This was missed when we converted the source values to 16.16 fixed point. + +Signed-off-by: Jesse Barnes +Tested-by: Chris Wilson +Signed-off-by: Daniel Vetter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_sprite.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/gpu/drm/i915/intel_sprite.c ++++ b/drivers/gpu/drm/i915/intel_sprite.c +@@ -411,6 +411,9 @@ intel_update_plane(struct drm_plane *pla + + old_obj = intel_plane->obj; + ++ src_w = src_w >> 16; ++ src_h = src_h >> 16; ++ + /* Pipe must be running... */ + if (!(I915_READ(PIPECONF(pipe)) & PIPECONF_ENABLE)) + return -EINVAL; diff --git a/queue-3.3/series b/queue-3.3/series index 4acc679b6bc..c3dac49bea0 100644 --- a/queue-3.3/series +++ b/queue-3.3/series @@ -31,3 +31,8 @@ rtlwifi-rtl8192ce-rtl8192cu-rtl8192de-fix-low-gain-setting-when-scanning.patch ath9k-fix-max-noise-floor-threshold.patch drm-validate-requested-virtual-size-against-allocated-fb-size.patch drm-radeon-kms-fix-fans-after-resume.patch +drm-i915-no-lvds-quirk-on-msi-dc500.patch +drm-i915-treat-src-w-h-as-fixed-point-in-sprite-handling-code.patch +drm-i915-sanitize-bios-debugging-bits-from-pipeconf.patch +drm-i915-add-lock-on-drm_helper_resume_force_mode.patch +drm-i915-quirk-away-broken-opregion-vbt.patch -- 2.47.3