Commit bbdf6a58 authored by Lyude Paul's avatar Lyude Paul Committed by Ben Skeggs
Browse files

drm/nouveau/kms/nv50-: Move 8BPC limit for MST into nv50_mstc_get_modes()



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: default avatarLyude Paul <lyude@redhat.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent af620cf0
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -908,15 +908,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,
@@ -1076,8 +1070,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);