mlx5: Implement new initialization sequence
Subsystems (4)
PATCH 1/1 mlx5: Implement new initialization sequence
Introduce enbale_hca and disable_hca commands to signify when the driver starts or ceases to operate on the device.
In addition the driver will use boot and init pages count; boot pages is required to allow firmware to complete boot commands and the other to complete init hca. Command interface revision is bumped to 4 to enforce using supported firmware.
---
Roland,
this patch breaks compatibility with old versions of firmware (< 4), however, the first GA firmware we will publish will support version 4 so this should not be a problem.
drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 8 ++- drivers/net/ethernet/mellanox/mlx5/core/main.c | 69 +++++++++++++++++++--- .../net/ethernet/mellanox/mlx5/core/pagealloc.c | 20 +++++-- include/linux/mlx5/device.h | 20 +++++++ include/linux/mlx5/driver.h | 4 +- 5 files changed, 106 insertions(+), 15 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +7 -1
@@ -46,7 +46,7 @@#include "mlx5_core.h" enum { -CMD_IF_REV =3 , +CMD_IF_REV =4 , };enum {
@@ -282,6 +282,12 @@ const char *mlx5_command_str(int command)case MLX5_CMD_OP_TEARDOWN_HCA :return "TEARDOWN_HCA" ; +case MLX5_CMD_OP_ENABLE_HCA : +return "MLX5_CMD_OP_ENABLE_HCA" ; + +case MLX5_CMD_OP_DISABLE_HCA : +return "MLX5_CMD_OP_DISABLE_HCA" ; +case MLX5_CMD_OP_QUERY_PAGES :return "QUERY_PAGES" ;
drivers/net/ethernet/mellanox/mlx5/core/main.c +62 -7
111 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c +14 -6
@@ -64,7 +64,7 @@ struct mlx5_query_pages_inbox {struct mlx5_query_pages_outbox {struct mlx5_outbox_hdr hdr; -u8 reserved[2 ]; +__be16 num_boot_pages;__be16 func_id;__be16 init_pages;__be16 num_pages;
@@ -146,7 +146,7 @@ static struct page *remove_page(struct mlx5_core_dev *dev, u64 addr) }static int mlx5_cmd_query_pages (struct mlx5_core_dev *dev,u16 *func_id, -s16 *pages,s16 *init_pages) +s16 *pages,s16 *init_pages,u16 *boot_pages) {struct mlx5_query_pages_inbox in;struct mlx5_query_pages_outbox out;
@@ -164,8 +164,13 @@ static int mlx5_cmd_query_pages(struct mlx5_core_dev *dev, u16 *func_id,if (pages) *pages =be16_to_cpu (out.num_pages); +if (init_pages) *init_pages =be16_to_cpu (out.init_pages); + +if (boot_pages) + *boot_pages =be16_to_cpu (out.num_boot_pages); + *func_id =be16_to_cpu (out.func_id);return err;
@@ -357,19 +362,22 @@ void mlx5_core_req_pages_handler(struct mlx5_core_dev *dev, u16 func_id,queue_work (dev->priv.pg_wq, &req->work); } -int mlx5_satisfy_startup_pages (struct mlx5_core_dev *dev) +int mlx5_satisfy_startup_pages (struct mlx5_core_dev *dev,int boot) { +u16 uninitialized_var (boot_pages );s16 uninitialized_var (init_pages );u16 uninitialized_var (func_id );int err; - err =mlx5_cmd_query_pages (dev, &func_id,NULL , &init_pages); + err =mlx5_cmd_query_pages (dev, &func_id,NULL , &init_pages, + &boot_pages);if (err)return err; -mlx5_core_dbg (dev,"requested %d init pages for func_id 0x%x\n" , init_pages, func_id); -return give_pages (dev, func_id, init_pages,0 ); +mlx5_core_dbg (dev,"requested %d init pages and %d boot pages for func_id 0x%x\n" , + init_pages, boot_pages, func_id); +return give_pages (dev, func_id, boot ? boot_pages : init_pages,0 ); }static int optimal_reclaimed_pages (void )
include/linux/mlx5/device.h +20 -0
@@ -690,6 +690,26 @@ struct mlx5_query_cq_mbox_out {__be64 pas[0 ]; }; +struct mlx5_enable_hca_mbox_in { +struct mlx5_inbox_hdr hdr; +u8 rsvd[8 ]; +}; + +struct mlx5_enable_hca_mbox_out { +struct mlx5_outbox_hdr hdr; +u8 rsvd[8 ]; +}; + +struct mlx5_disable_hca_mbox_in { +struct mlx5_inbox_hdr hdr; +u8 rsvd[8 ]; +}; + +struct mlx5_disable_hca_mbox_out { +struct mlx5_outbox_hdr hdr; +u8 rsvd[8 ]; +}; +struct mlx5_eq_context {u8 status;u8 ec_oi;
include/linux/mlx5/driver.h +3 -1
@@ -101,6 +101,8 @@ enum {MLX5_CMD_OP_QUERY_ADAPTER =0x101 ,MLX5_CMD_OP_INIT_HCA =0x102 ,MLX5_CMD_OP_TEARDOWN_HCA =0x103 , +MLX5_CMD_OP_ENABLE_HCA =0x104 , +MLX5_CMD_OP_DISABLE_HCA =0x105 ,MLX5_CMD_OP_QUERY_PAGES =0x107 ,MLX5_CMD_OP_MANAGE_PAGES =0x108 , MLX5_CMD_OP_SET_HCA_CAP = 0x109,
@@ -690,7 +692,7 @@ int mlx5_pagealloc_start(struct mlx5_core_dev *dev);void mlx5_pagealloc_stop (struct mlx5_core_dev *dev);void mlx5_core_req_pages_handler (struct mlx5_core_dev *dev,u16 func_id,s16 npages); -int mlx5_satisfy_startup_pages (struct mlx5_core_dev *dev); +int mlx5_satisfy_startup_pages (struct mlx5_core_dev *dev,int boot);int mlx5_reclaim_startup_pages (struct mlx5_core_dev *dev);void mlx5_register_debugfs (void );void mlx5_unregister_debugfs (void );
Signature · 6 lines
1.8.1.3 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 6 lines · Eli Cohen
Introduce
enbale_hcaanddisable_hcacommands to signify when the driver starts or ceases to operate on the device.
In addition the driver will use boot and init pages count; boot pages is required to allow firmware to complete boot commands and the other to complete init hca. Command interface revision is bumped to 4 to enforce using supported firmware.
Roland, haven't seen a response from you for about 2 weeks. Its critical that the first upstream release that includes the mlx5 driver will use this initilization sequence. Its mlx5_core patch, do you want it to go through netdev/Dave?
Or.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html