Commit 9ad73536 authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher
Browse files

drm/amd/pm: Get max/min frequency on aldebaran VF



PMFW interface to get max/min frequencies is not available on aldebaran
VFs. Use data, if available, in DPM tables to get the max/min
frequencies.

Signed-off-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarAsad Kamal <asad.kamal@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ec8fbb44
Loading
Loading
Loading
Loading
+56 −1
Original line number Diff line number Diff line
@@ -342,6 +342,61 @@ static int aldebaran_get_allowed_feature_mask(struct smu_context *smu,
	return 0;
}

static int aldebaran_get_dpm_ultimate_freq(struct smu_context *smu,
					   enum smu_clk_type clk_type,
					   uint32_t *min, uint32_t *max)
{
	struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
	struct smu_13_0_dpm_table *dpm_table;
	uint32_t min_clk, max_clk;

	if (amdgpu_sriov_vf(smu->adev)) {
		switch (clk_type) {
		case SMU_MCLK:
		case SMU_UCLK:
			dpm_table = &dpm_context->dpm_tables.uclk_table;
			break;
		case SMU_GFXCLK:
		case SMU_SCLK:
			dpm_table = &dpm_context->dpm_tables.gfx_table;
			break;
		case SMU_SOCCLK:
			dpm_table = &dpm_context->dpm_tables.soc_table;
			break;
		case SMU_FCLK:
			dpm_table = &dpm_context->dpm_tables.fclk_table;
			break;
		case SMU_VCLK:
			dpm_table = &dpm_context->dpm_tables.vclk_table;
			break;
		case SMU_DCLK:
			dpm_table = &dpm_context->dpm_tables.dclk_table;
			break;
		default:
			return -EINVAL;
		}

		min_clk = dpm_table->min;
		max_clk = dpm_table->max;

		if (min) {
			if (!min_clk)
				return -ENODATA;
			*min = min_clk;
		}
		if (max) {
			if (!max_clk)
				return -ENODATA;
			*max = max_clk;
		}

	} else {
		return smu_v13_0_get_dpm_ultimate_freq(smu, clk_type, min, max);
	}

	return 0;
}

static int aldebaran_set_default_dpm_table(struct smu_context *smu)
{
	struct smu_13_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;
@@ -2081,7 +2136,7 @@ static const struct pptable_funcs aldebaran_ppt_funcs = {
	.set_azalia_d3_pme = smu_v13_0_set_azalia_d3_pme,
	.get_max_sustainable_clocks_by_dc = smu_v13_0_get_max_sustainable_clocks_by_dc,
	.get_bamaco_support = aldebaran_get_bamaco_support,
	.get_dpm_ultimate_freq = smu_v13_0_get_dpm_ultimate_freq,
	.get_dpm_ultimate_freq = aldebaran_get_dpm_ultimate_freq,
	.set_soft_freq_limited_range = aldebaran_set_soft_freq_limited_range,
	.od_edit_dpm_table = aldebaran_usr_edit_dpm_table,
	.set_df_cstate = aldebaran_set_df_cstate,