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; |
