diff options
author | John Harrison <John.C.Harrison@Intel.com> | 2015-05-29 12:44:05 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-06-23 08:02:27 -0400 |
commit | f71696876a16c3d68d27db71d93f389ae440171c (patch) | |
tree | c7c324a490249ea68294427df23eb73ea6290570 | |
parent | 599d924c6b01e89b53c7879e7d7d89baa8d677d2 (diff) |
drm/i915: Update ring->signal() to take a request structure
Updated the various ring->signal() implementations to take a request instead of
a ring. This removes their reliance on the OLR to obtain the seqno value that
should be used for the signal.
For: VIZ-5115
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Tomas Elf <tomas.elf@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.h | 2 |
2 files changed, 11 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index eb436a03fae9..e6ef8d796311 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
@@ -1171,10 +1171,11 @@ static void render_ring_cleanup(struct intel_engine_cs *ring) | |||
1171 | intel_fini_pipe_control(ring); | 1171 | intel_fini_pipe_control(ring); |
1172 | } | 1172 | } |
1173 | 1173 | ||
1174 | static int gen8_rcs_signal(struct intel_engine_cs *signaller, | 1174 | static int gen8_rcs_signal(struct drm_i915_gem_request *signaller_req, |
1175 | unsigned int num_dwords) | 1175 | unsigned int num_dwords) |
1176 | { | 1176 | { |
1177 | #define MBOX_UPDATE_DWORDS 8 | 1177 | #define MBOX_UPDATE_DWORDS 8 |
1178 | struct intel_engine_cs *signaller = signaller_req->ring; | ||
1178 | struct drm_device *dev = signaller->dev; | 1179 | struct drm_device *dev = signaller->dev; |
1179 | struct drm_i915_private *dev_priv = dev->dev_private; | 1180 | struct drm_i915_private *dev_priv = dev->dev_private; |
1180 | struct intel_engine_cs *waiter; | 1181 | struct intel_engine_cs *waiter; |
@@ -1194,8 +1195,7 @@ static int gen8_rcs_signal(struct intel_engine_cs *signaller, | |||
1194 | if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID) | 1195 | if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID) |
1195 | continue; | 1196 | continue; |
1196 | 1197 | ||
1197 | seqno = i915_gem_request_get_seqno( | 1198 | seqno = i915_gem_request_get_seqno(signaller_req); |
1198 | signaller->outstanding_lazy_request); | ||
1199 | intel_ring_emit(signaller, GFX_OP_PIPE_CONTROL(6)); | 1199 | intel_ring_emit(signaller, GFX_OP_PIPE_CONTROL(6)); |
1200 | intel_ring_emit(signaller, PIPE_CONTROL_GLOBAL_GTT_IVB | | 1200 | intel_ring_emit(signaller, PIPE_CONTROL_GLOBAL_GTT_IVB | |
1201 | PIPE_CONTROL_QW_WRITE | | 1201 | PIPE_CONTROL_QW_WRITE | |
@@ -1212,10 +1212,11 @@ static int gen8_rcs_signal(struct intel_engine_cs *signaller, | |||
1212 | return 0; | 1212 | return 0; |
1213 | } | 1213 | } |
1214 | 1214 | ||
1215 | static int gen8_xcs_signal(struct intel_engine_cs *signaller, | 1215 | static int gen8_xcs_signal(struct drm_i915_gem_request *signaller_req, |
1216 | unsigned int num_dwords) | 1216 | unsigned int num_dwords) |
1217 | { | 1217 | { |
1218 | #define MBOX_UPDATE_DWORDS 6 | 1218 | #define MBOX_UPDATE_DWORDS 6 |
1219 | struct intel_engine_cs *signaller = signaller_req->ring; | ||
1219 | struct drm_device *dev = signaller->dev; | 1220 | struct drm_device *dev = signaller->dev; |
1220 | struct drm_i915_private *dev_priv = dev->dev_private; | 1221 | struct drm_i915_private *dev_priv = dev->dev_private; |
1221 | struct intel_engine_cs *waiter; | 1222 | struct intel_engine_cs *waiter; |
@@ -1235,8 +1236,7 @@ static int gen8_xcs_signal(struct intel_engine_cs *signaller, | |||
1235 | if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID) | 1236 | if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID) |
1236 | continue; | 1237 | continue; |
1237 | 1238 | ||
1238 | seqno = i915_gem_request_get_seqno( | 1239 | seqno = i915_gem_request_get_seqno(signaller_req); |
1239 | signaller->outstanding_lazy_request); | ||
1240 | intel_ring_emit(signaller, (MI_FLUSH_DW + 1) | | 1240 | intel_ring_emit(signaller, (MI_FLUSH_DW + 1) | |
1241 | MI_FLUSH_DW_OP_STOREDW); | 1241 | MI_FLUSH_DW_OP_STOREDW); |
1242 | intel_ring_emit(signaller, lower_32_bits(gtt_offset) | | 1242 | intel_ring_emit(signaller, lower_32_bits(gtt_offset) | |
@@ -1251,9 +1251,10 @@ static int gen8_xcs_signal(struct intel_engine_cs *signaller, | |||
1251 | return 0; | 1251 | return 0; |
1252 | } | 1252 | } |
1253 | 1253 | ||
1254 | static int gen6_signal(struct intel_engine_cs *signaller, | 1254 | static int gen6_signal(struct drm_i915_gem_request *signaller_req, |
1255 | unsigned int num_dwords) | 1255 | unsigned int num_dwords) |
1256 | { | 1256 | { |
1257 | struct intel_engine_cs *signaller = signaller_req->ring; | ||
1257 | struct drm_device *dev = signaller->dev; | 1258 | struct drm_device *dev = signaller->dev; |
1258 | struct drm_i915_private *dev_priv = dev->dev_private; | 1259 | struct drm_i915_private *dev_priv = dev->dev_private; |
1259 | struct intel_engine_cs *useless; | 1260 | struct intel_engine_cs *useless; |
@@ -1271,8 +1272,7 @@ static int gen6_signal(struct intel_engine_cs *signaller, | |||
1271 | for_each_ring(useless, dev_priv, i) { | 1272 | for_each_ring(useless, dev_priv, i) { |
1272 | u32 mbox_reg = signaller->semaphore.mbox.signal[i]; | 1273 | u32 mbox_reg = signaller->semaphore.mbox.signal[i]; |
1273 | if (mbox_reg != GEN6_NOSYNC) { | 1274 | if (mbox_reg != GEN6_NOSYNC) { |
1274 | u32 seqno = i915_gem_request_get_seqno( | 1275 | u32 seqno = i915_gem_request_get_seqno(signaller_req); |
1275 | signaller->outstanding_lazy_request); | ||
1276 | intel_ring_emit(signaller, MI_LOAD_REGISTER_IMM(1)); | 1276 | intel_ring_emit(signaller, MI_LOAD_REGISTER_IMM(1)); |
1277 | intel_ring_emit(signaller, mbox_reg); | 1277 | intel_ring_emit(signaller, mbox_reg); |
1278 | intel_ring_emit(signaller, seqno); | 1278 | intel_ring_emit(signaller, seqno); |
@@ -1301,7 +1301,7 @@ gen6_add_request(struct drm_i915_gem_request *req) | |||
1301 | int ret; | 1301 | int ret; |
1302 | 1302 | ||
1303 | if (ring->semaphore.signal) | 1303 | if (ring->semaphore.signal) |
1304 | ret = ring->semaphore.signal(ring, 4); | 1304 | ret = ring->semaphore.signal(req, 4); |
1305 | else | 1305 | else |
1306 | ret = intel_ring_begin(ring, 4); | 1306 | ret = intel_ring_begin(ring, 4); |
1307 | 1307 | ||
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index 6853f8f0ee29..ca04f3f58757 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h | |||
@@ -255,7 +255,7 @@ struct intel_engine_cs { | |||
255 | int (*sync_to)(struct drm_i915_gem_request *to_req, | 255 | int (*sync_to)(struct drm_i915_gem_request *to_req, |
256 | struct intel_engine_cs *from, | 256 | struct intel_engine_cs *from, |
257 | u32 seqno); | 257 | u32 seqno); |
258 | int (*signal)(struct intel_engine_cs *signaller, | 258 | int (*signal)(struct drm_i915_gem_request *signaller_req, |
259 | /* num_dwords needed by caller */ | 259 | /* num_dwords needed by caller */ |
260 | unsigned int num_dwords); | 260 | unsigned int num_dwords); |
261 | } semaphore; | 261 | } semaphore; |