diff --git a/src/i830_driver.c b/src/i830_driver.c index b776ff6..8f353ed 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -1913,6 +1913,12 @@ SetHWOperatingState(ScrnInfoPtr pScrn) i830_start_ring(pScrn); if (!pI830->SWCursor) I830InitHWCursor(pScrn); + + /* Sane FIFO & arbitration settings */ + OUTREG(FWATER_BLC, 0x010f010f); + OUTREG(FWATER_BLC2, 0x0000010f); + OUTREG(MI_ARB_STATE, 0x00000040); + OUTREG(DSPARB, 0x1d9c); } enum pipe { @@ -2414,6 +2420,15 @@ I830BlockHandler(int i, if (!pI830->noAccel && !pI830->directRenderingEnabled) I830EmitFlush(pScrn); + if (INREG(PIPEASTAT) & FIFO_UNDERRUN) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "underrun on pipe A!\n"); + OUTREG(PIPEASTAT, INREG(PIPEASTAT) | FIFO_UNDERRUN); + } + if (INREG(PIPEBSTAT) & FIFO_UNDERRUN) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "underrun on pipe B!\n"); + OUTREG(PIPEBSTAT, INREG(PIPEBSTAT) | FIFO_UNDERRUN); + } + I830VideoBlockHandler(i, blockData, pTimeout, pReadmask); }