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)
Unified · Split
| @@ -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; |
| @@ -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 0xff00 | 2545 | #define INTEL_PCH_DEVICE_ID_MASK 0xff00 |
| 2543 | #define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00 | 2546 | #define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00 |
| 2544 | #define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00 | 2547 | #define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00 |
| @@ -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); |
| @@ -355,6 +355,7 @@ typedef struct drm_i915_irq_wait { · 354 unmodified lines | |||
| 355 | #define I915_PARAM_SUBSLICE_TOTAL 33 | 355 | #define I915_PARAM_SUBSLICE_TOTAL 33 |
| 356 | #define I915_PARAM_EU_TOTAL 34 | 356 | #define I915_PARAM_EU_TOTAL 34 |
| 357 | #define I915_PARAM_HAS_GPU_RESET 35 | 357 | #define I915_PARAM_HAS_GPU_RESET 35 |
| 358 | #define I915_PARAM_HAS_RESOURCE_STREAMER 36 | ||
| 358 | 359 | ||
| 359 | typedef struct drm_i915_getparam { | 360 | typedef 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) \ |