Commit 9eddfcbe authored by Asad Kamal's avatar Asad Kamal Committed by Alex Deucher
Browse files

drm/amd/pn: Fetch static metrics table



Fetch static metrics table for smu_v13_0_6

v2: Add static metrics caps check to fetch static metrics table

v3: Update version having all fixes for static metrics support

Signed-off-by: default avatarAsad Kamal <asad.kamal@amd.com>
Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a2344a98
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -177,6 +177,7 @@ static const struct cmn2asic_msg_mapping smu_v13_0_6_message_map[SMU_MSG_MAX_COU
	MSG_MAP(SetThrottlingPolicy,                 PPSMC_MSG_SetThrottlingPolicy,             0),
	MSG_MAP(ResetSDMA,                           PPSMC_MSG_ResetSDMA,                       0),
	MSG_MAP(ResetVCN,                            PPSMC_MSG_ResetVCN,                       0),
	MSG_MAP(GetStaticMetricsTable,               PPSMC_MSG_GetStaticMetricsTable,           0),
};

// clang-format on
@@ -391,6 +392,8 @@ static void smu_v13_0_6_init_caps(struct smu_context *smu)
		if ((pgm == 7 && fw_ver >= 0x7550E00) ||
		    (pgm == 0 && fw_ver >= 0x00557E00))
			smu_v13_0_6_cap_set(smu, SMU_CAP(HST_LIMIT_METRICS));
		if (fw_ver >= 0x00557F01)
			smu_v13_0_6_cap_set(smu, SMU_CAP(STATIC_METRICS));
	}
	if (((pgm == 7) && (fw_ver >= 0x7550700)) ||
	    ((pgm == 0) && (fw_ver >= 0x00557900)) ||
@@ -736,6 +739,26 @@ static ssize_t smu_v13_0_6_get_pm_metrics(struct smu_context *smu,
	return pm_metrics->common_header.structure_size;
}

static int smu_v13_0_6_get_static_metrics_table(struct smu_context *smu)
{
	struct smu_table_context *smu_table = &smu->smu_table;
	uint32_t table_size = smu_table->tables[SMU_TABLE_SMU_METRICS].size;
	struct smu_table *table = &smu_table->driver_table;
	int ret;

	ret = smu_cmn_send_smc_msg(smu, SMU_MSG_GetStaticMetricsTable, NULL);
	if (ret) {
		dev_info(smu->adev->dev,
				"Failed to export static metrics table!\n");
		return ret;
	}

	amdgpu_asic_invalidate_hdp(smu->adev, NULL);
	memcpy(smu_table->metrics_table, table->cpu_addr, table_size);

	return 0;
}

static int smu_v13_0_6_setup_driver_pptable(struct smu_context *smu)
{
	struct smu_table_context *smu_table = &smu->smu_table;
@@ -803,6 +826,11 @@ static int smu_v13_0_6_setup_driver_pptable(struct smu_context *smu)
			GET_METRIC_FIELD(PublicSerialNumber_AID, version)[0];

		pptable->Init = true;
		if (smu_v13_0_6_cap_supported(smu, SMU_CAP(STATIC_METRICS))) {
			ret = smu_v13_0_6_get_static_metrics_table(smu);
			if (ret)
				return ret;
		}
	}

	return 0;