From: Rex Zhu <rex....@amd.com>

Signed-off-by: Rex Zhu <rex....@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c | 7 ++++---
 drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h | 1 +
 drivers/gpu/drm/amd/amdgpu/ci_dpm.c     | 2 +-
 drivers/gpu/drm/amd/amdgpu/kv_dpm.c     | 2 +-
 drivers/gpu/drm/amd/amdgpu/si_dpm.c     | 2 +-
 5 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
index 4f8d3a5..009ccb9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c
@@ -553,9 +553,10 @@ int amdgpu_parse_extended_power_table(struct amdgpu_device 
*adev)
                                entry = 
(ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record *)
                                        ((u8 *)entry + 
sizeof(ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record));
                        }
-                       for (i = 0; i < states->numEntries; i++) {
-                               if (i >= AMD_MAX_VCE_LEVELS)
-                                       break;
+                       adev->pm.dpm.num_of_vce_states =
+                                       states->numEntries > AMD_MAX_VCE_LEVELS 
?
+                                       AMD_MAX_VCE_LEVELS : states->numEntries;
+                       for (i = 0; i < adev->pm.dpm.num_of_vce_states; i++) {
                                vce_clk = (VCEClockInfo *)
                                        ((u8 *)&array->entries[0] +
                                         (state_entry->ucVCEClockInfoIndex * 
sizeof(VCEClockInfo)));
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
index 68dac0c..5097415 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
@@ -387,6 +387,7 @@ struct amdgpu_dpm {
        /* default uvd power state */
        struct amdgpu_ps        *uvd_ps;
        /* vce requirements */
+       u32                  num_of_vce_states;
        struct amd_vce_state vce_states[AMD_MAX_VCE_LEVELS];
        enum amd_vce_level vce_level;
        enum amd_pm_state_type state;
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c 
b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
index dc3196e..fa939df 100644
--- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
@@ -5689,7 +5689,7 @@ static int ci_parse_power_table(struct amdgpu_device 
*adev)
        adev->pm.dpm.num_ps = state_array->ucNumEntries;
 
        /* fill in the vce power states */
-       for (i = 0; i < AMD_MAX_VCE_LEVELS; i++) {
+       for (i = 0; i < adev->pm.dpm.num_of_vce_states; i++) {
                u32 sclk, mclk;
                clock_array_index = adev->pm.dpm.vce_states[i].clk_idx;
                clock_info = (union pplib_clock_info *)
diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c 
b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
index a03690a..b23f643 100644
--- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c
@@ -2796,7 +2796,7 @@ static int kv_parse_power_table(struct amdgpu_device 
*adev)
        adev->pm.dpm.num_ps = state_array->ucNumEntries;
 
        /* fill in the vce power states */
-       for (i = 0; i < AMD_MAX_VCE_LEVELS; i++) {
+       for (i = 0; i < adev->pm.dpm.num_of_vce_states; i++) {
                u32 sclk;
                clock_array_index = adev->pm.dpm.vce_states[i].clk_idx;
                clock_info = (union pplib_clock_info *)
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dpm.c 
b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
index 1a909fa..a76a856 100644
--- a/drivers/gpu/drm/amd/amdgpu/si_dpm.c
+++ b/drivers/gpu/drm/amd/amdgpu/si_dpm.c
@@ -7314,7 +7314,7 @@ static int si_parse_power_table(struct amdgpu_device 
*adev)
        adev->pm.dpm.num_ps = state_array->ucNumEntries;
 
        /* fill in the vce power states */
-       for (i = 0; i < AMD_MAX_VCE_LEVELS; i++) {
+       for (i = 0; i < adev->pm.dpm.num_of_vce_states; i++) {
                u32 sclk, mclk;
                clock_array_index = adev->pm.dpm.vce_states[i].clk_idx;
                clock_info = (union pplib_clock_info *)
-- 
2.5.5

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

Reply via email to