Implement Voodoo CMDFIFO enable bit.
This commit is contained in:
parent
d254f41817
commit
c9891895da
4 changed files with 7 additions and 2 deletions
|
|
@ -603,7 +603,10 @@ static void voodoo_writel(uint32_t addr, uint32_t val, void *p)
|
||||||
break;
|
break;
|
||||||
case SST_fbiInit7:
|
case SST_fbiInit7:
|
||||||
if (voodoo->initEnable & 0x01)
|
if (voodoo->initEnable & 0x01)
|
||||||
|
{
|
||||||
voodoo->fbiInit7 = val;
|
voodoo->fbiInit7 = val;
|
||||||
|
voodoo->cmdfifo_enabled = val & 0x100;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SST_cmdFifoBaseAddr:
|
case SST_cmdFifoBaseAddr:
|
||||||
|
|
|
||||||
|
|
@ -1098,6 +1098,7 @@ static void banshee_cmd_write(banshee_t *banshee, uint32_t addr, uint32_t val)
|
||||||
case cmdBaseSize0:
|
case cmdBaseSize0:
|
||||||
voodoo->cmdfifo_size = val;
|
voodoo->cmdfifo_size = val;
|
||||||
voodoo->cmdfifo_end = voodoo->cmdfifo_base + (((voodoo->cmdfifo_size & 0xff) + 1) << 12);
|
voodoo->cmdfifo_end = voodoo->cmdfifo_base + (((voodoo->cmdfifo_size & 0xff) + 1) << 12);
|
||||||
|
voodoo->cmdfifo_enabled = val & 0x100;
|
||||||
// pclog("cmdfifo_base=%08x cmdfifo_end=%08x\n", voodoo->cmdfifo_base, voodoo->cmdfifo_end);
|
// pclog("cmdfifo_base=%08x cmdfifo_end=%08x\n", voodoo->cmdfifo_base, voodoo->cmdfifo_end);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -1437,7 +1438,7 @@ static void banshee_write_linear_l(uint32_t addr, uint32_t val, void *p)
|
||||||
|
|
||||||
svga->changedvram[addr >> 12] = changeframecount;
|
svga->changedvram[addr >> 12] = changeframecount;
|
||||||
*(uint32_t *)&svga->vram[addr & svga->vram_mask] = val;
|
*(uint32_t *)&svga->vram[addr & svga->vram_mask] = val;
|
||||||
if (addr >= voodoo->cmdfifo_base && addr < voodoo->cmdfifo_end)
|
if (voodoo->cmdfifo_enabled && addr >= voodoo->cmdfifo_base && addr < voodoo->cmdfifo_end)
|
||||||
{
|
{
|
||||||
// pclog("CMDFIFO write %08x %08x old amin=%08x amax=%08x hlcnt=%i depth_wr=%i rp=%08x\n", addr, val, voodoo->cmdfifo_amin, voodoo->cmdfifo_amax, voodoo->cmdfifo_holecount, voodoo->cmdfifo_depth_wr, voodoo->cmdfifo_rp);
|
// pclog("CMDFIFO write %08x %08x old amin=%08x amax=%08x hlcnt=%i depth_wr=%i rp=%08x\n", addr, val, voodoo->cmdfifo_amin, voodoo->cmdfifo_amax, voodoo->cmdfifo_holecount, voodoo->cmdfifo_depth_wr, voodoo->cmdfifo_rp);
|
||||||
if (addr == voodoo->cmdfifo_base && !voodoo->cmdfifo_holecount)
|
if (addr == voodoo->cmdfifo_base && !voodoo->cmdfifo_holecount)
|
||||||
|
|
|
||||||
|
|
@ -299,6 +299,7 @@ typedef struct voodoo_t
|
||||||
uint32_t cmdfifo_base, cmdfifo_end, cmdfifo_size;
|
uint32_t cmdfifo_base, cmdfifo_end, cmdfifo_size;
|
||||||
int cmdfifo_rp;
|
int cmdfifo_rp;
|
||||||
volatile int cmdfifo_depth_rd, cmdfifo_depth_wr;
|
volatile int cmdfifo_depth_rd, cmdfifo_depth_wr;
|
||||||
|
volatile int cmdfifo_enabled;
|
||||||
uint32_t cmdfifo_amin, cmdfifo_amax;
|
uint32_t cmdfifo_amin, cmdfifo_amax;
|
||||||
int cmdfifo_holecount;
|
int cmdfifo_holecount;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -237,7 +237,7 @@ void voodoo_fifo_thread(void *param)
|
||||||
voodoo->time += end_time - start_time;
|
voodoo->time += end_time - start_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (voodoo->cmdfifo_depth_rd != voodoo->cmdfifo_depth_wr)
|
while (voodoo->cmdfifo_enabled && voodoo->cmdfifo_depth_rd != voodoo->cmdfifo_depth_wr)
|
||||||
{
|
{
|
||||||
uint64_t start_time = timer_read();
|
uint64_t start_time = timer_read();
|
||||||
uint64_t end_time;
|
uint64_t end_time;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue