Commit 127f1003 authored by Oscar Mateo's avatar Oscar Mateo Committed by Daniel Vetter

drm/i915/bdw: Macro for LRCs and module option for Execlists

GEN8 brings an expansion of the HW contexts: "Logical Ring Contexts".
These expanded contexts enable a number of new abilities, especially
"Execlists".

The macro is defined to off until we have things in place to hope to
work.

v2: Rename "advanced contexts" to the more correct "logical ring
contexts".

v3: Add a module parameter to enable execlists. Execlist are relatively
new, and so it'd be wise to be able to switch back to ring submission
to debug subtle problems that will inevitably arise.

v4: Add an intel_enable_execlists function.

v5: Sanitize early, as suggested by Daniel. Remove lrc_enabled.

Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v1)
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> (v3)
Signed-off-by: Oscar Mateo <oscar.mateo@intel.com> (v2, v4 & v5)
Reviewed-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent b20385f1
...@@ -2062,6 +2062,7 @@ struct drm_i915_cmd_table { ...@@ -2062,6 +2062,7 @@ struct drm_i915_cmd_table {
#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws) #define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
#define HAS_HW_CONTEXTS(dev) (INTEL_INFO(dev)->gen >= 6) #define HAS_HW_CONTEXTS(dev) (INTEL_INFO(dev)->gen >= 6)
#define HAS_LOGICAL_RING_CONTEXTS(dev) 0
#define HAS_ALIASING_PPGTT(dev) (INTEL_INFO(dev)->gen >= 6) #define HAS_ALIASING_PPGTT(dev) (INTEL_INFO(dev)->gen >= 6)
#define HAS_PPGTT(dev) (INTEL_INFO(dev)->gen >= 7 && !IS_GEN8(dev)) #define HAS_PPGTT(dev) (INTEL_INFO(dev)->gen >= 7 && !IS_GEN8(dev))
#define USES_PPGTT(dev) (i915.enable_ppgtt) #define USES_PPGTT(dev) (i915.enable_ppgtt)
...@@ -2149,6 +2150,7 @@ struct i915_params { ...@@ -2149,6 +2150,7 @@ struct i915_params {
int enable_rc6; int enable_rc6;
int enable_fbc; int enable_fbc;
int enable_ppgtt; int enable_ppgtt;
int enable_execlists;
int enable_psr; int enable_psr;
unsigned int preliminary_hw_support; unsigned int preliminary_hw_support;
int disable_power_well; int disable_power_well;
......
...@@ -4723,6 +4723,9 @@ int i915_gem_init(struct drm_device *dev) ...@@ -4723,6 +4723,9 @@ int i915_gem_init(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
int ret; int ret;
i915.enable_execlists = intel_sanitize_enable_execlists(dev,
i915.enable_execlists);
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
if (IS_VALLEYVIEW(dev)) { if (IS_VALLEYVIEW(dev)) {
......
...@@ -35,6 +35,7 @@ struct i915_params i915 __read_mostly = { ...@@ -35,6 +35,7 @@ struct i915_params i915 __read_mostly = {
.vbt_sdvo_panel_type = -1, .vbt_sdvo_panel_type = -1,
.enable_rc6 = -1, .enable_rc6 = -1,
.enable_fbc = -1, .enable_fbc = -1,
.enable_execlists = -1,
.enable_hangcheck = true, .enable_hangcheck = true,
.enable_ppgtt = -1, .enable_ppgtt = -1,
.enable_psr = 1, .enable_psr = 1,
...@@ -118,6 +119,11 @@ MODULE_PARM_DESC(enable_ppgtt, ...@@ -118,6 +119,11 @@ MODULE_PARM_DESC(enable_ppgtt,
"Override PPGTT usage. " "Override PPGTT usage. "
"(-1=auto [default], 0=disabled, 1=aliasing, 2=full)"); "(-1=auto [default], 0=disabled, 1=aliasing, 2=full)");
module_param_named(enable_execlists, i915.enable_execlists, int, 0400);
MODULE_PARM_DESC(enable_execlists,
"Override execlists usage. "
"(-1=auto [default], 0=disabled, 1=enabled)");
module_param_named(enable_psr, i915.enable_psr, int, 0600); module_param_named(enable_psr, i915.enable_psr, int, 0600);
MODULE_PARM_DESC(enable_psr, "Enable PSR (default: true)"); MODULE_PARM_DESC(enable_psr, "Enable PSR (default: true)");
......
...@@ -40,3 +40,14 @@ ...@@ -40,3 +40,14 @@
#include <drm/drmP.h> #include <drm/drmP.h>
#include <drm/i915_drm.h> #include <drm/i915_drm.h>
#include "i915_drv.h" #include "i915_drv.h"
int intel_sanitize_enable_execlists(struct drm_device *dev, int enable_execlists)
{
if (enable_execlists == 0)
return 0;
if (HAS_LOGICAL_RING_CONTEXTS(dev) && USES_PPGTT(dev))
return 1;
return 0;
}
...@@ -24,4 +24,7 @@ ...@@ -24,4 +24,7 @@
#ifndef _INTEL_LRC_H_ #ifndef _INTEL_LRC_H_
#define _INTEL_LRC_H_ #define _INTEL_LRC_H_
/* Execlists */
int intel_sanitize_enable_execlists(struct drm_device *dev, int enable_execlists);
#endif /* _INTEL_LRC_H_ */ #endif /* _INTEL_LRC_H_ */
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