]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/amdgpu: Re-enable FRU check for most models v5
authorKent Russell <kent.russell@amd.com>
Fri, 3 Apr 2020 14:42:21 +0000 (10:42 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 9 Apr 2020 14:43:17 +0000 (10:43 -0400)
There is at least 1 VG20 DID that does not have an FRU, and trying to read
that will cause a hang. For now, explicitly support reading the FRU for
Arcturus and for the WKS VG20 DIDs, and skip for everything else.
This re-enables serial number reporting for server cards

v2: Add ASIC check
v3: Don't default to true for pre-VG20
v4: Use DID instead of parsing the VBIOS
v5: Sqaush in overflow warning fix

Signed-off-by: Kent Russell <kent.russell@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c

index bfe4259f9508395d8a9c633a4cee2000c86508d4..c7e55fe170bd5f9026fa141a4f041027ffb6e43d 100644 (file)
@@ -20,6 +20,8 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  *
  */
+#include <linux/pci.h>
+
 #include "amdgpu.h"
 #include "amdgpu_i2c.h"
 #include "smu_v11_0_i2c.h"
 
 bool is_fru_eeprom_supported(struct amdgpu_device *adev)
 {
-       /* TODO: Resolve supported ASIC type */
-
+       /* TODO: Gaming SKUs don't have the FRU EEPROM.
+        * Use this hack to address hangs on modprobe on gaming SKUs
+        * until a proper solution can be implemented by only supporting
+        * it on Arcturus, and the explicit chip IDs for VG20 Server cards
+        */
+       if ((adev->asic_type == CHIP_ARCTURUS) ||
+           (adev->asic_type == CHIP_VEGA20 && adev->pdev->device == 0x66a0) ||
+           (adev->asic_type == CHIP_VEGA20 && adev->pdev->device == 0x66a1) ||
+           (adev->asic_type == CHIP_VEGA20 && adev->pdev->device == 0x66a4))
+               return true;
        return false;
 }
 
@@ -75,7 +85,7 @@ int amdgpu_fru_read_eeprom(struct amdgpu_device *adev, uint32_t addrptr,
 
 int amdgpu_fru_get_product_info(struct amdgpu_device *adev)
 {
-       unsigned char buff[32];
+       unsigned char buff[34];
        int addrptr = 0, size = 0;
 
        if (!is_fru_eeprom_supported(adev))