For current partition mode queries, return the mode cached in partition
manager whenever it's valid.

Signed-off-by: Lijo Lazar <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c
index c8fcafeb6864..c417f8689220 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c
@@ -218,15 +218,27 @@ int amdgpu_xcp_restore_partition_mode(struct 
amdgpu_xcp_mgr *xcp_mgr)
        return __amdgpu_xcp_switch_partition_mode(xcp_mgr, xcp_mgr->mode);
 }
 
-int amdgpu_xcp_query_partition_mode(struct amdgpu_xcp_mgr *xcp_mgr, u32 flags)
+static bool __amdgpu_xcp_is_cached_mode_valid(struct amdgpu_xcp_mgr *xcp_mgr)
 {
-       int mode;
+       if (!xcp_mgr->funcs || !xcp_mgr->funcs->query_partition_mode)
+               return true;
 
        if (!amdgpu_sriov_vf(xcp_mgr->adev) &&
            xcp_mgr->mode == AMDGPU_XCP_MODE_NONE)
-               return xcp_mgr->mode;
+               return true;
 
-       if (!xcp_mgr->funcs || !xcp_mgr->funcs->query_partition_mode)
+       if (xcp_mgr->mode != AMDGPU_XCP_MODE_NONE &&
+           xcp_mgr->mode != AMDGPU_XCP_MODE_TRANS)
+               return true;
+
+       return false;
+}
+
+int amdgpu_xcp_query_partition_mode(struct amdgpu_xcp_mgr *xcp_mgr, u32 flags)
+{
+       int mode;
+
+       if (__amdgpu_xcp_is_cached_mode_valid(xcp_mgr))
                return xcp_mgr->mode;
 
        if (!(flags & AMDGPU_XCP_FL_LOCKED))
-- 
2.49.0

Reply via email to