drm/i915: Record logical context support in driver caps
Avoid looking at the magical engines[RCS] to decide if the HW and driver supports logical contexts, and instead record that knowledge during initialisation. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Matthew Auld <matthew.auld@intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180706101442.21279-1-chris@chris-wilson.co.uk
This commit is contained in:
Родитель
b79ebe74e1
Коммит
481827b441
|
@ -2306,6 +2306,7 @@ intel_info(const struct drm_i915_private *dev_priv)
|
|||
}
|
||||
|
||||
#define INTEL_INFO(dev_priv) intel_info((dev_priv))
|
||||
#define DRIVER_CAPS(dev_priv) (&(dev_priv)->caps)
|
||||
|
||||
#define INTEL_GEN(dev_priv) ((dev_priv)->info.gen)
|
||||
#define INTEL_DEVID(dev_priv) ((dev_priv)->info.device_id)
|
||||
|
|
|
@ -512,8 +512,8 @@ int i915_gem_contexts_init(struct drm_i915_private *dev_priv)
|
|||
}
|
||||
|
||||
DRM_DEBUG_DRIVER("%s context support initialized\n",
|
||||
dev_priv->engine[RCS]->context_size ? "logical" :
|
||||
"fake");
|
||||
DRIVER_CAPS(dev_priv)->has_logical_contexts ?
|
||||
"logical" : "fake");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -720,7 +720,7 @@ int i915_gem_context_create_ioctl(struct drm_device *dev, void *data,
|
|||
struct i915_gem_context *ctx;
|
||||
int ret;
|
||||
|
||||
if (!dev_priv->engine[RCS]->context_size)
|
||||
if (!DRIVER_CAPS(dev_priv)->has_logical_contexts)
|
||||
return -ENODEV;
|
||||
|
||||
if (args->pad != 0)
|
||||
|
|
|
@ -858,6 +858,8 @@ void intel_device_info_runtime_init(struct intel_device_info *info)
|
|||
void intel_driver_caps_print(const struct intel_driver_caps *caps,
|
||||
struct drm_printer *p)
|
||||
{
|
||||
drm_printf(p, "Has logical contexts? %s\n",
|
||||
yesno(caps->has_logical_contexts));
|
||||
drm_printf(p, "scheduler: %x\n", caps->scheduler);
|
||||
}
|
||||
|
||||
|
|
|
@ -186,6 +186,7 @@ struct intel_device_info {
|
|||
|
||||
struct intel_driver_caps {
|
||||
unsigned int scheduler;
|
||||
bool has_logical_contexts:1;
|
||||
};
|
||||
|
||||
static inline unsigned int sseu_subslice_total(const struct sseu_dev_info *sseu)
|
||||
|
|
|
@ -302,6 +302,8 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
|
|||
engine->class);
|
||||
if (WARN_ON(engine->context_size > BIT(20)))
|
||||
engine->context_size = 0;
|
||||
if (engine->context_size)
|
||||
DRIVER_CAPS(dev_priv)->has_logical_contexts = true;
|
||||
|
||||
/* Nothing to do here, execute in order of dependencies */
|
||||
engine->schedule = NULL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче