Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 217926
b: refs/heads/master
c: 8dfbc34
h: refs/heads/master
v: v3
  • Loading branch information
Chris Wilson committed Sep 8, 2010
1 parent 81c4893 commit c4aef67
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 36 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9bb2ff731b32c023e7a502efdc0dee46157290d5
refs/heads/master: 8dfbc3403113bcc51f0350c3471fa1abf664305f
3 changes: 1 addition & 2 deletions trunk/drivers/gpu/drm/i915/intel_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,7 @@ struct intel_overlay {
#define HW_WEDGED 1
#define NEEDS_WAIT_FOR_FLIP 2
#define RELEASE_OLD_VID 3
#define SWITCH_OFF_STAGE_1 4
#define SWITCH_OFF_STAGE_2 5
#define SWITCH_OFF 4
};

struct intel_crtc {
Expand Down
38 changes: 5 additions & 33 deletions trunk/drivers/gpu/drm/i915/intel_overlay.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,6 @@ static int intel_overlay_off(struct intel_overlay *overlay)
{
u32 flip_addr = overlay->flip_addr;
struct drm_device *dev = overlay->dev;
int ret;

BUG_ON(!overlay->active);

Expand All @@ -335,29 +334,18 @@ static int intel_overlay_off(struct intel_overlay *overlay)
* of the hw. Do it in both cases */
flip_addr |= OFC_UPDATE;

BEGIN_LP_RING(6);
/* wait for overlay to go idle */
BEGIN_LP_RING(4);
OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_CONTINUE);
OUT_RING(flip_addr);
OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
OUT_RING(MI_NOOP);
ADVANCE_LP_RING();

ret = intel_overlay_do_wait_request(overlay, true,
SWITCH_OFF_STAGE_1);
if (ret)
return ret;

/* turn overlay off */
BEGIN_LP_RING(4);
OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_OFF);
OUT_RING(flip_addr);
OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
OUT_RING(MI_NOOP);
ADVANCE_LP_RING();

return intel_overlay_do_wait_request(overlay, true,
SWITCH_OFF_STAGE_2);
return intel_overlay_do_wait_request(overlay, true, SWITCH_OFF);
}

static void intel_overlay_off_tail(struct intel_overlay *overlay)
Expand All @@ -383,9 +371,8 @@ int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
bool interruptible)
{
struct drm_device *dev = overlay->dev;
struct drm_gem_object *obj;
drm_i915_private_t *dev_priv = dev->dev_private;
u32 flip_addr;
struct drm_gem_object *obj;
int ret;

if (overlay->hw_wedged == HW_WEDGED)
Expand All @@ -404,25 +391,10 @@ int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
overlay->old_vid_bo = NULL;
break;

case SWITCH_OFF_STAGE_1:
flip_addr = overlay->flip_addr;
flip_addr |= OFC_UPDATE;

BEGIN_LP_RING(4);
OUT_RING(MI_OVERLAY_FLIP | MI_OVERLAY_OFF);
OUT_RING(flip_addr);
OUT_RING(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
OUT_RING(MI_NOOP);
ADVANCE_LP_RING();

ret = intel_overlay_do_wait_request(overlay, interruptible,
SWITCH_OFF_STAGE_2);
if (ret)
return ret;

case SWITCH_OFF_STAGE_2:
case SWITCH_OFF:
intel_overlay_off_tail(overlay);
break;

default:
BUG_ON(overlay->hw_wedged != NEEDS_WAIT_FOR_FLIP);
}
Expand Down

0 comments on commit c4aef67

Please sign in to comment.