Remove error state dumping code.

This is replaced by intel_gpu_dump, and would no longer be used once UMS is
gone.
This commit is contained in:
Eric Anholt 2009-10-05 10:38:05 -07:00
parent 2370af32fe
commit 33c488e836
5 changed files with 1 additions and 797 deletions

View File

@ -105,10 +105,6 @@ I830WaitLpRing(ScrnInfoPtr pScrn, int n, int timeout_millis)
} else if (now - start > timeout_millis) {
ErrorF("Error in I830WaitLpRing(), timeout for %d seconds\n",
timeout_millis/1000);
if (IS_I965G(pI830))
i965_dump_error_state(pScrn);
else
i830_dump_error_state(pScrn);
ErrorF("space: %d wanted %d\n", ring->space, n);
pI830->uxa_driver = NULL;
FatalError("lockup\n");

View File

@ -1754,787 +1754,3 @@ void i830DumpRegs (ScrnInfoPtr pScrn)
}
xf86DrvMsg (pScrn->scrnIndex, X_INFO, "DumpRegsEnd\n");
}
#ifndef REG_DUMPER
static char *mi_cmds[0x40] = {
"MI_NOOP", /* 00 */
"Reserved 01",
"MI_USER_INTERRUPT",
"MI_WAIT_FOR_EVENT",
"MI_FLUSH", /* 04 */
"MI_ARB_CHECK",
NULL,
"MI_REPORT_HEAD",
NULL, /* 08 */
NULL,
"MI_BATCH_BUFFER_END",
NULL,
NULL, /* 0c */
NULL,
NULL,
NULL,
NULL, /* 10 */
"MI_OVERLAY_FLIP",
"MI_LOAD_SCAN_LINES_INCL",
"MI_LOAD_SCAN_LINES_EXCL",
"MI_DISPLAY_BUFFER_INFO", /* 14 */
NULL,
NULL,
NULL,
"MI_SET_CONTEXT", /* 18 */
NULL,
NULL,
NULL,
NULL, /* 1c */
NULL,
NULL,
NULL,
"MI_STORE_DATA_IMM", /* 20 */
"MI_STORE_DATA_INDEX",
"MI_LOAD_REGISTER_IMM",
NULL,
"MI_STORE_REGISTER_MEM", /* 24 */
NULL,
NULL,
NULL,
NULL, /* 28 */
NULL,
NULL,
NULL,
NULL, /* 2c */
NULL,
NULL,
NULL,
NULL, /* 30 */
"MI_BATCH_BUFFER_START",
NULL,
NULL,
NULL, /* 34 */
NULL,
NULL,
NULL,
NULL, /* 38 */
NULL,
NULL,
NULL,
NULL, /* 3c */
NULL,
NULL,
NULL,
};
static char *_2d_cmds[0x80] = {
NULL, /* 00 */
"XY_SETUP_BLT",
NULL,
"XY_SETUP_CLIP_BLT",
NULL, /* 04 */
NULL,
NULL,
NULL,
NULL, /* 08 */
NULL,
NULL,
NULL,
NULL, /* 0c */
NULL,
NULL,
NULL,
NULL, /* 10 */
"XY_SETUP_MONO_PATTERN_SL_BLT",
NULL,
NULL,
NULL, /* 14 */
NULL,
NULL,
NULL,
NULL, /* 18 */
NULL,
NULL,
NULL,
NULL, /* 1c */
NULL,
NULL,
NULL,
NULL, /* 20 */
NULL,
NULL,
NULL,
"XY_PIXEL_BLT", /* 24 */
"XY_SCANLINE_BLT",
"XY_TEXT_BLT",
NULL,
NULL, /* 28 */
NULL,
NULL,
NULL,
NULL, /* 2c */
NULL,
NULL,
NULL,
NULL, /* 30 */
"XY_TEXT_IMMEDIATE_BLT",
NULL,
NULL,
NULL, /* 34 */
NULL,
NULL,
NULL,
NULL, /* 38 */
NULL,
NULL,
NULL,
NULL, /* 3c */
NULL,
NULL,
NULL,
"COLOR_BLT", /* 40 */
NULL,
NULL,
"SRC_COPY_BLT",
NULL, /* 44 */
NULL,
NULL,
NULL,
NULL, /* 48 */
NULL,
NULL,
NULL,
NULL, /* 4c */
NULL,
NULL,
NULL,
"XY_COLOR_BLT", /* 50 */
"XY_PAT_BLT",
"XY_MONO_PAT_BLT",
"XY_SRC_COPY_BLT",
"XY_MONO_SRC_COPY_BLT", /* 54 */
"XY_FULL_BLT",
"XY_FULL_MONO_SRC_BLT",
"XY_FULL_MONO_PATTERN_BLT",
"XY_FULL_MONO_PATTERN_MONO_SRC_BLT", /* 58 */
"XY_MONO_PAT_FIXED_BLT",
NULL,
NULL,
NULL, /* 5c */
NULL,
NULL,
NULL,
NULL, /* 60 */
NULL,
NULL,
NULL,
NULL, /* 64 */
NULL,
NULL,
NULL,
NULL, /* 68 */
NULL,
NULL,
NULL,
NULL, /* 6c */
NULL,
NULL,
NULL,
NULL, /* 70 */
"XY_MONO_SRC_COPY_IMMEDIATE_BLT",
"XY_PAT_BLT_IMMEDIATE",
"XY_SRC_COPY_CHROMA_BLT",
"XY_FULL_IMMEDIATE_PATTERN_BLT", /* 74 */
"XY_FULL_MONO_SRC_IMMEDIATE_PATTERN_BLT",
"XY_PAT_CHROMA_BLT",
"XY_PAT_CHROMA_BLT_IMMEDIATE",
NULL, /* 78 */
NULL,
NULL,
NULL,
NULL, /* 7c */
NULL,
NULL,
NULL,
};
#define _3D_ONE_WORD 1
static struct {
char *name;
int flags;
} _3d_cmds[0x4][0x8][0x100] = {
{ /* Pipeline Type 00 (Common) */
{ /* Opcode 0 */
{ "URB_FENCE", 0 }, /* 00 */
{ "CS_URB_STATE", 0 },
{ "CONSTANT_BUFFER", 0 },
{ "STATE_PREFETCH", 0 },
},
{ /* Opcode 1 */
{ NULL, 0 }, /* 00 */
{ "STATE_BASE_ADDRESS", 0 },
{ "STATE_SIP", 0 },
{ NULL, 0 },
{ "PIPELINE_SELECT", _3D_ONE_WORD }, /* 04 */
},
},
{ /* Pipeline Type 01 (Single DW) */
{ /* Opcode 0 */
},
{ /* Opcode 1 */
{ NULL, 0 }, /* 00 */
{ NULL, 0 },
{ NULL, 0 },
{ NULL, 0 },
{ "PIPELINE_SELECT", 0 }, /* 04 */
{ NULL, 0 },
{ NULL, 0 },
{ NULL, 0 },
},
},
{ /* Pipeline Type 02 (Media) */
{ /* Opcode 0 */
{ "MEDIA_STATE_POINTERS", 0 }, /* 00 */
},
{ /* Opcode 1 */
{ "MEDIA_OBJECT", 0 }, /* 00 */
{ "MEDIA_OBJECT_EX", 0 },
{ "MEDIA_OBJECT_PTR", 0 },
},
},
{ /* Pipeline Type 03 (3D) */
{ /* Opcode 0 */
{ "3DSTATE_PIPELINED_POINTERS", 0 }, /* 00 */
{ "3DSTATE_BINDING_TABLE_POINTERS", 0 },
{ NULL, 0 },
{ NULL, 0 },
{ NULL, 0 }, /* 04 */
{ "3DSTATE_URB", 0 },
{ NULL, 0 },
{ NULL, 0 },
{ "3DSTATE_VERTEX_BUFFERS", 0 }, /* 08 */
{ "3DSTATE_VERTEX_ELEMENTS", 0 },
{ "3DSTATE_INDEX_BUFFER", 0 },
{ "3DSTATE_VF_STATISTICS", _3D_ONE_WORD },
{ NULL, 0 }, /* 0c */
{ "3DSTATE_VIEWPORT_STATE_POINTERS", 0 },
},
{ /* Opcode 1 */
{ "3DSTATE_DRAWING_RECTANGLE", 0 }, /* 00 */
{ "3DSTATE_CONSTANT_COLOR", 0 },
{ "3DSTATE_SAMPLER_PALETTE_LOAD0", 0 },
{ NULL, 0 },
{ "3DSTATE_CHROMA_KEY", 0 }, /* 04 */
{ "3DSTATE_DEPTH_BUFFER", 0 },
{ "3DSTATE_POLY_STIPPLE_OFFSET", 0 },
{ "3DSTATE_POLY_STIPPLE_PATTERN", 0 },
{ "3DSTATE_LINE_STIPPLE", 0 }, /* 08 */
{ "3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP", 0 },
},
{ /* Opcode 2 */
{ "PIPE_CONTROL", 0 }, /* 00 */
},
{ /* Opcode 3 */
{ "3DPRIMITIVE", 0 }, /* 00 */
},
},
};
static int
i830_valid_command (uint32_t cmd)
{
uint32_t type = (cmd >> 29) & 0x7;
uint32_t pipeline_type;
uint32_t opcode;
uint32_t subopcode;
uint32_t count;
switch (type) {
case 0: /* Memory Interface */
opcode = (cmd >> 23) & 0x3f;
if (opcode < 0x10)
count = 1;
else
count = (cmd & 0x3f) + 2;
if (opcode == 0x00 && cmd != 0x00000000)
return -1;
if (!mi_cmds[opcode])
return -1;
break;
case 1:
return -1;
case 2: /* 2D */
count = (cmd & 0x1f) + 2;
opcode = (cmd >> 22) & 0x7f;
if (!_2d_cmds[opcode])
return -1;
break;
case 3: /* 3D */
pipeline_type = (cmd >> 27) & 0x3;
opcode = (cmd >> 24) & 0x7;
subopcode = (cmd >> 16) & 0xff;
if (_3d_cmds[pipeline_type][opcode][subopcode].flags & _3D_ONE_WORD)
count = 1;
else
count = (cmd & 0xff) + 2;
if (!_3d_cmds[pipeline_type][opcode][subopcode].name)
return -1;
break;
default:
return -1;
}
return count;
}
static int
i830_dump_cmd (uint32_t cmd, int count)
{
uint32_t type = (cmd >> 29) & 0x7;
uint32_t pipeline_type;
uint32_t opcode;
uint32_t subopcode;
int ret = 1;
ErrorF ("\t");
switch (type) {
case 0: /* Memory Interface */
opcode = (cmd >> 23) & 0x3f;
if (mi_cmds[opcode])
ErrorF ("%-40.40s %d\n", mi_cmds[opcode], count);
else
ErrorF ("Memory Interface Reserved\n");
break;
case 1:
break;
case 2: /* 2D */
opcode = (cmd >> 22) & 0x7f;
if (_2d_cmds[opcode])
ErrorF ("%-40.40s %d\n", _2d_cmds[opcode], count);
else
ErrorF ("2D Reserved\n");
break;
case 3: /* 3D */
pipeline_type = (cmd >> 27) & 0x3;
opcode = (cmd >> 24) & 0x7;
subopcode = (cmd >> 16) & 0xff;
if (_3d_cmds[pipeline_type][opcode][subopcode].name) {
ErrorF ("%-40.40s %d\n",
_3d_cmds[pipeline_type][opcode][subopcode].name,
count);
} else {
ErrorF ("3D/Media Reserved (pipe %d op %d sub %d)\n", pipeline_type, opcode, subopcode);
}
break;
default:
ErrorF ("Reserved\n");
break;
}
return ret;
}
static int
i830_valid_chain (ScrnInfoPtr pScrn, unsigned int ring, unsigned int end)
{
I830Ptr pI830 = I830PTR(pScrn);
unsigned int head, tail, mask;
volatile unsigned char *virt;
uint32_t data;
int count;
volatile uint32_t *ptr;
head = (INREG (LP_RING + RING_HEAD)) & I830_HEAD_MASK;
tail = INREG (LP_RING + RING_TAIL) & I830_TAIL_MASK;
mask = pI830->ring.tail_mask;
virt = pI830->ring.virtual_start;
ErrorF ("Ring at virtual %p head 0x%x tail 0x%x count %d\n",
virt, head, tail, (((tail + mask + 1) - head) & mask) >> 2);
for (;;)
{
ptr = (volatile uint32_t *) (virt + ring);
data = *ptr;
count = i830_valid_command (data);
if (count < 0)
return 0;
while (count > 0 && ring != end)
{
ring = (ring + 4) & mask;
count--;
}
if (ring == end) {
if (count == 0)
return 1;
else
return 0;
}
}
}
static void
i830_dump_cmds (ScrnInfoPtr pScrn,
volatile unsigned char *virt,
uint32_t start,
uint32_t stop,
uint32_t mask,
uint32_t acthd)
{
I830Ptr pI830 = I830PTR(pScrn);
uint32_t ring = start;
uint32_t cmd = start;
uint32_t data;
uint32_t batch_start_mask = ((0x7 << 29) |
(0x3f << 23) |
(0x7ff << 12) |
(1 << 11) |
(1 << 7) |
(1 << 6) |
(0x3f << 0));
uint32_t batch_start_cmd = ((0x0 << 29) |
(0x31 << 23) |
(0x00 << 12) |
(0 << 11) |
(1 << 7) |
(0 << 6) |
(0 << 0));
int count;
volatile uint32_t *ptr;
while (ring != stop)
{
if (ring == acthd)
ErrorF ("****");
ErrorF ("\t%08x: %08x", ring, *(volatile unsigned int *) (virt + ring));
if (ring == cmd)
{
ptr = (volatile uint32_t *) (virt + ring);
data = *ptr;
count = i830_valid_command (data);
i830_dump_cmd (data, count);
/* check for MI_BATCH_BUFFER_END */
if (data == (0x0a << 23))
stop = (ring + 4) & mask;
/* check for MI_BATCH_BUFFER_START */
if ((data & batch_start_mask) == batch_start_cmd)
{
uint32_t batch = ptr[1] & ~3;
if (batch < pI830->FbMapSize) {
ErrorF ("\t%08x: %08x\n", (ring + 4) & mask, batch);
ErrorF ("Batch buffer at 0x%08x {\n", batch);
i830_dump_cmds (pScrn, pI830->FbBase, batch,
batch + 256, 0xffffffff, acthd);
ErrorF ("}\n");
ring = (ring + (count - 1) * 4) & mask;
}
}
cmd = (cmd + count * 4) & mask;
} else
ErrorF ("\n");
ring = (ring + 4) & mask;
}
}
static void
i830_dump_ring(ScrnInfoPtr pScrn, uint32_t acthd)
{
I830Ptr pI830 = I830PTR(pScrn);
unsigned int head, tail, mask, cmd;
volatile unsigned char *virt;
head = (INREG (LP_RING + RING_HEAD)) & I830_HEAD_MASK;
tail = INREG (LP_RING + RING_TAIL) & I830_TAIL_MASK;
mask = pI830->ring.tail_mask;
virt = pI830->ring.virtual_start;
ErrorF ("Ring at virtual %p head 0x%x tail 0x%x count %d acthd 0x%x\n",
virt, head, tail, (((tail + mask + 1) - head) & mask) >> 2, acthd);
/* walk back by instructions */
for (cmd = (head - 256) & mask;
cmd != (head & mask);
cmd = (cmd + 4) & mask)
{
if (i830_valid_chain (pScrn, cmd, (head & mask)))
break;
}
i830_dump_cmds (pScrn, virt, cmd, head, mask, acthd);
ErrorF ("Ring end\n");
}
/* Famous last words
*/
void
i830_dump_error_state(ScrnInfoPtr pScrn)
{
I830Ptr pI830 = I830PTR(pScrn);
ErrorF("pgetbl_ctl: 0x%08x getbl_err: 0x%08x\n",
INREG(PGETBL_CTL), INREG(PGE_ERR));
ErrorF("ipeir: 0x%08x iphdr: 0x%08x\n", INREG(IPEIR), INREG(IPEHR));
ErrorF("LP ring tail: 0x%08x head: 0x%08x len: 0x%08x start 0x%08x\n",
INREG(LP_RING + RING_TAIL),
INREG(LP_RING + RING_HEAD) & HEAD_ADDR,
INREG(LP_RING + RING_LEN),
INREG(LP_RING + RING_START));
ErrorF("eir: 0x%04x esr: 0x%04x emr: 0x%04x\n",
INREG16(EIR), INREG16(ESR), INREG16(EMR));
ErrorF("instdone: 0x%04x instpm: 0x%04x\n",
INREG16(INST_DONE), INREG8(INST_PM));
ErrorF("memmode: 0x%08x instps: 0x%08x\n",
INREG(MEMMODE), INREG(INST_PS));
ErrorF("hwstam: 0x%04x ier: 0x%04x imr: 0x%04x iir: 0x%04x\n",
INREG16(HWSTAM), INREG16(IER), INREG16(IMR), INREG16(IIR));
i830_dump_ring (pScrn, INREG(ACTHD));
}
void
i965_dump_error_state(ScrnInfoPtr pScrn)
{
I830Ptr pI830 = I830PTR(pScrn);
uint32_t acthd;
ErrorF("pgetbl_ctl: 0x%08x pgetbl_err: 0x%08x\n",
INREG(PGETBL_CTL), INREG(PGE_ERR));
ErrorF("ipeir: 0x%08x iphdr: 0x%08x\n",
INREG(IPEIR_I965), INREG(IPEHR_I965));
ErrorF("LP ring tail: 0x%08x head: %x len: 0x%08x start 0x%08x\n",
INREG(LP_RING + RING_TAIL),
INREG(LP_RING + RING_HEAD) & HEAD_ADDR,
INREG(LP_RING + RING_LEN),
INREG(LP_RING + RING_START));
ErrorF("Err ID (eir): 0x%08x\n"
"Err Status (esr): 0x%08x\n"
"Err Mask (emr): 0x%08x\n",
INREG(EIR), INREG(ESR), INREG(EMR));
ErrorF("instdone: 0x%08x instdone_1: 0x%08x\n",
INREG(INST_DONE_I965), INREG(INST_DONE_1));
ErrorF("instpm: 0x%08x\n", INREG(INST_PM));
ErrorF("memmode: 0x%08x instps: 0x%08x\n",
INREG(MEMMODE), INREG(INST_PS_I965));
ErrorF("HW Status mask (hwstam): 0x%08x\nIRQ enable (ier): 0x%08x "
"imr: 0x%08x iir: 0x%08x\n",
INREG(HWSTAM), INREG(IER), INREG(IMR), INREG(IIR));
acthd = INREG(ACTHD_I965);
ErrorF("acthd: 0x%08x dma_fadd_p: 0x%08x\n",
acthd, INREG(DMA_FADD_P));
ErrorF("ecoskpd: 0x%08x excc: 0x%08x\n",
INREG(ECOSKPD), INREG(EXCC));
ErrorF("cache_mode: 0x%08x/0x%08x\n", INREG(CACHE_MODE_0),
INREG(CACHE_MODE_1));
ErrorF("mi_arb_state: 0x%08x\n", INREG(MI_ARB_STATE));
ErrorF("IA_VERTICES_COUNT_QW 0x%08x/0x%08x\n",
INREG(IA_VERTICES_COUNT_QW),
INREG(IA_VERTICES_COUNT_QW+4));
ErrorF("IA_PRIMITIVES_COUNT_QW 0x%08x/0x%08x\n",
INREG(IA_PRIMITIVES_COUNT_QW),
INREG(IA_PRIMITIVES_COUNT_QW+4));
ErrorF("VS_INVOCATION_COUNT_QW 0x%08x/0x%08x\n",
INREG(VS_INVOCATION_COUNT_QW),
INREG(VS_INVOCATION_COUNT_QW+4));
ErrorF("GS_INVOCATION_COUNT_QW 0x%08x/0x%08x\n",
INREG(GS_INVOCATION_COUNT_QW),
INREG(GS_INVOCATION_COUNT_QW+4));
ErrorF("GS_PRIMITIVES_COUNT_QW 0x%08x/0x%08x\n",
INREG(GS_PRIMITIVES_COUNT_QW),
INREG(GS_PRIMITIVES_COUNT_QW+4));
ErrorF("CL_INVOCATION_COUNT_QW 0x%08x/0x%08x\n",
INREG(CL_INVOCATION_COUNT_QW),
INREG(CL_INVOCATION_COUNT_QW+4));
ErrorF("CL_PRIMITIVES_COUNT_QW 0x%08x/0x%08x\n",
INREG(CL_PRIMITIVES_COUNT_QW),
INREG(CL_PRIMITIVES_COUNT_QW+4));
ErrorF("PS_INVOCATION_COUNT_QW 0x%08x/0x%08x\n",
INREG(PS_INVOCATION_COUNT_QW),
INREG(PS_INVOCATION_COUNT_QW+4));
ErrorF("PS_DEPTH_COUNT_QW 0x%08x/0x%08x\n",
INREG(PS_DEPTH_COUNT_QW),
INREG(PS_DEPTH_COUNT_QW+4));
ErrorF("WIZ_CTL 0x%08x\n", INREG(WIZ_CTL));
ErrorF("TS_CTL 0x%08x TS_DEBUG_DATA 0x%08x\n", INREG(TS_CTL),
INREG(TS_DEBUG_DATA));
ErrorF("TD_CTL 0x%08x / 0x%08x\n",
INREG(TD_CTL), INREG(TD_CTL2));
i830_dump_ring (pScrn, acthd);
}
/**
* Checks the hardware error state bits.
*
* \return TRUE if any errors were found.
*/
Bool
i830_check_error_state(ScrnInfoPtr pScrn)
{
I830Ptr pI830 = I830PTR(pScrn);
int errors = 0;
unsigned long temp, head, tail;
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,
vertex_max ? ", max vertices exceeded" : "",
pgtbl ? ", page table error" : "",
underrun ? ", display/overlay underrun" : "",
instruction ? ", instruction error" : "");
errors++;
}
/* Check first for page table errors */
if (!IS_I9XX(pI830)) {
temp = INREG(PGE_ERR);
if (temp != 0) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"PGTBL_ER is 0x%08lx\n", temp);
errors++;
}
} else {
temp = INREG(PGTBL_ER);
if (temp != 0) {
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" : "",
temp & PGTBL_ERR_HOST_PTE_DATA ? ", host pte data" : "",
temp & PGTBL_ERR_DISPA_GTT_PTE ? ", display A pte" : "",
temp & PGTBL_ERR_DISPA_TILING ?
", display A tiling" : "",
temp & PGTBL_ERR_DISPB_GTT_PTE ? ", display B pte" : "",
temp & PGTBL_ERR_DISPB_TILING ?
", display B tiling" : "",
temp & PGTBL_ERR_DISPC_GTT_PTE ? ", display C pte" : "",
temp & PGTBL_ERR_DISPC_TILING ?
", display C tiling" : "",
temp & PGTBL_ERR_OVERLAY_GTT_PTE ?
", overlay GTT PTE" : "",
temp & PGTBL_ERR_OVERLAY_TILING ?
", overlay tiling" : "",
temp & PGTBL_ERR_CS_GTT ? ", CS GTT" : "",
temp & PGTBL_ERR_CS_INSTRUCTION_GTT_PTE ?
", CS instruction GTT PTE" : "",
temp & PGTBL_ERR_CS_VERTEXDATA_GTT_PTE ?
", CS vertex data GTT PTE" : "",
temp & PGTBL_ERR_BIN_INSTRUCTION_GTT_PTE ?
", BIN instruction GTT PTE" : "",
temp & PGTBL_ERR_BIN_VERTEXDATA_GTT_PTE ?
", BIN vertex data GTT PTE" : "",
temp & PGTBL_ERR_LC_GTT_PTE ? ", LC pte" : "",
temp & PGTBL_ERR_LC_TILING ? ", LC tiling" : "",
temp & PGTBL_ERR_MT_GTT_PTE ? ", MT pte" : "",
temp & PGTBL_ERR_MT_TILING ? ", MT tiling" : "");
errors++;
}
}
temp = INREG(PGETBL_CTL);
if (!(temp & 1)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"PGTBL_CTL (0x%08lx) indicates GTT is disabled\n", temp);
errors++;
}
temp = INREG(LP_RING + RING_LEN);
if (!pI830->have_gem && (temp & 1)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"PRB0_CTL (0x%08lx) indicates ring buffer enabled\n", temp);
errors++;
}
head = INREG(LP_RING + RING_HEAD);
tail = INREG(LP_RING + RING_TAIL);
if ((tail & I830_TAIL_MASK) != (head & I830_HEAD_MASK)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"PRB0_HEAD (0x%08lx) and PRB0_TAIL (0x%08lx) indicate "
"ring buffer not flushed\n", head, tail);
errors++;
}
#if 0
if (errors) {
if (IS_I965G(pI830))
i965_dump_error_state(pScrn);
else
i830_dump_error_state(pScrn);
}
#endif
return (errors != 0);
}
#endif /* !REG_DUMPER */

View File

@ -28,7 +28,4 @@
void i830TakeRegSnapshot(ScrnInfoPtr pScrn);
void i830CompareRegsToSnapshot(ScrnInfoPtr pScrn, char *where);
void i830DumpRegs (ScrnInfoPtr pScrn);
void i830_dump_error_state(ScrnInfoPtr pScrn);
void i965_dump_error_state(ScrnInfoPtr pScrn);
Bool i830_check_error_state(ScrnInfoPtr pScrn);

View File

@ -2992,11 +2992,6 @@ I830EnterVT(int scrnIndex, int flags)
gen4_render_state_init(pScrn);
if (!pI830->use_drm_mode) {
if (i830_check_error_state(pScrn)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Existing errors found in hardware state.\n");
}
/* Re-set up the ring. */
if (!pI830->have_gem) {
i830_stop_ring(pScrn, FALSE);

View File

@ -1242,7 +1242,7 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
drm_intel_bo_unreference(bind_bo);
#if WATCH_STATS
i830_dump_error_state(pScrn);
/* i830_dump_error_state(pScrn); */
#endif
}