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 | 167 | value = i915.enable_hangcheck && |
| 168 | 168 | intel_has_gpu_reset(dev); |
| 169 | 169 | break; |
| 170 | + case I915_PARAM_HAS_RESOURCE_STREAMER: | |
| 171 | + value = HAS_RESOURCE_STREAMER(dev); | |
| 172 | + break; | |
| 170 | 173 | default: |
| 171 | 174 | DRM_DEBUG("Unknown parameter %d\n", param->param); |
| 172 | 175 | return -EINVAL; |
| @@ -2539,6 +2539,9 @@ struct drm_i915_cmd_table { · 2538 unmodified lines | ||
| 2539 | 2539 | |
| 2540 | 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 | 2545 | #define INTEL_PCH_DEVICE_ID_MASK 0xff00 |
| 2543 | 2546 | #define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00 |
| 2544 | 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 | 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 | 1507 | intel_runtime_pm_get(dev_priv); |
| 1494 | 1508 | |
| 1495 | 1509 | ret = i915_mutex_lock_interruptible(dev); |
| @@ -355,6 +355,7 @@ typedef struct drm_i915_irq_wait { · 354 unmodified lines | ||
| 355 | 355 | #define I915_PARAM_SUBSLICE_TOTAL 33 |
| 356 | 356 | #define I915_PARAM_EU_TOTAL 34 |
| 357 | 357 | #define I915_PARAM_HAS_GPU_RESET 35 |
| 358 | +#define I915_PARAM_HAS_RESOURCE_STREAMER 36 | |
| 358 | 359 | |
| 359 | 360 | typedef struct drm_i915_getparam { |
| 360 | 361 | int param; |
| @@ -765,7 +766,12 @@ struct drm_i915_gem_execbuffer2 { · 404 unmodified lines | ||
| 765 | 766 | #define I915_EXEC_BSD_RING1 (1<<13) |
| 766 | 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 | 776 | #define I915_EXEC_CONTEXT_ID_MASK (0xffffffff) |
| 771 | 777 | #define i915_execbuffer2_set_context_id(eb2, context) \ |