[PATCH 4/9] drm/amd/powerplay: clean up the APIs for bootup clocks
Alex Deucher
alexdeucher at gmail.com
Tue Jun 2 15:01:36 UTC 2020
On Mon, Jun 1, 2020 at 3:30 AM Evan Quan <evan.quan at amd.com> wrote:
>
> Combine and simplify the logics for retrieving bootup
> clocks.
>
> Change-Id: Ifca28c454f3769dece0cc705ba054ff34db0ab60
> Signed-off-by: Evan Quan <evan.quan at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 4 -
> drivers/gpu/drm/amd/powerplay/arcturus_ppt.c | 1 -
> .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 1 -
> drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h | 2 -
> drivers/gpu/drm/amd/powerplay/navi10_ppt.c | 1 -
> drivers/gpu/drm/amd/powerplay/smu_internal.h | 2 -
> drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 141 +++++++-----------
> 7 files changed, 51 insertions(+), 101 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> index 70c7b3fdee79..9bafa6b3e123 100644
> --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c
> @@ -1132,10 +1132,6 @@ static int smu_smc_table_hw_init(struct smu_context *smu,
> if (ret)
> return ret;
>
> - ret = smu_get_clk_info_from_vbios(smu);
> - if (ret)
> - return ret;
> -
> /*
> * check if the format_revision in vbios is up to pptable header
> * version, and the structure size is not 0.
> diff --git a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
> index e856ad36ab01..902c8cfa4a3b 100644
> --- a/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
> +++ b/drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
> @@ -2423,7 +2423,6 @@ static const struct pptable_funcs arcturus_ppt_funcs = {
> .check_fw_status = smu_v11_0_check_fw_status,
> .setup_pptable = smu_v11_0_setup_pptable,
> .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values,
> - .get_clk_info_from_vbios = smu_v11_0_get_clk_info_from_vbios,
> .check_pptable = smu_v11_0_check_pptable,
> .parse_pptable = smu_v11_0_parse_pptable,
> .populate_smc_tables = smu_v11_0_populate_smc_pptable,
> diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> index 5bb1ac821aeb..223678e329a5 100644
> --- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> +++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> @@ -505,7 +505,6 @@ struct pptable_funcs {
> int (*check_fw_status)(struct smu_context *smu);
> int (*setup_pptable)(struct smu_context *smu);
> int (*get_vbios_bootup_values)(struct smu_context *smu);
> - int (*get_clk_info_from_vbios)(struct smu_context *smu);
> int (*check_pptable)(struct smu_context *smu);
> int (*parse_pptable)(struct smu_context *smu);
> int (*populate_smc_tables)(struct smu_context *smu);
> diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
> index 71f829ab306e..5b785816aa64 100644
> --- a/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
> +++ b/drivers/gpu/drm/amd/powerplay/inc/smu_v11_0.h
> @@ -161,8 +161,6 @@ int smu_v11_0_setup_pptable(struct smu_context *smu);
>
> int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu);
>
> -int smu_v11_0_get_clk_info_from_vbios(struct smu_context *smu);
> -
> int smu_v11_0_check_pptable(struct smu_context *smu);
>
> int smu_v11_0_parse_pptable(struct smu_context *smu);
> diff --git a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
> index 652728f18271..bea6a96b5afb 100644
> --- a/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
> +++ b/drivers/gpu/drm/amd/powerplay/navi10_ppt.c
> @@ -2320,7 +2320,6 @@ static const struct pptable_funcs navi10_ppt_funcs = {
> .check_fw_status = smu_v11_0_check_fw_status,
> .setup_pptable = smu_v11_0_setup_pptable,
> .get_vbios_bootup_values = smu_v11_0_get_vbios_bootup_values,
> - .get_clk_info_from_vbios = smu_v11_0_get_clk_info_from_vbios,
> .check_pptable = smu_v11_0_check_pptable,
> .parse_pptable = smu_v11_0_parse_pptable,
> .populate_smc_tables = smu_v11_0_populate_smc_pptable,
> diff --git a/drivers/gpu/drm/amd/powerplay/smu_internal.h b/drivers/gpu/drm/amd/powerplay/smu_internal.h
> index 6c59eeef2590..a31df7f4e91a 100644
> --- a/drivers/gpu/drm/amd/powerplay/smu_internal.h
> +++ b/drivers/gpu/drm/amd/powerplay/smu_internal.h
> @@ -47,8 +47,6 @@
>
> #define smu_get_vbios_bootup_values(smu) \
> ((smu)->ppt_funcs->get_vbios_bootup_values ? (smu)->ppt_funcs->get_vbios_bootup_values((smu)) : 0)
> -#define smu_get_clk_info_from_vbios(smu) \
> - ((smu)->ppt_funcs->get_clk_info_from_vbios ? (smu)->ppt_funcs->get_clk_info_from_vbios((smu)) : 0)
> #define smu_check_pptable(smu) \
> ((smu)->ppt_funcs->check_pptable ? (smu)->ppt_funcs->check_pptable((smu)) : 0)
> #define smu_parse_pptable(smu) \
> diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> index 3b22f66e3fbc..be6dca8c6014 100644
> --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> @@ -558,6 +558,32 @@ int smu_v11_0_fini_power(struct smu_context *smu)
> return 0;
> }
>
> +static int smu_v11_0_atom_get_smu_clockinfo(struct amdgpu_device *adev,
> + uint8_t clk_id,
> + uint8_t syspll_id,
> + uint32_t *clk_freq)
> +{
> + struct atom_get_smu_clock_info_parameters_v3_1 input = {0};
> + struct atom_get_smu_clock_info_output_parameters_v3_1 *output;
> + int ret, index;
> +
> + input.clk_id = clk_id;
> + input.syspll_id = syspll_id;
> + input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
> + index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
> + getsmuclockinfo);
> +
> + ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
> + (uint32_t *)&input);
> + if (ret)
> + return -EINVAL;
> +
> + output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
> + *clk_freq = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
> +
> + return 0;
> +}
> +
> int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu)
> {
> int ret, index;
> @@ -616,102 +642,37 @@ int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu)
> smu->smu_table.boot_values.format_revision = header->format_revision;
> smu->smu_table.boot_values.content_revision = header->content_revision;
>
> - return 0;
> -}
> + smu_v11_0_atom_get_smu_clockinfo(smu->adev,
> + (uint8_t)SMU11_SYSPLL0_SOCCLK_ID,
> + (uint8_t)0,
> + &smu->smu_table.boot_values.socclk);
>
> -int smu_v11_0_get_clk_info_from_vbios(struct smu_context *smu)
> -{
> - int ret, index;
> - struct amdgpu_device *adev = smu->adev;
> - struct atom_get_smu_clock_info_parameters_v3_1 input = {0};
> - struct atom_get_smu_clock_info_output_parameters_v3_1 *output;
> + smu_v11_0_atom_get_smu_clockinfo(smu->adev,
> + (uint8_t)SMU11_SYSPLL0_DCEFCLK_ID,
> + (uint8_t)0,
> + &smu->smu_table.boot_values.dcefclk);
>
> - input.clk_id = SMU11_SYSPLL0_SOCCLK_ID;
> - input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
> - index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
> - getsmuclockinfo);
> -
> - ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
> - (uint32_t *)&input);
> - if (ret)
> - return -EINVAL;
> + smu_v11_0_atom_get_smu_clockinfo(smu->adev,
> + (uint8_t)SMU11_SYSPLL0_ECLK_ID,
> + (uint8_t)0,
> + &smu->smu_table.boot_values.eclk);
>
> - output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
> - smu->smu_table.boot_values.socclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
> + smu_v11_0_atom_get_smu_clockinfo(smu->adev,
> + (uint8_t)SMU11_SYSPLL0_VCLK_ID,
> + (uint8_t)0,
> + &smu->smu_table.boot_values.vclk);
>
> - memset(&input, 0, sizeof(input));
> - input.clk_id = SMU11_SYSPLL0_DCEFCLK_ID;
> - input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
> - index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
> - getsmuclockinfo);
> -
> - ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
> - (uint32_t *)&input);
> - if (ret)
> - return -EINVAL;
> -
> - output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
> - smu->smu_table.boot_values.dcefclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
> -
> - memset(&input, 0, sizeof(input));
> - input.clk_id = SMU11_SYSPLL0_ECLK_ID;
> - input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
> - index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
> - getsmuclockinfo);
> -
> - ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
> - (uint32_t *)&input);
> - if (ret)
> - return -EINVAL;
> -
> - output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
> - smu->smu_table.boot_values.eclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
> -
> - memset(&input, 0, sizeof(input));
> - input.clk_id = SMU11_SYSPLL0_VCLK_ID;
> - input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
> - index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
> - getsmuclockinfo);
> -
> - ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
> - (uint32_t *)&input);
> - if (ret)
> - return -EINVAL;
> -
> - output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
> - smu->smu_table.boot_values.vclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
> -
> - memset(&input, 0, sizeof(input));
> - input.clk_id = SMU11_SYSPLL0_DCLK_ID;
> - input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
> - index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
> - getsmuclockinfo);
> -
> - ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
> - (uint32_t *)&input);
> - if (ret)
> - return -EINVAL;
> -
> - output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
> - smu->smu_table.boot_values.dclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
> + smu_v11_0_atom_get_smu_clockinfo(smu->adev,
> + (uint8_t)SMU11_SYSPLL0_DCLK_ID,
> + (uint8_t)0,
> + &smu->smu_table.boot_values.dclk);
>
> if ((smu->smu_table.boot_values.format_revision == 3) &&
> - (smu->smu_table.boot_values.content_revision >= 2)) {
> - memset(&input, 0, sizeof(input));
> - input.clk_id = SMU11_SYSPLL1_0_FCLK_ID;
> - input.syspll_id = SMU11_SYSPLL1_2_ID;
> - input.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
> - index = get_index_into_master_table(atom_master_list_of_command_functions_v2_1,
> - getsmuclockinfo);
> -
> - ret = amdgpu_atom_execute_table(adev->mode_info.atom_context, index,
> - (uint32_t *)&input);
> - if (ret)
> - return -EINVAL;
> -
> - output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)&input;
> - smu->smu_table.boot_values.fclk = le32_to_cpu(output->atom_smu_outputclkfreq.smu_clock_freq_hz) / 10000;
> - }
> + (smu->smu_table.boot_values.content_revision >= 2))
> + smu_v11_0_atom_get_smu_clockinfo(smu->adev,
> + (uint8_t)SMU11_SYSPLL1_0_FCLK_ID,
> + (uint8_t)SMU11_SYSPLL1_2_ID,
> + &smu->smu_table.boot_values.fclk);
>
> return 0;
> }
> --
> 2.26.2
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list