drm/amdgpu: add amdgpu_virt_get_vf_mode helper function
authorKevin Wang <kevin1.wang@amd.com>
Wed, 29 Apr 2020 10:49:23 +0000 (18:49 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 18 May 2020 15:23:52 +0000 (11:23 -0400)
the swsmu or powerplay(hwmgr) need to handle task according to different VF mode,
this function to help query vf mode.

vf mode:
1. SRIOV_VF_MODE_BARE_METAL: the driver work on host  OS (PF)
2. SRIOV_VF_MODE_ONE_VF    : the driver work on guest OS with one VF
3. SRIOV_VF_MODE_MULTI_VF  : the driver work on guest OS with multi VF

Signed-off-by: Kevin Wang <kevin1.wang@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h

index cbbb8d02535a9f1c3f06787560ade2305bfda097..f3b38c9e04ca09d86db6c6a514c4508a18c73308 100644 (file)
@@ -370,3 +370,19 @@ void amdgpu_virt_disable_access_debugfs(struct amdgpu_device *adev)
        if (amdgpu_sriov_vf(adev))
                adev->virt.caps |= AMDGPU_SRIOV_CAPS_RUNTIME;
 }
+
+enum amdgpu_sriov_vf_mode amdgpu_virt_get_sriov_vf_mode(struct amdgpu_device *adev)
+{
+       enum amdgpu_sriov_vf_mode mode;
+
+       if (amdgpu_sriov_vf(adev)) {
+               if (amdgpu_sriov_is_pp_one_vf(adev))
+                       mode = SRIOV_VF_MODE_ONE_VF;
+               else
+                       mode = SRIOV_VF_MODE_MULTI_VF;
+       } else {
+               mode = SRIOV_VF_MODE_BARE_METAL;
+       }
+
+       return mode;
+}
index de27308802c92fd9220aa862bf3b1918a4764048..b90e822cebd767684df71b9a74788879e9cb4146 100644 (file)
 /* tonga/fiji use this offset */
 #define mmBIF_IOV_FUNC_IDENTIFIER 0x1503
 
+enum amdgpu_sriov_vf_mode {
+       SRIOV_VF_MODE_BARE_METAL = 0,
+       SRIOV_VF_MODE_ONE_VF,
+       SRIOV_VF_MODE_MULTI_VF,
+};
+
 struct amdgpu_mm_table {
        struct amdgpu_bo        *bo;
        uint32_t                *cpu_addr;
@@ -323,4 +329,6 @@ void amdgpu_detect_virtualization(struct amdgpu_device *adev);
 bool amdgpu_virt_can_access_debugfs(struct amdgpu_device *adev);
 int amdgpu_virt_enable_access_debugfs(struct amdgpu_device *adev);
 void amdgpu_virt_disable_access_debugfs(struct amdgpu_device *adev);
+
+enum amdgpu_sriov_vf_mode amdgpu_virt_get_sriov_vf_mode(struct amdgpu_device *adev);
 #endif