#include #include #include "reg.h" #include "fns.h" void dumppgtbl(u32int *mmio) { u32int pgtblctl, pgtbler; pgtblctl = mmio[PGTBL_CTL/4]; pgtbler = mmio[PGTBL_ER/4]; print("PGTBL_CTL:%08ux\n", pgtblctl); print("PGTBL_ER: %08ux\n", pgtbler); if(pgtbler & (1<<0)) print("invalid gtt entry during fetch on behalf of host\n"); if(pgtbler & (1<<1)) print("valid pte references illegal memory\n"); if(pgtbler & (1<<4)) print("invalid gtt entry during display a fetch\n"); if(pgtbler & (1<<8)) print("invalid gtt entry during display b fetch\n"); if(pgtbler & (1<<12)) print("invalid gtt entry during display c fetch\n"); if(pgtbler & (1<<16)) print("invalid gtt entry during overlay fetch\n"); if(pgtbler & (1<<18)) print("invalid gtt entry during cursor fetch\n"); if(pgtbler & (1<<19)) print("CS_INVALID_GTT\n"); if(pgtbler & (1<<20)) print("invalid gtt entry during command fetch\n"); } void dumpesr(u32int *mmio) { u32int esr; esr = mmio[ESR/4]; print("ESR: %08ux\n", esr); if(esr&1) print("instruction error\n"); if(esr&2) print("main memory refresh timer error\n"); if(esr&4) print("bcs page table error\n"); if(esr&8) print("command priviledge violation error\n"); if(esr&16) print("memory priviledge violation error\n"); if(esr&32) print("page table error\n"); if(esr&0xffffffc0) print("some other horrible error\n"); } void dumpshit(u32int *mmio) { print("IPEIR: %08ux\n", mmio[IPEIR/4]); print("IPEHR: %08ux\n", mmio[IPEHR/4]); print("INSTDONE: %08ux\n", mmio[INSTDONE/4]); print("INSTPS: %08ux\n", mmio[INSTPS/4]); print("ACTHD: %08ux\n", mmio[ACTHD/4]); dumppgtbl(mmio); dumpesr(mmio); dumpring(mmio); } void dumpring(u32int *mmio) { u32int tail, head, start, ctl, nopid; tail = mmio[RING_BUFFER_TAIL/4]; head = mmio[RING_BUFFER_HEAD/4]; start = mmio[RING_BUFFER_START/4]; ctl = mmio[RING_BUFFER_CTL/4]; nopid = mmio[NOPID/4]; print("tail 0x%08ux head 0x%08ux start 0x%08ux ctl 0x%08ux nopid 0x%08ux\n", tail, head, start, ctl, nopid); }