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

Commit 89e033a4 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nv50-nv84/fifo: fix resume regression introduced by playlist race fix

parent beba44b1
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -40,14 +40,13 @@
 * FIFO channel objects
 ******************************************************************************/

void
nv50_fifo_playlist_update(struct nv50_fifo_priv *priv)
static void
nv50_fifo_playlist_update_locked(struct nv50_fifo_priv *priv)
{
	struct nouveau_bar *bar = nouveau_bar(priv);
	struct nouveau_gpuobj *cur;
	int i, p;

	mutex_lock(&nv_subdev(priv)->mutex);
	cur = priv->playlist[priv->cur_playlist];
	priv->cur_playlist = !priv->cur_playlist;

@@ -61,6 +60,13 @@ nv50_fifo_playlist_update(struct nv50_fifo_priv *priv)
	nv_wr32(priv, 0x0032f4, cur->addr >> 12);
	nv_wr32(priv, 0x0032ec, p);
	nv_wr32(priv, 0x002500, 0x00000101);
}

void
nv50_fifo_playlist_update(struct nv50_fifo_priv *priv)
{
	mutex_lock(&nv_subdev(priv)->mutex);
	nv50_fifo_playlist_update_locked(priv);
	mutex_unlock(&nv_subdev(priv)->mutex);
}

@@ -489,7 +495,7 @@ nv50_fifo_init(struct nouveau_object *object)

	for (i = 0; i < 128; i++)
		nv_wr32(priv, 0x002600 + (i * 4), 0x00000000);
	nv50_fifo_playlist_update(priv);
	nv50_fifo_playlist_update_locked(priv);

	nv_wr32(priv, 0x003200, 0x00000001);
	nv_wr32(priv, 0x003250, 0x00000001);