summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhao, Yakui <yakui.zhao@intel.com>2014-11-17 12:44:19 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2014-12-14 00:42:17 +0800
commit702050f04131a44ef8ac16651708ce8a8d98e4b8 (patch)
treecffcd6a6db8cc5c60cea6fd7bb0b25d46d895ad1
parenta05772e805a52fbfbe6f28bf369d7760a87e0eed (diff)
downloadlibva-intel-driver-702050f04131a44ef8ac16651708ce8a8d98e4b8.tar.gz
Allow the batchbuffer to be submitted with override flag
Some machines have two BSD video rings. Sometimes the user-space application want to specify which BSD ring is to dispatch the video command. In such case the override flag is needed so that the kernel can handle it. Reviewed-by: Xiang Haihao <haihao.xiang@intel.com> Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> (cherry picked from commit a213c724a013412357c355bfb10e472ea4d89d73)
-rw-r--r--src/intel_batchbuffer.c24
-rw-r--r--src/intel_batchbuffer.h8
2 files changed, 32 insertions, 0 deletions
diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c
index fd84fe0d..60178c66 100644
--- a/src/intel_batchbuffer.c
+++ b/src/intel_batchbuffer.c
@@ -34,6 +34,11 @@
#define MAX_BATCH_SIZE 0x400000
+#define LOCAL_I915_EXEC_BSD_MASK (3<<13)
+#define LOCAL_I915_EXEC_BSD_DEFAULT (0<<13) /* default ping-pong mode */
+#define LOCAL_I915_EXEC_BSD_RING0 (1<<13)
+#define LOCAL_I915_EXEC_BSD_RING1 (2<<13)
+
static void
intel_batchbuffer_reset(struct intel_batchbuffer *batch, int buffer_size)
{
@@ -370,6 +375,25 @@ intel_batchbuffer_start_atomic_veb(struct intel_batchbuffer *batch, unsigned int
intel_batchbuffer_start_atomic_helper(batch, I915_EXEC_VEBOX, size);
}
+void intel_batchbuffer_start_atomic_bcs_override(struct intel_batchbuffer *batch, unsigned int size,
+ bsd_ring_flag override_flag)
+{
+ uint32_t ring_flag;
+
+ switch(override_flag) {
+ case BSD_RING0:
+ ring_flag = I915_EXEC_BSD + LOCAL_I915_EXEC_BSD_RING0;
+ break;
+ case BSD_RING1:
+ ring_flag = I915_EXEC_BSD + LOCAL_I915_EXEC_BSD_RING1;
+ break;
+ default:
+ ring_flag = I915_EXEC_BSD + LOCAL_I915_EXEC_BSD_DEFAULT;
+ break;
+ }
+ intel_batchbuffer_start_atomic_helper(batch, ring_flag, size);
+}
+
void
intel_batchbuffer_end_atomic(struct intel_batchbuffer *batch)
diff --git a/src/intel_batchbuffer.h b/src/intel_batchbuffer.h
index e4d0994b..41d359db 100644
--- a/src/intel_batchbuffer.h
+++ b/src/intel_batchbuffer.h
@@ -51,6 +51,14 @@ int intel_batchbuffer_check_free_space(struct intel_batchbuffer *batch, int size
int intel_batchbuffer_used_size(struct intel_batchbuffer *batch);
void intel_batchbuffer_align(struct intel_batchbuffer *batch, unsigned int alignedment);
+typedef enum {
+ BSD_DEFAULT,
+ BSD_RING0,
+ BSD_RING1,
+} bsd_ring_flag;
+
+void intel_batchbuffer_start_atomic_bcs_override(struct intel_batchbuffer *batch, unsigned int size,
+ bsd_ring_flag override_flag);
#define __BEGIN_BATCH(batch, n, f) do { \
assert(f == (batch->flag & I915_EXEC_RING_MASK)); \