History

drm/i915: Expose I915_EXEC_RESOURCE_STREAMER flag and getparam

Ensures that the batch buffer is executed by the resource streamer. And will let userspace know whether Resource Streamer is supported in the kernel. v2: Don't skip 1<<15 for the exec flags (Jani Nikula) v3: Use HAS_RESOURCE_STREAMER macro for execbuf validation (Chris Wilson) (from getparam patch) v2: Update I915_PARAM_HAS_RESOURCE_STREAMER so it's after I915_PARAM_HAS_GPU_RESET. v3: Only advertise RS support for hardware that supports it. v4: Add HAS_RESOURCE_STREAMER() macro (Chris)

Abdiel Janulgue committed 11 years ago

Commit a9ed33c1 parent 69225284 files · +27 −1Browse files

Unified · Split

4 files
  1. drivers/gpu/drm/i915/i915_dma.c +3 −0
  2. drivers/gpu/drm/i915/i915_drv.h +3 −0
  3. drivers/gpu/drm/i915/i915_gem_execbuffer.c +14 −0
  4. include/uapi/drm/i915_drm.h +7 −1
drivers/gpu/drm/i915/i915_dma.c+3−0
@@ -167,6 +167,9 @@ static int i915_getparam(struct drm_device *dev, void *data, · 166 unmodified lines
167 value = i915.enable_hangcheck &&167 value = i915.enable_hangcheck &&
168 intel_has_gpu_reset(dev);168 intel_has_gpu_reset(dev);
169 break;169 break;
170 case I915_PARAM_HAS_RESOURCE_STREAMER:
171 value = HAS_RESOURCE_STREAMER(dev);
172 break;
170 default:173 default:
171 DRM_DEBUG("Unknown parameter %d\n", param->param);174 DRM_DEBUG("Unknown parameter %d\n", param->param);
172 return -EINVAL;175 return -EINVAL;
drivers/gpu/drm/i915/i915_drv.h+3−0
@@ -2539,6 +2539,9 @@ struct drm_i915_cmd_table { · 2538 unmodified lines
2539 2539
2540#define HAS_CSR(dev) (IS_SKYLAKE(dev))2540#define HAS_CSR(dev) (IS_SKYLAKE(dev))
2541 2541
2542#define HAS_RESOURCE_STREAMER(dev) (IS_HASWELL(dev) || \
2543 INTEL_INFO(dev)->gen >= 8)
2544
2542#define INTEL_PCH_DEVICE_ID_MASK 0xff002545#define INTEL_PCH_DEVICE_ID_MASK 0xff00
2543#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b002546#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
2544#define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c002547#define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00
drivers/gpu/drm/i915/i915_gem_execbuffer.c+14−0
@@ -1490,6 +1490,20 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, · 1489 unmodified lines
1490 return -EINVAL;1490 return -EINVAL;
1491 }1491 }
1492 1492
1493 if (args->flags & I915_EXEC_RESOURCE_STREAMER) {
1494 if (!HAS_RESOURCE_STREAMER(dev)) {
1495 DRM_DEBUG("RS is only allowed for Haswell, Gen8 and above\n");
1496 return -EINVAL;
1497 }
1498 if (ring->id != RCS) {
1499 DRM_DEBUG("RS is not available on %s\n",
1500 ring->name);
1501 return -EINVAL;
1502 }
1503
1504 dispatch_flags |= I915_DISPATCH_RS;
1505 }
1506
1493 intel_runtime_pm_get(dev_priv);1507 intel_runtime_pm_get(dev_priv);
1494 1508
1495 ret = i915_mutex_lock_interruptible(dev);1509 ret = i915_mutex_lock_interruptible(dev);
include/uapi/drm/i915_drm.h+7−1
@@ -355,6 +355,7 @@ typedef struct drm_i915_irq_wait { · 354 unmodified lines
355#define I915_PARAM_SUBSLICE_TOTAL 33355#define I915_PARAM_SUBSLICE_TOTAL 33
356#define I915_PARAM_EU_TOTAL 34356#define I915_PARAM_EU_TOTAL 34
357#define I915_PARAM_HAS_GPU_RESET 35357#define I915_PARAM_HAS_GPU_RESET 35
358#define I915_PARAM_HAS_RESOURCE_STREAMER 36
358 359
359typedef struct drm_i915_getparam {360typedef struct drm_i915_getparam {
360 int param;361 int param;
@@ -765,7 +766,12 @@ struct drm_i915_gem_execbuffer2 { · 404 unmodified lines
765#define I915_EXEC_BSD_RING1 (1<<13)766#define I915_EXEC_BSD_RING1 (1<<13)
766#define I915_EXEC_BSD_RING2 (2<<13)767#define I915_EXEC_BSD_RING2 (2<<13)
767 768
768#define __I915_EXEC_UNKNOWN_FLAGS -(1<<15)769/** Tell the kernel that the batchbuffer is processed by
770 * the resource streamer.
771 */
772#define I915_EXEC_RESOURCE_STREAMER (1<<15)
773
774#define __I915_EXEC_UNKNOWN_FLAGS -(I915_EXEC_RESOURCE_STREAMER<<1)
769 775
770#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)776#define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)
771#define i915_execbuffer2_set_context_id(eb2, context) \777#define i915_execbuffer2_set_context_id(eb2, context) \