Check cached firmware_flags to determine if gpu
virtualization is supported in vbios

Signed-off-by: Hawking Zhang <[email protected]>
Reviewed-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 25 +++++++++++-------------
 drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c       |  2 +-
 3 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
index c6eb07f..2cb8546 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
@@ -68,23 +68,20 @@ uint32_t 
amdgpu_atomfirmware_query_firmware_capability(struct amdgpu_device *ade
        return fw_cap;
 }
 
-bool amdgpu_atomfirmware_gpu_supports_virtualization(struct amdgpu_device 
*adev)
+/*
+ * Helper function to query gpu virtualizaiton capability
+ *
+ * @adev: amdgpu_device pointer
+ *
+ * Return true if gpu virtualization is supported or false if not
+ */
+bool amdgpu_atomfirmware_gpu_virtualization_supported(struct amdgpu_device 
*adev)
 {
-       int index = 
get_index_into_master_table(atom_master_list_of_data_tables_v2_1,
-                                               firmwareinfo);
-       uint16_t data_offset;
+       u32 fw_cap;
 
-       if (amdgpu_atom_parse_data_header(adev->mode_info.atom_context, index, 
NULL,
-                                         NULL, NULL, &data_offset)) {
-               struct atom_firmware_info_v3_1 *firmware_info =
-                       (struct atom_firmware_info_v3_1 
*)(adev->mode_info.atom_context->bios +
-                                                          data_offset);
+       fw_cap = adev->mode_info.firmware_flags;
 
-               if (le32_to_cpu(firmware_info->firmware_capability) &
-                   ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION)
-                       return true;
-       }
-       return false;
+       return (fw_cap & ATOM_FIRMWARE_CAP_GPU_VIRTUALIZATION) ? true : false;
 }
 
 void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
index 77c5fb1..5d83729 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
@@ -27,7 +27,7 @@
 #define get_index_into_master_table(master_table, table_name) (offsetof(struct 
master_table, table_name) / sizeof(uint16_t))
 
 uint32_t amdgpu_atomfirmware_query_firmware_capability(struct amdgpu_device 
*adev);
-bool amdgpu_atomfirmware_gpu_supports_virtualization(struct amdgpu_device 
*adev);
+bool amdgpu_atomfirmware_gpu_virtualization_supported(struct amdgpu_device 
*adev);
 void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev);
 int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev);
 int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 6881015..7c6c435e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -3034,7 +3034,7 @@ static void amdgpu_device_detect_sriov_bios(struct 
amdgpu_device *adev)
 {
        if (amdgpu_sriov_vf(adev)) {
                if (adev->is_atom_fw) {
-                       if 
(amdgpu_atomfirmware_gpu_supports_virtualization(adev))
+                       if 
(amdgpu_atomfirmware_gpu_virtualization_supported(adev))
                                adev->virt.caps |= 
AMDGPU_SRIOV_CAPS_SRIOV_VBIOS;
                } else {
                        if (amdgpu_atombios_has_gpu_virtualization_table(adev))
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to