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
This commit is contained in:
ramapcsx2 2010-04-11 00:05:28 +00:00
parent 223617a99e
commit bd8cdfd802
1 changed files with 6 additions and 3 deletions

View File

@ -422,7 +422,6 @@ static __forceinline BOOL ipuIDEC(u32 val)
} }
static int s_bdec = 0; static int s_bdec = 0;
static int g_ipu_dma_error = 0;
static __forceinline BOOL ipuBDEC(u32 val) static __forceinline BOOL ipuBDEC(u32 val)
{ {
@ -819,8 +818,7 @@ void IPUWorker()
break; break;
case SCE_IPU_FDEC: 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))
if (!ipuFDEC(ipuRegs->cmd.DATA) && !g_ipu_dma_error)
{ {
hwIntcIrq(INTC_IPU); hwIntcIrq(INTC_IPU);
return; return;
@ -1569,6 +1567,11 @@ __forceinline void dmaIPU1() // toIPU
if(ipu1dma->qwc == 0) if(ipu1dma->qwc == 0)
{ {
ipu1dma->chcr.STR = 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); hwDmacIrq(DMAC_TO_IPU);
Console.Warning("IPU1 Normal error!"); Console.Warning("IPU1 Normal error!");
} }