mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-19 00:54:41 +08:00
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: Ben Skeggs <bskeggs@redhat.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Acked-by: Danilo Krummrich <me@dakr.org> Signed-off-by: Lyude Paul <lyude@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230919220442.202488-22-lyude@redhat.com
This commit is contained in:
parent
8ed094211f
commit
b24bf8b8ba
@ -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);
|
||||
nv_encoder->crtc = NULL;
|
||||
nvif_outp_release(&nv_encoder->outp);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -1334,12 +1338,6 @@ nv50_mstm_prepare(struct drm_atomic_state *state,
|
||||
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 *
|
||||
@ -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);
|
||||
nv50_audio_disable(encoder, nv_crtc);
|
||||
nvif_outp_release(&nv_encoder->outp);
|
||||
nv_encoder->crtc = NULL;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
nv_encoder->crtc = NULL;
|
||||
nvif_outp_release(&nv_encoder->outp);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1990,8 +1986,10 @@ nv50_disp_atomic_commit_core(struct drm_atomic_state *state, u32 *interlock)
|
||||
nv_encoder->conn, NULL, NULL);
|
||||
outp->enabled = outp->disabled = false;
|
||||
} else {
|
||||
if (outp->disabled)
|
||||
if (outp->disabled) {
|
||||
nvif_outp_release(&nv_encoder->outp);
|
||||
outp->disabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -238,6 +238,7 @@ void
|
||||
nvkm_outp_release(struct nvkm_outp *outp)
|
||||
{
|
||||
nvkm_outp_release_or(outp, NVKM_OUTP_USER);
|
||||
nvkm_outp_route(outp->disp);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -188,6 +188,8 @@ nvkm_uoutp_mthd_release(struct nvkm_outp *outp, void *argv, u32 argc)
|
||||
|
||||
if (argc != sizeof(args->vn))
|
||||
return -ENOSYS;
|
||||
if (!outp->ior)
|
||||
return -EINVAL;
|
||||
|
||||
nvkm_outp_release(outp);
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user