diff options
| -rw-r--r-- | shared-core/nouveau_fifo.c | 8 | ||||
| -rw-r--r-- | shared-core/nouveau_reg.h | 1 | 
2 files changed, 8 insertions, 1 deletions
diff --git a/shared-core/nouveau_fifo.c b/shared-core/nouveau_fifo.c index 3c993f3e..d00f1938 100644 --- a/shared-core/nouveau_fifo.c +++ b/shared-core/nouveau_fifo.c @@ -419,7 +419,9 @@ void nouveau_fifo_free(struct nouveau_channel *chan)  	/* Give the channel a chance to idle, wait 2s (hopefully) */  	t_start = engine->timer.read(dev); -	while (NV_READ(chan->get) != NV_READ(chan->put)) { +	while (NV_READ(chan->get) != NV_READ(chan->put) || +	       NV_READ(NV03_PFIFO_CACHE1_GET) != +	       NV_READ(NV03_PFIFO_CACHE1_PUT)) {  		if (engine->timer.read(dev) - t_start > 2000000000ULL) {  			DRM_ERROR("Failed to idle channel %d before destroy."  				  "Prepare for strangeness..\n", chan->id); @@ -427,6 +429,10 @@ void nouveau_fifo_free(struct nouveau_channel *chan)  		}  	} +	/*XXX: Maybe should wait for PGRAPH to finish with the stuff it fetched +	 *     from CACHE1 too? +	 */ +  	/* disable the fifo caches */  	NV_WRITE(NV03_PFIFO_CACHES, 0x00000000);  	NV_WRITE(NV04_PFIFO_CACHE1_DMA_PUSH, NV_READ(NV04_PFIFO_CACHE1_DMA_PUSH)&(~0x1)); diff --git a/shared-core/nouveau_reg.h b/shared-core/nouveau_reg.h index bc71e5f8..7ac02f4a 100644 --- a/shared-core/nouveau_reg.h +++ b/shared-core/nouveau_reg.h @@ -435,6 +435,7 @@  #define NV03_PFIFO_CACHE1_PUSH1_CHID_MASK                  0x0000000f  #define NV10_PFIFO_CACHE1_PUSH1_CHID_MASK                  0x0000001f  #define NV50_PFIFO_CACHE1_PUSH1_CHID_MASK                  0x0000007f +#define NV03_PFIFO_CACHE1_PUT                              0x00003210  #define NV04_PFIFO_CACHE1_DMA_PUSH                         0x00003220  #define NV04_PFIFO_CACHE1_DMA_FETCH                        0x00003224  #    define NV_PFIFO_CACHE1_DMA_FETCH_TRIG_8_BYTES         0x00000000  | 
