Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b73df591 authored by Nicholas Kazlauskas's avatar Nicholas Kazlauskas Committed by Greg Kroah-Hartman
Browse files

drm/amd/display: Revalidate bandwidth before commiting DC updates



[ Upstream commit a24eaa5c51255b344d5a321f1eeb3205f2775498 ]

[Why]
Whenever we switch between tiled formats without also switching pixel
formats or doing anything else that recreates the DC plane state we
can run into underflow or hangs since we're not updating the
DML parameters before committing to the hardware.

[How]
If the update type is FULL then call validate_bandwidth again to update
the DML parmeters before committing the state.

This is basically just a workaround and protective measure against
update types being added DC where we could run into this issue in
the future.

We can only fully validate the state in advance before applying it to
the hardware if we recreate all the plane and stream states since
we can't modify what's currently in use.

The next step is to update DM to ensure that we're creating the plane
and stream states for whatever could potentially be a full update in
DC to pre-emptively recreate the state for DC global validation.

The workaround can stay until this has been fixed in DM.

Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: default avatarHersen Wu <hersenxs.wu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent ca0cac33
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2230,6 +2230,12 @@ void dc_commit_updates_for_stream(struct dc *dc,

	copy_stream_update_to_stream(dc, context, stream, stream_update);

	if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) {
		DC_ERROR("Mode validation failed for stream update!\n");
		dc_release_state(context);
		return;
	}

	commit_planes_for_stream(
				dc,
				srf_updates,