Commit c4a06037 authored by Nicholas Kazlauskas's avatar Nicholas Kazlauskas Committed by Alex Deucher
Browse files

drm/amd/display: Fix S4 hang polling on HW power up done for VBIOS DMCUB



[Why]
VBIOS DMCUB firmware doesn't set the dal_fw bit and we end up hanging
waiting for HW power up done because of it.

[How]
Simplify the path and allow mailbox_rdy to be a functional check when
we detect VBIOS firmware.

Reviewed-by: default avatarCharlene Liu <charlene.liu@amd.com>
Acked-by: default avatarRodrigo Siqueira <rodrigo.siqueira@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4af4d2c2
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -555,8 +555,14 @@ uint32_t dmub_dcn35_read_inbox0_ack_register(struct dmub_srv *dmub)
bool dmub_dcn35_is_hw_powered_up(struct dmub_srv *dmub)
{
	union dmub_fw_boot_status status;
	uint32_t is_enable;

	REG_GET(DMCUB_CNTL, DMCUB_ENABLE, &is_enable);
	if (is_enable == 0)
		return false;

	status.all = REG_READ(DMCUB_SCRATCH0);

	return status.bits.hw_power_init_done;
	return (status.bits.dal_fw && status.bits.hw_power_init_done && status.bits.mailbox_rdy) ||
	       (!status.bits.dal_fw && status.bits.mailbox_rdy);
}
+1 −8
Original line number Diff line number Diff line
@@ -800,20 +800,13 @@ enum dmub_status dmub_srv_cmd_execute(struct dmub_srv *dmub)

bool dmub_srv_is_hw_pwr_up(struct dmub_srv *dmub)
{
	union dmub_fw_boot_status status;

	if (!dmub->hw_funcs.is_hw_powered_up)
		return true;

	if (!dmub->hw_funcs.is_hw_powered_up(dmub))
		return false;

	if (!dmub->hw_funcs.is_hw_init(dmub))
		return false;

	status = dmub->hw_funcs.get_fw_status(dmub);

	return status.bits.dal_fw && status.bits.mailbox_rdy;
	return true;
}

enum dmub_status dmub_srv_wait_for_hw_pwr_up(struct dmub_srv *dmub,