nouveau: wait for pgraph idle after loading or saving a context

the nvidia driver does this, and it stops the error message appearing on nv40
main
Stuart Bennett 2008-08-08 16:20:52 +01:00
parent 4585787bd1
commit 0c47151a57
1 changed files with 4 additions and 6 deletions

View File

@ -1544,6 +1544,8 @@ nv40_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save)
tmp |= NV40_PGRAPH_CTXCTL_0304_XFER_CTX; tmp |= NV40_PGRAPH_CTXCTL_0304_XFER_CTX;
NV_WRITE(NV40_PGRAPH_CTXCTL_0304, tmp); NV_WRITE(NV40_PGRAPH_CTXCTL_0304, tmp);
nouveau_wait_for_idle(dev);
for (i = 0; i < tv; i++) { for (i = 0; i < tv; i++) {
if (NV_READ(NV40_PGRAPH_CTXCTL_030C) == 0) if (NV_READ(NV40_PGRAPH_CTXCTL_030C) == 0)
break; break;
@ -1565,9 +1567,7 @@ nv40_graph_transfer_context(struct drm_device *dev, uint32_t inst, int save)
return 0; return 0;
} }
/* Save current context (from PGRAPH) into the channel's context /* Save current context (from PGRAPH) into the channel's context */
*XXX: fails sometimes, not sure why..
*/
int int
nv40_graph_save_context(struct nouveau_channel *chan) nv40_graph_save_context(struct nouveau_channel *chan)
{ {
@ -1581,9 +1581,7 @@ nv40_graph_save_context(struct nouveau_channel *chan)
return nv40_graph_transfer_context(dev, inst, 1); return nv40_graph_transfer_context(dev, inst, 1);
} }
/* Restore the context for a specific channel into PGRAPH /* Restore the context for a specific channel into PGRAPH */
* XXX: fails sometimes.. not sure why
*/
int int
nv40_graph_load_context(struct nouveau_channel *chan) nv40_graph_load_context(struct nouveau_channel *chan)
{ {