|
@@ -4989,6 +4989,17 @@ static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv)
|
|
|
struct i915_ggtt *ggtt = &dev_priv->ggtt;
|
|
|
bool enable_rc6 = true;
|
|
|
unsigned long rc6_ctx_base;
|
|
|
+ u32 rc_ctl;
|
|
|
+ int rc_sw_target;
|
|
|
+
|
|
|
+ rc_ctl = I915_READ(GEN6_RC_CONTROL);
|
|
|
+ rc_sw_target = (I915_READ(GEN6_RC_STATE) & RC_SW_TARGET_STATE_MASK) >>
|
|
|
+ RC_SW_TARGET_STATE_SHIFT;
|
|
|
+ DRM_DEBUG_DRIVER("BIOS enabled RC states: "
|
|
|
+ "HW_CTRL %s HW_RC6 %s SW_TARGET_STATE %x\n",
|
|
|
+ onoff(rc_ctl & GEN6_RC_CTL_HW_ENABLE),
|
|
|
+ onoff(rc_ctl & GEN6_RC_CTL_RC6_ENABLE),
|
|
|
+ rc_sw_target);
|
|
|
|
|
|
if (!(I915_READ(RC6_LOCATION) & RC6_CTX_IN_DRAM)) {
|
|
|
DRM_DEBUG_DRIVER("RC6 Base location not set properly.\n");
|
|
@@ -5015,11 +5026,20 @@ static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv)
|
|
|
enable_rc6 = false;
|
|
|
}
|
|
|
|
|
|
- if (!(I915_READ(GEN6_RC_CONTROL) & (GEN6_RC_CTL_RC6_ENABLE |
|
|
|
- GEN6_RC_CTL_HW_ENABLE)) &&
|
|
|
- ((I915_READ(GEN6_RC_CONTROL) & GEN6_RC_CTL_HW_ENABLE) ||
|
|
|
- !(I915_READ(GEN6_RC_STATE) & RC6_STATE))) {
|
|
|
- DRM_DEBUG_DRIVER("HW/SW RC6 is not enabled by BIOS.\n");
|
|
|
+ if (!I915_READ(GEN8_PUSHBUS_CONTROL) ||
|
|
|
+ !I915_READ(GEN8_PUSHBUS_ENABLE) ||
|
|
|
+ !I915_READ(GEN8_PUSHBUS_SHIFT)) {
|
|
|
+ DRM_DEBUG_DRIVER("Pushbus not setup properly.\n");
|
|
|
+ enable_rc6 = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!I915_READ(GEN6_GFXPAUSE)) {
|
|
|
+ DRM_DEBUG_DRIVER("GFX pause not setup properly.\n");
|
|
|
+ enable_rc6 = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!I915_READ(GEN8_MISC_CTRL0)) {
|
|
|
+ DRM_DEBUG_DRIVER("GPM control not setup properly.\n");
|
|
|
enable_rc6 = false;
|
|
|
}
|
|
|
|