From bd8cdfd802fd4adb989c98ead34ee4c0e7d74c5f Mon Sep 17 00:00:00 2001 From: ramapcsx2 Date: Sun, 11 Apr 2010 00:05:28 +0000 Subject: [PATCH] Fixed the GoW IPU hang again. Thanks for helping out once more, ksi3zyc :) git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2830 96395faa-99c1-11dd-bbfe-3dabce05a288 --- pcsx2/IPU/IPU.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pcsx2/IPU/IPU.cpp b/pcsx2/IPU/IPU.cpp index 0e20f485d2..637575d545 100644 --- a/pcsx2/IPU/IPU.cpp +++ b/pcsx2/IPU/IPU.cpp @@ -422,7 +422,6 @@ static __forceinline BOOL ipuIDEC(u32 val) } static int s_bdec = 0; -static int g_ipu_dma_error = 0; static __forceinline BOOL ipuBDEC(u32 val) { @@ -819,8 +818,7 @@ void IPUWorker() break; case SCE_IPU_FDEC: - g_ipu_dma_error = 0; // if g_ipu_dma_error is set, then continue processing. Fixes GoWs white screens of death. - if (!ipuFDEC(ipuRegs->cmd.DATA) && !g_ipu_dma_error) + if (!ipuFDEC(ipuRegs->cmd.DATA)) { hwIntcIrq(INTC_IPU); return; @@ -1569,6 +1567,11 @@ __forceinline void dmaIPU1() // toIPU if(ipu1dma->qwc == 0) { ipu1dma->chcr.STR = 0; + // Hack to force stop IPU + ipuRegs->cmd.BUSY = 0; + ipuRegs->ctrl.BUSY = 0; + ipuRegs->topbusy = 0; + // hwDmacIrq(DMAC_TO_IPU); Console.Warning("IPU1 Normal error!"); }