From: Boyuan Zhang <boyuan.zh...@amd.com>

Perform wait_for_idle only for the instance of the current vcn IP block,
instead of perform it for all vcn instances.

Signed-off-by: Boyuan Zhang <boyuan.zh...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c   | 18 +++++++++---------
 drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c   | 17 ++++++++---------
 drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c   | 17 ++++++++---------
 drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 13 ++++++-------
 drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c | 17 ++++++++---------
 drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c | 17 ++++++++---------
 6 files changed, 47 insertions(+), 52 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c 
b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
index 5332b2903ce1..936d37b8fd3c 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
@@ -1777,16 +1777,16 @@ static bool vcn_v2_5_is_idle(struct amdgpu_ip_block 
*ip_block)
 static int vcn_v2_5_wait_for_idle(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
-       int i, ret = 0;
+       int inst = ip_block->instance;
+       int ret = 0;
 
-       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
-               if (adev->vcn.harvest_config & (1 << i))
-                       continue;
-               ret = SOC15_WAIT_ON_RREG(VCN, i, mmUVD_STATUS, UVD_STATUS__IDLE,
-                       UVD_STATUS__IDLE);
-               if (ret)
-                       return ret;
-       }
+       if (adev->vcn.harvest_config & (1 << inst))
+               return 0;
+
+       ret = SOC15_WAIT_ON_RREG(VCN, inst, mmUVD_STATUS, UVD_STATUS__IDLE,
+               UVD_STATUS__IDLE);
+       if (ret)
+               return ret;
 
        return ret;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c 
b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
index 40a3d29d4e71..d1074490fdc9 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
@@ -2105,17 +2105,16 @@ static bool vcn_v3_0_is_idle(struct amdgpu_ip_block 
*ip_block)
 static int vcn_v3_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
-       int i, ret = 0;
+       int inst = ip_block->instance;
+       int ret = 0;
 
-       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
-               if (adev->vcn.harvest_config & (1 << i))
-                       continue;
+       if (adev->vcn.harvest_config & (1 << inst))
+               return 0;
 
-               ret = SOC15_WAIT_ON_RREG(VCN, i, mmUVD_STATUS, UVD_STATUS__IDLE,
-                       UVD_STATUS__IDLE);
-               if (ret)
-                       return ret;
-       }
+       ret = SOC15_WAIT_ON_RREG(VCN, inst, mmUVD_STATUS, UVD_STATUS__IDLE,
+               UVD_STATUS__IDLE);
+       if (ret)
+               return ret;
 
        return ret;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c 
b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
index 3b2f4f1e0939..a6d3425b499b 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
@@ -1968,17 +1968,16 @@ static bool vcn_v4_0_is_idle(struct amdgpu_ip_block 
*ip_block)
 static int vcn_v4_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
-       int i, ret = 0;
+       int inst = ip_block->instance;
+       int ret = 0;
 
-       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
-               if (adev->vcn.harvest_config & (1 << i))
-                       continue;
+       if (adev->vcn.harvest_config & (1 << inst))
+               return 0;
 
-               ret = SOC15_WAIT_ON_RREG(VCN, i, regUVD_STATUS, 
UVD_STATUS__IDLE,
-                       UVD_STATUS__IDLE);
-               if (ret)
-                       return ret;
-       }
+       ret = SOC15_WAIT_ON_RREG(VCN, inst, regUVD_STATUS, UVD_STATUS__IDLE,
+               UVD_STATUS__IDLE);
+       if (ret)
+               return ret;
 
        return ret;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c 
b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
index be03d31cb206..258c14fdfd23 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
@@ -1566,14 +1566,13 @@ static bool vcn_v4_0_3_is_idle(struct amdgpu_ip_block 
*ip_block)
 static int vcn_v4_0_3_wait_for_idle(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
-       int i, ret = 0;
+       int inst = ip_block->instance;
+       int ret = 0;
 
-       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
-               ret = SOC15_WAIT_ON_RREG(VCN, GET_INST(VCN, i), regUVD_STATUS,
-                                        UVD_STATUS__IDLE, UVD_STATUS__IDLE);
-               if (ret)
-                       return ret;
-       }
+       ret = SOC15_WAIT_ON_RREG(VCN, GET_INST(VCN, inst), regUVD_STATUS,
+                                UVD_STATUS__IDLE, UVD_STATUS__IDLE);
+       if (ret)
+               return ret;
 
        return ret;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c 
b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
index 43b1f3d06157..90a39a461e86 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
@@ -1465,17 +1465,16 @@ static bool vcn_v4_0_5_is_idle(struct amdgpu_ip_block 
*ip_block)
 static int vcn_v4_0_5_wait_for_idle(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
-       int i, ret = 0;
+       int inst = ip_block->instance;
+       int ret = 0;
 
-       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
-               if (adev->vcn.harvest_config & (1 << i))
-                       continue;
+       if (adev->vcn.harvest_config & (1 << inst))
+               return 0;
 
-               ret = SOC15_WAIT_ON_RREG(VCN, i, regUVD_STATUS, 
UVD_STATUS__IDLE,
-                       UVD_STATUS__IDLE);
-               if (ret)
-                       return ret;
-       }
+       ret = SOC15_WAIT_ON_RREG(VCN, inst, regUVD_STATUS, UVD_STATUS__IDLE,
+               UVD_STATUS__IDLE);
+       if (ret)
+               return ret;
 
        return ret;
 }
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c 
b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
index 65554c4e86cd..456951bf304f 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
@@ -1192,17 +1192,16 @@ static bool vcn_v5_0_0_is_idle(struct amdgpu_ip_block 
*ip_block)
 static int vcn_v5_0_0_wait_for_idle(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
-       int i, ret = 0;
+       int inst = ip_block->instance;
+       int ret = 0;
 
-       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
-               if (adev->vcn.harvest_config & (1 << i))
-                       continue;
+       if (adev->vcn.harvest_config & (1 << inst))
+               return 0;
 
-               ret = SOC15_WAIT_ON_RREG(VCN, i, regUVD_STATUS, 
UVD_STATUS__IDLE,
-                       UVD_STATUS__IDLE);
-               if (ret)
-                       return ret;
-       }
+       ret = SOC15_WAIT_ON_RREG(VCN, inst, regUVD_STATUS, UVD_STATUS__IDLE,
+               UVD_STATUS__IDLE);
+       if (ret)
+               return ret;
 
        return ret;
 }
-- 
2.34.1

Reply via email to