Implement Voodoo CMDFIFO enable bit.

This commit is contained in:
SarahW 2020-10-12 20:08:35 +01:00
commit c9891895da
4 changed files with 7 additions and 2 deletions

View file

@ -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:

View file

@ -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)

View file

@ -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;

View file

@ -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;