Skip to content

Commit

Permalink
drm/nouveau/disp: release outputs post-modeset
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Ben Skeggs authored and Lyude Paul committed Sep 19, 2023
1 parent 8ed0942 commit b24bf8b
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 10 deletions.
18 changes: 8 additions & 10 deletions drivers/gpu/drm/nouveau/dispnv50/disp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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 *
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
}
}
}
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit b24bf8b

Please sign in to comment.