Commit b24bf8b8 authored by Ben Skeggs's avatar Ben Skeggs Committed by Lyude Paul

drm/nouveau/disp: release outputs post-modeset

Prior to this commit, KMS would call release() prior to modeset, and the
second supervisor interrupt would update SOR routing if needed.

Now, KMS will call release() post-modeset and update routing immediately.

- preparation for GSP-RM
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Acked-by: default avatarDanilo Krummrich <me@dakr.org>
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230919220442.202488-22-lyude@redhat.com
parent 8ed09421
...@@ -477,7 +477,6 @@ nv50_dac_atomic_disable(struct drm_encoder *encoder, struct drm_atomic_state *st ...@@ -477,7 +477,6 @@ nv50_dac_atomic_disable(struct drm_encoder *encoder, struct drm_atomic_state *st
core->func->dac->ctrl(core, nv_encoder->outp.or.id, ctrl, NULL); core->func->dac->ctrl(core, nv_encoder->outp.or.id, ctrl, NULL);
nv_encoder->crtc = NULL; nv_encoder->crtc = NULL;
nvif_outp_release(&nv_encoder->outp);
} }
static void static void
...@@ -1300,6 +1299,11 @@ nv50_mstm_cleanup(struct drm_atomic_state *state, ...@@ -1300,6 +1299,11 @@ nv50_mstm_cleanup(struct drm_atomic_state *state,
} }
} }
if (mstm->disabled) {
nvif_outp_release(&mstm->outp->outp);
mstm->disabled = false;
}
mstm->modified = false; mstm->modified = false;
} }
...@@ -1334,12 +1338,6 @@ nv50_mstm_prepare(struct drm_atomic_state *state, ...@@ -1334,12 +1338,6 @@ nv50_mstm_prepare(struct drm_atomic_state *state,
nv50_msto_prepare(state, mst_state, &mstm->mgr, msto); nv50_msto_prepare(state, mst_state, &mstm->mgr, msto);
} }
} }
if (mstm->disabled) {
if (!mstm->links)
nvif_outp_release(&mstm->outp->outp);
mstm->disabled = false;
}
} }
static struct drm_connector * static struct drm_connector *
...@@ -1582,7 +1580,6 @@ nv50_sor_atomic_disable(struct drm_encoder *encoder, struct drm_atomic_state *st ...@@ -1582,7 +1580,6 @@ nv50_sor_atomic_disable(struct drm_encoder *encoder, struct drm_atomic_state *st
nv_encoder->update(nv_encoder, nv_crtc->index, NULL, 0, 0); nv_encoder->update(nv_encoder, nv_crtc->index, NULL, 0, 0);
nv50_audio_disable(encoder, nv_crtc); nv50_audio_disable(encoder, nv_crtc);
nvif_outp_release(&nv_encoder->outp);
nv_encoder->crtc = NULL; nv_encoder->crtc = NULL;
} }
...@@ -1827,7 +1824,6 @@ nv50_pior_atomic_disable(struct drm_encoder *encoder, struct drm_atomic_state *s ...@@ -1827,7 +1824,6 @@ nv50_pior_atomic_disable(struct drm_encoder *encoder, struct drm_atomic_state *s
core->func->pior->ctrl(core, nv_encoder->outp.or.id, ctrl, NULL); core->func->pior->ctrl(core, nv_encoder->outp.or.id, ctrl, NULL);
nv_encoder->crtc = NULL; nv_encoder->crtc = NULL;
nvif_outp_release(&nv_encoder->outp);
} }
static void static void
...@@ -1990,8 +1986,10 @@ nv50_disp_atomic_commit_core(struct drm_atomic_state *state, u32 *interlock) ...@@ -1990,8 +1986,10 @@ nv50_disp_atomic_commit_core(struct drm_atomic_state *state, u32 *interlock)
nv_encoder->conn, NULL, NULL); nv_encoder->conn, NULL, NULL);
outp->enabled = outp->disabled = false; outp->enabled = outp->disabled = false;
} else { } else {
if (outp->disabled) if (outp->disabled) {
nvif_outp_release(&nv_encoder->outp);
outp->disabled = false; outp->disabled = false;
}
} }
} }
} }
......
...@@ -238,6 +238,7 @@ void ...@@ -238,6 +238,7 @@ void
nvkm_outp_release(struct nvkm_outp *outp) nvkm_outp_release(struct nvkm_outp *outp)
{ {
nvkm_outp_release_or(outp, NVKM_OUTP_USER); nvkm_outp_release_or(outp, NVKM_OUTP_USER);
nvkm_outp_route(outp->disp);
} }
void void
......
...@@ -188,6 +188,8 @@ nvkm_uoutp_mthd_release(struct nvkm_outp *outp, void *argv, u32 argc) ...@@ -188,6 +188,8 @@ nvkm_uoutp_mthd_release(struct nvkm_outp *outp, void *argv, u32 argc)
if (argc != sizeof(args->vn)) if (argc != sizeof(args->vn))
return -ENOSYS; return -ENOSYS;
if (!outp->ior)
return -EINVAL;
nvkm_outp_release(outp); nvkm_outp_release(outp);
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment