diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2011-04-12 05:38:06 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-05-15 20:49:22 -0400 |
commit | 0638df425f65d1f413b36e53acd1fb689679cabe (patch) | |
tree | eb4ea908006dfb5a0e1337d5b068b058435526c4 /drivers/gpu/drm/nouveau/nvc0_fifo.c | |
parent | 7a5c23de36002d611609650e49ef0ebd46f5c141 (diff) |
drm/nvc0/fifo: restore context table on resume
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvc0_fifo.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvc0_fifo.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/nvc0_fifo.c b/drivers/gpu/drm/nouveau/nvc0_fifo.c index 2bd0511511e4..be4e4834470a 100644 --- a/drivers/gpu/drm/nouveau/nvc0_fifo.c +++ b/drivers/gpu/drm/nouveau/nvc0_fifo.c | |||
@@ -240,7 +240,6 @@ nvc0_fifo_load_context(struct nouveau_channel *chan) | |||
240 | int | 240 | int |
241 | nvc0_fifo_unload_context(struct drm_device *dev) | 241 | nvc0_fifo_unload_context(struct drm_device *dev) |
242 | { | 242 | { |
243 | struct drm_nouveau_private *dev_priv = dev->dev_private; | ||
244 | int i; | 243 | int i; |
245 | 244 | ||
246 | for (i = 0; i < 128; i++) { | 245 | for (i = 0; i < 128; i++) { |
@@ -325,6 +324,7 @@ nvc0_fifo_init(struct drm_device *dev) | |||
325 | { | 324 | { |
326 | struct drm_nouveau_private *dev_priv = dev->dev_private; | 325 | struct drm_nouveau_private *dev_priv = dev->dev_private; |
327 | struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; | 326 | struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo; |
327 | struct nouveau_channel *chan; | ||
328 | struct nvc0_fifo_priv *priv; | 328 | struct nvc0_fifo_priv *priv; |
329 | int ret, i; | 329 | int ret, i; |
330 | 330 | ||
@@ -367,6 +367,19 @@ nvc0_fifo_init(struct drm_device *dev) | |||
367 | nv_wr32(dev, 0x002a00, 0xffffffff); /* clears PFIFO.INTR bit 30 */ | 367 | nv_wr32(dev, 0x002a00, 0xffffffff); /* clears PFIFO.INTR bit 30 */ |
368 | nv_wr32(dev, 0x002100, 0xffffffff); | 368 | nv_wr32(dev, 0x002100, 0xffffffff); |
369 | nv_wr32(dev, 0x002140, 0xbfffffff); | 369 | nv_wr32(dev, 0x002140, 0xbfffffff); |
370 | |||
371 | /* restore PFIFO context table */ | ||
372 | for (i = 0; i < 128; i++) { | ||
373 | chan = dev_priv->channels.ptr[i]; | ||
374 | if (!chan || !chan->fifo_priv) | ||
375 | continue; | ||
376 | |||
377 | nv_wr32(dev, 0x003000 + (i * 8), 0xc0000000 | | ||
378 | (chan->ramin->vinst >> 12)); | ||
379 | nv_wr32(dev, 0x003004 + (i * 8), 0x001f0001); | ||
380 | } | ||
381 | nvc0_fifo_playlist_update(dev); | ||
382 | |||
370 | return 0; | 383 | return 0; |
371 | } | 384 | } |
372 | 385 | ||