Commit 25e5c09f authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu/ras: switch fru eeprom handling to use generic helper (v2)



Use the new helper rather than doing i2c transfers directly.

v2: fix typo

Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarLuben Tuikov <luben.tuikov@amd.com>
parent 24f55c05
Loading
Loading
Loading
Loading
+6 −16
Original line number Diff line number Diff line
@@ -27,9 +27,9 @@
#include "smu_v11_0_i2c.h"
#include "atom.h"
#include "amdgpu_fru_eeprom.h"
#include "amdgpu_eeprom.h"

#define I2C_PRODUCT_INFO_ADDR		0xAC
#define I2C_PRODUCT_INFO_ADDR_SIZE	0x2
#define I2C_PRODUCT_INFO_OFFSET		0xC0

static bool is_fru_eeprom_supported(struct amdgpu_device *adev)
@@ -65,16 +65,9 @@ static int amdgpu_fru_read_eeprom(struct amdgpu_device *adev, uint32_t addrptr,
			   unsigned char *buff)
{
	int ret, size;
	struct i2c_msg msg = {
			.addr   = I2C_PRODUCT_INFO_ADDR,
			.flags  = I2C_M_RD,
			.buf    = buff,
	};
	buff[0] = 0;
	buff[1] = addrptr;
	msg.len = I2C_PRODUCT_INFO_ADDR_SIZE + 1;
	ret = i2c_transfer(&adev->pm.smu_i2c, &msg, 1);

	ret = amdgpu_eeprom_xfer(&adev->pm.smu_i2c, I2C_PRODUCT_INFO_ADDR,
				 addrptr, buff, 1, true);
	if (ret < 1) {
		DRM_WARN("FRU: Failed to get size field");
		return ret;
@@ -83,13 +76,10 @@ static int amdgpu_fru_read_eeprom(struct amdgpu_device *adev, uint32_t addrptr,
	/* The size returned by the i2c requires subtraction of 0xC0 since the
	 * size apparently always reports as 0xC0+actual size.
	 */
	size = buff[2] - I2C_PRODUCT_INFO_OFFSET;
	/* Add 1 since address field was 1 byte */
	buff[1] = addrptr + 1;

	msg.len = I2C_PRODUCT_INFO_ADDR_SIZE + size;
	ret = i2c_transfer(&adev->pm.smu_i2c, &msg, 1);
	size = buff[0] - I2C_PRODUCT_INFO_OFFSET;

	ret = amdgpu_eeprom_xfer(&adev->pm.smu_i2c, I2C_PRODUCT_INFO_ADDR,
				 addrptr + 1, buff, size, true);
	if (ret < 1) {
		DRM_WARN("FRU: Failed to get data field");
		return ret;