return (mem_clk * 100);
 }
 
+static int vega12_get_metrics_table(struct pp_hwmgr *hwmgr, SmuMetrics_t *metrics_table)
+{
+       struct vega12_hwmgr *data =
+                       (struct vega12_hwmgr *)(hwmgr->backend);
+       int ret = 0;
+
+       if (!data->metrics_time || time_after(jiffies, data->metrics_time + HZ / 2)) {
+               ret = smum_smc_table_manager(hwmgr, (uint8_t *)metrics_table,
+                               TABLE_SMU_METRICS, true);
+               if (ret) {
+                       pr_info("Failed to export SMU metrics table!\n");
+                       return ret;
+               }
+               memcpy(&data->metrics_table, metrics_table, sizeof(SmuMetrics_t));
+               data->metrics_time = jiffies;
+       } else
+               memcpy(metrics_table, &data->metrics_table, sizeof(SmuMetrics_t));
+
+       return ret;
+}
+
 static int vega12_get_gpu_power(struct pp_hwmgr *hwmgr, uint32_t *query)
 {
 #if 0
 
        priv->smu_tables.entry[TABLE_OVERDRIVE].version = 0x01;
        priv->smu_tables.entry[TABLE_OVERDRIVE].size = sizeof(OverDriveTable_t);
 
+       /* allocate space for SMU_METRICS table */
+       ret = amdgpu_bo_create_kernel((struct amdgpu_device *)hwmgr->adev,
+                                     sizeof(SmuMetrics_t),
+                                     PAGE_SIZE,
+                                     AMDGPU_GEM_DOMAIN_VRAM,
+                                     &priv->smu_tables.entry[TABLE_SMU_METRICS].handle,
+                                     &priv->smu_tables.entry[TABLE_SMU_METRICS].mc_addr,
+                                     &priv->smu_tables.entry[TABLE_SMU_METRICS].table);
+       if (ret)
+               goto err4;
+
+       priv->smu_tables.entry[TABLE_SMU_METRICS].version = 0x01;
+       priv->smu_tables.entry[TABLE_SMU_METRICS].size = sizeof(SmuMetrics_t);
+
        return 0;
 
+err4:
+       amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_OVERDRIVE].handle,
+                               &priv->smu_tables.entry[TABLE_OVERDRIVE].mc_addr,
+                               &priv->smu_tables.entry[TABLE_OVERDRIVE].table);
 err3:
        amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_AVFS_FUSE_OVERRIDE].handle,
                                &priv->smu_tables.entry[TABLE_AVFS_FUSE_OVERRIDE].mc_addr,
                amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_OVERDRIVE].handle,
                                      &priv->smu_tables.entry[TABLE_OVERDRIVE].mc_addr,
                                      &priv->smu_tables.entry[TABLE_OVERDRIVE].table);
+               amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_SMU_METRICS].handle,
+                                     &priv->smu_tables.entry[TABLE_SMU_METRICS].mc_addr,
+                                     &priv->smu_tables.entry[TABLE_SMU_METRICS].table);
                kfree(hwmgr->smu_backend);
                hwmgr->smu_backend = NULL;
        }