|
@@ -7623,46 +7623,59 @@ int sandybridge_pcode_read(struct drm_i915_private *dev_priv, u32 mbox, u32 *val
|
|
|
{
|
|
|
WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock));
|
|
|
|
|
|
- if (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) {
|
|
|
+ /* GEN6_PCODE_* are outside of the forcewake domain, we can
|
|
|
+ * use te fw I915_READ variants to reduce the amount of work
|
|
|
+ * required when reading/writing.
|
|
|
+ */
|
|
|
+
|
|
|
+ if (I915_READ_FW(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) {
|
|
|
DRM_DEBUG_DRIVER("warning: pcode (read) mailbox access failed\n");
|
|
|
return -EAGAIN;
|
|
|
}
|
|
|
|
|
|
- I915_WRITE(GEN6_PCODE_DATA, *val);
|
|
|
- I915_WRITE(GEN6_PCODE_DATA1, 0);
|
|
|
- I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
|
|
|
+ I915_WRITE_FW(GEN6_PCODE_DATA, *val);
|
|
|
+ I915_WRITE_FW(GEN6_PCODE_DATA1, 0);
|
|
|
+ I915_WRITE_FW(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
|
|
|
|
|
|
- if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
|
|
|
- 500)) {
|
|
|
+ if (intel_wait_for_register_fw(dev_priv,
|
|
|
+ GEN6_PCODE_MAILBOX, GEN6_PCODE_READY, 0,
|
|
|
+ 500)) {
|
|
|
DRM_ERROR("timeout waiting for pcode read (%d) to finish\n", mbox);
|
|
|
return -ETIMEDOUT;
|
|
|
}
|
|
|
|
|
|
- *val = I915_READ(GEN6_PCODE_DATA);
|
|
|
- I915_WRITE(GEN6_PCODE_DATA, 0);
|
|
|
+ *val = I915_READ_FW(GEN6_PCODE_DATA);
|
|
|
+ I915_WRITE_FW(GEN6_PCODE_DATA, 0);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int sandybridge_pcode_write(struct drm_i915_private *dev_priv, u32 mbox, u32 val)
|
|
|
+int sandybridge_pcode_write(struct drm_i915_private *dev_priv,
|
|
|
+ u32 mbox, u32 val)
|
|
|
{
|
|
|
WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock));
|
|
|
|
|
|
- if (I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) {
|
|
|
+ /* GEN6_PCODE_* are outside of the forcewake domain, we can
|
|
|
+ * use te fw I915_READ variants to reduce the amount of work
|
|
|
+ * required when reading/writing.
|
|
|
+ */
|
|
|
+
|
|
|
+ if (I915_READ_FW(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) {
|
|
|
DRM_DEBUG_DRIVER("warning: pcode (write) mailbox access failed\n");
|
|
|
return -EAGAIN;
|
|
|
}
|
|
|
|
|
|
- I915_WRITE(GEN6_PCODE_DATA, val);
|
|
|
- I915_WRITE(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
|
|
|
+ I915_WRITE_FW(GEN6_PCODE_DATA, val);
|
|
|
+ I915_WRITE_FW(GEN6_PCODE_MAILBOX, GEN6_PCODE_READY | mbox);
|
|
|
|
|
|
- if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0,
|
|
|
- 500)) {
|
|
|
+ if (intel_wait_for_register_fw(dev_priv,
|
|
|
+ GEN6_PCODE_MAILBOX, GEN6_PCODE_READY, 0,
|
|
|
+ 500)) {
|
|
|
DRM_ERROR("timeout waiting for pcode write (%d) to finish\n", mbox);
|
|
|
return -ETIMEDOUT;
|
|
|
}
|
|
|
|
|
|
- I915_WRITE(GEN6_PCODE_DATA, 0);
|
|
|
+ I915_WRITE_FW(GEN6_PCODE_DATA, 0);
|
|
|
|
|
|
return 0;
|
|
|
}
|