summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2022-10-13 08:04:25 +1000
committerBen Skeggs <bskeggs@redhat.com>2022-10-13 08:04:25 +1000
commitf83c215785b82c7bccc4d9b46dac1b913851e4a8 (patch)
treeea003082f9363353dbc4945013c146ee1c03e3e6
parent4936d2332b248e82763b55f4d2b6d4ff14a05909 (diff)
WIPdrm/nouveau/disp: train DP links outside of supervisor
- preparation for GSP-RM Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c4
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c9
3 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
index 89ea18641d77..2457d82be5ba 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c
@@ -1287,10 +1287,6 @@ nv50_disp_super_2_2(struct nvkm_disp *disp, struct nvkm_head *head)
ior->asy.link = outp->lvds.dual ? 3 : 1;
}
- /* Handle any link training, etc. */
- if (outp && outp->func->acquire)
- outp->func->acquire(outp);
-
/* Execute OnInt2 IED script. */
nv50_disp_super_ied_on(head, ior, 0, khz);
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
index 168b0b596b8e..4081d0238f20 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.c
@@ -46,8 +46,8 @@ nvkm_outp_route(struct nvkm_disp *disp)
list_for_each_entry(ior, &disp->iors, head) {
if ((outp = ior->asy.outp)) {
- OUTP_DBG(outp, "acquire %s", ior->name);
if (ior->asy.outp != ior->arm.outp) {
+ OUTP_DBG(outp, "acquire %s", ior->name);
if (ior->func->route.set)
ior->func->route.set(outp, ior);
ior->arm.outp = ior->asy.outp;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
index d039c356e3fb..13721a7762ca 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
@@ -230,10 +230,19 @@ nvkm_uoutp_mthd_acquire_dp(struct nvkm_outp *outp, u8 dpcd[16],
if (ret)
return ret;
+ nvkm_outp_route(outp->disp);
+
memcpy(outp->dp.dpcd, dpcd, sizeof(outp->dp.dpcd));
outp->dp.lt.nr = link_nr;
outp->dp.lt.bw = link_bw;
outp->dp.lt.mst = mst;
+
+ ret = outp->func->acquire(outp);
+ if (ret) {
+ nvkm_outp_release(outp, NVKM_OUTP_USER);
+ return ret;
+ }
+
return 0;
}