diff --git src/via_swov.c src/via_swov.c
index b39cff6..62b0f77 100644
--- src/via_swov.c
+++ src/via_swov.c
@@ -113,6 +113,7 @@ viaWaitHQVFlip(VIAPtr pVia)
{
unsigned long proReg = 0;
CARD32 volatile *pdwState;
+ unsigned count = 50000;
if (pVia->ChipId == PCI_CHIP_VT3259
&& !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE))
@@ -121,10 +122,9 @@
pdwState = (CARD32 volatile *)(pVia->VidMapBase + (HQV_CONTROL + proReg));
if (pVia->VideoEngine == VIDEO_ENGINE_CME) {
- // while (*pdwState & (HQV_SUBPIC_FLIP | HQV_SW_FLIP)) ;
- while (*pdwState & HQV_SUBPIC_FLIP);
+ while (--count && (*pdwState & HQV_SUBPIC_FLIP));
} else {
- while (!(*pdwState & HQV_FLIP_STATUS)) ;
+ while (--count && !(*pdwState & HQV_FLIP_STATUS)) ;
}
}
@@ -133,8 +134,9 @@ viaWaitHQVFlipClear(VIAPtr pVia, unsigned long dwData)
CARD32 volatile *pdwState =
(CARD32 volatile *)(pVia->VidMapBase + HQV_CONTROL);
*pdwState = dwData;
+ unsigned count = 50000;
- while ((*pdwState & HQV_FLIP_STATUS)) {
+ while (--count && (*pdwState & HQV_FLIP_STATUS)) {
VIDOutD(HQV_CONTROL, *pdwState | HQV_FLIP_STATUS);
}
}
@@ -150,6 +152,7 @@ viaWaitHQVDone(VIAPtr pVia)
{
CARD32 volatile *pdwState;
unsigned long proReg = 0;
+ unsigned count = 50000;
if (pVia->ChipId == PCI_CHIP_VT3259
&& !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE))
@@ -157,7 +160,7 @@ viaWaitHQVDone(VIAPtr pVia)
pdwState = (CARD32 volatile *)(pVia->VidMapBase + (HQV_CONTROL + proReg));
if (pVia->swov.MPEG_ON) {
- while ((*pdwState & HQV_SW_FLIP)) ;
+ while (--count && (*pdwState & HQV_SW_FLIP)) ;
}
}
diff --git src/via_video.c src/via_video.c
index 2510949..4c3f2d9 100644
--- src/via_video.c
+++ src/via_video.c
@@ -1027,6 +1027,7 @@ Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc,
unsigned long DisplayBufferIndex)
{
unsigned long proReg = 0;
+ unsigned count = 50000;
if (pVia->ChipId == PCI_CHIP_VT3259
&& !(pVia->swov.gdwVideoFlagSW & VIDEO_1_INUSE))
@@ -1038,7 +1039,8 @@ Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc,
case FOURCC_RV15:
case FOURCC_RV16:
case FOURCC_RV32:
- while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP));
+ while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)
+ && --count);
VIDOutD(HQV_SRC_STARTADDR_Y + proReg,
pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]);
VIDOutD(HQV_CONTROL + proReg,
@@ -1047,7 +1049,8 @@ Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc,
break;
case FOURCC_YV12:
default:
- while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP));
+ while ((VIDInD(HQV_CONTROL + proReg) & HQV_SW_FLIP)
+ && --count);
VIDOutD(HQV_SRC_STARTADDR_Y + proReg,
pVia->swov.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]);
if (pVia->VideoEngine == VIDEO_ENGINE_CME) {