diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-10 21:19:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-10 21:19:43 -0400 |
commit | 3e6dce76d99b328716b43929b9195adfee1de00c (patch) | |
tree | bb91c554cc1187aeb19f9965f539331dcae18f65 /drivers | |
parent | fbc1487019d287bd869baac846dee97f39f8f07c (diff) | |
parent | dd8849c8f59ec1cee4809a0c5e603e045abe860e (diff) |
Merge branch 'drm-intel-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/ickle/drm-intel
* 'drm-intel-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/ickle/drm-intel:
drm/i915: don't enable self-refresh on Ironlake
drm/i915: Double check that the wait_request is not pending before warning
Revert "drm/i915: Warn if we run out of FIFO space for a mode"
Revert "drm/i915: Allow LVDS on pipe A on gen4+"
Revert "drm/i915: Enable RC6 on Ironlake."
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 22 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 23 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 2 |
4 files changed, 31 insertions, 24 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 59457e83b011..744225ebb4b2 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
@@ -1350,17 +1350,25 @@ void i915_hangcheck_elapsed(unsigned long data) | |||
1350 | i915_seqno_passed(i915_get_gem_seqno(dev, | 1350 | i915_seqno_passed(i915_get_gem_seqno(dev, |
1351 | &dev_priv->render_ring), | 1351 | &dev_priv->render_ring), |
1352 | i915_get_tail_request(dev)->seqno)) { | 1352 | i915_get_tail_request(dev)->seqno)) { |
1353 | bool missed_wakeup = false; | ||
1354 | |||
1353 | dev_priv->hangcheck_count = 0; | 1355 | dev_priv->hangcheck_count = 0; |
1354 | 1356 | ||
1355 | /* Issue a wake-up to catch stuck h/w. */ | 1357 | /* Issue a wake-up to catch stuck h/w. */ |
1356 | if (dev_priv->render_ring.waiting_gem_seqno | | 1358 | if (dev_priv->render_ring.waiting_gem_seqno && |
1357 | dev_priv->bsd_ring.waiting_gem_seqno) { | 1359 | waitqueue_active(&dev_priv->render_ring.irq_queue)) { |
1358 | DRM_ERROR("Hangcheck timer elapsed... GPU idle, missed IRQ.\n"); | 1360 | DRM_WAKEUP(&dev_priv->render_ring.irq_queue); |
1359 | if (dev_priv->render_ring.waiting_gem_seqno) | 1361 | missed_wakeup = true; |
1360 | DRM_WAKEUP(&dev_priv->render_ring.irq_queue); | 1362 | } |
1361 | if (dev_priv->bsd_ring.waiting_gem_seqno) | 1363 | |
1362 | DRM_WAKEUP(&dev_priv->bsd_ring.irq_queue); | 1364 | if (dev_priv->bsd_ring.waiting_gem_seqno && |
1365 | waitqueue_active(&dev_priv->bsd_ring.irq_queue)) { | ||
1366 | DRM_WAKEUP(&dev_priv->bsd_ring.irq_queue); | ||
1367 | missed_wakeup = true; | ||
1363 | } | 1368 | } |
1369 | |||
1370 | if (missed_wakeup) | ||
1371 | DRM_ERROR("Hangcheck timer elapsed... GPU idle, missed IRQ.\n"); | ||
1364 | return; | 1372 | return; |
1365 | } | 1373 | } |
1366 | 1374 | ||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index d094e9129223..4f5e15577e89 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -2206,9 +2206,17 @@ | |||
2206 | #define WM1_LP_SR_EN (1<<31) | 2206 | #define WM1_LP_SR_EN (1<<31) |
2207 | #define WM1_LP_LATENCY_SHIFT 24 | 2207 | #define WM1_LP_LATENCY_SHIFT 24 |
2208 | #define WM1_LP_LATENCY_MASK (0x7f<<24) | 2208 | #define WM1_LP_LATENCY_MASK (0x7f<<24) |
2209 | #define WM1_LP_FBC_LP1_MASK (0xf<<20) | ||
2210 | #define WM1_LP_FBC_LP1_SHIFT 20 | ||
2209 | #define WM1_LP_SR_MASK (0x1ff<<8) | 2211 | #define WM1_LP_SR_MASK (0x1ff<<8) |
2210 | #define WM1_LP_SR_SHIFT 8 | 2212 | #define WM1_LP_SR_SHIFT 8 |
2211 | #define WM1_LP_CURSOR_MASK (0x3f) | 2213 | #define WM1_LP_CURSOR_MASK (0x3f) |
2214 | #define WM2_LP_ILK 0x4510c | ||
2215 | #define WM2_LP_EN (1<<31) | ||
2216 | #define WM3_LP_ILK 0x45110 | ||
2217 | #define WM3_LP_EN (1<<31) | ||
2218 | #define WM1S_LP_ILK 0x45120 | ||
2219 | #define WM1S_LP_EN (1<<31) | ||
2212 | 2220 | ||
2213 | /* Memory latency timer register */ | 2221 | /* Memory latency timer register */ |
2214 | #define MLTR_ILK 0x11222 | 2222 | #define MLTR_ILK 0x11222 |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 40cc5da264a9..19daead5b525 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -2767,14 +2767,8 @@ static unsigned long intel_calculate_wm(unsigned long clock_in_khz, | |||
2767 | /* Don't promote wm_size to unsigned... */ | 2767 | /* Don't promote wm_size to unsigned... */ |
2768 | if (wm_size > (long)wm->max_wm) | 2768 | if (wm_size > (long)wm->max_wm) |
2769 | wm_size = wm->max_wm; | 2769 | wm_size = wm->max_wm; |
2770 | if (wm_size <= 0) { | 2770 | if (wm_size <= 0) |
2771 | wm_size = wm->default_wm; | 2771 | wm_size = wm->default_wm; |
2772 | DRM_ERROR("Insufficient FIFO for plane, expect flickering:" | ||
2773 | " entries required = %ld, available = %lu.\n", | ||
2774 | entries_required + wm->guard_size, | ||
2775 | wm->fifo_size); | ||
2776 | } | ||
2777 | |||
2778 | return wm_size; | 2772 | return wm_size; |
2779 | } | 2773 | } |
2780 | 2774 | ||
@@ -3388,8 +3382,7 @@ static void ironlake_update_wm(struct drm_device *dev, int planea_clock, | |||
3388 | reg_value = I915_READ(WM1_LP_ILK); | 3382 | reg_value = I915_READ(WM1_LP_ILK); |
3389 | reg_value &= ~(WM1_LP_LATENCY_MASK | WM1_LP_SR_MASK | | 3383 | reg_value &= ~(WM1_LP_LATENCY_MASK | WM1_LP_SR_MASK | |
3390 | WM1_LP_CURSOR_MASK); | 3384 | WM1_LP_CURSOR_MASK); |
3391 | reg_value |= WM1_LP_SR_EN | | 3385 | reg_value |= (ilk_sr_latency << WM1_LP_LATENCY_SHIFT) | |
3392 | (ilk_sr_latency << WM1_LP_LATENCY_SHIFT) | | ||
3393 | (sr_wm << WM1_LP_SR_SHIFT) | cursor_wm; | 3386 | (sr_wm << WM1_LP_SR_SHIFT) | cursor_wm; |
3394 | 3387 | ||
3395 | I915_WRITE(WM1_LP_ILK, reg_value); | 3388 | I915_WRITE(WM1_LP_ILK, reg_value); |
@@ -5675,6 +5668,9 @@ void intel_init_clock_gating(struct drm_device *dev) | |||
5675 | I915_WRITE(DISP_ARB_CTL, | 5668 | I915_WRITE(DISP_ARB_CTL, |
5676 | (I915_READ(DISP_ARB_CTL) | | 5669 | (I915_READ(DISP_ARB_CTL) | |
5677 | DISP_FBC_WM_DIS)); | 5670 | DISP_FBC_WM_DIS)); |
5671 | I915_WRITE(WM3_LP_ILK, 0); | ||
5672 | I915_WRITE(WM2_LP_ILK, 0); | ||
5673 | I915_WRITE(WM1_LP_ILK, 0); | ||
5678 | } | 5674 | } |
5679 | /* | 5675 | /* |
5680 | * Based on the document from hardware guys the following bits | 5676 | * Based on the document from hardware guys the following bits |
@@ -5696,8 +5692,7 @@ void intel_init_clock_gating(struct drm_device *dev) | |||
5696 | ILK_DPFC_DIS2 | | 5692 | ILK_DPFC_DIS2 | |
5697 | ILK_CLK_FBC); | 5693 | ILK_CLK_FBC); |
5698 | } | 5694 | } |
5699 | if (IS_GEN6(dev)) | 5695 | return; |
5700 | return; | ||
5701 | } else if (IS_G4X(dev)) { | 5696 | } else if (IS_G4X(dev)) { |
5702 | uint32_t dspclk_gate; | 5697 | uint32_t dspclk_gate; |
5703 | I915_WRITE(RENCLK_GATE_D1, 0); | 5698 | I915_WRITE(RENCLK_GATE_D1, 0); |
@@ -5758,11 +5753,9 @@ void intel_init_clock_gating(struct drm_device *dev) | |||
5758 | OUT_RING(MI_FLUSH); | 5753 | OUT_RING(MI_FLUSH); |
5759 | ADVANCE_LP_RING(); | 5754 | ADVANCE_LP_RING(); |
5760 | } | 5755 | } |
5761 | } else { | 5756 | } else |
5762 | DRM_DEBUG_KMS("Failed to allocate render context." | 5757 | DRM_DEBUG_KMS("Failed to allocate render context." |
5763 | "Disable RC6\n"); | 5758 | "Disable RC6\n"); |
5764 | return; | ||
5765 | } | ||
5766 | } | 5759 | } |
5767 | 5760 | ||
5768 | if (I915_HAS_RC6(dev) && drm_core_check_feature(dev, DRIVER_MODESET)) { | 5761 | if (I915_HAS_RC6(dev) && drm_core_check_feature(dev, DRIVER_MODESET)) { |
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index b819c1081147..4fbb0165b26f 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
@@ -875,8 +875,6 @@ void intel_lvds_init(struct drm_device *dev) | |||
875 | 875 | ||
876 | intel_encoder->clone_mask = (1 << INTEL_LVDS_CLONE_BIT); | 876 | intel_encoder->clone_mask = (1 << INTEL_LVDS_CLONE_BIT); |
877 | intel_encoder->crtc_mask = (1 << 1); | 877 | intel_encoder->crtc_mask = (1 << 1); |
878 | if (IS_I965G(dev)) | ||
879 | intel_encoder->crtc_mask |= (1 << 0); | ||
880 | drm_encoder_helper_add(encoder, &intel_lvds_helper_funcs); | 878 | drm_encoder_helper_add(encoder, &intel_lvds_helper_funcs); |
881 | drm_connector_helper_add(connector, &intel_lvds_connector_helper_funcs); | 879 | drm_connector_helper_add(connector, &intel_lvds_connector_helper_funcs); |
882 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; | 880 | connector->display_info.subpixel_order = SubPixelHorizontalRGB; |