drm/amd/pm: fix is_dpm_running() run error on 32bit system
authorKevin Wang <kevin1.wang@amd.com>
Mon, 24 Aug 2020 08:50:12 +0000 (16:50 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 3 Sep 2020 04:33:16 +0000 (00:33 -0400)
v1:
the C type "unsigned long" size is 32bit on 32bit system,
it will cause code logic error, so replace it with "uint64_t".

v2:
remove duplicate cast operation.

Signed-off-by: Kevin <kevin1.wang@amd.com>
Suggest-by: Jiansong Chen <Jiansong.Chen@amd.com>
Reviewed-by: Jiansong Chen <Jiansong.Chen@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/arcturus_ppt.c
drivers/gpu/drm/amd/powerplay/navi10_ppt.c
drivers/gpu/drm/amd/powerplay/sienna_cichlid_ppt.c

index fb962b9ceffb8422d2aba7ae9fa11cf51d78ae61..9582b38162f0908c606e419d4ff86063571171a4 100644 (file)
@@ -1840,10 +1840,14 @@ static bool arcturus_is_dpm_running(struct smu_context *smu)
 {
        int ret = 0;
        uint32_t feature_mask[2];
-       unsigned long feature_enabled;
+       uint64_t feature_enabled;
+
        ret = smu_cmn_get_enabled_mask(smu, feature_mask, 2);
-       feature_enabled = (unsigned long)((uint64_t)feature_mask[0] |
-                          ((uint64_t)feature_mask[1] << 32));
+       if (ret)
+               return false;
+
+       feature_enabled = (uint64_t)feature_mask[1] << 32 | feature_mask[0];
+
        return !!(feature_enabled & SMC_DPM_FEATURE);
 }
 
index 9f62af9abd23289f88fb9a2800a40c8f3f69d04c..3d5eae956a23d085bb8eaf205d7680f65d45ee07 100644 (file)
@@ -1331,10 +1331,14 @@ static bool navi10_is_dpm_running(struct smu_context *smu)
 {
        int ret = 0;
        uint32_t feature_mask[2];
-       unsigned long feature_enabled;
+       uint64_t feature_enabled;
+
        ret = smu_cmn_get_enabled_mask(smu, feature_mask, 2);
-       feature_enabled = (unsigned long)((uint64_t)feature_mask[0] |
-                          ((uint64_t)feature_mask[1] << 32));
+       if (ret)
+               return false;
+
+       feature_enabled = (uint64_t)feature_mask[1] << 32 | feature_mask[0];
+
        return !!(feature_enabled & SMC_DPM_FEATURE);
 }
 
index 638760839c1506672057d8d545f62ebaf2f602df..1df03a35de82675e05fd2c1804eb4751818691bc 100644 (file)
@@ -1147,10 +1147,14 @@ static bool sienna_cichlid_is_dpm_running(struct smu_context *smu)
 {
        int ret = 0;
        uint32_t feature_mask[2];
-       unsigned long feature_enabled;
+       uint64_t feature_enabled;
+
        ret = smu_cmn_get_enabled_mask(smu, feature_mask, 2);
-       feature_enabled = (unsigned long)((uint64_t)feature_mask[0] |
-                          ((uint64_t)feature_mask[1] << 32));
+       if (ret)
+               return false;
+
+       feature_enabled = (uint64_t)feature_mask[1] << 32 | feature_mask[0];
+
        return !!(feature_enabled & SMC_DPM_FEATURE);
 }