summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Fufutos <fufutos610@hotmail.com>2006-06-07 19:43:50 +0300
committerLuc Verhaegen <libv@skynet.be>2006-06-14 06:14:07 +0200
commit38fbea1e4ced5a0b19aca0cc4368afb793c9aeab (patch)
treefc0b8514b5c3153c76532084c6aec04abdb33216
parent27d277bef3b10de26f238c5331c1af2ec464e366 (diff)
[PATCH] Minor MMIO cache testing fixes.
Remove superflous MMIO cache test. Also, move the test for Block1Base outside TestRegisterCachingXV() (for scaler and overlay registers) in preperation for caching some 3D registers as well.
-rw-r--r--src/atimach64accel.c149
1 files changed, 70 insertions, 79 deletions
diff --git a/src/atimach64accel.c b/src/atimach64accel.c
index 150fe4a..bc4ff4c 100644
--- a/src/atimach64accel.c
+++ b/src/atimach64accel.c
@@ -130,17 +130,11 @@ ATIMach64ValidateClip
}
}
-static __inline__ void TestRegisterCachingDP
-(
- ScrnInfoPtr pScreenInfo
-)
+static __inline__ void
+TestRegisterCachingDP(ScrnInfoPtr pScreenInfo)
{
ATIPtr pATI = ATIPTR(pScreenInfo);
- /*
- * For debugging purposes, attempt to verify that each cached register
- * should actually be cached.
- */
TestRegisterCaching(SRC_CNTL);
TestRegisterCaching(HOST_CNTL);
@@ -178,63 +172,58 @@ static __inline__ void TestRegisterCachingDP
TestRegisterCaching(CLR_CMP_CNTL);
}
-static __inline__ void TestRegisterCachingXV
-(
- ScrnInfoPtr pScreenInfo
-)
+static __inline__ void
+TestRegisterCachingXV(ScrnInfoPtr pScreenInfo)
{
ATIPtr pATI = ATIPTR(pScreenInfo);
- if (pATI->Block1Base)
- {
- TestRegisterCaching(OVERLAY_Y_X_START);
- TestRegisterCaching(OVERLAY_Y_X_END);
+ TestRegisterCaching(OVERLAY_Y_X_START);
+ TestRegisterCaching(OVERLAY_Y_X_END);
- TestRegisterCaching(OVERLAY_GRAPHICS_KEY_CLR);
- TestRegisterCaching(OVERLAY_GRAPHICS_KEY_MSK);
+ TestRegisterCaching(OVERLAY_GRAPHICS_KEY_CLR);
+ TestRegisterCaching(OVERLAY_GRAPHICS_KEY_MSK);
- TestRegisterCaching(OVERLAY_KEY_CNTL);
+ TestRegisterCaching(OVERLAY_KEY_CNTL);
- TestRegisterCaching(OVERLAY_SCALE_INC);
- TestRegisterCaching(OVERLAY_SCALE_CNTL);
+ TestRegisterCaching(OVERLAY_SCALE_INC);
+ TestRegisterCaching(OVERLAY_SCALE_CNTL);
- TestRegisterCaching(SCALER_HEIGHT_WIDTH);
+ TestRegisterCaching(SCALER_HEIGHT_WIDTH);
- TestRegisterCaching(SCALER_TEST);
+ TestRegisterCaching(SCALER_TEST);
- TestRegisterCaching(VIDEO_FORMAT);
+ TestRegisterCaching(VIDEO_FORMAT);
- if (pATI->Chip < ATI_CHIP_264VTB)
- {
- TestRegisterCaching(BUF0_OFFSET);
- TestRegisterCaching(BUF0_PITCH);
- TestRegisterCaching(BUF1_OFFSET);
- TestRegisterCaching(BUF1_PITCH);
- }
- else
- {
- TestRegisterCaching(SCALER_BUF0_OFFSET);
- TestRegisterCaching(SCALER_BUF1_OFFSET);
- TestRegisterCaching(SCALER_BUF_PITCH);
+ if (pATI->Chip < ATI_CHIP_264VTB)
+ {
+ TestRegisterCaching(BUF0_OFFSET);
+ TestRegisterCaching(BUF0_PITCH);
+ TestRegisterCaching(BUF1_OFFSET);
+ TestRegisterCaching(BUF1_PITCH);
+ }
+ else
+ {
+ TestRegisterCaching(SCALER_BUF0_OFFSET);
+ TestRegisterCaching(SCALER_BUF1_OFFSET);
+ TestRegisterCaching(SCALER_BUF_PITCH);
- TestRegisterCaching(OVERLAY_EXCLUSIVE_HORZ);
- TestRegisterCaching(OVERLAY_EXCLUSIVE_VERT);
+ TestRegisterCaching(OVERLAY_EXCLUSIVE_HORZ);
+ TestRegisterCaching(OVERLAY_EXCLUSIVE_VERT);
- if (pATI->Chip >= ATI_CHIP_264GTPRO)
- {
- TestRegisterCaching(SCALER_COLOUR_CNTL);
-
- TestRegisterCaching(SCALER_H_COEFF0);
- TestRegisterCaching(SCALER_H_COEFF1);
- TestRegisterCaching(SCALER_H_COEFF2);
- TestRegisterCaching(SCALER_H_COEFF3);
- TestRegisterCaching(SCALER_H_COEFF4);
-
- TestRegisterCaching(SCALER_BUF0_OFFSET_U);
- TestRegisterCaching(SCALER_BUF0_OFFSET_V);
- TestRegisterCaching(SCALER_BUF1_OFFSET_U);
- TestRegisterCaching(SCALER_BUF1_OFFSET_V);
- }
+ if (pATI->Chip >= ATI_CHIP_264GTPRO)
+ {
+ TestRegisterCaching(SCALER_COLOUR_CNTL);
+
+ TestRegisterCaching(SCALER_H_COEFF0);
+ TestRegisterCaching(SCALER_H_COEFF1);
+ TestRegisterCaching(SCALER_H_COEFF2);
+ TestRegisterCaching(SCALER_H_COEFF3);
+ TestRegisterCaching(SCALER_H_COEFF4);
+
+ TestRegisterCaching(SCALER_BUF0_OFFSET_U);
+ TestRegisterCaching(SCALER_BUF0_OFFSET_V);
+ TestRegisterCaching(SCALER_BUF1_OFFSET_U);
+ TestRegisterCaching(SCALER_BUF1_OFFSET_V);
}
}
}
@@ -325,12 +314,13 @@ ATIMach64Sync
/* Only check registers we didn't restore */
TestRegisterCaching(PAT_REG0);
- TestRegisterCaching(PAT_REG1);
+ TestRegisterCaching(PAT_REG1);
- TestRegisterCaching(CLR_CMP_CLR);
- TestRegisterCaching(CLR_CMP_MSK);
+ TestRegisterCaching(CLR_CMP_CLR);
+ TestRegisterCaching(CLR_CMP_MSK);
- TestRegisterCachingXV(pScreenInfo);
+ if (pATI->Block1Base)
+ TestRegisterCachingXV(pScreenInfo);
}
pATI->NeedDRISync = FALSE;
@@ -343,48 +333,49 @@ ATIMach64Sync
if (pATI->OptionMMIOCache && pATI->OptionTestMMIOCache)
{
+ /*
+ * For debugging purposes, attempt to verify that each cached register
+ * should actually be cached.
+ */
TestRegisterCachingDP(pScreenInfo);
- TestRegisterCachingXV(pScreenInfo);
+
+ if (pATI->Block1Base)
+ TestRegisterCachingXV(pScreenInfo);
}
}
#ifdef USE_EXA
/* EXA sets pEXA->needsSync to FALSE on its own */
#endif
+
#ifdef USE_XAA
if (pATI->pXAAInfo)
pATI->pXAAInfo->NeedToSync = FALSE;
#endif
+ if (pATI->Chip >= ATI_CHIP_264VTB)
+ {
+ /*
+ * Flush the read-back cache (by turning on INVALIDATE_RB_CACHE),
+ * otherwise the host might get stale data when reading through the
+ * aperture.
+ */
+ outr(MEM_BUF_CNTL, pATI->NewHW.mem_buf_cntl);
+ }
+
/*
+ * Note:
+ * Before actually invalidating the read-back cache, the mach64 driver
+ * was using the trick below which is buggy. The code is left here for
+ * reference, DRI uses this trick and needs updating.
+ *
* For VTB's and later, the first CPU read of the framebuffer will return
* zeroes, so do it here. This appears to be due to some kind of engine
* caching of framebuffer data I haven't found any way of disabling, or
* otherwise circumventing. Thanks to Mark Vojkovich for the suggestion.
*
* pATI = *(volatile ATIPtr *)pATI->pMemory;
- *
- * Update:
- * The above trick is buggy and is now replaced by actually invalidating
- * the cache with the code below. The comment is left here for reference,
- * DRI uses this trick and needs updating.
*/
-
- if (pATI->Chip >= ATI_CHIP_264VTB)
- {
- /*
- * Flush the read-back cache (by turning on INVALIDATE_RB_CACHE),
- * otherwise the host might get stale data when reading through the
- * aperture.
- */
- outr(MEM_BUF_CNTL, pATI->NewHW.mem_buf_cntl);
- }
-
- if (pATI->OptionMMIOCache && pATI->OptionTestMMIOCache)
- {
- TestRegisterCachingDP(pScreenInfo);
- TestRegisterCachingXV(pScreenInfo);
- }
}
#ifdef USE_XAA