Commit e57761c6 authored by John Clements's avatar John Clements Committed by Alex Deucher
Browse files

drm/amdgpu: cache smu fw version info



reduce cmd submission to smu by caching version info

Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarJohn Clements <john.clements@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent fdd21e62
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -196,16 +196,31 @@ int smu_get_smc_version(struct smu_context *smu, uint32_t *if_version, uint32_t
	if (!if_version && !smu_version)
		return -EINVAL;

	if (smu->smc_fw_if_version && smu->smc_fw_version)
	{
		if (if_version)
			*if_version = smu->smc_fw_if_version;

		if (smu_version)
			*smu_version = smu->smc_fw_version;

		return 0;
	}

	if (if_version) {
		ret = smu_send_smc_msg(smu, SMU_MSG_GetDriverIfVersion, if_version);
		if (ret)
			return ret;

		smu->smc_fw_if_version = *if_version;
	}

	if (smu_version) {
		ret = smu_send_smc_msg(smu, SMU_MSG_GetSmuVersion, smu_version);
		if (ret)
			return ret;

		smu->smc_fw_version = *smu_version;
	}

	return ret;
+3 −1
Original line number Diff line number Diff line
@@ -405,7 +405,9 @@ struct smu_context
	bool pm_enabled;
	bool is_apu;

	uint32_t smc_if_version;
	uint32_t smc_driver_if_version;
	uint32_t smc_fw_if_version;
	uint32_t smc_fw_version;

	bool uploading_custom_pp_table;
	bool dc_controlled_by_gpio;
+1 −1
Original line number Diff line number Diff line
@@ -950,6 +950,6 @@ static const struct pptable_funcs renoir_ppt_funcs = {
void renoir_set_ppt_funcs(struct smu_context *smu)
{
	smu->ppt_funcs = &renoir_ppt_funcs;
	smu->smc_if_version = SMU12_DRIVER_IF_VERSION;
	smu->smc_driver_if_version = SMU12_DRIVER_IF_VERSION;
	smu->is_apu = true;
}
+8 −8
Original line number Diff line number Diff line
@@ -266,23 +266,23 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)

	switch (smu->adev->asic_type) {
	case CHIP_VEGA20:
		smu->smc_if_version = SMU11_DRIVER_IF_VERSION_VG20;
		smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_VG20;
		break;
	case CHIP_ARCTURUS:
		smu->smc_if_version = SMU11_DRIVER_IF_VERSION_ARCT;
		smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_ARCT;
		break;
	case CHIP_NAVI10:
		smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV10;
		smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV10;
		break;
	case CHIP_NAVI12:
		smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV12;
		smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV12;
		break;
	case CHIP_NAVI14:
		smu->smc_if_version = SMU11_DRIVER_IF_VERSION_NV14;
		smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_NV14;
		break;
	default:
		pr_err("smu unsupported asic type:%d.\n", smu->adev->asic_type);
		smu->smc_if_version = SMU11_DRIVER_IF_VERSION_INV;
		smu->smc_driver_if_version = SMU11_DRIVER_IF_VERSION_INV;
		break;
	}

@@ -294,10 +294,10 @@ int smu_v11_0_check_fw_version(struct smu_context *smu)
	 * Considering above, we just leave user a warning message instead
	 * of halt driver loading.
	 */
	if (if_version != smu->smc_if_version) {
	if (if_version != smu->smc_driver_if_version) {
		pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
			"smu fw version = 0x%08x (%d.%d.%d)\n",
			smu->smc_if_version, if_version,
			smu->smc_driver_if_version, if_version,
			smu_version, smu_major, smu_minor, smu_debug);
		pr_warn("SMU driver if version not matched\n");
	}
+2 −2
Original line number Diff line number Diff line
@@ -160,10 +160,10 @@ int smu_v12_0_check_fw_version(struct smu_context *smu)
	 * Considering above, we just leave user a warning message instead
	 * of halt driver loading.
	 */
	if (if_version != smu->smc_if_version) {
	if (if_version != smu->smc_driver_if_version) {
		pr_info("smu driver if version = 0x%08x, smu fw if version = 0x%08x, "
			"smu fw version = 0x%08x (%d.%d.%d)\n",
			smu->smc_if_version, if_version,
			smu->smc_driver_if_version, if_version,
			smu_version, smu_major, smu_minor, smu_debug);
		pr_warn("SMU driver if version not matched\n");
	}