diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c | 25 | 
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c index 7709caeb233d..2a786e788627 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c @@ -56,6 +56,9 @@ static bool is_fru_eeprom_supported(struct amdgpu_device *adev)  			return true;  		else  			return false; +	case CHIP_ALDEBARAN: +		/* All Aldebaran SKUs have the FRU */ +		return true;  	default:  		return false;  	} @@ -88,13 +91,17 @@ static 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[34]; +	unsigned char buff[AMDGPU_PRODUCT_NAME_LEN+2];  	u32 addrptr;  	int size, len; +	int offset = 2;  	if (!is_fru_eeprom_supported(adev))  		return 0; +	if (adev->asic_type == CHIP_ALDEBARAN) +		offset = 0; +  	/* If algo exists, it means that the i2c_adapter's initialized */  	if (!adev->pm.smu_i2c.algo) {  		DRM_WARN("Cannot access FRU, EEPROM accessor not initialized"); @@ -131,15 +138,13 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev)  	}  	len = size; -	/* Product name should only be 32 characters. Any more, -	 * and something could be wrong. Cap it at 32 to be safe -	 */ -	if (len >= sizeof(adev->product_name)) { -		DRM_WARN("FRU Product Number is larger than 32 characters. This is likely a mistake"); -		len = sizeof(adev->product_name) - 1; +	if (len >= AMDGPU_PRODUCT_NAME_LEN) { +		DRM_WARN("FRU Product Name is larger than %d characters. This is likely a mistake", +				AMDGPU_PRODUCT_NAME_LEN); +		len = AMDGPU_PRODUCT_NAME_LEN - 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 +162,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 +189,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;  | 
