drm/nouveau: fix suspend failure path to reinitialise all engines
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Родитель
39a654d5b9
Коммит
92abe74992
|
@ -162,11 +162,10 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
|
|||
struct drm_device *dev = pci_get_drvdata(pdev);
|
||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||
struct nouveau_instmem_engine *pinstmem = &dev_priv->engine.instmem;
|
||||
struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph;
|
||||
struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo;
|
||||
struct nouveau_channel *chan;
|
||||
struct drm_crtc *crtc;
|
||||
int ret, i;
|
||||
int ret, i, e;
|
||||
|
||||
if (pm_state.event == PM_EVENT_PRETHAW)
|
||||
return 0;
|
||||
|
@ -206,19 +205,17 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
|
|||
nouveau_channel_idle(chan);
|
||||
}
|
||||
|
||||
pgraph->fifo_access(dev, false);
|
||||
nouveau_wait_for_idle(dev);
|
||||
|
||||
for (i = NVOBJ_ENGINE_NR - 1; i >= 0; i--) {
|
||||
if (dev_priv->eng[i])
|
||||
dev_priv->eng[i]->fini(dev, i);
|
||||
}
|
||||
|
||||
pfifo->reassign(dev, false);
|
||||
pfifo->disable(dev);
|
||||
pfifo->unload_context(dev);
|
||||
if (pgraph->unload_context)
|
||||
pgraph->unload_context(dev);
|
||||
|
||||
for (e = NVOBJ_ENGINE_NR - 1; e >= 0; e--) {
|
||||
if (dev_priv->eng[e]) {
|
||||
ret = dev_priv->eng[e]->fini(dev, e);
|
||||
if (ret)
|
||||
goto out_abort;
|
||||
}
|
||||
}
|
||||
|
||||
ret = pinstmem->suspend(dev);
|
||||
if (ret) {
|
||||
|
@ -249,9 +246,12 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
|
|||
|
||||
out_abort:
|
||||
NV_INFO(dev, "Re-enabling acceleration..\n");
|
||||
for (e = e + 1; e < NVOBJ_ENGINE_NR; e++) {
|
||||
if (dev_priv->eng[e])
|
||||
dev_priv->eng[e]->init(dev, e);
|
||||
}
|
||||
pfifo->enable(dev);
|
||||
pfifo->reassign(dev, true);
|
||||
pgraph->fifo_access(dev, true);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче