fwctl/bnxt_fwctl: Add documentation entries

Add bnxt_fwctl to the driver and fwctl documentation pages.

Link: https://patch.msgid.link/r/20260314151605.932749-6-pavan.chebbi@broadcom.com
Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
Pavan Chebbi 2026-03-14 08:16:05 -07:00 committed by Jason Gunthorpe
parent e782efb830
commit 44230bb342
3 changed files with 76 additions and 0 deletions

View File

@ -0,0 +1,74 @@
.. SPDX-License-Identifier: GPL-2.0
=================
fwctl bnxt driver
=================
:Author: Pavan Chebbi
Overview
========
BNXT driver makes a fwctl service available through an auxiliary_device.
The bnxt_fwctl driver binds to this device and registers itself with the
fwctl subsystem.
The bnxt_fwctl driver is agnostic to the device firmware internals. It
uses the Upper Layer Protocol (ULP) conduit provided by bnxt to send
HardWare Resource Manager (HWRM) commands to firmware.
These commands can query or change firmware driven device configurations
and read/write registers that are useful for debugging.
bnxt_fwctl User API
===================
Each RPC request contains the HWRM input structure in the fwctl_rpc
'in' buffer while 'out' will contain the response.
A typical user application can send a FWCTL_INFO command using ioctl()
to discover bnxt_fwctl's RPC capabilities as shown below:
ioctl(fd, FWCTL_INFO, &fwctl_info_msg);
where fwctl_info_msg (of type struct fwctl_info) describes bnxt_info_msg
(of type struct fwctl_info_bnxt). fwctl_info_msg is set up as follows:
size = sizeof(struct fwctl_info);
flags = 0;
device_data_len = sizeof(bnxt_info_msg);
out_device_data = (__aligned_u64)&bnxt_info_msg;
The uctx_caps of bnxt_info_msg represents the capabilities as described
in fwctl_bnxt_commands of include/uapi/fwctl/bnxt.h
The FW RPC itself, FWCTL_RPC can be sent using ioctl() as:
ioctl(fd, FWCTL_RPC, &fwctl_rpc_msg);
where fwctl_rpc_msg (of type struct fwctl_rpc) carries the HWRM command
in its 'in' buffer. The HWRM input structures are described in
include/linux/bnxt/hsi.h. An example for HWRM_VER_GET is shown below:
struct hwrm_ver_get_output resp;
struct fwctl_rpc fwctl_rpc_msg;
struct hwrm_ver_get_input req;
req.req_type = HWRM_VER_GET;
req.hwrm_intf_maj = HWRM_VERSION_MAJOR;
req.hwrm_intf_min = HWRM_VERSION_MINOR;
req.hwrm_intf_upd = HWRM_VERSION_UPDATE;
req.cmpl_ring = -1;
req.target_id = -1;
fwctl_rpc_msg.size = sizeof(struct fwctl_rpc);
fwctl_rpc_msg.scope = FWCTL_RPC_DEBUG_READ_ONLY;
fwctl_rpc_msg.in_len = sizeof(req);
fwctl_rpc_msg.out_len = sizeof(resp);
fwctl_rpc_msg.in = (__aligned_u64)&req;
fwctl_rpc_msg.out = (__aligned_u64)&resp;
An example python3 program that can exercise this interface can be found in
the following git repository:
https://github.com/Broadcom/fwctl-tools

View File

@ -148,6 +148,7 @@ area resulting in clashes will be resolved in favour of a kernel implementation.
fwctl User API
==============
.. kernel-doc:: include/uapi/fwctl/bnxt.h
.. kernel-doc:: include/uapi/fwctl/fwctl.h
.. kernel-doc:: include/uapi/fwctl/mlx5.h
.. kernel-doc:: include/uapi/fwctl/pds.h

View File

@ -10,5 +10,6 @@ to securely construct and execute RPCs inside device firmware.
:maxdepth: 1
fwctl
bnxt_fwctl
fwctl-cxl
pds_fwctl