Commit 96626a0e authored by Alex Deucher's avatar Alex Deucher

drm/amdgpu/sienna_cichlid_ppt: convert to IP version checking

Use IP versions rather than asic_type to differentiate
IP version specific features.
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ea0d730a
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
#define SMU_11_0_7_GFX_BUSY_THRESHOLD 15 #define SMU_11_0_7_GFX_BUSY_THRESHOLD 15
#define GET_PPTABLE_MEMBER(field, member) do {\ #define GET_PPTABLE_MEMBER(field, member) do {\
if (smu->adev->asic_type == CHIP_BEIGE_GOBY)\ if (smu->adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 13))\
(*member) = (smu->smu_table.driver_pptable + offsetof(PPTable_beige_goby_t, field));\ (*member) = (smu->smu_table.driver_pptable + offsetof(PPTable_beige_goby_t, field));\
else\ else\
(*member) = (smu->smu_table.driver_pptable + offsetof(PPTable_t, field));\ (*member) = (smu->smu_table.driver_pptable + offsetof(PPTable_t, field));\
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
static int get_table_size(struct smu_context *smu) static int get_table_size(struct smu_context *smu)
{ {
if (smu->adev->asic_type == CHIP_BEIGE_GOBY) if (smu->adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 13))
return sizeof(PPTable_beige_goby_t); return sizeof(PPTable_beige_goby_t);
else else
return sizeof(PPTable_t); return sizeof(PPTable_t);
...@@ -298,7 +298,7 @@ sienna_cichlid_get_allowed_feature_mask(struct smu_context *smu, ...@@ -298,7 +298,7 @@ sienna_cichlid_get_allowed_feature_mask(struct smu_context *smu,
} }
if ((adev->pm.pp_feature & PP_GFX_DCS_MASK) && if ((adev->pm.pp_feature & PP_GFX_DCS_MASK) &&
(adev->asic_type > CHIP_SIENNA_CICHLID) && (adev->ip_versions[MP1_HWIP] > IP_VERSION(11, 0, 7)) &&
!(adev->flags & AMD_IS_APU)) !(adev->flags & AMD_IS_APU))
*(uint64_t *)feature_mask |= FEATURE_MASK(FEATURE_GFX_DCS_BIT); *(uint64_t *)feature_mask |= FEATURE_MASK(FEATURE_GFX_DCS_BIT);
...@@ -496,7 +496,7 @@ static uint32_t sienna_cichlid_get_throttler_status_locked(struct smu_context *s ...@@ -496,7 +496,7 @@ static uint32_t sienna_cichlid_get_throttler_status_locked(struct smu_context *s
uint32_t throttler_status = 0; uint32_t throttler_status = 0;
int i; int i;
if ((smu->adev->asic_type == CHIP_SIENNA_CICHLID) && if ((smu->adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 7)) &&
(smu->smc_fw_version >= 0x3A4300)) { (smu->smc_fw_version >= 0x3A4300)) {
for (i = 0; i < THROTTLER_COUNT; i++) for (i = 0; i < THROTTLER_COUNT; i++)
throttler_status |= throttler_status |=
...@@ -517,7 +517,7 @@ static int sienna_cichlid_get_smu_metrics_data(struct smu_context *smu, ...@@ -517,7 +517,7 @@ static int sienna_cichlid_get_smu_metrics_data(struct smu_context *smu,
&(((SmuMetricsExternal_t *)(smu_table->metrics_table))->SmuMetrics); &(((SmuMetricsExternal_t *)(smu_table->metrics_table))->SmuMetrics);
SmuMetrics_V2_t *metrics_v2 = SmuMetrics_V2_t *metrics_v2 =
&(((SmuMetricsExternal_t *)(smu_table->metrics_table))->SmuMetrics_V2); &(((SmuMetricsExternal_t *)(smu_table->metrics_table))->SmuMetrics_V2);
bool use_metrics_v2 = ((smu->adev->asic_type == CHIP_SIENNA_CICHLID) && bool use_metrics_v2 = ((smu->adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 7)) &&
(smu->smc_fw_version >= 0x3A4300)) ? true : false; (smu->smc_fw_version >= 0x3A4300)) ? true : false;
uint16_t average_gfx_activity; uint16_t average_gfx_activity;
int ret = 0; int ret = 0;
...@@ -1170,7 +1170,7 @@ static int sienna_cichlid_print_clk_levels(struct smu_context *smu, ...@@ -1170,7 +1170,7 @@ static int sienna_cichlid_print_clk_levels(struct smu_context *smu,
* and onwards SMU firmwares. * and onwards SMU firmwares.
*/ */
smu_cmn_get_smc_version(smu, NULL, &smu_version); smu_cmn_get_smc_version(smu, NULL, &smu_version);
if ((adev->asic_type == CHIP_SIENNA_CICHLID) && if ((adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 7)) &&
(smu_version < 0x003a2900)) (smu_version < 0x003a2900))
break; break;
...@@ -1937,7 +1937,7 @@ static void sienna_cichlid_dump_od_table(struct smu_context *smu, ...@@ -1937,7 +1937,7 @@ static void sienna_cichlid_dump_od_table(struct smu_context *smu,
od_table->UclkFmax); od_table->UclkFmax);
smu_cmn_get_smc_version(smu, NULL, &smu_version); smu_cmn_get_smc_version(smu, NULL, &smu_version);
if (!((adev->asic_type == CHIP_SIENNA_CICHLID) && if (!((adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 7)) &&
(smu_version < 0x003a2900))) (smu_version < 0x003a2900)))
dev_dbg(smu->adev->dev, "OD: VddGfxOffset: %d\n", od_table->VddGfxOffset); dev_dbg(smu->adev->dev, "OD: VddGfxOffset: %d\n", od_table->VddGfxOffset);
} }
...@@ -2161,7 +2161,7 @@ static int sienna_cichlid_od_edit_dpm_table(struct smu_context *smu, ...@@ -2161,7 +2161,7 @@ static int sienna_cichlid_od_edit_dpm_table(struct smu_context *smu,
* and onwards SMU firmwares. * and onwards SMU firmwares.
*/ */
smu_cmn_get_smc_version(smu, NULL, &smu_version); smu_cmn_get_smc_version(smu, NULL, &smu_version);
if ((adev->asic_type == CHIP_SIENNA_CICHLID) && if ((adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 7)) &&
(smu_version < 0x003a2900)) { (smu_version < 0x003a2900)) {
dev_err(smu->adev->dev, "OD GFX Voltage offset functionality is supported " dev_err(smu->adev->dev, "OD GFX Voltage offset functionality is supported "
"only by 58.41.0 and onwards SMU firmwares!\n"); "only by 58.41.0 and onwards SMU firmwares!\n");
...@@ -2865,7 +2865,7 @@ static void sienna_cichlid_dump_pptable(struct smu_context *smu) ...@@ -2865,7 +2865,7 @@ static void sienna_cichlid_dump_pptable(struct smu_context *smu)
PPTable_t *pptable = table_context->driver_pptable; PPTable_t *pptable = table_context->driver_pptable;
int i; int i;
if (smu->adev->asic_type == CHIP_BEIGE_GOBY) { if (smu->adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 13)) {
beige_goby_dump_pptable(smu); beige_goby_dump_pptable(smu);
return; return;
} }
...@@ -3625,7 +3625,7 @@ static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu, ...@@ -3625,7 +3625,7 @@ static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu,
SmuMetrics_V2_t *metrics_v2 = SmuMetrics_V2_t *metrics_v2 =
&(metrics_external.SmuMetrics_V2); &(metrics_external.SmuMetrics_V2);
struct amdgpu_device *adev = smu->adev; struct amdgpu_device *adev = smu->adev;
bool use_metrics_v2 = ((adev->asic_type == CHIP_SIENNA_CICHLID) && bool use_metrics_v2 = ((adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 7)) &&
(smu->smc_fw_version >= 0x3A4300)) ? true : false; (smu->smc_fw_version >= 0x3A4300)) ? true : false;
uint16_t average_gfx_activity; uint16_t average_gfx_activity;
int ret = 0; int ret = 0;
...@@ -3706,8 +3706,8 @@ static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu, ...@@ -3706,8 +3706,8 @@ static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu,
gpu_metrics->current_fan_speed = use_metrics_v2 ? metrics_v2->CurrFanSpeed : metrics->CurrFanSpeed; gpu_metrics->current_fan_speed = use_metrics_v2 ? metrics_v2->CurrFanSpeed : metrics->CurrFanSpeed;
if (((adev->asic_type == CHIP_SIENNA_CICHLID) && smu->smc_fw_version > 0x003A1E00) || if (((adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 7)) && smu->smc_fw_version > 0x003A1E00) ||
((adev->asic_type == CHIP_NAVY_FLOUNDER) && smu->smc_fw_version > 0x00410400)) { ((adev->ip_versions[MP1_HWIP] == IP_VERSION(11, 0, 11)) && smu->smc_fw_version > 0x00410400)) {
gpu_metrics->pcie_link_width = use_metrics_v2 ? metrics_v2->PcieWidth : metrics->PcieWidth; gpu_metrics->pcie_link_width = use_metrics_v2 ? metrics_v2->PcieWidth : metrics->PcieWidth;
gpu_metrics->pcie_link_speed = link_speed[use_metrics_v2 ? metrics_v2->PcieRate : metrics->PcieRate]; gpu_metrics->pcie_link_speed = link_speed[use_metrics_v2 ? metrics_v2->PcieRate : metrics->PcieRate];
} else { } else {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment