diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 54 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 47 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_suspend.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 36 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 |
7 files changed, 137 insertions, 20 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 864e75d762e6..92f75782c332 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -797,15 +797,51 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused) | |||
797 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 797 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
798 | struct drm_device *dev = node->minor->dev; | 798 | struct drm_device *dev = node->minor->dev; |
799 | drm_i915_private_t *dev_priv = dev->dev_private; | 799 | drm_i915_private_t *dev_priv = dev->dev_private; |
800 | u16 rgvswctl = I915_READ16(MEMSWCTL); | 800 | |
801 | u16 rgvstat = I915_READ16(MEMSTAT_ILK); | 801 | if (IS_GEN5(dev)) { |
802 | 802 | u16 rgvswctl = I915_READ16(MEMSWCTL); | |
803 | seq_printf(m, "Requested P-state: %d\n", (rgvswctl >> 8) & 0xf); | 803 | u16 rgvstat = I915_READ16(MEMSTAT_ILK); |
804 | seq_printf(m, "Requested VID: %d\n", rgvswctl & 0x3f); | 804 | |
805 | seq_printf(m, "Current VID: %d\n", (rgvstat & MEMSTAT_VID_MASK) >> | 805 | seq_printf(m, "Requested P-state: %d\n", (rgvswctl >> 8) & 0xf); |
806 | MEMSTAT_VID_SHIFT); | 806 | seq_printf(m, "Requested VID: %d\n", rgvswctl & 0x3f); |
807 | seq_printf(m, "Current P-state: %d\n", | 807 | seq_printf(m, "Current VID: %d\n", (rgvstat & MEMSTAT_VID_MASK) >> |
808 | (rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT); | 808 | MEMSTAT_VID_SHIFT); |
809 | seq_printf(m, "Current P-state: %d\n", | ||
810 | (rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT); | ||
811 | } else if (IS_GEN6(dev)) { | ||
812 | u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS); | ||
813 | u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS); | ||
814 | u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP); | ||
815 | int max_freq; | ||
816 | |||
817 | /* RPSTAT1 is in the GT power well */ | ||
818 | __gen6_force_wake_get(dev_priv); | ||
819 | |||
820 | seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status); | ||
821 | seq_printf(m, "RPSTAT1: 0x%08x\n", I915_READ(GEN6_RPSTAT1)); | ||
822 | seq_printf(m, "Render p-state ratio: %d\n", | ||
823 | (gt_perf_status & 0xff00) >> 8); | ||
824 | seq_printf(m, "Render p-state VID: %d\n", | ||
825 | gt_perf_status & 0xff); | ||
826 | seq_printf(m, "Render p-state limit: %d\n", | ||
827 | rp_state_limits & 0xff); | ||
828 | |||
829 | max_freq = (rp_state_cap & 0xff0000) >> 16; | ||
830 | seq_printf(m, "Lowest (RPN) frequency: %dMHz\n", | ||
831 | max_freq * 100); | ||
832 | |||
833 | max_freq = (rp_state_cap & 0xff00) >> 8; | ||
834 | seq_printf(m, "Nominal (RP1) frequency: %dMHz\n", | ||
835 | max_freq * 100); | ||
836 | |||
837 | max_freq = rp_state_cap & 0xff; | ||
838 | seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n", | ||
839 | max_freq * 100); | ||
840 | |||
841 | __gen6_force_wake_put(dev_priv); | ||
842 | } else { | ||
843 | seq_printf(m, "no P-state info available\n"); | ||
844 | } | ||
809 | 845 | ||
810 | return 0; | 846 | return 0; |
811 | } | 847 | } |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 53dfc8398a96..2a653cc80395 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -1264,6 +1264,7 @@ extern void intel_disable_fbc(struct drm_device *dev); | |||
1264 | extern void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval); | 1264 | extern void intel_enable_fbc(struct drm_crtc *crtc, unsigned long interval); |
1265 | extern bool intel_fbc_enabled(struct drm_device *dev); | 1265 | extern bool intel_fbc_enabled(struct drm_device *dev); |
1266 | extern bool ironlake_set_drps(struct drm_device *dev, u8 val); | 1266 | extern bool ironlake_set_drps(struct drm_device *dev, u8 val); |
1267 | extern void gen6_set_rps(struct drm_device *dev, u8 val); | ||
1267 | extern void intel_detect_pch (struct drm_device *dev); | 1268 | extern void intel_detect_pch (struct drm_device *dev); |
1268 | extern int intel_trans_dp_port_sel (struct drm_crtc *crtc); | 1269 | extern int intel_trans_dp_port_sel (struct drm_crtc *crtc); |
1269 | 1270 | ||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index adf983f01dda..0dadc025b77b 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -397,11 +397,49 @@ static void notify_ring(struct drm_device *dev, | |||
397 | jiffies + msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)); | 397 | jiffies + msecs_to_jiffies(DRM_I915_HANGCHECK_PERIOD)); |
398 | } | 398 | } |
399 | 399 | ||
400 | static void gen6_pm_irq_handler(struct drm_device *dev) | ||
401 | { | ||
402 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | ||
403 | u8 new_delay = dev_priv->cur_delay; | ||
404 | u32 pm_iir; | ||
405 | |||
406 | pm_iir = I915_READ(GEN6_PMIIR); | ||
407 | if (!pm_iir) | ||
408 | return; | ||
409 | |||
410 | if (pm_iir & GEN6_PM_RP_UP_THRESHOLD) { | ||
411 | if (dev_priv->cur_delay != dev_priv->max_delay) | ||
412 | new_delay = dev_priv->cur_delay + 1; | ||
413 | if (new_delay > dev_priv->max_delay) | ||
414 | new_delay = dev_priv->max_delay; | ||
415 | } else if (pm_iir & (GEN6_PM_RP_DOWN_THRESHOLD | GEN6_PM_RP_DOWN_TIMEOUT)) { | ||
416 | if (dev_priv->cur_delay != dev_priv->min_delay) | ||
417 | new_delay = dev_priv->cur_delay - 1; | ||
418 | if (new_delay < dev_priv->min_delay) { | ||
419 | new_delay = dev_priv->min_delay; | ||
420 | I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, | ||
421 | I915_READ(GEN6_RP_INTERRUPT_LIMITS) | | ||
422 | ((new_delay << 16) & 0x3f0000)); | ||
423 | } else { | ||
424 | /* Make sure we continue to get down interrupts | ||
425 | * until we hit the minimum frequency */ | ||
426 | I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, | ||
427 | I915_READ(GEN6_RP_INTERRUPT_LIMITS) & ~0x3f0000); | ||
428 | } | ||
429 | |||
430 | } | ||
431 | |||
432 | gen6_set_rps(dev, new_delay); | ||
433 | dev_priv->cur_delay = new_delay; | ||
434 | |||
435 | I915_WRITE(GEN6_PMIIR, pm_iir); | ||
436 | } | ||
437 | |||
400 | static irqreturn_t ironlake_irq_handler(struct drm_device *dev) | 438 | static irqreturn_t ironlake_irq_handler(struct drm_device *dev) |
401 | { | 439 | { |
402 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 440 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
403 | int ret = IRQ_NONE; | 441 | int ret = IRQ_NONE; |
404 | u32 de_iir, gt_iir, de_ier, pch_iir; | 442 | u32 de_iir, gt_iir, de_ier, pch_iir, pm_iir; |
405 | u32 hotplug_mask; | 443 | u32 hotplug_mask; |
406 | struct drm_i915_master_private *master_priv; | 444 | struct drm_i915_master_private *master_priv; |
407 | u32 bsd_usr_interrupt = GT_BSD_USER_INTERRUPT; | 445 | u32 bsd_usr_interrupt = GT_BSD_USER_INTERRUPT; |
@@ -417,8 +455,10 @@ static irqreturn_t ironlake_irq_handler(struct drm_device *dev) | |||
417 | de_iir = I915_READ(DEIIR); | 455 | de_iir = I915_READ(DEIIR); |
418 | gt_iir = I915_READ(GTIIR); | 456 | gt_iir = I915_READ(GTIIR); |
419 | pch_iir = I915_READ(SDEIIR); | 457 | pch_iir = I915_READ(SDEIIR); |
458 | pm_iir = I915_READ(GEN6_PMIIR); | ||
420 | 459 | ||
421 | if (de_iir == 0 && gt_iir == 0 && pch_iir == 0) | 460 | if (de_iir == 0 && gt_iir == 0 && pch_iir == 0 && |
461 | (!IS_GEN6(dev) || pm_iir == 0)) | ||
422 | goto done; | 462 | goto done; |
423 | 463 | ||
424 | if (HAS_PCH_CPT(dev)) | 464 | if (HAS_PCH_CPT(dev)) |
@@ -470,6 +510,9 @@ static irqreturn_t ironlake_irq_handler(struct drm_device *dev) | |||
470 | i915_handle_rps_change(dev); | 510 | i915_handle_rps_change(dev); |
471 | } | 511 | } |
472 | 512 | ||
513 | if (IS_GEN6(dev)) | ||
514 | gen6_pm_irq_handler(dev); | ||
515 | |||
473 | /* should clear PCH hotplug event before clear CPU irq */ | 516 | /* should clear PCH hotplug event before clear CPU irq */ |
474 | I915_WRITE(SDEIIR, pch_iir); | 517 | I915_WRITE(SDEIIR, pch_iir); |
475 | I915_WRITE(GTIIR, gt_iir); | 518 | I915_WRITE(GTIIR, gt_iir); |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index c2231f7d2d97..d60860ec8cf4 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -1188,6 +1188,10 @@ | |||
1188 | #define DDRMPLL1 0X12c20 | 1188 | #define DDRMPLL1 0X12c20 |
1189 | #define PEG_BAND_GAP_DATA 0x14d68 | 1189 | #define PEG_BAND_GAP_DATA 0x14d68 |
1190 | 1190 | ||
1191 | #define GEN6_GT_PERF_STATUS 0x145948 | ||
1192 | #define GEN6_RP_STATE_LIMITS 0x145994 | ||
1193 | #define GEN6_RP_STATE_CAP 0x145998 | ||
1194 | |||
1191 | /* | 1195 | /* |
1192 | * Logical Context regs | 1196 | * Logical Context regs |
1193 | */ | 1197 | */ |
@@ -3169,7 +3173,7 @@ | |||
3169 | #define FORCEWAKE 0xA18C | 3173 | #define FORCEWAKE 0xA18C |
3170 | #define FORCEWAKE_ACK 0x130090 | 3174 | #define FORCEWAKE_ACK 0x130090 |
3171 | 3175 | ||
3172 | #define GEN6_RC_NORMAL_FREQ 0xA008 | 3176 | #define GEN6_RPNSWREQ 0xA008 |
3173 | #define GEN6_TURBO_DISABLE (1<<31) | 3177 | #define GEN6_TURBO_DISABLE (1<<31) |
3174 | #define GEN6_FREQUENCY(x) ((x)<<25) | 3178 | #define GEN6_FREQUENCY(x) ((x)<<25) |
3175 | #define GEN6_OFFSET(x) ((x)<<19) | 3179 | #define GEN6_OFFSET(x) ((x)<<19) |
@@ -3185,6 +3189,7 @@ | |||
3185 | #define GEN6_RC_CTL_HW_ENABLE (1<<31) | 3189 | #define GEN6_RC_CTL_HW_ENABLE (1<<31) |
3186 | #define GEN6_RP_DOWN_TIMEOUT 0xA010 | 3190 | #define GEN6_RP_DOWN_TIMEOUT 0xA010 |
3187 | #define GEN6_RP_INTERRUPT_LIMITS 0xA014 | 3191 | #define GEN6_RP_INTERRUPT_LIMITS 0xA014 |
3192 | #define GEN6_RPSTAT1 0xA01C | ||
3188 | #define GEN6_RP_CONTROL 0xA024 | 3193 | #define GEN6_RP_CONTROL 0xA024 |
3189 | #define GEN6_RP_MEDIA_TURBO (1<<11) | 3194 | #define GEN6_RP_MEDIA_TURBO (1<<11) |
3190 | #define GEN6_RP_USE_NORMAL_FREQ (1<<9) | 3195 | #define GEN6_RP_USE_NORMAL_FREQ (1<<9) |
@@ -3208,6 +3213,7 @@ | |||
3208 | #define GEN6_RC6_THRESHOLD 0xA0B8 | 3213 | #define GEN6_RC6_THRESHOLD 0xA0B8 |
3209 | #define GEN6_RC6p_THRESHOLD 0xA0BC | 3214 | #define GEN6_RC6p_THRESHOLD 0xA0BC |
3210 | #define GEN6_RC6pp_THRESHOLD 0xA0C0 | 3215 | #define GEN6_RC6pp_THRESHOLD 0xA0C0 |
3216 | #define GEN6_PMINTRMSK 0xA168 | ||
3211 | 3217 | ||
3212 | #define GEN6_PMISR 0x44020 | 3218 | #define GEN6_PMISR 0x44020 |
3213 | #define GEN6_PMIMR 0x44024 | 3219 | #define GEN6_PMIMR 0x44024 |
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c index a311809f3c80..f623efdb1151 100644 --- a/drivers/gpu/drm/i915/i915_suspend.c +++ b/drivers/gpu/drm/i915/i915_suspend.c | |||
@@ -817,8 +817,10 @@ int i915_save_state(struct drm_device *dev) | |||
817 | dev_priv->saveIMR = I915_READ(IMR); | 817 | dev_priv->saveIMR = I915_READ(IMR); |
818 | } | 818 | } |
819 | 819 | ||
820 | if (HAS_PCH_SPLIT(dev)) | 820 | if (IS_IRONLAKE_M(dev)) |
821 | ironlake_disable_drps(dev); | 821 | ironlake_disable_drps(dev); |
822 | if (IS_GEN6(dev)) | ||
823 | gen6_disable_rps(dev); | ||
822 | 824 | ||
823 | intel_disable_clock_gating(dev); | 825 | intel_disable_clock_gating(dev); |
824 | 826 | ||
@@ -867,11 +869,14 @@ int i915_restore_state(struct drm_device *dev) | |||
867 | /* Clock gating state */ | 869 | /* Clock gating state */ |
868 | intel_enable_clock_gating(dev); | 870 | intel_enable_clock_gating(dev); |
869 | 871 | ||
870 | if (HAS_PCH_SPLIT(dev)) { | 872 | if (IS_IRONLAKE_M(dev)) { |
871 | ironlake_enable_drps(dev); | 873 | ironlake_enable_drps(dev); |
872 | intel_init_emon(dev); | 874 | intel_init_emon(dev); |
873 | } | 875 | } |
874 | 876 | ||
877 | if (IS_GEN6(dev)) | ||
878 | gen6_enable_rps(dev_priv); | ||
879 | |||
875 | /* Cache mode state */ | 880 | /* Cache mode state */ |
876 | I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000); | 881 | I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000); |
877 | 882 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index c79bee4b4d56..880659680d0a 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -6021,6 +6021,25 @@ void ironlake_disable_drps(struct drm_device *dev) | |||
6021 | 6021 | ||
6022 | } | 6022 | } |
6023 | 6023 | ||
6024 | void gen6_set_rps(struct drm_device *dev, u8 val) | ||
6025 | { | ||
6026 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
6027 | u32 swreq; | ||
6028 | |||
6029 | swreq = (val & 0x3ff) << 25; | ||
6030 | I915_WRITE(GEN6_RPNSWREQ, swreq); | ||
6031 | } | ||
6032 | |||
6033 | void gen6_disable_rps(struct drm_device *dev) | ||
6034 | { | ||
6035 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
6036 | |||
6037 | I915_WRITE(GEN6_RPNSWREQ, 1 << 31); | ||
6038 | I915_WRITE(GEN6_PMINTRMSK, 0xffffffff); | ||
6039 | I915_WRITE(GEN6_PMIER, 0); | ||
6040 | I915_WRITE(GEN6_PMIIR, I915_READ(GEN6_PMIIR)); | ||
6041 | } | ||
6042 | |||
6024 | static unsigned long intel_pxfreq(u32 vidfreq) | 6043 | static unsigned long intel_pxfreq(u32 vidfreq) |
6025 | { | 6044 | { |
6026 | unsigned long freq; | 6045 | unsigned long freq; |
@@ -6107,7 +6126,7 @@ void intel_init_emon(struct drm_device *dev) | |||
6107 | dev_priv->corr = (lcfuse & LCFUSE_HIV_MASK); | 6126 | dev_priv->corr = (lcfuse & LCFUSE_HIV_MASK); |
6108 | } | 6127 | } |
6109 | 6128 | ||
6110 | static void gen6_enable_rc6(struct drm_i915_private *dev_priv) | 6129 | void gen6_enable_rps(struct drm_i915_private *dev_priv) |
6111 | { | 6130 | { |
6112 | int i; | 6131 | int i; |
6113 | 6132 | ||
@@ -6120,7 +6139,7 @@ static void gen6_enable_rc6(struct drm_i915_private *dev_priv) | |||
6120 | I915_WRITE(GEN6_RC_STATE, 0); | 6139 | I915_WRITE(GEN6_RC_STATE, 0); |
6121 | __gen6_force_wake_get(dev_priv); | 6140 | __gen6_force_wake_get(dev_priv); |
6122 | 6141 | ||
6123 | /* disable the counters and set determistic thresholds */ | 6142 | /* disable the counters and set deterministic thresholds */ |
6124 | I915_WRITE(GEN6_RC_CONTROL, 0); | 6143 | I915_WRITE(GEN6_RC_CONTROL, 0); |
6125 | 6144 | ||
6126 | I915_WRITE(GEN6_RC1_WAKE_RATE_LIMIT, 1000 << 16); | 6145 | I915_WRITE(GEN6_RC1_WAKE_RATE_LIMIT, 1000 << 16); |
@@ -6144,7 +6163,7 @@ static void gen6_enable_rc6(struct drm_i915_private *dev_priv) | |||
6144 | GEN6_RC_CTL_EI_MODE(1) | | 6163 | GEN6_RC_CTL_EI_MODE(1) | |
6145 | GEN6_RC_CTL_HW_ENABLE); | 6164 | GEN6_RC_CTL_HW_ENABLE); |
6146 | 6165 | ||
6147 | I915_WRITE(GEN6_RC_NORMAL_FREQ, | 6166 | I915_WRITE(GEN6_RPNSWREQ, |
6148 | GEN6_FREQUENCY(10) | | 6167 | GEN6_FREQUENCY(10) | |
6149 | GEN6_OFFSET(0) | | 6168 | GEN6_OFFSET(0) | |
6150 | GEN6_AGGRESSIVE_TURBO); | 6169 | GEN6_AGGRESSIVE_TURBO); |
@@ -6189,6 +6208,9 @@ static void gen6_enable_rc6(struct drm_i915_private *dev_priv) | |||
6189 | GEN6_PM_RP_DOWN_THRESHOLD | | 6208 | GEN6_PM_RP_DOWN_THRESHOLD | |
6190 | GEN6_PM_RP_UP_EI_EXPIRED | | 6209 | GEN6_PM_RP_UP_EI_EXPIRED | |
6191 | GEN6_PM_RP_DOWN_EI_EXPIRED); | 6210 | GEN6_PM_RP_DOWN_EI_EXPIRED); |
6211 | I915_WRITE(GEN6_PMIMR, 0); | ||
6212 | /* enable all PM interrupts */ | ||
6213 | I915_WRITE(GEN6_PMINTRMSK, 0); | ||
6192 | 6214 | ||
6193 | __gen6_force_wake_put(dev_priv); | 6215 | __gen6_force_wake_put(dev_priv); |
6194 | } | 6216 | } |
@@ -6381,9 +6403,6 @@ void intel_enable_clock_gating(struct drm_device *dev) | |||
6381 | I915_READ(MCHBAR_RENDER_STANDBY) & ~RCX_SW_EXIT); | 6403 | I915_READ(MCHBAR_RENDER_STANDBY) & ~RCX_SW_EXIT); |
6382 | } | 6404 | } |
6383 | } | 6405 | } |
6384 | |||
6385 | if (IS_GEN6(dev)) | ||
6386 | gen6_enable_rc6(dev_priv); | ||
6387 | } | 6406 | } |
6388 | 6407 | ||
6389 | void intel_disable_clock_gating(struct drm_device *dev) | 6408 | void intel_disable_clock_gating(struct drm_device *dev) |
@@ -6657,6 +6676,9 @@ void intel_modeset_init(struct drm_device *dev) | |||
6657 | intel_init_emon(dev); | 6676 | intel_init_emon(dev); |
6658 | } | 6677 | } |
6659 | 6678 | ||
6679 | if (IS_GEN6(dev)) | ||
6680 | gen6_enable_rps(dev_priv); | ||
6681 | |||
6660 | INIT_WORK(&dev_priv->idle_work, intel_idle_update); | 6682 | INIT_WORK(&dev_priv->idle_work, intel_idle_update); |
6661 | setup_timer(&dev_priv->idle_timer, intel_gpu_idle_timer, | 6683 | setup_timer(&dev_priv->idle_timer, intel_gpu_idle_timer, |
6662 | (unsigned long)dev); | 6684 | (unsigned long)dev); |
@@ -6690,6 +6712,8 @@ void intel_modeset_cleanup(struct drm_device *dev) | |||
6690 | 6712 | ||
6691 | if (IS_IRONLAKE_M(dev)) | 6713 | if (IS_IRONLAKE_M(dev)) |
6692 | ironlake_disable_drps(dev); | 6714 | ironlake_disable_drps(dev); |
6715 | if (IS_GEN6(dev)) | ||
6716 | gen6_disable_rps(dev); | ||
6693 | 6717 | ||
6694 | intel_disable_clock_gating(dev); | 6718 | intel_disable_clock_gating(dev); |
6695 | 6719 | ||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index acdea6549ec4..d782ad9fd6db 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -298,6 +298,8 @@ extern void intel_enable_clock_gating(struct drm_device *dev); | |||
298 | extern void intel_disable_clock_gating(struct drm_device *dev); | 298 | extern void intel_disable_clock_gating(struct drm_device *dev); |
299 | extern void ironlake_enable_drps(struct drm_device *dev); | 299 | extern void ironlake_enable_drps(struct drm_device *dev); |
300 | extern void ironlake_disable_drps(struct drm_device *dev); | 300 | extern void ironlake_disable_drps(struct drm_device *dev); |
301 | extern void gen6_enable_rps(struct drm_i915_private *dev_priv); | ||
302 | extern void gen6_disable_rps(struct drm_device *dev); | ||
301 | extern void intel_init_emon(struct drm_device *dev); | 303 | extern void intel_init_emon(struct drm_device *dev); |
302 | 304 | ||
303 | extern int intel_pin_and_fence_fb_obj(struct drm_device *dev, | 305 | extern int intel_pin_and_fence_fb_obj(struct drm_device *dev, |