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

Commit 7df48927 authored by Eric Huang's avatar Eric Huang Committed by Alex Deucher
Browse files

drm/amd/powerplay: add GFX per cu powergating for Baffin

parent 65f85e7d
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -398,3 +398,31 @@ int ellesmere_phm_update_clock_gatings(struct pp_hwmgr *hwmgr,

	return 0;
}

/* This function is for Baffin only for now,
 * Powerplay will only control the static per CU Power Gating.
 * Dynamic per CU Power Gating will be done in gfx.
 */
int ellesmere_phm_enable_per_cu_power_gating(struct pp_hwmgr *hwmgr, bool enable)
{
	struct cgs_system_info sys_info = {0};
	uint32_t active_cus;
	int result;

	sys_info.size = sizeof(struct cgs_system_info);
	sys_info.info_id = CGS_SYSTEM_INFO_GFX_CU_INFO;

	result = cgs_query_system_info(hwmgr->device, &sys_info);

	if (result)
		return -EINVAL;
	else
		active_cus = sys_info.value;

	if (enable)
		return smum_send_msg_to_smc_with_parameter(hwmgr->smumgr,
				PPSMC_MSG_GFX_CU_PG_ENABLE, active_cus);
	else
		return smum_send_msg_to_smc(hwmgr->smumgr,
				PPSMC_MSG_GFX_CU_PG_DISABLE);
}
+1 −0
Original line number Diff line number Diff line
@@ -35,5 +35,6 @@ int ellesmere_phm_powergate_acp(struct pp_hwmgr *hwmgr, bool bgate);
int ellesmere_phm_disable_clock_power_gating(struct pp_hwmgr *hwmgr);
int ellesmere_phm_update_clock_gatings(struct pp_hwmgr *hwmgr,
					const uint32_t *msg_id);
int ellesmere_phm_enable_per_cu_power_gating(struct pp_hwmgr *hwmgr, bool enable);

#endif /* _ELLESMERE_CLOCK_POWER_GATING_H_ */
+5 −0
Original line number Diff line number Diff line
@@ -4687,6 +4687,11 @@ static const struct pp_hwmgr_func ellesmere_hwmgr_funcs = {
	.register_internal_thermal_interrupt = ellesmere_register_internal_thermal_interrupt,
	.check_smc_update_required_for_display_configuration = ellesmere_check_smc_update_required_for_display_configuration,
	.check_states_equal = ellesmere_check_states_equal,
	.get_pp_table = ellesmere_get_pp_table,
	.set_pp_table = ellesmere_set_pp_table,
	.force_clock_level = ellesmere_force_clock_level,
	.print_clock_levels = ellesmere_print_clock_levels,
	.enable_per_cu_power_gating = ellesmere_phm_enable_per_cu_power_gating,
};

int ellesemere_hwmgr_init(struct pp_hwmgr *hwmgr)