mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 07:42:07 +00:00
drm/i915: add media well to VLV force wake routines v2
We could split this out into a separate routine at some point as an optimization. v2: use FORCEWAKE_KERNEL (Ville) Note: Ville mentioned in his review that he declines to be responsible if this blows up due to the lack of "readback a register != FW_ACK, but from the same cacheline" magic we have in other forcewake implementations. Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> [danvet: Bikeshed overtly long lines according to checkpatch.pl. Nope, this time around I didn't screw up printk message since I've left those alone.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
da6ecc5dec
commit
ed5de3995f
@ -4148,6 +4148,8 @@
|
|||||||
#define FORCEWAKE 0xA18C
|
#define FORCEWAKE 0xA18C
|
||||||
#define FORCEWAKE_VLV 0x1300b0
|
#define FORCEWAKE_VLV 0x1300b0
|
||||||
#define FORCEWAKE_ACK_VLV 0x1300b4
|
#define FORCEWAKE_ACK_VLV 0x1300b4
|
||||||
|
#define FORCEWAKE_MEDIA_VLV 0x1300b8
|
||||||
|
#define FORCEWAKE_ACK_MEDIA_VLV 0x1300bc
|
||||||
#define FORCEWAKE_ACK_HSW 0x130044
|
#define FORCEWAKE_ACK_HSW 0x130044
|
||||||
#define FORCEWAKE_ACK 0x130090
|
#define FORCEWAKE_ACK 0x130090
|
||||||
#define VLV_GTLC_WAKE_CTRL 0x130090
|
#define VLV_GTLC_WAKE_CTRL 0x130090
|
||||||
|
@ -4404,10 +4404,17 @@ static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
|
|||||||
DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
|
DRM_ERROR("Timed out waiting for forcewake old ack to clear.\n");
|
||||||
|
|
||||||
I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
|
I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
|
||||||
|
I915_WRITE_NOTRACE(FORCEWAKE_MEDIA_VLV,
|
||||||
|
_MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
|
||||||
|
|
||||||
if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & FORCEWAKE_KERNEL),
|
if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & FORCEWAKE_KERNEL),
|
||||||
FORCEWAKE_ACK_TIMEOUT_MS))
|
FORCEWAKE_ACK_TIMEOUT_MS))
|
||||||
DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
|
DRM_ERROR("Timed out waiting for GT to ack forcewake request.\n");
|
||||||
|
|
||||||
|
if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_MEDIA_VLV) &
|
||||||
|
FORCEWAKE_KERNEL),
|
||||||
|
FORCEWAKE_ACK_TIMEOUT_MS))
|
||||||
|
DRM_ERROR("Timed out waiting for media to ack forcewake request.\n");
|
||||||
|
|
||||||
__gen6_gt_wait_for_thread_c0(dev_priv);
|
__gen6_gt_wait_for_thread_c0(dev_priv);
|
||||||
}
|
}
|
||||||
@ -4415,8 +4422,9 @@ static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
|
|||||||
static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
|
static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
|
||||||
{
|
{
|
||||||
I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
|
I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
|
||||||
/* something from same cacheline, but !FORCEWAKE_VLV */
|
I915_WRITE_NOTRACE(FORCEWAKE_MEDIA_VLV,
|
||||||
POSTING_READ(FORCEWAKE_ACK_VLV);
|
_MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
|
||||||
|
/* The below doubles as a POSTING_READ */
|
||||||
gen6_gt_check_fifodbg(dev_priv);
|
gen6_gt_check_fifodbg(dev_priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user