]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
eth: fbnic: Use FIELD_PREP to generate minimum firmware version
authorLee Trager <lee@trager.us>
Wed, 2 Jul 2025 19:12:08 +0000 (12:12 -0700)
committerJakub Kicinski <kuba@kernel.org>
Wed, 9 Jul 2025 00:05:45 +0000 (17:05 -0700)
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: Lee Trager <lee@trager.us>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20250702192207.697368-3-lee@trager.us
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/meta/fbnic/fbnic_csr.h
drivers/net/ethernet/meta/fbnic/fbnic_fw.c

index e2b251eddbb3f7e7f8a146062c27f0e75d54dd4c..06b9c49e51a2a398768a1ea7179c870aa18eda1c 100644 (file)
 #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
 
index cdc1e2938a647c8411bae157a89f3d4a273fab3d..ac7804a8a22cd65293cb792f55432a20149b42f1 100644 (file)
@@ -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)