{
struct smu_context *smu = handle;
struct smu_table_context *smu_table = &smu->smu_table;
- struct smu_table *tables = smu_table->tables;
- enum smu_table_id table_id;
+ struct smu_driver_table *driver_tables = smu_table->driver_tables;
+ enum smu_driver_table_id table_id;
+ struct smu_driver_table *temp_table;
if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
return -EOPNOTSUPP;
table_id = smu_metrics_get_temp_table_id(type);
- if (table_id == SMU_TABLE_COUNT)
+ if (table_id == SMU_DRIVER_TABLE_COUNT)
return -EINVAL;
+ temp_table = &driver_tables[table_id];
+
/* If the request is to get size alone, return the cached table size */
- if (!table && tables[table_id].cache.size)
- return tables[table_id].cache.size;
+ if (!table && temp_table->cache.size)
+ return temp_table->cache.size;
- if (smu_table_cache_is_valid(&tables[table_id])) {
- memcpy(table, tables[table_id].cache.buffer,
- tables[table_id].cache.size);
- return tables[table_id].cache.size;
+ if (smu_driver_table_is_valid(temp_table)) {
+ memcpy(table, temp_table->cache.buffer, temp_table->cache.size);
+ return temp_table->cache.size;
}
return smu->smu_temp.temp_funcs->get_temp_metrics(smu, type, table);
enum smu_driver_table_id {
SMU_DRIVER_TABLE_GPU_METRICS = 0,
+ SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS,
+ SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS,
SMU_DRIVER_TABLE_COUNT,
};
SMU_TABLE_ECCINFO,
SMU_TABLE_COMBO_PPTABLE,
SMU_TABLE_WIFIBAND,
- SMU_TABLE_GPUBOARD_TEMP_METRICS,
- SMU_TABLE_BASEBOARD_TEMP_METRICS,
SMU_TABLE_PMFW_SYSTEM_METRICS,
SMU_TABLE_COUNT,
};
struct smu_dpm_policy *smu_get_pm_policy(struct smu_context *smu,
enum pp_pm_policy p_type);
-static inline enum smu_table_id
+static inline enum smu_driver_table_id
smu_metrics_get_temp_table_id(enum smu_temp_metric_type type)
{
switch (type) {
case SMU_TEMP_METRIC_BASEBOARD:
- return SMU_TABLE_BASEBOARD_TEMP_METRICS;
+ return SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS;
case SMU_TEMP_METRIC_GPUBOARD:
- return SMU_TABLE_GPUBOARD_TEMP_METRICS;
+ return SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS;
default:
- return SMU_TABLE_COUNT;
+ return SMU_DRIVER_TABLE_COUNT;
}
- return SMU_TABLE_COUNT;
+ return SMU_DRIVER_TABLE_COUNT;
}
static inline void smu_table_cache_update_time(struct smu_table *table,
{
struct amdgpu_baseboard_temp_metrics_v1_0 *baseboard_temp_metrics;
struct amdgpu_gpuboard_temp_metrics_v1_0 *gpuboard_temp_metrics;
- struct smu_table_context *smu_table = &smu->smu_table;
- struct smu_table *tables = smu_table->tables;
- struct smu_table_cache *cache;
int ret;
ret = smu_table_cache_init(smu, SMU_TABLE_PMFW_SYSTEM_METRICS,
if (ret)
return ret;
- ret = smu_table_cache_init(smu, SMU_TABLE_BASEBOARD_TEMP_METRICS,
- sizeof(*baseboard_temp_metrics), 50);
+ ret = smu_driver_table_init(smu,
+ SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS,
+ sizeof(*baseboard_temp_metrics), 50);
if (ret)
return ret;
/* Initialize base board temperature metrics */
- cache = &(tables[SMU_TABLE_BASEBOARD_TEMP_METRICS].cache);
- baseboard_temp_metrics =
- (struct amdgpu_baseboard_temp_metrics_v1_0 *) cache->buffer;
+ baseboard_temp_metrics = (struct amdgpu_baseboard_temp_metrics_v1_0 *)
+ smu_driver_table_ptr(smu,
+ SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS);
smu_cmn_init_baseboard_temp_metrics(baseboard_temp_metrics, 1, 0);
/* Initialize GPU board temperature metrics */
- ret = smu_table_cache_init(smu, SMU_TABLE_GPUBOARD_TEMP_METRICS,
- sizeof(*gpuboard_temp_metrics), 50);
+ ret = smu_driver_table_init(smu, SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS,
+ sizeof(*gpuboard_temp_metrics), 50);
if (ret) {
smu_table_cache_fini(smu, SMU_TABLE_PMFW_SYSTEM_METRICS);
- smu_table_cache_fini(smu, SMU_TABLE_BASEBOARD_TEMP_METRICS);
+ smu_driver_table_fini(smu,
+ SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS);
return ret;
}
- cache = &(tables[SMU_TABLE_GPUBOARD_TEMP_METRICS].cache);
- gpuboard_temp_metrics = (struct amdgpu_gpuboard_temp_metrics_v1_0 *)cache->buffer;
+ gpuboard_temp_metrics = (struct amdgpu_gpuboard_temp_metrics_v1_0 *)
+ smu_driver_table_ptr(smu,
+ SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS);
smu_cmn_init_gpuboard_temp_metrics(gpuboard_temp_metrics, 1, 0);
return 0;
void smu_v13_0_12_tables_fini(struct smu_context *smu)
{
- smu_table_cache_fini(smu, SMU_TABLE_BASEBOARD_TEMP_METRICS);
- smu_table_cache_fini(smu, SMU_TABLE_GPUBOARD_TEMP_METRICS);
+ smu_driver_table_fini(smu, SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS);
+ smu_driver_table_fini(smu, SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS);
smu_table_cache_fini(smu, SMU_TABLE_PMFW_SYSTEM_METRICS);
}
struct amdgpu_gpuboard_temp_metrics_v1_0 *gpuboard_temp_metrics;
struct smu_table_context *smu_table = &smu->smu_table;
struct smu_table *tables = smu_table->tables;
+ enum smu_driver_table_id table_id;
SystemMetricsTable_t *metrics;
- struct smu_table *data_table;
struct smu_table *sys_table;
int ret, sensor_type;
u32 idx, sensors;
if (type == SMU_TEMP_METRIC_BASEBOARD) {
/* Initialize base board temperature metrics */
- data_table =
- &smu->smu_table.tables[SMU_TABLE_BASEBOARD_TEMP_METRICS];
+ table_id = SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS;
baseboard_temp_metrics =
(struct amdgpu_baseboard_temp_metrics_v1_0 *)
- data_table->cache.buffer;
+ smu_driver_table_ptr(smu, table_id);
size = sizeof(*baseboard_temp_metrics);
} else {
- data_table =
- &smu->smu_table.tables[SMU_TABLE_GPUBOARD_TEMP_METRICS];
+ table_id = SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS;
gpuboard_temp_metrics =
(struct amdgpu_gpuboard_temp_metrics_v1_0 *)
- data_table->cache.buffer;
+ smu_driver_table_ptr(smu, table_id);
size = sizeof(*baseboard_temp_metrics);
}
sys_table = &tables[SMU_TABLE_PMFW_SYSTEM_METRICS];
metrics = (SystemMetricsTable_t *)sys_table->cache.buffer;
- smu_table_cache_update_time(data_table, jiffies);
+ smu_driver_table_update_cache_time(smu, table_id);
if (type == SMU_TEMP_METRIC_GPUBOARD) {
gpuboard_temp_metrics->accumulation_counter = metrics->AccumulationCounter;
}
}
- memcpy(table, data_table->cache.buffer, size);
+ if (type == SMU_TEMP_METRIC_BASEBOARD)
+ memcpy(table, baseboard_temp_metrics, size);
+ else
+ memcpy(table, gpuboard_temp_metrics, size);
return size;
}