From 1ea2b260eb6306b31dd6a932693519dd35da3774 Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Fri, 3 Apr 2020 10:42:21 -0400 Subject: drm/amdgpu: Re-enable FRU check for most models v5 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 Reviewed-by: Alex Deucher Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c') diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c index bfe4259f9508..c7e55fe170bd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c @@ -20,6 +20,8 @@ * OTHER DEALINGS IN THE SOFTWARE. * */ +#include + #include "amdgpu.h" #include "amdgpu_i2c.h" #include "smu_v11_0_i2c.h" @@ -31,8 +33,16 @@ 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)) -- cgit v1.2.3