mutex_unlock(&rps->lock);
 
-       if (INTEL_GEN(rps_to_i915(rps)) >= 6)
+       if (intel_rps_has_interrupts(rps))
                rps_enable_interrupts(rps);
 
        if (IS_GEN(rps_to_i915(rps), 5))
 
 void intel_rps_park(struct intel_rps *rps)
 {
-       struct drm_i915_private *i915 = rps_to_i915(rps);
-
        if (!intel_rps_clear_active(rps))
                return;
 
-       if (INTEL_GEN(i915) >= 6)
+       if (intel_rps_has_interrupts(rps))
                rps_disable_interrupts(rps);
 
        if (rps->last_freq <= rps->idle_freq)
                 * Make sure we continue to get interrupts
                 * until we hit the minimum or maximum frequencies.
                 */
-               if (INTEL_GEN(rps_to_i915(rps)) >= 6) {
+               if (intel_rps_has_interrupts(rps)) {
                        struct intel_uncore *uncore = rps_to_uncore(rps);
 
                        set(uncore,
        GEM_BUG_ON(rps->efficient_freq < rps->min_freq);
        GEM_BUG_ON(rps->efficient_freq > rps->max_freq);
 
+       if (INTEL_GEN(i915) >= 6)
+               intel_rps_set_interrupts(rps);
+       else
+               /* Ironlake currently uses intel_ips.ko */ {}
+
        intel_rps_set_enabled(rps);
 }
 
        struct drm_i915_private *i915 = rps_to_i915(rps);
 
        intel_rps_clear_enabled(rps);
+       intel_rps_clear_interrupts(rps);
 
        if (INTEL_GEN(i915) >= 6)
                gen6_rps_disable(rps);
 
        if (INTEL_GEN(i915) >= 8 && INTEL_GEN(i915) < 11)
                rps->pm_intrmsk_mbz |= GEN8_PMINTR_DISABLE_REDIRECT_TO_GUC;
+
+       if (INTEL_GEN(i915) >= 6)
+               rps_disable_interrupts(rps);
 }
 
 u32 intel_rps_get_cagf(struct intel_rps *rps, u32 rpstat)
 
        return test_and_clear_bit(INTEL_RPS_ACTIVE, &rps->flags);
 }
 
+static inline bool intel_rps_has_interrupts(const struct intel_rps *rps)
+{
+       return test_bit(INTEL_RPS_INTERRUPTS, &rps->flags);
+}
+
+static inline void intel_rps_set_interrupts(struct intel_rps *rps)
+{
+       set_bit(INTEL_RPS_INTERRUPTS, &rps->flags);
+}
+
+static inline void intel_rps_clear_interrupts(struct intel_rps *rps)
+{
+       clear_bit(INTEL_RPS_INTERRUPTS, &rps->flags);
+}
+
 #endif /* INTEL_RPS_H */