This just limits the BPC for MST connectors to a maximum of 8 from
nv50_mstc_get_modes(), instead of doing so during
nv50_msto_atomic_check(). This doesn't introduce any functional changes
yet (other then userspace now lying about the max bpc, but we can't
support that yet anyway so meh). But, we'll need this in a moment so
that we can share mode validation between SST and MST which will fix
some real world issues.

Signed-off-by: Lyude Paul <ly...@redhat.com>
Cc: sta...@vger.kernel.org
---
 drivers/gpu/drm/nouveau/dispnv50/disp.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c 
b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index 32a1c4221f1e..766b8e80a8f5 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -903,15 +903,9 @@ nv50_msto_atomic_check(struct drm_encoder *encoder,
        if (!state->duplicated) {
                const int clock = crtc_state->adjusted_mode.clock;
 
-               /*
-                * XXX: Since we don't use HDR in userspace quite yet, limit
-                * the bpc to 8 to save bandwidth on the topology. In the
-                * future, we'll want to properly fix this by dynamically
-                * selecting the highest possible bpc that would fit in the
-                * topology
-                */
-               asyh->or.bpc = min(connector->display_info.bpc, 8U);
-               asyh->dp.pbn = drm_dp_calc_pbn_mode(clock, asyh->or.bpc * 3, 
false);
+               asyh->or.bpc = connector->display_info.bpc;
+               asyh->dp.pbn = drm_dp_calc_pbn_mode(clock, asyh->or.bpc * 3,
+                                                   false);
        }
 
        slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, mstc->port,
@@ -1071,8 +1065,17 @@ nv50_mstc_get_modes(struct drm_connector *connector)
        if (mstc->edid)
                ret = drm_add_edid_modes(&mstc->connector, mstc->edid);
 
-       if (!mstc->connector.display_info.bpc)
-               mstc->connector.display_info.bpc = 8;
+       /*
+        * XXX: Since we don't use HDR in userspace quite yet, limit the bpc
+        * to 8 to save bandwidth on the topology. In the future, we'll want
+        * to properly fix this by dynamically selecting the highest possible
+        * bpc that would fit in the topology
+        */
+       if (connector->display_info.bpc)
+               connector->display_info.bpc =
+                       clamp(connector->display_info.bpc, 6U, 8U);
+       else
+               connector->display_info.bpc = 8;
 
        if (mstc->native)
                drm_mode_destroy(mstc->connector.dev, mstc->native);
-- 
2.24.1

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to