drm/amd/powerplay: optimize i2c bus access implementation
authorEvan Quan <evan.quan@amd.com>
Thu, 13 Aug 2020 03:51:11 +0000 (11:51 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Aug 2020 20:22:41 +0000 (16:22 -0400)
The caller needs not care about the internal details how the powerplay
API implemented.

Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Nirmoy Das <nirmoy.das@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c

index 5e9baca..3465fdd 100644 (file)
@@ -1247,3 +1247,18 @@ int amdgpu_dpm_set_clockgating_by_smu(struct amdgpu_device *adev,
 
        return ret;
 }
+
+int amdgpu_dpm_smu_i2c_bus_access(struct amdgpu_device *adev,
+                                 bool acquire)
+{
+       void *pp_handle = adev->powerplay.pp_handle;
+       const struct amd_pm_funcs *pp_funcs =
+                       adev->powerplay.pp_funcs;
+       int ret = -EOPNOTSUPP;
+
+       if (pp_funcs && pp_funcs->smu_i2c_bus_access)
+               ret = pp_funcs->smu_i2c_bus_access(pp_handle,
+                                                  acquire);
+
+       return ret;
+}
index 672b73a..5a2344f 100644 (file)
@@ -545,4 +545,7 @@ int amdgpu_dpm_enable_mgpu_fan_boost(struct amdgpu_device *adev);
 int amdgpu_dpm_set_clockgating_by_smu(struct amdgpu_device *adev,
                                      uint32_t msg_id);
 
+int amdgpu_dpm_smu_i2c_bus_access(struct amdgpu_device *adev,
+                                 bool acquire);
+
 #endif
index d55bf64..7fb240c 100644 (file)
@@ -508,14 +508,9 @@ static bool smu_v11_0_i2c_bus_lock(struct i2c_adapter *control)
        struct amdgpu_device *adev = to_amdgpu_device(control);
 
        /* Send  PPSMC_MSG_RequestI2CBus */
-       if (!adev->powerplay.pp_funcs->smu_i2c_bus_access)
-               goto Fail;
-
-
-       if (!adev->powerplay.pp_funcs->smu_i2c_bus_access(adev->powerplay.pp_handle, true))
+       if (!amdgpu_dpm_smu_i2c_bus_access(adev, true))
                return true;
 
-Fail:
        return false;
 }
 
@@ -523,16 +518,10 @@ static bool smu_v11_0_i2c_bus_unlock(struct i2c_adapter *control)
 {
        struct amdgpu_device *adev = to_amdgpu_device(control);
 
-       /* Send  PPSMC_MSG_RequestI2CBus */
-       if (!adev->powerplay.pp_funcs->smu_i2c_bus_access)
-               goto Fail;
-
        /* Send  PPSMC_MSG_ReleaseI2CBus */
-       if (!adev->powerplay.pp_funcs->smu_i2c_bus_access(adev->powerplay.pp_handle,
-                                                            false))
+       if (!amdgpu_dpm_smu_i2c_bus_access(adev, false))
                return true;
 
-Fail:
        return false;
 }