aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_overlay.c
diff options
context:
space:
mode:
authorZou Nan hai <nanhai.zou@intel.com>2010-05-20 21:08:56 -0400
committerEric Anholt <eric@anholt.net>2010-05-26 16:42:11 -0400
commit852835f343146a82a528c3b712b373661d4fa17a (patch)
tree07626a99af8f4b400f4e8616aea885c9f73a118a /drivers/gpu/drm/i915/intel_overlay.c
parent8187a2b70e34c727a06617441f74f202b6fefaf9 (diff)
drm/i915: convert some gem structures to per-ring V2
The active list and request list move into the ringbuffer structure, so each can track its active objects in the order they are in that ring. The flushing list does not, as it doesn't matter which ring caused data to end up in the render cache. Objects gain a pointer to the ring they are active on (if any). Signed-off-by: Zou Nan hai <nanhai.zou@intel.com> Signed-off-by: Xiang Hai hao <haihao.xiang@intel.com> Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_overlay.c')
-rw-r--r--drivers/gpu/drm/i915/intel_overlay.c44
1 files changed, 30 insertions, 14 deletions
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index 93da83782e5e..d7ad5139d17c 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -212,6 +212,7 @@ static int intel_overlay_on(struct intel_overlay *overlay)
212{ 212{
213 struct drm_device *dev = overlay->dev; 213 struct drm_device *dev = overlay->dev;
214 int ret; 214 int ret;
215 drm_i915_private_t *dev_priv = dev->dev_private;
215 216
216 BUG_ON(overlay->active); 217 BUG_ON(overlay->active);
217 218
@@ -225,11 +226,13 @@ static int intel_overlay_on(struct intel_overlay *overlay)
225 OUT_RING(MI_NOOP); 226 OUT_RING(MI_NOOP);
226 ADVANCE_LP_RING(); 227 ADVANCE_LP_RING();
227 228
228 overlay->last_flip_req = i915_add_request(dev, NULL, 0); 229 overlay->last_flip_req =
230 i915_add_request(dev, NULL, 0, &dev_priv->render_ring);
229 if (overlay->last_flip_req == 0) 231 if (overlay->last_flip_req == 0)
230 return -ENOMEM; 232 return -ENOMEM;
231 233
232 ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); 234 ret = i915_do_wait_request(dev,
235 overlay->last_flip_req, 1, &dev_priv->render_ring);
233 if (ret != 0) 236 if (ret != 0)
234 return ret; 237 return ret;
235 238
@@ -262,7 +265,8 @@ static void intel_overlay_continue(struct intel_overlay *overlay,
262 OUT_RING(flip_addr); 265 OUT_RING(flip_addr);
263 ADVANCE_LP_RING(); 266 ADVANCE_LP_RING();
264 267
265 overlay->last_flip_req = i915_add_request(dev, NULL, 0); 268 overlay->last_flip_req =
269 i915_add_request(dev, NULL, 0, &dev_priv->render_ring);
266} 270}
267 271
268static int intel_overlay_wait_flip(struct intel_overlay *overlay) 272static int intel_overlay_wait_flip(struct intel_overlay *overlay)
@@ -273,7 +277,8 @@ static int intel_overlay_wait_flip(struct intel_overlay *overlay)
273 u32 tmp; 277 u32 tmp;
274 278
275 if (overlay->last_flip_req != 0) { 279 if (overlay->last_flip_req != 0) {
276 ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); 280 ret = i915_do_wait_request(dev, overlay->last_flip_req,
281 1, &dev_priv->render_ring);
277 if (ret == 0) { 282 if (ret == 0) {
278 overlay->last_flip_req = 0; 283 overlay->last_flip_req = 0;
279 284
@@ -292,11 +297,13 @@ static int intel_overlay_wait_flip(struct intel_overlay *overlay)
292 OUT_RING(MI_NOOP); 297 OUT_RING(MI_NOOP);
293 ADVANCE_LP_RING(); 298 ADVANCE_LP_RING();
294 299
295 overlay->last_flip_req = i915_add_request(dev, NULL, 0); 300 overlay->last_flip_req =
301 i915_add_request(dev, NULL, 0, &dev_priv->render_ring);
296 if (overlay->last_flip_req == 0) 302 if (overlay->last_flip_req == 0)
297 return -ENOMEM; 303 return -ENOMEM;
298 304
299 ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); 305 ret = i915_do_wait_request(dev, overlay->last_flip_req,
306 1, &dev_priv->render_ring);
300 if (ret != 0) 307 if (ret != 0)
301 return ret; 308 return ret;
302 309
@@ -310,6 +317,7 @@ static int intel_overlay_off(struct intel_overlay *overlay)
310{ 317{
311 u32 flip_addr = overlay->flip_addr; 318 u32 flip_addr = overlay->flip_addr;
312 struct drm_device *dev = overlay->dev; 319 struct drm_device *dev = overlay->dev;
320 drm_i915_private_t *dev_priv = dev->dev_private;
313 int ret; 321 int ret;
314 322
315 BUG_ON(!overlay->active); 323 BUG_ON(!overlay->active);
@@ -330,11 +338,13 @@ static int intel_overlay_off(struct intel_overlay *overlay)
330 OUT_RING(MI_NOOP); 338 OUT_RING(MI_NOOP);
331 ADVANCE_LP_RING(); 339 ADVANCE_LP_RING();
332 340
333 overlay->last_flip_req = i915_add_request(dev, NULL, 0); 341 overlay->last_flip_req =
342 i915_add_request(dev, NULL, 0, &dev_priv->render_ring);
334 if (overlay->last_flip_req == 0) 343 if (overlay->last_flip_req == 0)
335 return -ENOMEM; 344 return -ENOMEM;
336 345
337 ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); 346 ret = i915_do_wait_request(dev, overlay->last_flip_req,
347 1, &dev_priv->render_ring);
338 if (ret != 0) 348 if (ret != 0)
339 return ret; 349 return ret;
340 350
@@ -348,11 +358,13 @@ static int intel_overlay_off(struct intel_overlay *overlay)
348 OUT_RING(MI_NOOP); 358 OUT_RING(MI_NOOP);
349 ADVANCE_LP_RING(); 359 ADVANCE_LP_RING();
350 360
351 overlay->last_flip_req = i915_add_request(dev, NULL, 0); 361 overlay->last_flip_req =
362 i915_add_request(dev, NULL, 0, &dev_priv->render_ring);
352 if (overlay->last_flip_req == 0) 363 if (overlay->last_flip_req == 0)
353 return -ENOMEM; 364 return -ENOMEM;
354 365
355 ret = i915_do_wait_request(dev, overlay->last_flip_req, 1); 366 ret = i915_do_wait_request(dev, overlay->last_flip_req,
367 1, &dev_priv->render_ring);
356 if (ret != 0) 368 if (ret != 0)
357 return ret; 369 return ret;
358 370
@@ -385,6 +397,7 @@ int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
385{ 397{
386 struct drm_device *dev = overlay->dev; 398 struct drm_device *dev = overlay->dev;
387 struct drm_gem_object *obj; 399 struct drm_gem_object *obj;
400 drm_i915_private_t *dev_priv = dev->dev_private;
388 u32 flip_addr; 401 u32 flip_addr;
389 int ret; 402 int ret;
390 403
@@ -392,12 +405,14 @@ int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
392 return -EIO; 405 return -EIO;
393 406
394 if (overlay->last_flip_req == 0) { 407 if (overlay->last_flip_req == 0) {
395 overlay->last_flip_req = i915_add_request(dev, NULL, 0); 408 overlay->last_flip_req =
409 i915_add_request(dev, NULL, 0, &dev_priv->render_ring);
396 if (overlay->last_flip_req == 0) 410 if (overlay->last_flip_req == 0)
397 return -ENOMEM; 411 return -ENOMEM;
398 } 412 }
399 413
400 ret = i915_do_wait_request(dev, overlay->last_flip_req, interruptible); 414 ret = i915_do_wait_request(dev, overlay->last_flip_req,
415 interruptible, &dev_priv->render_ring);
401 if (ret != 0) 416 if (ret != 0)
402 return ret; 417 return ret;
403 418
@@ -421,12 +436,13 @@ int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
421 OUT_RING(MI_NOOP); 436 OUT_RING(MI_NOOP);
422 ADVANCE_LP_RING(); 437 ADVANCE_LP_RING();
423 438
424 overlay->last_flip_req = i915_add_request(dev, NULL, 0); 439 overlay->last_flip_req = i915_add_request(dev, NULL,
440 0, &dev_priv->render_ring);
425 if (overlay->last_flip_req == 0) 441 if (overlay->last_flip_req == 0)
426 return -ENOMEM; 442 return -ENOMEM;
427 443
428 ret = i915_do_wait_request(dev, overlay->last_flip_req, 444 ret = i915_do_wait_request(dev, overlay->last_flip_req,
429 interruptible); 445 interruptible, &dev_priv->render_ring);
430 if (ret != 0) 446 if (ret != 0)
431 return ret; 447 return ret;
432 448