The caller needs not care about the internal details how the powerplay
API implemented.

Change-Id: I942de0c9f78b2e2c0dfb7c67b82be2527c6825d3
Signed-off-by: Evan Quan <evan.q...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c    | 15 +++++++++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h    |  3 +++
 drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c | 15 ++-------------
 3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
index 2aa6f53fcae7..2198148319e2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
@@ -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;
+}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
index 672b73ad08c2..5a2344f839f2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
@@ -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
diff --git a/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c 
b/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
index d55bf64770c4..7fb240c4990c 100644
--- a/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
+++ b/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
@@ -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;
 }
 
-- 
2.28.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to