All of lore.kernel.org
 help / color / mirror / Atom feed
* [Patch] reenable fifos if we get an error while fifos disabled
@ 2007-09-30 18:46 Stephan Schmid
       [not found] ` <46FFEF22.8080205-S0/GAf8tV78@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Stephan Schmid @ 2007-09-30 18:46 UTC (permalink / raw)
  To: Nouveau

[-- Attachment #1: Type: text/plain, Size: 524 bytes --]

Hello,
while playing around with multiple fifo contexts I got fifo hangs when opening glxgears nr.3.
The reason is that in drm/linux_core/nouveau_fifo.c l.342 engine->graph.create_context() returns 
-ENOMEM (I dont know why but I think this problems also appears with other errors).
But the real problem is that then nouveau_fifo alloc() returns without reenabling fifo execution, 
so all fifos hang. 
With this patch glxgears nr.3 only prints scary messages and falls back to software rendering.

Greetings
Stephan Schmid


[-- Attachment #2: patch_fifo_reenable --]
[-- Type: text/plain, Size: 1195 bytes --]

diff --git a/shared-core/nouveau_fifo.c b/shared-core/nouveau_fifo.c
index 437c84f..88a429a 100644
--- a/shared-core/nouveau_fifo.c
+++ b/shared-core/nouveau_fifo.c
@@ -342,6 +342,16 @@ nouveau_fifo_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
 	ret = engine->graph.create_context(chan);
 	if (ret) {
 		nouveau_fifo_free(chan);
+
+		NV_WRITE(NV04_PFIFO_CACHE1_DMA_PUSH,
+		NV_READ(NV04_PFIFO_CACHE1_DMA_PUSH) | 1);
+		NV_WRITE(NV03_PFIFO_CACHE1_PUSH0, 0x00000001);
+		NV_WRITE(NV04_PFIFO_CACHE1_PULL0, 0x00000001);
+		NV_WRITE(NV04_PFIFO_CACHE1_PULL1, 0x00000001);
+
+		/* reenable the fifo caches */
+		NV_WRITE(NV03_PFIFO_CACHES, 1);
+
 		return ret;
 	}
 
@@ -349,6 +359,16 @@ nouveau_fifo_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
 	ret = engine->fifo.create_context(chan);
 	if (ret) {
 		nouveau_fifo_free(chan);
+
+		NV_WRITE(NV04_PFIFO_CACHE1_DMA_PUSH,
+		NV_READ(NV04_PFIFO_CACHE1_DMA_PUSH) | 1);
+		NV_WRITE(NV03_PFIFO_CACHE1_PUSH0, 0x00000001);
+		NV_WRITE(NV04_PFIFO_CACHE1_PULL0, 0x00000001);
+		NV_WRITE(NV04_PFIFO_CACHE1_PULL1, 0x00000001);
+
+		/* reenable the fifo caches */
+		NV_WRITE(NV03_PFIFO_CACHES, 1);
+
 		return ret;
 	}
 


[-- Attachment #3: Type: text/plain, Size: 181 bytes --]

_______________________________________________
Nouveau mailing list
Nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-09-30 21:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-30 18:46 [Patch] reenable fifos if we get an error while fifos disabled Stephan Schmid
     [not found] ` <46FFEF22.8080205-S0/GAf8tV78@public.gmane.org>
2007-09-30 21:30   ` matthieu castet
     [not found]     ` <47001565.2010607-GANU6spQydw@public.gmane.org>
2007-09-30 21:33       ` matthieu castet

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.