Re: [git pull] drm intel only fixes

From: Jesse Barnes
Date: Wed Jan 12 2011 - 17:22:14 EST


On Wed, 12 Jan 2011 13:28:53 -0800
Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:

> On Wed, Jan 12, 2011 at 12:27 PM, Linus Torvalds
> <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
> > On Wed, Jan 12, 2011 at 11:46 AM, Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/