OSDN Git Service

drm/i915: Fix reason for per-chip disabling of FBC
authorDamien Lespiau <damien.lespiau@intel.com>
Mon, 24 Jun 2013 15:22:02 +0000 (16:22 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 1 Jul 2013 09:27:46 +0000 (11:27 +0200)
When running on my snb machine, recent kernels display successively:

[drm:intel_update_fbc], fbc set to per-chip default
[drm:intel_update_fbc], fbc disabled per module param

But no module param is set. This happens because the check for the
module parameter uses a variable that has been overridden inside the
"per-chip default" code.

Fix up the logic and add another reason for the FBC to the be disabled.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_debugfs.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/intel_pm.c

index 47d6c74..dca4982 100644 (file)
@@ -1518,6 +1518,9 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
                case FBC_MODULE_PARAM:
                        seq_printf(m, "disabled per module param (default off)");
                        break;
+               case FBC_CHIP_DEFAULT:
+                       seq_printf(m, "disabled per chip default");
+                       break;
                default:
                        seq_printf(m, "unknown reason");
                }
index cc1d605..59c45f2 100644 (file)
@@ -537,6 +537,7 @@ enum no_fbc_reason {
        FBC_NOT_TILED, /* buffer not tiled */
        FBC_MULTIPLE_PIPES, /* more than one pipe active */
        FBC_MODULE_PARAM,
+       FBC_CHIP_DEFAULT, /* disabled by default on this chip */
 };
 
 enum intel_pch {
index e0de8b3..adc7f3e 100644 (file)
@@ -447,7 +447,6 @@ void intel_update_fbc(struct drm_device *dev)
        struct drm_framebuffer *fb;
        struct intel_framebuffer *intel_fb;
        struct drm_i915_gem_object *obj;
-       int enable_fbc;
        unsigned int max_hdisplay, max_vdisplay;
 
        if (!i915_powersave)
@@ -488,14 +487,13 @@ void intel_update_fbc(struct drm_device *dev)
        intel_fb = to_intel_framebuffer(fb);
        obj = intel_fb->obj;
 
-       enable_fbc = i915_enable_fbc;
-       if (enable_fbc < 0) {
-               DRM_DEBUG_KMS("fbc set to per-chip default\n");
-               enable_fbc = 1;
-               if (INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev))
-                       enable_fbc = 0;
+       if (i915_enable_fbc < 0 &&
+           INTEL_INFO(dev)->gen <= 7 && !IS_HASWELL(dev)) {
+               DRM_DEBUG_KMS("disabled per chip default\n");
+               dev_priv->no_fbc_reason = FBC_CHIP_DEFAULT;
+               goto out_disable;
        }
-       if (!enable_fbc) {
+       if (!i915_enable_fbc) {
                DRM_DEBUG_KMS("fbc disabled per module param\n");
                dev_priv->no_fbc_reason = FBC_MODULE_PARAM;
                goto out_disable;