diff options
author | Eric Anholt <eric@anholt.net> | 2008-08-31 14:27:29 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2008-09-09 19:07:53 -0700 |
commit | da63b5adec8555cc7b3e71f33933f4c9dd6f714e (patch) | |
tree | 6ee974e335e95551eab2a0e99ce0a4292b0d4b12 | |
parent | c7aaf0118baa34e583df5f1c29c9dab9a6af6eb7 (diff) |
Add some MCHBAR registers for debugging tile swizzling issues.
-rw-r--r-- | src/i810_reg.h | 14 | ||||
-rw-r--r-- | src/i830_debug.c | 42 |
2 files changed, 56 insertions, 0 deletions
diff --git a/src/i810_reg.h b/src/i810_reg.h index a73709ba..9a85d09e 100644 --- a/src/i810_reg.h +++ b/src/i810_reg.h @@ -113,6 +113,20 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define COLEXP_RESERVED 0x30 #define BITBLT_STATUS 0x01 +#define CHDECMISC 0x10111 +#define C0DRB0 0x10200 +#define C0DRB1 0x10202 +#define C0DRB2 0x10204 +#define C0DRB3 0x10206 +#define C0DRA01 0x10208 +#define C0DRA23 0x1020a +#define C1DRB0 0x10600 +#define C1DRB1 0x10602 +#define C1DRB2 0x10604 +#define C1DRB3 0x10606 +#define C1DRA01 0x10608 +#define C1DRA23 0x1060a + /* p375. */ #define DISPLAY_CNTL 0x70008 diff --git a/src/i830_debug.c b/src/i830_debug.c index 21afb466..17ee40fa 100644 --- a/src/i830_debug.c +++ b/src/i830_debug.c @@ -48,6 +48,32 @@ #define DEBUGSTRING(func) static char *func(I830Ptr pI830, int reg, \ uint32_t val) +DEBUGSTRING(i830_16bit_func) +{ + return XNFprintf("0x%04x", (uint16_t)val); +} + +DEBUGSTRING(i830_debug_chdecmisc) +{ + char *enhmodesel = NULL; + + switch ((val >> 5) & 3) { + case 1: enhmodesel = "XOR bank/rank"; break; + case 2: enhmodesel = "swap bank"; break; + case 3: enhmodesel = "XOR bank"; break; + case 0: enhmodesel = "none"; break; + } + + return XNFprintf("%s, ch2 enh %sabled, ch1 enh %sabled, ch0 enh %sabled, " + "flex %sabled, ep %spresent", + enhmodesel, + (val & (1 << 4)) ? "en" : "dis", + (val & (1 << 3)) ? "en" : "dis", + (val & (1 << 2)) ? "en" : "dis", + (val & (1 << 1)) ? "en" : "dis", + (val & (1 << 0)) ? "" : "not "); +} + DEBUGSTRING(i830_debug_xyminus1) { return XNFprintf("%d, %d", (val & 0xffff) + 1, @@ -481,6 +507,8 @@ DEBUGSTRING(i810_debug_fence_new) #define DEFINEREG(reg) \ { reg, #reg, NULL, 0 } +#define DEFINEREG_16BIT(reg) \ + { reg, #reg, i830_16bit_func, 0 } #define DEFINEREG2(reg, func) \ { reg, #reg, func, 0 } @@ -490,6 +518,20 @@ static struct i830SnapshotRec { char *(*debug_output)(I830Ptr pI830, int reg, uint32_t val); uint32_t val; } i830_snapshot[] = { + DEFINEREG2(CHDECMISC, i830_debug_chdecmisc), + DEFINEREG_16BIT(C0DRB0), + DEFINEREG_16BIT(C0DRB1), + DEFINEREG_16BIT(C0DRB2), + DEFINEREG_16BIT(C0DRB3), + DEFINEREG_16BIT(C1DRB0), + DEFINEREG_16BIT(C1DRB1), + DEFINEREG_16BIT(C1DRB2), + DEFINEREG_16BIT(C1DRB3), + DEFINEREG_16BIT(C0DRA01), + DEFINEREG_16BIT(C0DRA23), + DEFINEREG_16BIT(C1DRA01), + DEFINEREG_16BIT(C1DRA23), + DEFINEREG2(VCLK_DIVISOR_VGA0, i830_debug_fp), DEFINEREG2(VCLK_DIVISOR_VGA1, i830_debug_fp), DEFINEREG2(VCLK_POST_DIV, i830_debug_vga_pd), |