Commit 64c51ea5 authored by Changfeng's avatar Changfeng Committed by Alex Deucher
Browse files

Revert "drm/amd/display: add mechanism to skip DCN init"



To avoid s3 faild at the first cycle on renoir platform, it needs to
revert this patch:
drm/amd/display: add mechanism to skip DCN init

Signed-off-by: default avatarchangfeng <Changfeng.Zhu@amd.com>
Ackedy-by: default avatarHuang Rui <ray.huang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c7f1daa1
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -2683,7 +2683,6 @@ void dc_interrupt_ack(struct dc *dc, enum dc_irq_source src)
	dal_irq_service_ack(dc->res_pool->irqs, src);
}


void dc_set_power_state(
	struct dc *dc,
	enum dc_acpi_cm_power_state power_state)
@@ -2695,6 +2694,9 @@ void dc_set_power_state(
	case DC_ACPI_CM_POWER_STATE_D0:
		dc_resource_state_construct(dc, dc->current_state);

		if (dc->ctx->dmub_srv)
			dc_dmub_srv_wait_phy_init(dc->ctx->dmub_srv);

		dc->hwss.init_hw(dc);

		if (dc->hwss.init_sys_ctx != NULL &&
+20 −8
Original line number Diff line number Diff line
@@ -106,17 +106,29 @@ void dc_dmub_srv_wait_idle(struct dc_dmub_srv *dc_dmub_srv)
		DC_ERROR("Error waiting for DMUB idle: status=%d\n", status);
}

bool dc_dmub_srv_optimized_init_done(struct dc_dmub_srv *dc_dmub_srv)
void dc_dmub_srv_wait_phy_init(struct dc_dmub_srv *dc_dmub_srv)
{
	struct dmub_srv *dmub;
	union dmub_fw_boot_status status;
	struct dmub_srv *dmub = dc_dmub_srv->dmub;
	struct dc_context *dc_ctx = dc_dmub_srv->ctx;
	enum dmub_status status;

	if (!dc_dmub_srv || !dc_dmub_srv->dmub)
		return false;
	for (;;) {
		/* Wait up to a second for PHY init. */
		status = dmub_srv_wait_for_phy_init(dmub, 1000000);
		if (status == DMUB_STATUS_OK)
			/* Initialization OK */
			break;

	dmub = dc_dmub_srv->dmub;
		DC_ERROR("DMCUB PHY init failed: status=%d\n", status);
		ASSERT(0);

	status = dmub->hw_funcs.get_fw_status(dmub);
		if (status != DMUB_STATUS_TIMEOUT)
			/*
			 * Server likely initialized or we don't have
			 * DMCUB HW support - this won't end.
			 */
			break;

	return status.bits.optimized_init_done;
		/* Continue spinning so we don't hang the ASIC. */
	}
}
+0 −2
Original line number Diff line number Diff line
@@ -56,6 +56,4 @@ void dc_dmub_srv_wait_idle(struct dc_dmub_srv *dc_dmub_srv);

void dc_dmub_srv_wait_phy_init(struct dc_dmub_srv *dc_dmub_srv);

bool dc_dmub_srv_optimized_init_done(struct dc_dmub_srv *dc_dmub_srv);

#endif /* _DMUB_DC_SRV_H_ */
+1 −4
Original line number Diff line number Diff line
@@ -1289,9 +1289,6 @@ void dcn10_init_hw(struct dc *dc)
	if (!dcb->funcs->is_accelerated_mode(dcb))
		hws->funcs.disable_vga(dc->hwseq);

	is_optimized_init_done = dc_dmub_srv_optimized_init_done(dc->ctx->dmub_srv);

	if (!is_optimized_init_done)
	hws->funcs.bios_golden_init(dc);

	if (dc->ctx->dc_bios->fw_info_valid) {
+2 −3
Original line number Diff line number Diff line
@@ -264,10 +264,9 @@ struct dmub_srv_hw_funcs {

	bool (*is_hw_init)(struct dmub_srv *dmub);

	void (*enable_dmub_boot_options)(struct dmub_srv *dmub);

	union dmub_fw_boot_status (*get_fw_status)(struct dmub_srv *dmub);
	bool (*is_phy_init)(struct dmub_srv *dmub);

	bool (*is_auto_load_done)(struct dmub_srv *dmub);

	void (*set_gpint)(struct dmub_srv *dmub,
			  union dmub_gpint_data_register reg);
Loading