Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fe40900f408642e772739088d30636e2f3f7d0d8
Commit:     fe40900f408642e772739088d30636e2f3f7d0d8
Parent:     3e1db334dca97df9034ebeec4657329a2b37a811
Author:     Roland Dreier <[EMAIL PROTECTED]>
AuthorDate: Thu Jun 7 23:24:36 2007 -0700
Committer:  Roland Dreier <[EMAIL PROTECTED]>
CommitDate: Thu Jun 7 23:24:36 2007 -0700

    mlx4_core: Check firmware command interface revision
    
    HCA firmware with incompatible changes to the FW commmand interface is
    coming soon.  Add a check of the interface revision during
    initialization and bail out if the firmware advertises a revision that
    the driver doesn't know about.  This will avoid strange failures later
    if the driver goes on using the wrong interface revision.
    
    Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
---
 drivers/net/mlx4/fw.c |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c
index ab259b2..e7ca118 100644
--- a/drivers/net/mlx4/fw.c
+++ b/drivers/net/mlx4/fw.c
@@ -37,6 +37,10 @@
 #include "fw.h"
 #include "icm.h"
 
+enum {
+       MLX4_COMMAND_INTERFACE_REV      = 1
+};
+
 extern void __buggy_use_of_MLX4_GET(void);
 extern void __buggy_use_of_MLX4_PUT(void);
 
@@ -452,10 +456,12 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
        u32 *outbox;
        int err = 0;
        u64 fw_ver;
+       u16 cmd_if_rev;
        u8 lg;
 
 #define QUERY_FW_OUT_SIZE             0x100
 #define QUERY_FW_VER_OFFSET            0x00
+#define QUERY_FW_CMD_IF_REV_OFFSET     0x0a
 #define QUERY_FW_MAX_CMD_OFFSET        0x0f
 #define QUERY_FW_ERR_START_OFFSET      0x30
 #define QUERY_FW_ERR_SIZE_OFFSET       0x38
@@ -484,14 +490,29 @@ int mlx4_QUERY_FW(struct mlx4_dev *dev)
                ((fw_ver & 0xffff0000ull) >> 16) |
                ((fw_ver & 0x0000ffffull) << 16);
 
+       MLX4_GET(cmd_if_rev, outbox, QUERY_FW_CMD_IF_REV_OFFSET);
+       if (cmd_if_rev != MLX4_COMMAND_INTERFACE_REV) {
+               mlx4_err(dev, "Installed FW has unsupported "
+                        "command interface revision %d.\n",
+                        cmd_if_rev);
+               mlx4_err(dev, "(Installed FW version is %d.%d.%03d)\n",
+                        (int) (dev->caps.fw_ver >> 32),
+                        (int) (dev->caps.fw_ver >> 16) & 0xffff,
+                        (int) dev->caps.fw_ver & 0xffff);
+               mlx4_err(dev, "This driver version supports only revision 
%d.\n",
+                        MLX4_COMMAND_INTERFACE_REV);
+               err = -ENODEV;
+               goto out;
+       }
+
        MLX4_GET(lg, outbox, QUERY_FW_MAX_CMD_OFFSET);
        cmd->max_cmds = 1 << lg;
 
-       mlx4_dbg(dev, "FW version %d.%d.%03d, max commands %d\n",
+       mlx4_dbg(dev, "FW version %d.%d.%03d (cmd intf rev %d), max commands 
%d\n",
                 (int) (dev->caps.fw_ver >> 32),
                 (int) (dev->caps.fw_ver >> 16) & 0xffff,
                 (int) dev->caps.fw_ver & 0xffff,
-                cmd->max_cmds);
+                cmd_if_rev, cmd->max_cmds);
 
        MLX4_GET(fw->catas_offset, outbox, QUERY_FW_ERR_START_OFFSET);
        MLX4_GET(fw->catas_size,   outbox, QUERY_FW_ERR_SIZE_OFFSET);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to