Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9962cc6e authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/gr: disable fifo access and idle before suspend ctx unload



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 6c320fef
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -540,6 +540,11 @@ nv04_graph_init(struct drm_device *dev, int engine)
static int
nv04_graph_fini(struct drm_device *dev, int engine, bool suspend)
{
	nv_mask(dev, NV04_PGRAPH_FIFO, 0x00000001, 0x00000000);
	if (!nv_wait(dev, NV04_PGRAPH_STATUS, ~0, 0) && suspend) {
		nv_mask(dev, NV04_PGRAPH_FIFO, 0x00000001, 0x00000001);
		return -EBUSY;
	}
	nv04_graph_unload_context(dev);
	nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0x00000000);
	return 0;
+5 −0
Original line number Diff line number Diff line
@@ -959,6 +959,11 @@ nv10_graph_init(struct drm_device *dev, int engine)
static int
nv10_graph_fini(struct drm_device *dev, int engine, bool suspend)
{
	nv_mask(dev, NV04_PGRAPH_FIFO, 0x00000001, 0x00000000);
	if (!nv_wait(dev, NV04_PGRAPH_STATUS, ~0, 0) && suspend) {
		nv_mask(dev, NV04_PGRAPH_FIFO, 0x00000001, 0x00000001);
		return -EBUSY;
	}
	nv10_graph_unload_context(dev);
	nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0x00000000);
	return 0;
+5 −0
Original line number Diff line number Diff line
@@ -656,6 +656,11 @@ nv30_graph_init(struct drm_device *dev, int engine)
int
nv20_graph_fini(struct drm_device *dev, int engine, bool suspend)
{
	nv_mask(dev, NV04_PGRAPH_FIFO, 0x00000001, 0x00000000);
	if (!nv_wait(dev, NV04_PGRAPH_STATUS, ~0, 0) && suspend) {
		nv_mask(dev, NV04_PGRAPH_FIFO, 0x00000001, 0x00000001);
		return -EBUSY;
	}
	nv20_graph_unload_context(dev);
	nv_wr32(dev, NV03_PGRAPH_INTR_EN, 0x00000000);
	return 0;
+5 −0
Original line number Diff line number Diff line
@@ -256,6 +256,11 @@ nv50_graph_init(struct drm_device *dev, int engine)
static int
nv50_graph_fini(struct drm_device *dev, int engine, bool suspend)
{
	nv_mask(dev, 0x400500, 0x00010001, 0x00000000);
	if (!nv_wait(dev, 0x400700, ~0, 0) && suspend) {
		nv_mask(dev, 0x400500, 0x00010001, 0x00010001);
		return -EBUSY;
	}
	nv50_graph_unload_context(dev);
	nv_wr32(dev, 0x40013c, 0x00000000);
	return 0;