OSDN Git Service

drm/amdgpu: switch to cached fw flags for gpu virt cap
authorHawking Zhang <Hawking.Zhang@amd.com>
Thu, 13 May 2021 13:56:50 +0000 (21:56 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 20 May 2021 02:30:06 +0000 (22:30 -0400)
Check cached firmware_flags to determine if gpu
virtualization is supported in vbios

Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: John Clements <john.clements@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index c6eb07f..2cb8546 100644 (file)
@@ -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)
index 77c5fb1..5d83729 100644 (file)
@@ -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,
index 2360a9c..76ff2fd 100644 (file)
@@ -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))