Commit fde25c20 authored by Danielle Ratson's avatar Danielle Ratson Committed by Paolo Abeni
Browse files

net: ethtool: Allow write mechanism of LPL and both LPL and EPL



CMIS 5.2 standard section 9.4.2 defines four types of firmware update
supported mechanism: None, only LPL, only EPL, both LPL and EPL.

Currently, only LPL (Local Payload) type of write firmware block is
supported. However, if the module supports both LPL and EPL the flashing
process wrongly fails for no supporting LPL.

Fix that, by allowing the write mechanism to be LPL or both LPL and
EPL.

Fixes: c4f78134 ("ethtool: cmis_fw_update: add a layer for supporting firmware update using CDB")
Reported-by: default avatarVladyslav Mykhaliuk <vmykhaliuk@nvidia.com>
Signed-off-by: default avatarDanielle Ratson <danieller@nvidia.com>
Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
Link: https://patch.msgid.link/20240812140824.3718826-1-danieller@nvidia.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 69139d29
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -35,7 +35,10 @@ struct cmis_cdb_fw_mng_features_rpl {
	__be16	resv7;
};

#define CMIS_CDB_FW_WRITE_MECHANISM_LPL	0x01
enum cmis_cdb_fw_write_mechanism {
	CMIS_CDB_FW_WRITE_MECHANISM_LPL		= 0x01,
	CMIS_CDB_FW_WRITE_MECHANISM_BOTH	= 0x11,
};

static int
cmis_fw_update_fw_mng_features_get(struct ethtool_cmis_cdb *cdb,
@@ -64,7 +67,8 @@ cmis_fw_update_fw_mng_features_get(struct ethtool_cmis_cdb *cdb,
	}

	rpl = (struct cmis_cdb_fw_mng_features_rpl *)args.req.payload;
	if (!(rpl->write_mechanism == CMIS_CDB_FW_WRITE_MECHANISM_LPL)) {
	if (!(rpl->write_mechanism == CMIS_CDB_FW_WRITE_MECHANISM_LPL ||
	      rpl->write_mechanism == CMIS_CDB_FW_WRITE_MECHANISM_BOTH)) {
		ethnl_module_fw_flash_ntf_err(dev, ntf_params,
					      "Write LPL is not supported",
					      NULL);