Commit e48f6620 authored by Lee Trager's avatar Lee Trager Committed by Jakub Kicinski
Browse files

eth: fbnic: Use FIELD_PREP to generate minimum firmware version



Create a new macro based on FIELD_PREP to generate easily readable minimum
firmware version ints. This macro will prevent the mistake from the
previous patch from happening again.

Signed-off-by: default avatarLee Trager <lee@trager.us>
Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20250702192207.697368-3-lee@trager.us


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent dd62e960
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -12,13 +12,14 @@
#define DESC_BIT(nr)		BIT_ULL(nr)
#define DESC_GENMASK(h, l)	GENMASK_ULL(h, l)

#define FW_VER_CODE(_major, _minor, _patch, _build) (		      \
		FIELD_PREP(FBNIC_FW_CAP_RESP_VERSION_MAJOR, _major) | \
		FIELD_PREP(FBNIC_FW_CAP_RESP_VERSION_MINOR, _minor) | \
		FIELD_PREP(FBNIC_FW_CAP_RESP_VERSION_PATCH, _patch) | \
		FIELD_PREP(FBNIC_FW_CAP_RESP_VERSION_BUILD, _build))

/* Defines the minimum firmware version required by the driver */
#define MIN_FW_MAJOR_VERSION    0
#define MIN_FW_MINOR_VERSION    10
#define MIN_FW_PATCH_VERSION    6
#define MIN_FW_VERSION_CODE     (MIN_FW_MAJOR_VERSION * (1u << 24) + \
				 MIN_FW_MINOR_VERSION * (1u << 16) + \
				 MIN_FW_PATCH_VERSION * (1u << 8))
#define MIN_FW_VER_CODE				FW_VER_CODE(0, 10, 6, 0)

#define PCI_DEVICE_ID_META_FBNIC_ASIC		0x0013

+6 −7
Original line number Diff line number Diff line
@@ -573,16 +573,15 @@ static int fbnic_fw_parse_cap_resp(void *opaque, struct fbnic_tlv_msg **results)
	if (!fbd->fw_cap.running.mgmt.version)
		return -EINVAL;

	if (fbd->fw_cap.running.mgmt.version < MIN_FW_VERSION_CODE) {
	if (fbd->fw_cap.running.mgmt.version < MIN_FW_VER_CODE) {
		char required_ver[FBNIC_FW_VER_MAX_SIZE];
		char running_ver[FBNIC_FW_VER_MAX_SIZE];

		fbnic_mk_fw_ver_str(fbd->fw_cap.running.mgmt.version,
				    running_ver);
		dev_err(fbd->dev, "Device firmware version(%s) is older than minimum required version(%02d.%02d.%02d)\n",
			running_ver,
			MIN_FW_MAJOR_VERSION,
			MIN_FW_MINOR_VERSION,
			MIN_FW_PATCH_VERSION);
		fbnic_mk_fw_ver_str(MIN_FW_VER_CODE, required_ver);
		dev_err(fbd->dev, "Device firmware version(%s) is older than minimum required version(%s)\n",
			running_ver, required_ver);
		/* Disable TX mailbox to prevent card use until firmware is
		 * updated.
		 */
@@ -1167,7 +1166,7 @@ int fbnic_mbx_poll_tx_ready(struct fbnic_dev *fbd)
	 * to indicate we entered the polling state waiting for a response
	 */
	for (fbd->fw_cap.running.mgmt.version = 1;
	     fbd->fw_cap.running.mgmt.version < MIN_FW_VERSION_CODE;) {
	     fbd->fw_cap.running.mgmt.version < MIN_FW_VER_CODE;) {
		if (!tx_mbx->ready)
			err = -ENODEV;
		if (err)