drm/amd/pm: implement is_dpm_running() callback for yellow carp
authorXiaomeng Hou <Xiaomeng.Hou@amd.com>
Mon, 8 Mar 2021 23:11:15 +0000 (07:11 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 4 Jun 2021 20:03:21 +0000 (16:03 -0400)
Implement function to check if DPM is running for yellow carp.

Acked-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Xiaomeng Hou <Xiaomeng.Hou@amd.com>
Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c

index ff75f18..935754e 100644 (file)
 #undef pr_info
 #undef pr_debug
 
+#define FEATURE_MASK(feature) (1ULL << feature)
+#define SMC_DPM_FEATURE ( \
+       FEATURE_MASK(FEATURE_CCLK_DPM_BIT) | \
+       FEATURE_MASK(FEATURE_VCN_DPM_BIT)        | \
+       FEATURE_MASK(FEATURE_FCLK_DPM_BIT)       | \
+       FEATURE_MASK(FEATURE_SOCCLK_DPM_BIT)     | \
+       FEATURE_MASK(FEATURE_MP0CLK_DPM_BIT)     | \
+       FEATURE_MASK(FEATURE_LCLK_DPM_BIT)       | \
+       FEATURE_MASK(FEATURE_SHUBCLK_DPM_BIT)    | \
+       FEATURE_MASK(FEATURE_DCFCLK_DPM_BIT)| \
+       FEATURE_MASK(FEATURE_GFX_DPM_BIT))
+
 static struct cmn2asic_msg_mapping yellow_carp_message_map[SMU_MSG_MAX_COUNT] = {
        MSG_MAP(TestMessage,                    PPSMC_MSG_TestMessage,                  1),
        MSG_MAP(GetSmuVersion,                  PPSMC_MSG_GetSmuVersion,                1),
@@ -198,18 +210,18 @@ static int yellow_carp_dpm_set_jpeg_enable(struct smu_context *smu, bool enable)
 
 static bool yellow_carp_is_dpm_running(struct smu_context *smu)
 {
-       struct amdgpu_device *adev = smu->adev;
+       int ret = 0;
+       uint32_t feature_mask[2];
+       uint64_t feature_enabled;
+
+       ret = smu_cmn_get_enabled_32_bits_mask(smu, feature_mask, 2);
 
-       /*
-        * Until now, the pmfw hasn't exported the interface of SMU
-        * feature mask to APU SKU so just force on all the feature
-        * at early initial stage.
-        */
-       if (adev->in_suspend)
+       if (ret)
                return false;
-       else
-               return true;
 
+       feature_enabled = (uint64_t)feature_mask[1] << 32 | feature_mask[0];
+
+       return !!(feature_enabled & SMC_DPM_FEATURE);
 }
 
 static int yellow_carp_post_smu_init(struct smu_context *smu)