nv2a: Relax stall conditions on pusher

This commit is contained in:
Matt Borgerson 2021-03-04 20:45:24 -07:00 committed by mborgerson
parent 10863d1c0d
commit 9d545d17e7
1 changed files with 9 additions and 3 deletions

View File

@ -137,7 +137,7 @@ static bool pfifo_stall_for_flip(NV2AState *d)
return should_stall;
}
static bool pfifo_should_stall(NV2AState *d)
static bool pfifo_puller_should_stall(NV2AState *d)
{
return pfifo_stall_for_flip(d) || atomic_read(&d->pgraph.waiting_for_nop) ||
atomic_read(&d->pgraph.waiting_for_context_switch) ||
@ -148,7 +148,7 @@ static ssize_t pfifo_run_puller(NV2AState *d, uint32_t method_entry,
uint32_t parameter, uint32_t *parameters,
size_t num_words_available)
{
if (pfifo_should_stall(d)) {
if (pfifo_puller_should_stall(d)) {
return -1;
}
@ -236,6 +236,12 @@ static ssize_t pfifo_run_puller(NV2AState *d, uint32_t method_entry,
return num_proc;
}
static bool pfifo_pusher_should_stall(NV2AState *d)
{
return !pgraph_can_fifo_access(d) ||
atomic_read(&d->pgraph.waiting_for_nop);
}
static void pfifo_run_pusher(NV2AState *d)
{
uint32_t *push0 = &d->pfifo.regs[NV_PFIFO_CACHE1_PUSH0];
@ -279,7 +285,7 @@ static void pfifo_run_pusher(NV2AState *d)
hwaddr dma_len;
uint8_t *dma = nv_dma_map(d, dma_instance, &dma_len);
while (!pfifo_should_stall(d)) {
while (!pfifo_pusher_should_stall(d)) {
uint32_t dma_get_v = *dma_get;
uint32_t dma_put_v = *dma_put;
if (dma_get_v == dma_put_v) break;