Commit c1a9f047 authored by Jesse Barnes's avatar Jesse Barnes Committed by Keith Packard

drm/i915: add fbc enable flag, but disable by default

FBC has too many corner cases that we don't currently deal with, so
disable it by default so we can enable more important features like RC6,
which conflicts in some configurations.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=31742Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
parent 8547920f
...@@ -1065,6 +1065,9 @@ static int i915_fbc_status(struct seq_file *m, void *unused) ...@@ -1065,6 +1065,9 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
case FBC_MULTIPLE_PIPES: case FBC_MULTIPLE_PIPES:
seq_printf(m, "multiple pipes are enabled"); seq_printf(m, "multiple pipes are enabled");
break; break;
case FBC_MODULE_PARAM:
seq_printf(m, "disabled per module param (default off)");
break;
default: default:
seq_printf(m, "unknown reason"); seq_printf(m, "unknown reason");
} }
......
...@@ -55,6 +55,9 @@ module_param_named(semaphores, i915_semaphores, int, 0600); ...@@ -55,6 +55,9 @@ module_param_named(semaphores, i915_semaphores, int, 0600);
unsigned int i915_enable_rc6 = 0; unsigned int i915_enable_rc6 = 0;
module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0600); module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0600);
unsigned int i915_enable_fbc = 0;
module_param_named(i915_enable_fbc, i915_enable_fbc, int, 0600);
unsigned int i915_lvds_downclock = 0; unsigned int i915_lvds_downclock = 0;
module_param_named(lvds_downclock, i915_lvds_downclock, int, 0400); module_param_named(lvds_downclock, i915_lvds_downclock, int, 0400);
...@@ -169,7 +172,7 @@ static const struct intel_device_info intel_ironlake_d_info = { ...@@ -169,7 +172,7 @@ static const struct intel_device_info intel_ironlake_d_info = {
static const struct intel_device_info intel_ironlake_m_info = { static const struct intel_device_info intel_ironlake_m_info = {
.gen = 5, .is_mobile = 1, .gen = 5, .is_mobile = 1,
.need_gfx_hws = 1, .has_hotplug = 1, .need_gfx_hws = 1, .has_hotplug = 1,
.has_fbc = 0, /* disabled due to buggy hardware */ .has_fbc = 1,
.has_bsd_ring = 1, .has_bsd_ring = 1,
}; };
......
...@@ -250,6 +250,7 @@ enum no_fbc_reason { ...@@ -250,6 +250,7 @@ enum no_fbc_reason {
FBC_BAD_PLANE, /* fbc not supported on plane */ FBC_BAD_PLANE, /* fbc not supported on plane */
FBC_NOT_TILED, /* buffer not tiled */ FBC_NOT_TILED, /* buffer not tiled */
FBC_MULTIPLE_PIPES, /* more than one pipe active */ FBC_MULTIPLE_PIPES, /* more than one pipe active */
FBC_MODULE_PARAM,
}; };
enum intel_pch { enum intel_pch {
...@@ -995,6 +996,7 @@ extern unsigned int i915_lvds_downclock; ...@@ -995,6 +996,7 @@ extern unsigned int i915_lvds_downclock;
extern unsigned int i915_panel_use_ssc; extern unsigned int i915_panel_use_ssc;
extern int i915_vbt_sdvo_panel_type; extern int i915_vbt_sdvo_panel_type;
extern unsigned int i915_enable_rc6; extern unsigned int i915_enable_rc6;
extern unsigned int i915_enable_fbc;
extern int i915_suspend(struct drm_device *dev, pm_message_t state); extern int i915_suspend(struct drm_device *dev, pm_message_t state);
extern int i915_resume(struct drm_device *dev); extern int i915_resume(struct drm_device *dev);
......
...@@ -1731,6 +1731,11 @@ static void intel_update_fbc(struct drm_device *dev) ...@@ -1731,6 +1731,11 @@ static void intel_update_fbc(struct drm_device *dev)
intel_fb = to_intel_framebuffer(fb); intel_fb = to_intel_framebuffer(fb);
obj = intel_fb->obj; obj = intel_fb->obj;
if (!i915_enable_fbc) {
DRM_DEBUG_KMS("fbc disabled per module param (default off)\n");
dev_priv->no_fbc_reason = FBC_MODULE_PARAM;
goto out_disable;
}
if (intel_fb->obj->base.size > dev_priv->cfb_size) { if (intel_fb->obj->base.size > dev_priv->cfb_size) {
DRM_DEBUG_KMS("framebuffer too large, disabling " DRM_DEBUG_KMS("framebuffer too large, disabling "
"compression\n"); "compression\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment