net/mlx4_core: Adjust command timeouts to conform to the firmware spec
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Tue, 27 Jan 2015 13:58:02 +0000 (15:58 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 28 Jan 2015 01:12:57 +0000 (17:12 -0800)
The firmware spec states that the timeout for all commands should be 60 seconds.

In the past, the spec indicated that there were several classes of timeout
(short, medium, and long).  The driver has these different timeout classes.
We leave the class differentiation in the driver as-is (to protect against any
future spec changes), but set the timeout for all classes to be 60 seconds.

In addition, we fix a few commands which had hard-coded numeric timeouts specified.

Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/fw.c
drivers/net/ethernet/mellanox/mlx4/mr.c
include/linux/mlx4/cmd.h

index 2aa7c232d0b688ae05716f1bf8dfa2460bcf2898..0c90d1072e47ec32f18376a028deedb932fe72bb 100644 (file)
@@ -1774,8 +1774,8 @@ int mlx4_INIT_HCA(struct mlx4_dev *dev, struct mlx4_init_hca_param *param)
                MLX4_PUT(inbox, parser_params,  INIT_HCA_VXLAN_OFFSET);
        }
 
-       err = mlx4_cmd(dev, mailbox->dma, 0, 0, MLX4_CMD_INIT_HCA, 10000,
-                      MLX4_CMD_NATIVE);
+       err = mlx4_cmd(dev, mailbox->dma, 0, 0, MLX4_CMD_INIT_HCA,
+                      MLX4_CMD_TIME_CLASS_C, MLX4_CMD_NATIVE);
 
        if (err)
                mlx4_err(dev, "INIT_HCA returns %d\n", err);
@@ -2029,7 +2029,7 @@ int mlx4_CLOSE_PORT_wrapper(struct mlx4_dev *dev, int slave,
        if (dev->caps.port_mask[port] != MLX4_PORT_TYPE_IB) {
                if (priv->mfunc.master.init_port_ref[port] == 1) {
                        err = mlx4_cmd(dev, 0, port, 0, MLX4_CMD_CLOSE_PORT,
-                                      1000, MLX4_CMD_NATIVE);
+                                      MLX4_CMD_TIME_CLASS_A, MLX4_CMD_NATIVE);
                        if (err)
                                return err;
                }
@@ -2040,7 +2040,7 @@ int mlx4_CLOSE_PORT_wrapper(struct mlx4_dev *dev, int slave,
                        if (!priv->mfunc.master.qp0_state[port].qp0_active &&
                            priv->mfunc.master.qp0_state[port].port_active) {
                                err = mlx4_cmd(dev, 0, port, 0, MLX4_CMD_CLOSE_PORT,
-                                              1000, MLX4_CMD_NATIVE);
+                                              MLX4_CMD_TIME_CLASS_A, MLX4_CMD_NATIVE);
                                if (err)
                                        return err;
                                priv->mfunc.master.slave_state[slave].init_port_mask &= ~(1 << port);
@@ -2055,15 +2055,15 @@ int mlx4_CLOSE_PORT_wrapper(struct mlx4_dev *dev, int slave,
 
 int mlx4_CLOSE_PORT(struct mlx4_dev *dev, int port)
 {
-       return mlx4_cmd(dev, 0, port, 0, MLX4_CMD_CLOSE_PORT, 1000,
-                       MLX4_CMD_WRAPPED);
+       return mlx4_cmd(dev, 0, port, 0, MLX4_CMD_CLOSE_PORT,
+                       MLX4_CMD_TIME_CLASS_A, MLX4_CMD_WRAPPED);
 }
 EXPORT_SYMBOL_GPL(mlx4_CLOSE_PORT);
 
 int mlx4_CLOSE_HCA(struct mlx4_dev *dev, int panic)
 {
-       return mlx4_cmd(dev, 0, 0, panic, MLX4_CMD_CLOSE_HCA, 1000,
-                       MLX4_CMD_NATIVE);
+       return mlx4_cmd(dev, 0, 0, panic, MLX4_CMD_CLOSE_HCA,
+                       MLX4_CMD_TIME_CLASS_C, MLX4_CMD_NATIVE);
 }
 
 struct mlx4_config_dev {
@@ -2202,7 +2202,8 @@ int mlx4_SET_ICM_SIZE(struct mlx4_dev *dev, u64 icm_size, u64 *aux_pages)
 int mlx4_NOP(struct mlx4_dev *dev)
 {
        /* Input modifier of 0x1f means "finish as soon as possible." */
-       return mlx4_cmd(dev, 0, 0x1f, 0, MLX4_CMD_NOP, 100, MLX4_CMD_NATIVE);
+       return mlx4_cmd(dev, 0, 0x1f, 0, MLX4_CMD_NOP, MLX4_CMD_TIME_CLASS_A,
+                       MLX4_CMD_NATIVE);
 }
 
 int mlx4_get_phys_port_id(struct mlx4_dev *dev)
index 8dbdf1d29357c46891925f242f8a5606208870d5..d21e884a08387c82f6a5f3b58ec2a760aa198ea7 100644 (file)
@@ -1155,7 +1155,7 @@ EXPORT_SYMBOL_GPL(mlx4_fmr_free);
 
 int mlx4_SYNC_TPT(struct mlx4_dev *dev)
 {
-       return mlx4_cmd(dev, 0, 0, 0, MLX4_CMD_SYNC_TPT, 1000,
-                       MLX4_CMD_NATIVE);
+       return mlx4_cmd(dev, 0, 0, 0, MLX4_CMD_SYNC_TPT,
+                       MLX4_CMD_TIME_CLASS_A, MLX4_CMD_NATIVE);
 }
 EXPORT_SYMBOL_GPL(mlx4_SYNC_TPT);
index c989442ffc6a5eaa1720412aa18dea1b3a130e46..ae95adc78509a1c683f24886a26b132a37189b50 100644 (file)
@@ -165,9 +165,9 @@ enum {
 };
 
 enum {
-       MLX4_CMD_TIME_CLASS_A   = 10000,
-       MLX4_CMD_TIME_CLASS_B   = 10000,
-       MLX4_CMD_TIME_CLASS_C   = 10000,
+       MLX4_CMD_TIME_CLASS_A   = 60000,
+       MLX4_CMD_TIME_CLASS_B   = 60000,
+       MLX4_CMD_TIME_CLASS_C   = 60000,
 };
 
 enum {