diff options
author | Oscar Mateo <oscar.mateo@intel.com> | 2014-07-24 12:04:25 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-08-11 11:05:17 -0400 |
commit | e94e37ad19c74b4c2569d556cda9da4a03d4e3f8 (patch) | |
tree | 518eaee3960b1e34e94687ed47b577dc53e867de /drivers/gpu/drm/i915/intel_lrc.c | |
parent | 9b1136d505b1de5478e11b59ca59cf8ce2a33217 (diff) |
drm/i915/bdw: GEN-specific logical ring set/get seqno
No mistery here: the seqno is still retrieved from the engine's
HW status page (the one in the default context. For the moment,
I see no reason to worry about other context's HWS page).
Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_lrc.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index 1a1f5f98f05b..c9518c6261de 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c | |||
@@ -151,6 +151,16 @@ static int gen8_init_render_ring(struct intel_engine_cs *ring) | |||
151 | return ret; | 151 | return ret; |
152 | } | 152 | } |
153 | 153 | ||
154 | static u32 gen8_get_seqno(struct intel_engine_cs *ring, bool lazy_coherency) | ||
155 | { | ||
156 | return intel_read_status_page(ring, I915_GEM_HWS_INDEX); | ||
157 | } | ||
158 | |||
159 | static void gen8_set_seqno(struct intel_engine_cs *ring, u32 seqno) | ||
160 | { | ||
161 | intel_write_status_page(ring, I915_GEM_HWS_INDEX, seqno); | ||
162 | } | ||
163 | |||
154 | void intel_logical_ring_cleanup(struct intel_engine_cs *ring) | 164 | void intel_logical_ring_cleanup(struct intel_engine_cs *ring) |
155 | { | 165 | { |
156 | if (!intel_ring_initialized(ring)) | 166 | if (!intel_ring_initialized(ring)) |
@@ -223,6 +233,8 @@ static int logical_render_ring_init(struct drm_device *dev) | |||
223 | 233 | ||
224 | ring->init = gen8_init_render_ring; | 234 | ring->init = gen8_init_render_ring; |
225 | ring->cleanup = intel_fini_pipe_control; | 235 | ring->cleanup = intel_fini_pipe_control; |
236 | ring->get_seqno = gen8_get_seqno; | ||
237 | ring->set_seqno = gen8_set_seqno; | ||
226 | 238 | ||
227 | return logical_ring_init(dev, ring); | 239 | return logical_ring_init(dev, ring); |
228 | } | 240 | } |
@@ -239,6 +251,8 @@ static int logical_bsd_ring_init(struct drm_device *dev) | |||
239 | GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT; | 251 | GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT; |
240 | 252 | ||
241 | ring->init = gen8_init_common_ring; | 253 | ring->init = gen8_init_common_ring; |
254 | ring->get_seqno = gen8_get_seqno; | ||
255 | ring->set_seqno = gen8_set_seqno; | ||
242 | 256 | ||
243 | return logical_ring_init(dev, ring); | 257 | return logical_ring_init(dev, ring); |
244 | } | 258 | } |
@@ -255,6 +269,8 @@ static int logical_bsd2_ring_init(struct drm_device *dev) | |||
255 | GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT; | 269 | GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT; |
256 | 270 | ||
257 | ring->init = gen8_init_common_ring; | 271 | ring->init = gen8_init_common_ring; |
272 | ring->get_seqno = gen8_get_seqno; | ||
273 | ring->set_seqno = gen8_set_seqno; | ||
258 | 274 | ||
259 | return logical_ring_init(dev, ring); | 275 | return logical_ring_init(dev, ring); |
260 | } | 276 | } |
@@ -271,6 +287,8 @@ static int logical_blt_ring_init(struct drm_device *dev) | |||
271 | GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT; | 287 | GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT; |
272 | 288 | ||
273 | ring->init = gen8_init_common_ring; | 289 | ring->init = gen8_init_common_ring; |
290 | ring->get_seqno = gen8_get_seqno; | ||
291 | ring->set_seqno = gen8_set_seqno; | ||
274 | 292 | ||
275 | return logical_ring_init(dev, ring); | 293 | return logical_ring_init(dev, ring); |
276 | } | 294 | } |
@@ -287,6 +305,8 @@ static int logical_vebox_ring_init(struct drm_device *dev) | |||
287 | GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT; | 305 | GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT; |
288 | 306 | ||
289 | ring->init = gen8_init_common_ring; | 307 | ring->init = gen8_init_common_ring; |
308 | ring->get_seqno = gen8_get_seqno; | ||
309 | ring->set_seqno = gen8_set_seqno; | ||
290 | 310 | ||
291 | return logical_ring_init(dev, ring); | 311 | return logical_ring_init(dev, ring); |
292 | } | 312 | } |