ice: add ethtool -m support for reading i2c eeprom modules
Implement ethtool -m support to read eeprom data from SFP/QSFP modules. Signed-off-by: Scott W Taylor <scott.w.taylor@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
committed by
Jeff Kirsher
parent
71c780f119
commit
a012dca9f7
@@ -2555,6 +2555,52 @@ ice_aq_set_port_id_led(struct ice_port_info *pi, bool is_orig_mode,
|
||||
return ice_aq_send_cmd(hw, &desc, NULL, 0, cd);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_aq_sff_eeprom
|
||||
* @hw: pointer to the HW struct
|
||||
* @lport: bits [7:0] = logical port, bit [8] = logical port valid
|
||||
* @bus_addr: I2C bus address of the eeprom (typically 0xA0, 0=topo default)
|
||||
* @mem_addr: I2C offset. lower 8 bits for address, 8 upper bits zero padding.
|
||||
* @page: QSFP page
|
||||
* @set_page: set or ignore the page
|
||||
* @data: pointer to data buffer to be read/written to the I2C device.
|
||||
* @length: 1-16 for read, 1 for write.
|
||||
* @write: 0 read, 1 for write.
|
||||
* @cd: pointer to command details structure or NULL
|
||||
*
|
||||
* Read/Write SFF EEPROM (0x06EE)
|
||||
*/
|
||||
enum ice_status
|
||||
ice_aq_sff_eeprom(struct ice_hw *hw, u16 lport, u8 bus_addr,
|
||||
u16 mem_addr, u8 page, u8 set_page, u8 *data, u8 length,
|
||||
bool write, struct ice_sq_cd *cd)
|
||||
{
|
||||
struct ice_aqc_sff_eeprom *cmd;
|
||||
struct ice_aq_desc desc;
|
||||
enum ice_status status;
|
||||
|
||||
if (!data || (mem_addr & 0xff00))
|
||||
return ICE_ERR_PARAM;
|
||||
|
||||
ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_sff_eeprom);
|
||||
cmd = &desc.params.read_write_sff_param;
|
||||
desc.flags = cpu_to_le16(ICE_AQ_FLAG_RD | ICE_AQ_FLAG_BUF);
|
||||
cmd->lport_num = (u8)(lport & 0xff);
|
||||
cmd->lport_num_valid = (u8)((lport >> 8) & 0x01);
|
||||
cmd->i2c_bus_addr = cpu_to_le16(((bus_addr >> 1) &
|
||||
ICE_AQC_SFF_I2CBUS_7BIT_M) |
|
||||
((set_page <<
|
||||
ICE_AQC_SFF_SET_EEPROM_PAGE_S) &
|
||||
ICE_AQC_SFF_SET_EEPROM_PAGE_M));
|
||||
cmd->i2c_mem_addr = cpu_to_le16(mem_addr & 0xff);
|
||||
cmd->eeprom_page = cpu_to_le16((u16)page << ICE_AQC_SFF_EEPROM_PAGE_S);
|
||||
if (write)
|
||||
cmd->i2c_bus_addr |= cpu_to_le16(ICE_AQC_SFF_IS_WRITE);
|
||||
|
||||
status = ice_aq_send_cmd(hw, &desc, data, length, cd);
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* __ice_aq_get_set_rss_lut
|
||||
* @hw: pointer to the hardware structure
|
||||
|
||||
Reference in New Issue
Block a user