[PATCH 2/2] drm/amd/pp: Use atombios interface directly in powerplay
Huang Rui
ray.huang at amd.com
Tue Mar 27 02:23:13 UTC 2018
On Mon, Mar 26, 2018 at 07:56:02PM +0800, Rex Zhu wrote:
> In order to remove the cgs wrapper functions for atombios api.
>
> Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
Reviewed-by: Huang Rui <ray.huang at amd.com>
> ---
> drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.c | 145 +++++++++++----------
> drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.h | 2 +-
> drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c | 88 +++++++------
> .../amd/powerplay/hwmgr/process_pptables_v1_0.c | 2 +-
> .../gpu/drm/amd/powerplay/hwmgr/processpptables.c | 4 +-
> drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 3 +-
> drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c | 3 +-
> drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c | 16 +++
> drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h | 3 +
> .../amd/powerplay/hwmgr/vega10_processpptables.c | 2 +-
> .../amd/powerplay/hwmgr/vega12_processpptables.c | 2 +-
> drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c | 2 +-
> 12 files changed, 149 insertions(+), 123 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.c b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.c
> index c6febbf..971fb5d 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.c
> @@ -23,7 +23,7 @@
> #include "pp_debug.h"
> #include <linux/module.h>
> #include <linux/slab.h>
> -
> +#include "atom.h"
> #include "ppatomctrl.h"
> #include "atombios.h"
> #include "cgs_common.h"
> @@ -128,7 +128,6 @@ static int atomctrl_set_mc_reg_address_table(
> return 0;
> }
>
> -
> int atomctrl_initialize_mc_reg_table(
> struct pp_hwmgr *hwmgr,
> uint8_t module_index,
> @@ -141,7 +140,7 @@ int atomctrl_initialize_mc_reg_table(
> u16 size;
>
> vram_info = (ATOM_VRAM_INFO_HEADER_V2_1 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, VRAM_Info), &size, &frev, &crev);
>
> if (module_index >= vram_info->ucNumOfVRAMModule) {
> @@ -174,6 +173,8 @@ int atomctrl_set_engine_dram_timings_rv770(
> uint32_t engine_clock,
> uint32_t memory_clock)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> +
> SET_ENGINE_CLOCK_PS_ALLOCATION engine_clock_parameters;
>
> /* They are both in 10KHz Units. */
> @@ -184,9 +185,10 @@ int atomctrl_set_engine_dram_timings_rv770(
> /* in 10 khz units.*/
> engine_clock_parameters.sReserved.ulClock =
> cpu_to_le32(memory_clock & SET_CLOCK_FREQ_MASK);
> - return cgs_atom_exec_cmd_table(hwmgr->device,
> +
> + return amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, DynamicMemorySettings),
> - &engine_clock_parameters);
> + (uint32_t *)&engine_clock_parameters);
> }
>
> /**
> @@ -203,7 +205,7 @@ static ATOM_VOLTAGE_OBJECT_INFO *get_voltage_info_table(void *device)
> union voltage_object_info *voltage_info;
>
> voltage_info = (union voltage_object_info *)
> - cgs_atom_get_data_table(device, index,
> + smu_atom_get_data_table(device, index,
> &size, &frev, &crev);
>
> if (voltage_info != NULL)
> @@ -247,16 +249,16 @@ int atomctrl_get_memory_pll_dividers_si(
> pp_atomctrl_memory_clock_param *mpll_param,
> bool strobe_mode)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> COMPUTE_MEMORY_CLOCK_PARAM_PARAMETERS_V2_1 mpll_parameters;
> int result;
>
> mpll_parameters.ulClock = cpu_to_le32(clock_value);
> mpll_parameters.ucInputFlag = (uint8_t)((strobe_mode) ? 1 : 0);
>
> - result = cgs_atom_exec_cmd_table
> - (hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ComputeMemoryClockParam),
> - &mpll_parameters);
> + (uint32_t *)&mpll_parameters);
>
> if (0 == result) {
> mpll_param->mpll_fb_divider.clk_frac =
> @@ -295,14 +297,15 @@ int atomctrl_get_memory_pll_dividers_si(
> int atomctrl_get_memory_pll_dividers_vi(struct pp_hwmgr *hwmgr,
> uint32_t clock_value, pp_atomctrl_memory_clock_param *mpll_param)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> COMPUTE_MEMORY_CLOCK_PARAM_PARAMETERS_V2_2 mpll_parameters;
> int result;
>
> mpll_parameters.ulClock.ulClock = cpu_to_le32(clock_value);
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ComputeMemoryClockParam),
> - &mpll_parameters);
> + (uint32_t *)&mpll_parameters);
>
> if (!result)
> mpll_param->mpll_post_divider =
> @@ -315,15 +318,15 @@ int atomctrl_get_engine_pll_dividers_kong(struct pp_hwmgr *hwmgr,
> uint32_t clock_value,
> pp_atomctrl_clock_dividers_kong *dividers)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V4 pll_parameters;
> int result;
>
> pll_parameters.ulClock = cpu_to_le32(clock_value);
>
> - result = cgs_atom_exec_cmd_table
> - (hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ComputeMemoryEnginePLL),
> - &pll_parameters);
> + (uint32_t *)&pll_parameters);
>
> if (0 == result) {
> dividers->pll_post_divider = pll_parameters.ucPostDiv;
> @@ -338,16 +341,16 @@ int atomctrl_get_engine_pll_dividers_vi(
> uint32_t clock_value,
> pp_atomctrl_clock_dividers_vi *dividers)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> COMPUTE_GPU_CLOCK_OUTPUT_PARAMETERS_V1_6 pll_patameters;
> int result;
>
> pll_patameters.ulClock.ulClock = cpu_to_le32(clock_value);
> pll_patameters.ulClock.ucPostDiv = COMPUTE_GPUCLK_INPUT_FLAG_SCLK;
>
> - result = cgs_atom_exec_cmd_table
> - (hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ComputeMemoryEnginePLL),
> - &pll_patameters);
> + (uint32_t *)&pll_patameters);
>
> if (0 == result) {
> dividers->pll_post_divider =
> @@ -375,16 +378,16 @@ int atomctrl_get_engine_pll_dividers_ai(struct pp_hwmgr *hwmgr,
> uint32_t clock_value,
> pp_atomctrl_clock_dividers_ai *dividers)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> COMPUTE_GPU_CLOCK_OUTPUT_PARAMETERS_V1_7 pll_patameters;
> int result;
>
> pll_patameters.ulClock.ulClock = cpu_to_le32(clock_value);
> pll_patameters.ulClock.ucPostDiv = COMPUTE_GPUCLK_INPUT_FLAG_SCLK;
>
> - result = cgs_atom_exec_cmd_table
> - (hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ComputeMemoryEnginePLL),
> - &pll_patameters);
> + (uint32_t *)&pll_patameters);
>
> if (0 == result) {
> dividers->usSclk_fcw_frac = le16_to_cpu(pll_patameters.usSclk_fcw_frac);
> @@ -407,6 +410,7 @@ int atomctrl_get_dfs_pll_dividers_vi(
> uint32_t clock_value,
> pp_atomctrl_clock_dividers_vi *dividers)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> COMPUTE_GPU_CLOCK_OUTPUT_PARAMETERS_V1_6 pll_patameters;
> int result;
>
> @@ -414,10 +418,9 @@ int atomctrl_get_dfs_pll_dividers_vi(
> pll_patameters.ulClock.ucPostDiv =
> COMPUTE_GPUCLK_INPUT_FLAG_DEFAULT_GPUCLK;
>
> - result = cgs_atom_exec_cmd_table
> - (hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ComputeMemoryEnginePLL),
> - &pll_patameters);
> + (uint32_t *)&pll_patameters);
>
> if (0 == result) {
> dividers->pll_post_divider =
> @@ -452,7 +455,7 @@ uint32_t atomctrl_get_reference_clock(struct pp_hwmgr *hwmgr)
> uint32_t clock;
>
> fw_info = (ATOM_FIRMWARE_INFO *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, FirmwareInfo),
> &size, &frev, &crev);
>
> @@ -476,7 +479,7 @@ bool atomctrl_is_voltage_controlled_by_gpio_v3(
> uint8_t voltage_mode)
> {
> ATOM_VOLTAGE_OBJECT_INFO_V3_1 *voltage_info =
> - (ATOM_VOLTAGE_OBJECT_INFO_V3_1 *)get_voltage_info_table(hwmgr->device);
> + (ATOM_VOLTAGE_OBJECT_INFO_V3_1 *)get_voltage_info_table(hwmgr->adev);
> bool ret;
>
> PP_ASSERT_WITH_CODE((NULL != voltage_info),
> @@ -495,7 +498,7 @@ int atomctrl_get_voltage_table_v3(
> pp_atomctrl_voltage_table *voltage_table)
> {
> ATOM_VOLTAGE_OBJECT_INFO_V3_1 *voltage_info =
> - (ATOM_VOLTAGE_OBJECT_INFO_V3_1 *)get_voltage_info_table(hwmgr->device);
> + (ATOM_VOLTAGE_OBJECT_INFO_V3_1 *)get_voltage_info_table(hwmgr->adev);
> const ATOM_VOLTAGE_OBJECT_V3 *voltage_object;
> unsigned int i;
>
> @@ -572,7 +575,7 @@ static ATOM_GPIO_PIN_LUT *get_gpio_lookup_table(void *device)
> void *table_address;
>
> table_address = (ATOM_GPIO_PIN_LUT *)
> - cgs_atom_get_data_table(device,
> + smu_atom_get_data_table(device,
> GetIndexIntoMasterTable(DATA, GPIO_Pin_LUT),
> &size, &frev, &crev);
>
> @@ -592,7 +595,7 @@ bool atomctrl_get_pp_assign_pin(
> {
> bool bRet = false;
> ATOM_GPIO_PIN_LUT *gpio_lookup_table =
> - get_gpio_lookup_table(hwmgr->device);
> + get_gpio_lookup_table(hwmgr->adev);
>
> PP_ASSERT_WITH_CODE((NULL != gpio_lookup_table),
> "Could not find GPIO lookup Table in BIOS.", return false);
> @@ -613,7 +616,7 @@ int atomctrl_calculate_voltage_evv_on_sclk(
> bool debug)
> {
> ATOM_ASIC_PROFILING_INFO_V3_4 *getASICProfilingInfo;
> -
> + struct amdgpu_device *adev = hwmgr->adev;
> EFUSE_LINEAR_FUNC_PARAM sRO_fuse;
> EFUSE_LINEAR_FUNC_PARAM sCACm_fuse;
> EFUSE_LINEAR_FUNC_PARAM sCACb_fuse;
> @@ -640,7 +643,7 @@ int atomctrl_calculate_voltage_evv_on_sclk(
> int result;
>
> getASICProfilingInfo = (ATOM_ASIC_PROFILING_INFO_V3_4 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, ASIC_ProfilingInfo),
> NULL, NULL, NULL);
>
> @@ -706,9 +709,9 @@ int atomctrl_calculate_voltage_evv_on_sclk(
>
> sOutput_FuseValues.sEfuse = sInput_FuseValues;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &sOutput_FuseValues);
> + (uint32_t *)&sOutput_FuseValues);
>
> if (result)
> return result;
> @@ -727,9 +730,9 @@ int atomctrl_calculate_voltage_evv_on_sclk(
>
> sOutput_FuseValues.sEfuse = sInput_FuseValues;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &sOutput_FuseValues);
> + (uint32_t *)&sOutput_FuseValues);
>
> if (result)
> return result;
> @@ -747,9 +750,9 @@ int atomctrl_calculate_voltage_evv_on_sclk(
> sInput_FuseValues.ucBitLength = sCACb_fuse.ucEfuseLength;
> sOutput_FuseValues.sEfuse = sInput_FuseValues;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &sOutput_FuseValues);
> + (uint32_t *)&sOutput_FuseValues);
>
> if (result)
> return result;
> @@ -768,9 +771,9 @@ int atomctrl_calculate_voltage_evv_on_sclk(
>
> sOutput_FuseValues.sEfuse = sInput_FuseValues;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &sOutput_FuseValues);
> + (uint32_t *)&sOutput_FuseValues);
>
> if (result)
> return result;
> @@ -790,9 +793,9 @@ int atomctrl_calculate_voltage_evv_on_sclk(
>
> sOutput_FuseValues.sEfuse = sInput_FuseValues;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &sOutput_FuseValues);
> + (uint32_t *)&sOutput_FuseValues);
> if (result)
> return result;
>
> @@ -811,9 +814,9 @@ int atomctrl_calculate_voltage_evv_on_sclk(
> sInput_FuseValues.ucBitLength = sKv_b_fuse.ucEfuseLength;
> sOutput_FuseValues.sEfuse = sInput_FuseValues;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &sOutput_FuseValues);
> + (uint32_t *)&sOutput_FuseValues);
>
> if (result)
> return result;
> @@ -842,9 +845,9 @@ int atomctrl_calculate_voltage_evv_on_sclk(
>
> sOutput_FuseValues.sEfuse = sInput_FuseValues;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &sOutput_FuseValues);
> + (uint32_t *)&sOutput_FuseValues);
>
> if (result)
> return result;
> @@ -1053,8 +1056,9 @@ int atomctrl_get_voltage_evv_on_sclk(
> uint32_t sclk, uint16_t virtual_voltage_Id,
> uint16_t *voltage)
> {
> - int result;
> + struct amdgpu_device *adev = hwmgr->adev;
> GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 get_voltage_info_param_space;
> + int result;
>
> get_voltage_info_param_space.ucVoltageType =
> voltage_type;
> @@ -1065,9 +1069,9 @@ int atomctrl_get_voltage_evv_on_sclk(
> get_voltage_info_param_space.ulSCLKFreq =
> cpu_to_le32(sclk);
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, GetVoltageInfo),
> - &get_voltage_info_param_space);
> + (uint32_t *)&get_voltage_info_param_space);
>
> if (0 != result)
> return result;
> @@ -1088,9 +1092,10 @@ int atomctrl_get_voltage_evv(struct pp_hwmgr *hwmgr,
> uint16_t virtual_voltage_id,
> uint16_t *voltage)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> + GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 get_voltage_info_param_space;
> int result;
> int entry_id;
> - GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 get_voltage_info_param_space;
>
> /* search for leakage voltage ID 0xff01 ~ 0xff08 and sckl */
> for (entry_id = 0; entry_id < hwmgr->dyn_state.vddc_dependency_on_sclk->count; entry_id++) {
> @@ -1111,9 +1116,9 @@ int atomctrl_get_voltage_evv(struct pp_hwmgr *hwmgr,
> get_voltage_info_param_space.ulSCLKFreq =
> cpu_to_le32(hwmgr->dyn_state.vddc_dependency_on_sclk->entries[entry_id].clk);
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, GetVoltageInfo),
> - &get_voltage_info_param_space);
> + (uint32_t *)&get_voltage_info_param_space);
>
> if (0 != result)
> return result;
> @@ -1135,7 +1140,7 @@ uint32_t atomctrl_get_mpll_reference_clock(struct pp_hwmgr *hwmgr)
> u16 size;
>
> fw_info = (ATOM_COMMON_TABLE_HEADER *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, FirmwareInfo),
> &size, &frev, &crev);
>
> @@ -1167,7 +1172,7 @@ static ATOM_ASIC_INTERNAL_SS_INFO *asic_internal_ss_get_ss_table(void *device)
> u16 size;
>
> table = (ATOM_ASIC_INTERNAL_SS_INFO *)
> - cgs_atom_get_data_table(device,
> + smu_atom_get_data_table(device,
> GetIndexIntoMasterTable(DATA, ASIC_InternalSS_Info),
> &size, &frev, &crev);
>
> @@ -1188,7 +1193,7 @@ static int asic_internal_ss_get_ss_asignment(struct pp_hwmgr *hwmgr,
>
> memset(ssEntry, 0x00, sizeof(pp_atomctrl_internal_ss_info));
>
> - table = asic_internal_ss_get_ss_table(hwmgr->device);
> + table = asic_internal_ss_get_ss_table(hwmgr->adev);
>
> if (NULL == table)
> return -1;
> @@ -1260,9 +1265,10 @@ int atomctrl_get_engine_clock_spread_spectrum(
> ASIC_INTERNAL_ENGINE_SS, engine_clock, ssInfo);
> }
>
> -int atomctrl_read_efuse(void *device, uint16_t start_index,
> +int atomctrl_read_efuse(struct pp_hwmgr *hwmgr, uint16_t start_index,
> uint16_t end_index, uint32_t mask, uint32_t *efuse)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> int result;
> READ_EFUSE_VALUE_PARAMETER efuse_param;
>
> @@ -1272,9 +1278,9 @@ int atomctrl_read_efuse(void *device, uint16_t start_index,
> efuse_param.sEfuse.ucBitLength = (uint8_t)
> ((end_index - start_index) + 1);
>
> - result = cgs_atom_exec_cmd_table(device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, ReadEfuseValue),
> - &efuse_param);
> + (uint32_t *)&efuse_param);
> if (!result)
> *efuse = le32_to_cpu(efuse_param.ulEfuseValue) & mask;
>
> @@ -1284,6 +1290,7 @@ int atomctrl_read_efuse(void *device, uint16_t start_index,
> int atomctrl_set_ac_timing_ai(struct pp_hwmgr *hwmgr, uint32_t memory_clock,
> uint8_t level)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> DYNAMICE_MEMORY_SETTINGS_PARAMETER_V2_1 memory_clock_parameters;
> int result;
>
> @@ -1293,10 +1300,9 @@ int atomctrl_set_ac_timing_ai(struct pp_hwmgr *hwmgr, uint32_t memory_clock,
> ADJUST_MC_SETTING_PARAM;
> memory_clock_parameters.asDPMMCReg.ucMclkDPMState = level;
>
> - result = cgs_atom_exec_cmd_table
> - (hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, DynamicMemorySettings),
> - &memory_clock_parameters);
> + (uint32_t *)&memory_clock_parameters);
>
> return result;
> }
> @@ -1304,7 +1310,7 @@ int atomctrl_set_ac_timing_ai(struct pp_hwmgr *hwmgr, uint32_t memory_clock,
> int atomctrl_get_voltage_evv_on_sclk_ai(struct pp_hwmgr *hwmgr, uint8_t voltage_type,
> uint32_t sclk, uint16_t virtual_voltage_Id, uint32_t *voltage)
> {
> -
> + struct amdgpu_device *adev = hwmgr->adev;
> int result;
> GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_3 get_voltage_info_param_space;
>
> @@ -1313,9 +1319,9 @@ int atomctrl_get_voltage_evv_on_sclk_ai(struct pp_hwmgr *hwmgr, uint8_t voltage_
> get_voltage_info_param_space.usVoltageLevel = cpu_to_le16(virtual_voltage_Id);
> get_voltage_info_param_space.ulSCLKFreq = cpu_to_le32(sclk);
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, GetVoltageInfo),
> - &get_voltage_info_param_space);
> + (uint32_t *)&get_voltage_info_param_space);
>
> if (0 != result)
> return result;
> @@ -1334,7 +1340,7 @@ int atomctrl_get_smc_sclk_range_table(struct pp_hwmgr *hwmgr, struct pp_atom_ctr
> u16 size;
>
> ATOM_SMU_INFO_V2_1 *psmu_info =
> - (ATOM_SMU_INFO_V2_1 *)cgs_atom_get_data_table(hwmgr->device,
> + (ATOM_SMU_INFO_V2_1 *)smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, SMU_Info),
> &size, &frev, &crev);
>
> @@ -1362,7 +1368,7 @@ int atomctrl_get_avfs_information(struct pp_hwmgr *hwmgr,
> return -EINVAL;
>
> profile = (ATOM_ASIC_PROFILING_INFO_V3_6 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, ASIC_ProfilingInfo),
> NULL, NULL, NULL);
> if (!profile)
> @@ -1402,7 +1408,7 @@ int atomctrl_get_svi2_info(struct pp_hwmgr *hwmgr, uint8_t voltage_type,
> uint16_t *load_line)
> {
> ATOM_VOLTAGE_OBJECT_INFO_V3_1 *voltage_info =
> - (ATOM_VOLTAGE_OBJECT_INFO_V3_1 *)get_voltage_info_table(hwmgr->device);
> + (ATOM_VOLTAGE_OBJECT_INFO_V3_1 *)get_voltage_info_table(hwmgr->adev);
>
> const ATOM_VOLTAGE_OBJECT_V3 *voltage_object;
>
> @@ -1421,16 +1427,17 @@ int atomctrl_get_svi2_info(struct pp_hwmgr *hwmgr, uint8_t voltage_type,
>
> int atomctrl_get_leakage_id_from_efuse(struct pp_hwmgr *hwmgr, uint16_t *virtual_voltage_id)
> {
> - int result;
> + struct amdgpu_device *adev = hwmgr->adev;
> SET_VOLTAGE_PS_ALLOCATION allocation;
> SET_VOLTAGE_PARAMETERS_V1_3 *voltage_parameters =
> (SET_VOLTAGE_PARAMETERS_V1_3 *)&allocation.sASICSetVoltage;
> + int result;
>
> voltage_parameters->ucVoltageMode = ATOM_GET_LEAKAGE_ID;
>
> - result = cgs_atom_exec_cmd_table(hwmgr->device,
> + result = amdgpu_atom_execute_table(adev->mode_info.atom_context,
> GetIndexIntoMasterTable(COMMAND, SetVoltage),
> - voltage_parameters);
> + (uint32_t *)voltage_parameters);
>
> *virtual_voltage_id = voltage_parameters->usVoltageLevel;
>
> @@ -1453,7 +1460,7 @@ int atomctrl_get_leakage_vddc_base_on_leakage(struct pp_hwmgr *hwmgr,
> ix = GetIndexIntoMasterTable(DATA, ASIC_ProfilingInfo);
>
> profile = (ATOM_ASIC_PROFILING_INFO_V2_1 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> ix,
> NULL, NULL, NULL);
> if (!profile)
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.h b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.h
> index c44a920..c672a50 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomctrl.h
> @@ -298,7 +298,7 @@ extern int atomctrl_get_memory_pll_dividers_vi(struct pp_hwmgr *hwmgr,
> extern int atomctrl_get_engine_pll_dividers_kong(struct pp_hwmgr *hwmgr,
> uint32_t clock_value,
> pp_atomctrl_clock_dividers_kong *dividers);
> -extern int atomctrl_read_efuse(void *device, uint16_t start_index,
> +extern int atomctrl_read_efuse(struct pp_hwmgr *hwmgr, uint16_t start_index,
> uint16_t end_index, uint32_t mask, uint32_t *efuse);
> extern int atomctrl_calculate_voltage_evv_on_sclk(struct pp_hwmgr *hwmgr, uint8_t voltage_type,
> uint32_t sclk, uint16_t virtual_voltage_Id, uint16_t *voltage, uint16_t dpm_level, bool debug);
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c
> index 55f9b30..5fa84cc 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/ppatomfwctrl.c
> @@ -23,9 +23,9 @@
>
> #include "ppatomfwctrl.h"
> #include "atomfirmware.h"
> +#include "atom.h"
> #include "pp_debug.h"
>
> -
> static const union atom_voltage_object_v4 *pp_atomfwctrl_lookup_voltage_type_v4(
> const struct atom_voltage_objects_info_v4_1 *voltage_object_info_table,
> uint8_t voltage_type, uint8_t voltage_mode)
> @@ -40,33 +40,32 @@ static const union atom_voltage_object_v4 *pp_atomfwctrl_lookup_voltage_type_v4(
> const union atom_voltage_object_v4 *voltage_object =
> (const union atom_voltage_object_v4 *)(start + offset);
>
> - if (voltage_type == voltage_object->gpio_voltage_obj.header.voltage_type &&
> - voltage_mode == voltage_object->gpio_voltage_obj.header.voltage_mode)
> - return voltage_object;
> + if (voltage_type == voltage_object->gpio_voltage_obj.header.voltage_type &&
> + voltage_mode == voltage_object->gpio_voltage_obj.header.voltage_mode)
> + return voltage_object;
>
> - offset += le16_to_cpu(voltage_object->gpio_voltage_obj.header.object_size);
> + offset += le16_to_cpu(voltage_object->gpio_voltage_obj.header.object_size);
>
> - }
> + }
>
> - return NULL;
> + return NULL;
> }
>
> static struct atom_voltage_objects_info_v4_1 *pp_atomfwctrl_get_voltage_info_table(
> struct pp_hwmgr *hwmgr)
> {
> - const void *table_address;
> - uint16_t idx;
> + const void *table_address;
> + uint16_t idx;
>
> - idx = GetIndexIntoMasterDataTable(voltageobject_info);
> - table_address = cgs_atom_get_data_table(hwmgr->device,
> - idx, NULL, NULL, NULL);
> + idx = GetIndexIntoMasterDataTable(voltageobject_info);
> + table_address = smu_atom_get_data_table(hwmgr->adev,
> + idx, NULL, NULL, NULL);
>
> - PP_ASSERT_WITH_CODE(
> - table_address,
> - "Error retrieving BIOS Table Address!",
> - return NULL);
> + PP_ASSERT_WITH_CODE(table_address,
> + "Error retrieving BIOS Table Address!",
> + return NULL);
>
> - return (struct atom_voltage_objects_info_v4_1 *)table_address;
> + return (struct atom_voltage_objects_info_v4_1 *)table_address;
> }
>
> /**
> @@ -167,7 +166,7 @@ static struct atom_gpio_pin_lut_v2_1 *pp_atomfwctrl_get_gpio_lookup_table(
> uint16_t idx;
>
> idx = GetIndexIntoMasterDataTable(gpio_pin_lut);
> - table_address = cgs_atom_get_data_table(hwmgr->device,
> + table_address = smu_atom_get_data_table(hwmgr->adev,
> idx, NULL, NULL, NULL);
> PP_ASSERT_WITH_CODE(table_address,
> "Error retrieving BIOS Table Address!",
> @@ -248,28 +247,30 @@ int pp_atomfwctrl_get_gpu_pll_dividers_vega10(struct pp_hwmgr *hwmgr,
> uint32_t clock_type, uint32_t clock_value,
> struct pp_atomfwctrl_clock_dividers_soc15 *dividers)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> struct compute_gpu_clock_input_parameter_v1_8 pll_parameters;
> struct compute_gpu_clock_output_parameter_v1_8 *pll_output;
> - int result;
> uint32_t idx;
>
> pll_parameters.gpuclock_10khz = (uint32_t)clock_value;
> pll_parameters.gpu_clock_type = clock_type;
>
> idx = GetIndexIntoMasterCmdTable(computegpuclockparam);
> - result = cgs_atom_exec_cmd_table(hwmgr->device, idx, &pll_parameters);
> -
> - if (!result) {
> - pll_output = (struct compute_gpu_clock_output_parameter_v1_8 *)
> - &pll_parameters;
> - dividers->ulClock = le32_to_cpu(pll_output->gpuclock_10khz);
> - dividers->ulDid = le32_to_cpu(pll_output->dfs_did);
> - dividers->ulPll_fb_mult = le32_to_cpu(pll_output->pll_fb_mult);
> - dividers->ulPll_ss_fbsmult = le32_to_cpu(pll_output->pll_ss_fbsmult);
> - dividers->usPll_ss_slew_frac = le16_to_cpu(pll_output->pll_ss_slew_frac);
> - dividers->ucPll_ss_enable = pll_output->pll_ss_enable;
> - }
> - return result;
> +
> + if (amdgpu_atom_execute_table(
> + adev->mode_info.atom_context, idx, (uint32_t *)&pll_parameters))
> + return -EINVAL;
> +
> + pll_output = (struct compute_gpu_clock_output_parameter_v1_8 *)
> + &pll_parameters;
> + dividers->ulClock = le32_to_cpu(pll_output->gpuclock_10khz);
> + dividers->ulDid = le32_to_cpu(pll_output->dfs_did);
> + dividers->ulPll_fb_mult = le32_to_cpu(pll_output->pll_fb_mult);
> + dividers->ulPll_ss_fbsmult = le32_to_cpu(pll_output->pll_ss_fbsmult);
> + dividers->usPll_ss_slew_frac = le16_to_cpu(pll_output->pll_ss_slew_frac);
> + dividers->ucPll_ss_enable = pll_output->pll_ss_enable;
> +
> + return 0;
> }
>
> int pp_atomfwctrl_get_avfs_information(struct pp_hwmgr *hwmgr,
> @@ -283,7 +284,7 @@ int pp_atomfwctrl_get_avfs_information(struct pp_hwmgr *hwmgr,
>
> idx = GetIndexIntoMasterDataTable(asic_profiling_info);
> profile = (struct atom_asic_profiling_info_v4_1 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> idx, NULL, NULL, NULL);
>
> if (!profile)
> @@ -467,7 +468,7 @@ int pp_atomfwctrl_get_gpio_information(struct pp_hwmgr *hwmgr,
>
> idx = GetIndexIntoMasterDataTable(smu_info);
> info = (struct atom_smu_info_v3_1 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> idx, NULL, NULL, NULL);
>
> if (!info) {
> @@ -489,6 +490,7 @@ int pp_atomfwctrl_get_gpio_information(struct pp_hwmgr *hwmgr,
>
> int pp_atomfwctrl__get_clk_information_by_clkid(struct pp_hwmgr *hwmgr, BIOS_CLKID id, uint32_t *frequency)
> {
> + struct amdgpu_device *adev = hwmgr->adev;
> struct atom_get_smu_clock_info_parameters_v3_1 parameters;
> struct atom_get_smu_clock_info_output_parameters_v3_1 *output;
> uint32_t ix;
> @@ -497,13 +499,13 @@ int pp_atomfwctrl__get_clk_information_by_clkid(struct pp_hwmgr *hwmgr, BIOS_CLK
> parameters.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
>
> ix = GetIndexIntoMasterCmdTable(getsmuclockinfo);
> - if (!cgs_atom_exec_cmd_table(hwmgr->device, ix, ¶meters)) {
> - output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)¶meters;
> - *frequency = output->atom_smu_outputclkfreq.smu_clock_freq_hz / 10000;
> - } else {
> - pr_info("Error execute_table getsmuclockinfo!");
> - return -1;
> - }
> +
> + if (amdgpu_atom_execute_table(
> + adev->mode_info.atom_context, ix, (uint32_t *)¶meters))
> + return -EINVAL;
> +
> + output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)¶meters;
> + *frequency = output->atom_smu_outputclkfreq.smu_clock_freq_hz / 10000;
>
> return 0;
> }
> @@ -517,7 +519,7 @@ int pp_atomfwctrl_get_vbios_bootup_values(struct pp_hwmgr *hwmgr,
>
> ix = GetIndexIntoMasterDataTable(firmwareinfo);
> info = (struct atom_firmware_info_v3_1 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> ix, NULL, NULL, NULL);
>
> if (!info) {
> @@ -553,7 +555,7 @@ int pp_atomfwctrl_get_smc_dpm_information(struct pp_hwmgr *hwmgr,
>
> ix = GetIndexIntoMasterDataTable(smc_dpm_info);
> info = (struct atom_smc_dpm_info_v4_1 *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> ix, NULL, NULL, NULL);
> if (!info) {
> pr_info("Error retrieving BIOS Table Address!");
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c b/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c
> index c9eecce..8516516 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/process_pptables_v1_0.c
> @@ -141,7 +141,7 @@ static const void *get_powerplay_table(struct pp_hwmgr *hwmgr)
>
> if (!table_address) {
> table_address = (ATOM_Tonga_POWERPLAYTABLE *)
> - cgs_atom_get_data_table(hwmgr->device,
> + smu_atom_get_data_table(hwmgr->adev,
> index, &size, &frev, &crev);
> hwmgr->soft_pp_table = table_address; /*Cache the result in RAM.*/
> hwmgr->soft_pp_table_size = size;
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
> index 36ca7c4..ce64dfa 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
> @@ -837,7 +837,7 @@ static const ATOM_PPLIB_POWERPLAYTABLE *get_powerplay_table(
> hwmgr->soft_pp_table = &soft_dummy_pp_table[0];
> hwmgr->soft_pp_table_size = sizeof(soft_dummy_pp_table);
> } else {
> - table_addr = cgs_atom_get_data_table(hwmgr->device,
> + table_addr = smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, PowerPlayInfo),
> &size, &frev, &crev);
> hwmgr->soft_pp_table = table_addr;
> @@ -1058,7 +1058,7 @@ static int init_overdrive_limits(struct pp_hwmgr *hwmgr,
> return 0;
>
> /* We assume here that fw_info is unchanged if this call fails.*/
> - fw_info = cgs_atom_get_data_table(hwmgr->device,
> + fw_info = smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, FirmwareInfo),
> &size, &frev, &crev);
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> index d469055..f6b71c5 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> @@ -2957,8 +2957,7 @@ static int smu7_dpm_patch_boot_state(struct pp_hwmgr *hwmgr,
> /* First retrieve the Boot clocks and VDDC from the firmware info table.
> * We assume here that fw_info is unchanged if this call fails.
> */
> - fw_info = (ATOM_FIRMWARE_INFO_V2_2 *)cgs_atom_get_data_table(
> - hwmgr->device, index,
> + fw_info = (ATOM_FIRMWARE_INFO_V2_2 *)smu_atom_get_data_table(hwmgr->adev, index,
> &size, &frev, &crev);
> if (!fw_info)
> /* During a test, there is no firmware info table. */
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
> index 75a465f..0534b51 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu8_hwmgr.c
> @@ -314,8 +314,7 @@ static int smu8_get_system_info_data(struct pp_hwmgr *hwmgr)
> uint8_t frev, crev;
> uint16_t size;
>
> - info = (ATOM_INTEGRATED_SYSTEM_INFO_V1_9 *) cgs_atom_get_data_table(
> - hwmgr->device,
> + info = (ATOM_INTEGRATED_SYSTEM_INFO_V1_9 *)smu_atom_get_data_table(hwmgr->adev,
> GetIndexIntoMasterTable(DATA, IntegratedSystemInfo),
> &size, &frev, &crev);
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> index 5981228..529be3c 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> @@ -24,6 +24,7 @@
> #include "pp_debug.h"
> #include "ppatomctrl.h"
> #include "ppsmc.h"
> +#include "atom.h"
>
> uint8_t convert_to_vid(uint16_t vddc)
> {
> @@ -608,3 +609,18 @@ int smu9_register_irq_handlers(struct pp_hwmgr *hwmgr)
>
> return 0;
> }
> +
> +void *smu_atom_get_data_table(void *dev, uint32_t table, uint16_t *size,
> + uint8_t *frev, uint8_t *crev)
> +{
> + struct amdgpu_device *adev = dev;
> + uint16_t data_start;
> +
> + if (amdgpu_atom_parse_data_header(
> + adev->mode_info.atom_context, table, size,
> + frev, crev, &data_start))
> + return (uint8_t *)adev->mode_info.atom_context->bios +
> + data_start;
> +
> + return NULL;
> +}
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> index d37d16e..14ee162 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> @@ -82,6 +82,9 @@ int phm_irq_process(struct amdgpu_device *adev,
>
> int smu9_register_irq_handlers(struct pp_hwmgr *hwmgr);
>
> +void *smu_atom_get_data_table(void *dev, uint32_t table, uint16_t *size,
> + uint8_t *frev, uint8_t *crev);
> +
> #define PHM_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT
> #define PHM_FIELD_MASK(reg, field) reg##__##field##_MASK
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
> index c61d074..0768d25 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_processpptables.c
> @@ -52,7 +52,7 @@ static const void *get_powerplay_table(struct pp_hwmgr *hwmgr)
>
> if (!table_address) {
> table_address = (ATOM_Vega10_POWERPLAYTABLE *)
> - cgs_atom_get_data_table(hwmgr->device, index,
> + smu_atom_get_data_table(hwmgr->adev, index,
> &size, &frev, &crev);
>
> hwmgr->soft_pp_table = table_address; /*Cache the result in RAM.*/
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c
> index e7d7949..928bb8f 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c
> @@ -51,7 +51,7 @@ static const void *get_powerplay_table(struct pp_hwmgr *hwmgr)
>
> if (!table_address) {
> table_address = (ATOM_Vega12_POWERPLAYTABLE *)
> - cgs_atom_get_data_table(hwmgr->device, index,
> + smu_atom_get_data_table(hwmgr->adev, index,
> &size, &frev, &crev);
>
> hwmgr->soft_pp_table = table_address; /*Cache the result in RAM.*/
> diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
> index 35b947e..1eec527 100644
> --- a/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
> @@ -337,7 +337,7 @@ static bool fiji_is_hw_avfs_present(struct pp_hwmgr *hwmgr)
> if (!hwmgr->not_vf)
> return false;
>
> - if (!atomctrl_read_efuse(hwmgr->device, AVFS_EN_LSB, AVFS_EN_MSB,
> + if (!atomctrl_read_efuse(hwmgr, AVFS_EN_LSB, AVFS_EN_MSB,
> mask, &efuse)) {
> if (efuse)
> return true;
> --
> 1.9.1
>
> _______________________________________________
> 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