Commit 6d8f7388 authored by Dillon Varone's avatar Dillon Varone Committed by Alex Deucher
Browse files

drm/amd/display: Modify DCN401 DMUB reset & halt sequence



[WHY&HOW]
If DMCUB is already disabled or reset, no need to send the halt command
again.

Reviewed-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: default avatarDillon Varone <dillon.varone@amd.com>
Signed-off-by: default avatarTom Chung <chiahsuan.chung@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4a16285a
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -66,24 +66,20 @@ void dmub_dcn401_reset(struct dmub_srv *dmub)
	const uint32_t timeout_us = 1 * 1000 * 1000; //1s
	const uint32_t poll_delay_us = 1; //1us
	uint32_t i = 0;
	uint32_t in_reset, scratch, pwait_mode;
	uint32_t enabled, in_reset, scratch, pwait_mode;

	REG_GET(DMCUB_CNTL2, DMCUB_SOFT_RESET, &in_reset);
	REG_GET(DMCUB_CNTL,
			DMCUB_ENABLE, &enabled);
	REG_GET(DMCUB_CNTL2,
			DMCUB_SOFT_RESET, &in_reset);

	if (in_reset == 0) {
	if (enabled && in_reset == 0) {
		cmd.bits.status = 1;
		cmd.bits.command_code = DMUB_GPINT__STOP_FW;
		cmd.bits.param = 0;

		dmub->hw_funcs.set_gpint(dmub, cmd);

		for (i = 0; i < timeout_us; i++) {
			if (dmub->hw_funcs.is_gpint_acked(dmub, cmd))
				break;

			udelay(poll_delay_us);
		}

		for (; i < timeout_us; i++) {
			scratch = dmub->hw_funcs.get_gpint_response(dmub);
			if (scratch == DMUB_GPINT__STOP_FW_RESPONSE)