drm/nouveau/kms/nv50-: fix mst payload alloc fail crashing evo
authorBen Skeggs <bskeggs@redhat.com>
Tue, 19 Sep 2023 21:56:00 +0000 (17:56 -0400)
committerLyude Paul <lyude@redhat.com>
Tue, 19 Sep 2023 22:21:51 +0000 (18:21 -0400)
Programming -1 (vc_start_slot, if alloc fails) into HW probably isn't
the best idea.

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-6-lyude@redhat.com
drivers/gpu/drm/nouveau/dispnv50/disp.c

index 39e9ba4139c7dbeeda5733a7842afe43e2e74aeb..889ff667d0293a4ce97f28ed18ffa3fc9de5ad45 100644 (file)
@@ -916,23 +916,27 @@ nv50_msto_prepare(struct drm_atomic_state *state,
        struct nv50_mstc *mstc = msto->mstc;
        struct nv50_mstm *mstm = mstc->mstm;
        struct drm_dp_mst_atomic_payload *payload;
+       int ret = 0;
 
        NV_ATOMIC(drm, "%s: msto prepare\n", msto->encoder.name);
 
        payload = drm_atomic_get_mst_payload_state(mst_state, mstc->port);
 
-       // TODO: Figure out if we want to do a better job of handling VCPI allocation failures here?
        if (msto->disabled) {
                drm_dp_remove_payload_part1(mgr, mst_state, payload);
-
                nvif_outp_dp_mst_vcpi(&mstm->outp->outp, msto->head->base.index, 0, 0, 0, 0);
+               ret = 1;
        } else {
                if (msto->enabled)
-                       drm_dp_add_payload_part1(mgr, mst_state, payload);
+                       ret = drm_dp_add_payload_part1(mgr, mst_state, payload);
+       }
 
+       if (ret == 0) {
                nvif_outp_dp_mst_vcpi(&mstm->outp->outp, msto->head->base.index,
                                      payload->vc_start_slot, payload->time_slots,
                                      payload->pbn, payload->time_slots * mst_state->pbn_div);
+       } else {
+               nvif_outp_dp_mst_vcpi(&mstm->outp->outp, msto->head->base.index, 0, 0, 0, 0);
        }
 }