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
167167 value = i915.enable_hangcheck &&
168168 intel_has_gpu_reset(dev);
169169 break;
170+ case I915_PARAM_HAS_RESOURCE_STREAMER:
171+ value = HAS_RESOURCE_STREAMER(dev);
172+ break;
170173 default:
171174 DRM_DEBUG("Unknown parameter %d\n", param->param);
172175 return -EINVAL;
drivers/gpu/drm/i915/i915_drv.h+3−0
@@ -2539,6 +2539,9 @@ struct drm_i915_cmd_table { · 2538 unmodified lines
25392539
25402540 #define HAS_CSR(dev) (IS_SKYLAKE(dev))
25412541
2542+#define HAS_RESOURCE_STREAMER(dev) (IS_HASWELL(dev) || \
2543+ INTEL_INFO(dev)->gen >= 8)
2544+
25422545 #define INTEL_PCH_DEVICE_ID_MASK 0xff00
25432546 #define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
25442547 #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
14901490 return -EINVAL;
14911491 }
14921492
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+
14931507 intel_runtime_pm_get(dev_priv);
14941508
14951509 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
355355 #define I915_PARAM_SUBSLICE_TOTAL 33
356356 #define I915_PARAM_EU_TOTAL 34
357357 #define I915_PARAM_HAS_GPU_RESET 35
358+#define I915_PARAM_HAS_RESOURCE_STREAMER 36
358359
359360 typedef struct drm_i915_getparam {
360361 int param;
@@ -765,7 +766,12 @@ struct drm_i915_gem_execbuffer2 { · 404 unmodified lines
765766 #define I915_EXEC_BSD_RING1 (1<<13)
766767 #define I915_EXEC_BSD_RING2 (2<<13)
767768
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)
769775
770776 #define I915_EXEC_CONTEXT_ID_MASK (0xffffffff)
771777 #define i915_execbuffer2_set_context_id(eb2, context) \