Commit 4a08a131 authored by Gal Pressman's avatar Gal Pressman Committed by Saeed Mahameed
Browse files

net/mlx5e: Fix module EEPROM query



When querying the module EEPROM, there was a misusage of the 'offset'
variable vs the 'query.offset' field.
Fix that by always using 'offset' and assigning its value to
'query.offset' right before the mcia register read call.

While at it, the cross-pages read size adjustment was changed to be more
intuitive.

Fixes: e19b0a34 ("net/mlx5: Refactor module EEPROM query")
Reported-by: default avatarWang Yugui <wangyugui@e16-tech.com>
Signed-off-by: default avatarGal Pressman <gal@nvidia.com>
Reviewed-by: default avatarMaxim Mikityanskiy <maximmi@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent a2446bc7
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -406,23 +406,24 @@ int mlx5_query_module_eeprom(struct mlx5_core_dev *dev,

	switch (module_id) {
	case MLX5_MODULE_ID_SFP:
		mlx5_sfp_eeprom_params_set(&query.i2c_address, &query.page, &query.offset);
		mlx5_sfp_eeprom_params_set(&query.i2c_address, &query.page, &offset);
		break;
	case MLX5_MODULE_ID_QSFP:
	case MLX5_MODULE_ID_QSFP_PLUS:
	case MLX5_MODULE_ID_QSFP28:
		mlx5_qsfp_eeprom_params_set(&query.i2c_address, &query.page, &query.offset);
		mlx5_qsfp_eeprom_params_set(&query.i2c_address, &query.page, &offset);
		break;
	default:
		mlx5_core_err(dev, "Module ID not recognized: 0x%x\n", module_id);
		return -EINVAL;
	}

	if (query.offset + size > MLX5_EEPROM_PAGE_LENGTH)
	if (offset + size > MLX5_EEPROM_PAGE_LENGTH)
		/* Cross pages read, read until offset 256 in low page */
		size -= offset + size - MLX5_EEPROM_PAGE_LENGTH;
		size = MLX5_EEPROM_PAGE_LENGTH - offset;

	query.size = size;
	query.offset = offset;

	return mlx5_query_mcia(dev, &query, data);
}