[git pull] drm intel only fixes
Jesse Barnes
jbarnes at virtuousgeek.org
Wed Jan 12 14:22:06 PST 2011
On Wed, 12 Jan 2011 13:28:53 -0800
Linus Torvalds <torvalds at linux-foundation.org> wrote:
> On Wed, Jan 12, 2011 at 12:27 PM, Linus Torvalds
> <torvalds at linux-foundation.org> wrote:
> > On Wed, Jan 12, 2011 at 11:46 AM, Jesse Barnes <jbarnes at virtuousgeek.org> wrote:
> >>
> >> Since I doubt we're actually offloading to our video decode kernels for
> >> Flash video on your machine
> >
> > It's the latest 64-bit beta flash player, so maybe it does use hw acceleration.
> >
> >
> >> it could very well be a memory bw issue.
> >> Can you try this small patch to see if one of the low power watermarks
> >> is giving you trouble (note: cut & pasted)?
> >
> > No difference.
>
> Oh, and I'm also seeing corruption on my sandybridge machine. No video
> involved, the gdm login screen is already corrupted this way. Similar
> odd shifted lines etc, so I'd assume it's related.
Ah, ok. So it could be our internal FDI link is underrunning; it goes
between the CPU and PCH and carries display bits.
Are these both desktop type machines with DVI attached monitors?
If it's an FDI or transcoder problem, something like the below may give
us more info.
Can you take a picture of the corruption? If I see it I can try to
reproduce it here by messing with FDI, transcoder, and DP link settings
to see if they're the problem.
--
Jesse Barnes, Intel Open Source Technology Center
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index e418e8b..4c6c465 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -428,6 +428,15 @@ static void pch_irq_handler(struct drm_device *dev)
fdia = I915_READ(FDI_RXA_IIR);
fdib = I915_READ(FDI_RXB_IIR);
DRM_DEBUG_DRIVER("PCH FDI RX interrupt; FDI RXA IIR: 0x%08x, FDI RXB IIR: 0x%08x\n", fdia, fdib);
+
+ if (fdia & FDI_RX_ERR_MASK) {
+ DRM_ERROR("FDI A RX error: 0x%08x\n", fdia);
+ I915_WRITE(FDI_RXA_IIR, FDI_RX_ERR_MASK);
+ }
+ if (fdib & FDI_RX_ERR_MASK) {
+ DRM_ERROR("FDI B RX error: 0x%08x\n", fdib);
+ I915_WRITE(FDI_RXB_IIR, FDI_RX_ERR_MASK);
+ }
}
if (pch_iir & (SDE_TRANSB_CRC_DONE | SDE_TRANSA_CRC_DONE))
@@ -437,9 +446,9 @@ static void pch_irq_handler(struct drm_device *dev)
DRM_DEBUG_DRIVER("PCH transcoder CRC error interrupt\n");
if (pch_iir & SDE_TRANSB_FIFO_UNDER)
- DRM_DEBUG_DRIVER("PCH transcoder B underrun interrupt\n");
+ DRM_ERROR("PCH transcoder B underrun interrupt\n");
if (pch_iir & SDE_TRANSA_FIFO_UNDER)
- DRM_DEBUG_DRIVER("PCH transcoder A underrun interrupt\n");
+ DRM_ERROR("PCH transcoder A underrun interrupt\n");
}
static irqreturn_t ironlake_irq_handler(struct drm_device *dev)
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 40a407f..6e81d97 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -3101,6 +3101,11 @@
#define FDI_RX_PIXEL_FIFO_OVERFLOW (1<<2)
#define FDI_RX_CROSS_CLOCK_OVERFLOW (1<<1)
#define FDI_RX_SYMBOL_QUEUE_OVERFLOW (1<<0)
+#define FDI_RX_ERR_MASK (FDI_RX_FS_CODE_ERR | FDI_RX_FE_CODE_ERR | \
+ FDI_RX_SYMBOL_ERR_RATE_ABOVE | \
+ FDI_RX_PIXEL_FIFO_OVERFLOW | \
+ FDI_RX_CROSS_CLOCK_OVERFLOW | \
+ FDI_RX_SYMBOL_QUEUE_OVERFLOW)
#define FDI_RXA_IIR 0xf0014
#define FDI_RXA_IMR 0xf0018
More information about the dri-devel
mailing list