Commit 12ca45fea91cfbb09df828bea958b47348caee6d
- Diff rendering mode:
- inline
- side by side
drivers/gpu/drm/i915/intel_overlay.c
(19 / 23)
|   | |||
| 375 | 375 | if (ret != 0) | |
| 376 | 376 | return ret; | |
| 377 | 377 | ||
| 378 | overlay->active = 0; | ||
| 379 | 378 | overlay->hw_wedged = 0; | |
| 380 | 379 | overlay->last_flip_req = 0; | |
| 381 | 380 | return ret; | |
| 382 | 381 | } | |
| 383 | 382 | ||
| 383 | static void intel_overlay_off_tail(struct intel_overlay *overlay) | ||
| 384 | { | ||
| 385 | struct drm_gem_object *obj; | ||
| 386 | |||
| 387 | /* never have the overlay hw on without showing a frame */ | ||
| 388 | BUG_ON(!overlay->vid_bo); | ||
| 389 | obj = overlay->vid_bo->obj; | ||
| 390 | |||
| 391 | i915_gem_object_unpin(obj); | ||
| 392 | drm_gem_object_unreference(obj); | ||
| 393 | overlay->vid_bo = NULL; | ||
| 394 | |||
| 395 | overlay->crtc->overlay = NULL; | ||
| 396 | overlay->crtc = NULL; | ||
| 397 | overlay->active = 0; | ||
| 398 | } | ||
| 399 | |||
| 384 | 400 | /* recover from an interruption due to a signal | |
| 385 | 401 | * We have to be careful not to repeat work forever an make forward progess. */ | |
| 386 | 402 | int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay, | |
| … | … | ||
| 454 | 454 | return ret; | |
| 455 | 455 | ||
| 456 | 456 | case SWITCH_OFF_STAGE_2: | |
| 457 | BUG_ON(!overlay->vid_bo); | ||
| 458 | obj = overlay->vid_bo->obj; | ||
| 459 | |||
| 460 | i915_gem_object_unpin(obj); | ||
| 461 | drm_gem_object_unreference(obj); | ||
| 462 | overlay->vid_bo = NULL; | ||
| 463 | |||
| 464 | overlay->crtc->overlay = NULL; | ||
| 465 | overlay->crtc = NULL; | ||
| 466 | |||
| 467 | overlay->active = 0; | ||
| 457 | intel_overlay_off_tail(overlay); | ||
| 468 | 458 | break; | |
| 469 | 459 | default: | |
| 470 | 460 | BUG_ON(overlay->hw_wedged != NEEDS_WAIT_FOR_FLIP); | |
| … | … | ||
| 837 | 837 | { | |
| 838 | 838 | int ret; | |
| 839 | 839 | struct overlay_registers *regs; | |
| 840 | struct drm_gem_object *obj; | ||
| 841 | 840 | struct drm_device *dev = overlay->dev; | |
| 842 | 841 | ||
| 843 | 842 | BUG_ON(!mutex_is_locked(&dev->struct_mutex)); | |
| … | … | ||
| 860 | 860 | if (ret != 0) | |
| 861 | 861 | return ret; | |
| 862 | 862 | ||
| 863 | /* never have the overlay hw on without showing a frame */ | ||
| 864 | BUG_ON(!overlay->vid_bo); | ||
| 865 | obj = overlay->vid_bo->obj; | ||
| 866 | |||
| 867 | i915_gem_object_unpin(obj); | ||
| 868 | drm_gem_object_unreference(obj); | ||
| 869 | overlay->vid_bo = NULL; | ||
| 870 | |||
| 871 | overlay->crtc->overlay = NULL; | ||
| 872 | overlay->crtc = NULL; | ||
| 863 | intel_overlay_off_tail(overlay); | ||
| 873 | 864 | ||
| 874 | 865 | return 0; | |
| 875 | 866 | } |

