From 1ba45a3fcd40aaf4d373447fb9f252ca053f9105 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 1 Feb 2007 13:26:38 -0800 Subject: [PATCH] Improve register debugging output. This includes not reporting some fields on hardware where those bits are reserved, correcting one of the hardware error bit numbers, and reducing the severity of the debugging output warnings. --- src/i810_reg.h | 2 +- src/i830_debug.c | 49 +++++++++++++++++++++++++++++------------------ src/i830_driver.c | 4 ++-- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/i810_reg.h b/src/i810_reg.h index 33b059d6..68cce930 100644 --- a/src/i810_reg.h +++ b/src/i810_reg.h @@ -401,7 +401,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # define ERR_VERTEX_MAX (1 << 5) /* lpt/cst */ # define ERR_PGTBL_ERROR (1 << 4) # define ERR_DISPLAY_OVERLAY_UNDERRUN (1 << 3) -# define ERR_MAIN_MEMORY_REFRESH (1 << 2) +# define ERR_MAIN_MEMORY_REFRESH (1 << 1) # define ERR_INSTRUCTION_ERROR (1 << 0) diff --git a/src/i830_debug.c b/src/i830_debug.c index 897ab926..e0be0a4a 100644 --- a/src/i830_debug.c +++ b/src/i830_debug.c @@ -462,7 +462,7 @@ void i830DumpRegs (ScrnInfoPtr pScrn) break; default: p2 = 1; - xf86DrvMsg (pScrn->scrnIndex, X_ERROR, "p2 out of range\n"); + xf86DrvMsg (pScrn->scrnIndex, X_WARNING, "p2 out of range\n"); break; } switch ((dpll >> 16) & 0xff) { @@ -484,33 +484,39 @@ void i830DumpRegs (ScrnInfoPtr pScrn) p1 = 8; break; default: p1 = 1; - xf86DrvMsg (pScrn->scrnIndex, X_ERROR, "p1 out of range\n"); + xf86DrvMsg (pScrn->scrnIndex, X_WARNING, "p1 out of range\n"); break; } switch ((dpll >> 13) & 0x3) { case 0: ref = 96000; break; + case 3: + ref = 100000; + break; default: ref = 0; - xf86DrvMsg (pScrn->scrnIndex, X_ERROR, "ref out of range\n"); + xf86DrvMsg (pScrn->scrnIndex, X_WARNING, "ref out of range\n"); break; } - phase = (dpll >> 9) & 0xf; - switch (phase) { - case 6: - break; - default: - xf86DrvMsg (pScrn->scrnIndex, X_INFO, - "SDVO phase shift %d out of range -- probobly not " - "an issue.\n", phase); - break; + if (IS_I965G(pI830)) { + phase = (dpll >> 9) & 0xf; + switch (phase) { + case 6: + break; + default: + xf86DrvMsg (pScrn->scrnIndex, X_INFO, + "SDVO phase shift %d out of range -- probobly not " + "an issue.\n", phase); + break; + } } switch ((dpll >> 8) & 1) { case 0: break; default: - xf86DrvMsg (pScrn->scrnIndex, X_ERROR, "fp select out of range\n"); + xf86DrvMsg (pScrn->scrnIndex, X_WARNING, + "fp select out of range\n"); break; } n = ((fp >> 16) & 0x3f); @@ -645,13 +651,18 @@ i830_check_error_state(ScrnInfoPtr pScrn) temp = INREG16(ESR); if (temp != 0) { + Bool vertex_max = !IS_I965G(pI830) && (temp & ERR_VERTEX_MAX); + Bool pgtbl = temp & ERR_PGTBL_ERROR; + Bool underrun = !IS_I965G(pI830) && + (temp & ERR_DISPLAY_OVERLAY_UNDERRUN); + Bool instruction = !IS_I965G(pI830) && (temp & ERR_INSTRUCTION_ERROR); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "ESR is 0x%08lx%s%s%s%s\n", temp, - temp & ERR_VERTEX_MAX ? ", max vertices exceeded" : "", - temp & ERR_PGTBL_ERROR ? ", page table error" : "", - temp & ERR_DISPLAY_OVERLAY_UNDERRUN ? - ", display/overlay underrun" : "", - temp & ERR_INSTRUCTION_ERROR ? ", instruction error" : ""); + vertex_max ? ", max vertices exceeded" : "", + pgtbl ? ", page table error" : "", + underrun ? ", display/overlay underrun" : "", + instruction ? ", instruction error" : ""); errors++; } /* Check first for page table errors */ @@ -665,7 +676,7 @@ i830_check_error_state(ScrnInfoPtr pScrn) } else { temp = INREG(PGTBL_ER); if (temp != 0) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "PGTBL_ER is 0x%08lx" "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", temp, temp & PGTBL_ERR_HOST_GTT_PTE ? ", host gtt pte" : "", diff --git a/src/i830_driver.c b/src/i830_driver.c index cbba4373..0f663115 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -3042,8 +3042,8 @@ I830EnterVT(int scrnIndex, int flags) return FALSE; if (i830_check_error_state(pScrn)) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Existing errors found in hardware state\n"); + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "Existing errors found in hardware state.\n"); } ResetState(pScrn, FALSE);