diff options
| -rw-r--r-- | drivers/infiniband/hw/mlx4/main.c | 28 | ||||
| -rw-r--r-- | include/linux/mlx4/cmd.h | 1 |
2 files changed, 24 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 62e8cd6f0371..ac6951d99336 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c | |||
| @@ -272,14 +272,32 @@ out: | |||
| 272 | static int mlx4_ib_modify_device(struct ib_device *ibdev, int mask, | 272 | static int mlx4_ib_modify_device(struct ib_device *ibdev, int mask, |
| 273 | struct ib_device_modify *props) | 273 | struct ib_device_modify *props) |
| 274 | { | 274 | { |
| 275 | struct mlx4_cmd_mailbox *mailbox; | ||
| 276 | |||
| 275 | if (mask & ~IB_DEVICE_MODIFY_NODE_DESC) | 277 | if (mask & ~IB_DEVICE_MODIFY_NODE_DESC) |
| 276 | return -EOPNOTSUPP; | 278 | return -EOPNOTSUPP; |
| 277 | 279 | ||
| 278 | if (mask & IB_DEVICE_MODIFY_NODE_DESC) { | 280 | if (!(mask & IB_DEVICE_MODIFY_NODE_DESC)) |
| 279 | spin_lock(&to_mdev(ibdev)->sm_lock); | 281 | return 0; |
| 280 | memcpy(ibdev->node_desc, props->node_desc, 64); | 282 | |
| 281 | spin_unlock(&to_mdev(ibdev)->sm_lock); | 283 | spin_lock(&to_mdev(ibdev)->sm_lock); |
| 282 | } | 284 | memcpy(ibdev->node_desc, props->node_desc, 64); |
| 285 | spin_unlock(&to_mdev(ibdev)->sm_lock); | ||
| 286 | |||
| 287 | /* | ||
| 288 | * If possible, pass node desc to FW, so it can generate | ||
| 289 | * a 144 trap. If cmd fails, just ignore. | ||
| 290 | */ | ||
| 291 | mailbox = mlx4_alloc_cmd_mailbox(to_mdev(ibdev)->dev); | ||
| 292 | if (IS_ERR(mailbox)) | ||
| 293 | return 0; | ||
| 294 | |||
| 295 | memset(mailbox->buf, 0, 256); | ||
| 296 | memcpy(mailbox->buf, props->node_desc, 64); | ||
| 297 | mlx4_cmd(to_mdev(ibdev)->dev, mailbox->dma, 1, 0, | ||
| 298 | MLX4_CMD_SET_NODE, MLX4_CMD_TIME_CLASS_A); | ||
| 299 | |||
| 300 | mlx4_free_cmd_mailbox(to_mdev(ibdev)->dev, mailbox); | ||
| 283 | 301 | ||
| 284 | return 0; | 302 | return 0; |
| 285 | } | 303 | } |
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h index 0f82293a82ed..2731266e73a7 100644 --- a/include/linux/mlx4/cmd.h +++ b/include/linux/mlx4/cmd.h | |||
| @@ -57,6 +57,7 @@ enum { | |||
| 57 | MLX4_CMD_QUERY_PORT = 0x43, | 57 | MLX4_CMD_QUERY_PORT = 0x43, |
| 58 | MLX4_CMD_SENSE_PORT = 0x4d, | 58 | MLX4_CMD_SENSE_PORT = 0x4d, |
| 59 | MLX4_CMD_SET_PORT = 0xc, | 59 | MLX4_CMD_SET_PORT = 0xc, |
| 60 | MLX4_CMD_SET_NODE = 0x5a, | ||
| 60 | MLX4_CMD_ACCESS_DDR = 0x2e, | 61 | MLX4_CMD_ACCESS_DDR = 0x2e, |
| 61 | MLX4_CMD_MAP_ICM = 0xffa, | 62 | MLX4_CMD_MAP_ICM = 0xffa, |
| 62 | MLX4_CMD_UNMAP_ICM = 0xff9, | 63 | MLX4_CMD_UNMAP_ICM = 0xff9, |
