drm/i915: enable semaphores on per-device defaults
This adds a default setting for semaphores parameter, and enables semaphores by default on IVB. For now, as semaphores interaction with VTd causes random issues on SNB, we do not enable them by default. But they can still be enabled via the semaphores=1 kernel parameter. v2: enables semaphores on SNB when IO remapping is disabled, with base on Keith Packard patch. CC: Daniel Vetter <daniel.vetter@ffwll.ch> CC: Ben Widawsky <ben@bwidawsk.net> CC: Keith Packard <keithp@keithp.com> CC: Jesse Barnes <jbarnes@virtuousgeek.org> CC: Chris Wilson <chris@chris-wilson.co.uk> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=42696 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=40564 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41353 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38862 Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
7317c75e66
commit
f45b55575c
3 changed files with 21 additions and 4 deletions
|
@ -58,10 +58,10 @@ module_param_named(powersave, i915_powersave, int, 0600);
|
||||||
MODULE_PARM_DESC(powersave,
|
MODULE_PARM_DESC(powersave,
|
||||||
"Enable powersavings, fbc, downclocking, etc. (default: true)");
|
"Enable powersavings, fbc, downclocking, etc. (default: true)");
|
||||||
|
|
||||||
unsigned int i915_semaphores __read_mostly = 0;
|
int i915_semaphores __read_mostly = -1;
|
||||||
module_param_named(semaphores, i915_semaphores, int, 0600);
|
module_param_named(semaphores, i915_semaphores, int, 0600);
|
||||||
MODULE_PARM_DESC(semaphores,
|
MODULE_PARM_DESC(semaphores,
|
||||||
"Use semaphores for inter-ring sync (default: false)");
|
"Use semaphores for inter-ring sync (default: -1 (use per-chip defaults))");
|
||||||
|
|
||||||
int i915_enable_rc6 __read_mostly = -1;
|
int i915_enable_rc6 __read_mostly = -1;
|
||||||
module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0600);
|
module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0600);
|
||||||
|
|
|
@ -1002,7 +1002,7 @@ extern int i915_max_ioctl;
|
||||||
extern unsigned int i915_fbpercrtc __always_unused;
|
extern unsigned int i915_fbpercrtc __always_unused;
|
||||||
extern int i915_panel_ignore_lid __read_mostly;
|
extern int i915_panel_ignore_lid __read_mostly;
|
||||||
extern unsigned int i915_powersave __read_mostly;
|
extern unsigned int i915_powersave __read_mostly;
|
||||||
extern unsigned int i915_semaphores __read_mostly;
|
extern int i915_semaphores __read_mostly;
|
||||||
extern unsigned int i915_lvds_downclock __read_mostly;
|
extern unsigned int i915_lvds_downclock __read_mostly;
|
||||||
extern int i915_panel_use_ssc __read_mostly;
|
extern int i915_panel_use_ssc __read_mostly;
|
||||||
extern int i915_vbt_sdvo_panel_type __read_mostly;
|
extern int i915_vbt_sdvo_panel_type __read_mostly;
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "i915_drv.h"
|
#include "i915_drv.h"
|
||||||
#include "i915_trace.h"
|
#include "i915_trace.h"
|
||||||
#include "intel_drv.h"
|
#include "intel_drv.h"
|
||||||
|
#include <linux/dma_remapping.h>
|
||||||
|
|
||||||
struct change_domains {
|
struct change_domains {
|
||||||
uint32_t invalidate_domains;
|
uint32_t invalidate_domains;
|
||||||
|
@ -746,6 +747,22 @@ i915_gem_execbuffer_flush(struct drm_device *dev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
intel_enable_semaphores(struct drm_device *dev)
|
||||||
|
{
|
||||||
|
if (INTEL_INFO(dev)->gen < 6)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (i915_semaphores >= 0)
|
||||||
|
return i915_semaphores;
|
||||||
|
|
||||||
|
/* Enable semaphores on SNB when IO remapping is off */
|
||||||
|
if (INTEL_INFO(dev)->gen == 6)
|
||||||
|
return !intel_iommu_enabled;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
i915_gem_execbuffer_sync_rings(struct drm_i915_gem_object *obj,
|
i915_gem_execbuffer_sync_rings(struct drm_i915_gem_object *obj,
|
||||||
struct intel_ring_buffer *to)
|
struct intel_ring_buffer *to)
|
||||||
|
@ -758,7 +775,7 @@ i915_gem_execbuffer_sync_rings(struct drm_i915_gem_object *obj,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* XXX gpu semaphores are implicated in various hard hangs on SNB */
|
/* XXX gpu semaphores are implicated in various hard hangs on SNB */
|
||||||
if (INTEL_INFO(obj->base.dev)->gen < 6 || !i915_semaphores)
|
if (!intel_enable_semaphores(obj->base.dev))
|
||||||
return i915_gem_object_wait_rendering(obj);
|
return i915_gem_object_wait_rendering(obj);
|
||||||
|
|
||||||
idx = intel_ring_sync_index(from, to);
|
idx = intel_ring_sync_index(from, to);
|
||||||
|
|
Loading…
Reference in a new issue