Commit 964e532d authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher
Browse files

drm/amd/pm: Unify version check in SMUv14



Use common helper function for firmware version check and logging in
SMUv14

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 75400348
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -25,11 +25,6 @@

#include "amdgpu_smu.h"

#define SMU14_DRIVER_IF_VERSION_INV 0xFFFFFFFF
#define SMU14_DRIVER_IF_VERSION_SMU_V14_0_0 0x7
#define SMU14_DRIVER_IF_VERSION_SMU_V14_0_1 0x6
#define SMU14_DRIVER_IF_VERSION_SMU_V14_0_2 0x2E

#define FEATURE_MASK(feature) (1ULL << feature)

/* MP Apertures */
@@ -124,8 +119,6 @@ int smu_v14_0_setup_pptable(struct smu_context *smu);

int smu_v14_0_get_vbios_bootup_values(struct smu_context *smu);

int smu_v14_0_check_fw_version(struct smu_context *smu);

int smu_v14_0_set_driver_table_location(struct smu_context *smu);

int smu_v14_0_set_tool_table_location(struct smu_context *smu);
+0 −60
Original line number Diff line number Diff line
@@ -229,66 +229,6 @@ int smu_v14_0_check_fw_status(struct smu_context *smu)
	return -EIO;
}

int smu_v14_0_check_fw_version(struct smu_context *smu)
{
	struct amdgpu_device *adev = smu->adev;
	uint32_t if_version = 0xff, smu_version = 0xff;
	uint8_t smu_program, smu_major, smu_minor, smu_debug;
	int ret = 0;

	ret = smu_cmn_get_smc_version(smu, &if_version, &smu_version);
	if (ret)
		return ret;

	smu_program = (smu_version >> 24) & 0xff;
	smu_major = (smu_version >> 16) & 0xff;
	smu_minor = (smu_version >> 8) & 0xff;
	smu_debug = (smu_version >> 0) & 0xff;
	if (smu->is_apu)
		adev->pm.fw_version = smu_version;

	switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) {
	case IP_VERSION(14, 0, 0):
	case IP_VERSION(14, 0, 4):
	case IP_VERSION(14, 0, 5):
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_0;
		break;
	case IP_VERSION(14, 0, 1):
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_1;
		break;
	case IP_VERSION(14, 0, 2):
	case IP_VERSION(14, 0, 3):
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_2;
		break;
	default:
		dev_err(adev->dev, "smu unsupported IP version: 0x%x.\n",
			amdgpu_ip_version(adev, MP1_HWIP, 0));
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_INV;
		break;
	}

	if (adev->pm.fw)
		dev_dbg(smu->adev->dev, "smu fw reported program %d, version = 0x%08x (%d.%d.%d)\n",
			 smu_program, smu_version, smu_major, smu_minor, smu_debug);

	/*
	 * 1. if_version mismatch is not critical as our fw is designed
	 * to be backward compatible.
	 * 2. New fw usually brings some optimizations. But that's visible
	 * only on the paired driver.
	 * Considering above, we just leave user a verbal message instead
	 * of halt driver loading.
	 */
	if (if_version != smu->smc_driver_if_version) {
		dev_info(adev->dev, "smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
			 "smu fw program = %d, smu fw version = 0x%08x (%d.%d.%d)\n",
			 smu->smc_driver_if_version, if_version,
			 smu_program, smu_version, smu_major, smu_minor, smu_debug);
	}

	return ret;
}

static int smu_v14_0_set_pptable_v2_0(struct smu_context *smu, void **table, uint32_t *size)
{
	struct amdgpu_device *adev = smu->adev;
+17 −1
Original line number Diff line number Diff line
@@ -65,6 +65,9 @@

#define SMU_MALL_PG_CONFIG_DEFAULT SMU_MALL_PG_CONFIG_DRIVER_CONTROL_ALWAYS_ON

#define SMU14_DRIVER_IF_VERSION_SMU_V14_0_0 0x7
#define SMU14_DRIVER_IF_VERSION_SMU_V14_0_1 0x6

#define SMU_14_0_0_UMD_PSTATE_GFXCLK			700
#define SMU_14_0_0_UMD_PSTATE_SOCCLK			678
#define SMU_14_0_0_UMD_PSTATE_FCLK			1800
@@ -1699,7 +1702,7 @@ static int smu_v14_0_0_restore_user_od_settings(struct smu_context *smu)

static const struct pptable_funcs smu_v14_0_0_ppt_funcs = {
	.check_fw_status = smu_v14_0_check_fw_status,
	.check_fw_version = smu_v14_0_check_fw_version,
	.check_fw_version = smu_cmn_check_fw_version,
	.init_smc_tables = smu_v14_0_0_init_smc_tables,
	.fini_smc_tables = smu_v14_0_0_fini_smc_tables,
	.get_vbios_bootup_values = smu_v14_0_get_vbios_bootup_values,
@@ -1750,10 +1753,23 @@ static void smu_v14_0_0_init_msg_ctl(struct smu_context *smu)

void smu_v14_0_0_set_ppt_funcs(struct smu_context *smu)
{
	struct amdgpu_device *adev = smu->adev;

	smu->ppt_funcs = &smu_v14_0_0_ppt_funcs;
	smu->feature_map = smu_v14_0_0_feature_mask_map;
	smu->table_map = smu_v14_0_0_table_map;
	smu->is_apu = true;

	switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) {
	case IP_VERSION(14, 0, 0):
	case IP_VERSION(14, 0, 4):
	case IP_VERSION(14, 0, 5):
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_0;
		break;
	case IP_VERSION(14, 0, 1):
		smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_1;
		break;
	}

	smu_v14_0_0_init_msg_ctl(smu);
}
+4 −1
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ static const struct smu_feature_bits smu_v14_0_2_dpm_features = {
		  SMU_FEATURE_BIT_INIT(FEATURE_DPM_FCLK_BIT) }
};

#define SMU14_DRIVER_IF_VERSION_SMU_V14_0_2 0x2E

#define MP0_MP1_DATA_REGION_SIZE_COMBOPPTABLE	0x4000
#define DEBUGSMC_MSG_Mode1Reset        2
#define LINK_SPEED_MAX					3
@@ -2798,7 +2800,7 @@ static const struct pptable_funcs smu_v14_0_2_ppt_funcs = {
	.fini_power = smu_v14_0_fini_power,
	.check_fw_status = smu_v14_0_check_fw_status,
	.setup_pptable = smu_v14_0_2_setup_pptable,
	.check_fw_version = smu_v14_0_check_fw_version,
	.check_fw_version = smu_cmn_check_fw_version,
	.set_driver_table_location = smu_v14_0_set_driver_table_location,
	.system_features_control = smu_v14_0_system_features_control,
	.set_allowed_mask = smu_v14_0_set_allowed_mask,
@@ -2863,5 +2865,6 @@ void smu_v14_0_2_set_ppt_funcs(struct smu_context *smu)
	smu->table_map = smu_v14_0_2_table_map;
	smu->pwr_src_map = smu_v14_0_2_pwr_src_map;
	smu->workload_map = smu_v14_0_2_workload_map;
	smu->smc_driver_if_version = SMU14_DRIVER_IF_VERSION_SMU_V14_0_2;
	smu_v14_0_2_init_msg_ctl(smu);
}