[Public] + if (adev->asic_type == CHIP_ALDEBARAN) + offset = 0; if (!is_fru_eeprom_supported(adev)) return 0; I assume the logic should be adjusted. It's better to put the asic_type check after is_fru_eeprom_supported. Regards, Guchun -----Original Message----- From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Kent Russell Sent: Tuesday, December 14, 2021 3:34 AM To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx Cc: Russell, Kent <Kent.Russell@xxxxxxx> Subject: [PATCH 4/4] drm/amdgpu: Access the FRU on Aldebaran This is supported, although the offset is different from VG20, so fix that with a variable and enable getting the product name and serial number from the FRU. Signed-off-by: Kent Russell <kent.russell@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c index b3b951fe0861..124376b666fd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c @@ -56,6 +56,8 @@ static bool is_fru_eeprom_supported(struct amdgpu_device *adev) return true; else return false; + case CHIP_ALDEBARAN: + return true; default: return false; } @@ -91,6 +93,10 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev) unsigned char buff[66]; u32 addrptr; int size, len; + int offset = 2; + + if (adev->asic_type == CHIP_ALDEBARAN) + offset = 0; if (!is_fru_eeprom_supported(adev)) return 0; @@ -139,7 +145,7 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev) len = sizeof(adev->product_name) - 1; } /* Start at 2 due to buff using fields 0 and 1 for the address */ - memcpy(adev->product_name, &buff[2], len); + memcpy(adev->product_name, &buff[offset], len); adev->product_name[len] = '\0'; addrptr += size + 1; @@ -157,7 +163,7 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev) DRM_WARN("FRU Product Number is larger than 16 characters. This is likely a mistake"); len = sizeof(adev->product_number) - 1; } - memcpy(adev->product_number, &buff[2], len); + memcpy(adev->product_number, &buff[offset], len); adev->product_number[len] = '\0'; addrptr += size + 1; @@ -184,7 +190,7 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev) DRM_WARN("FRU Serial Number is larger than 16 characters. This is likely a mistake"); len = sizeof(adev->serial) - 1; } - memcpy(adev->serial, &buff[2], len); + memcpy(adev->serial, &buff[offset], len); adev->serial[len] = '\0'; return 0; -- 2.25.1