Commit bc75c054 authored by Jacob Keller's avatar Jacob Keller Committed by David S. Miller
Browse files

devlink: convert flash_update to use params structure



The devlink core recently gained support for checking whether the driver
supports a flash_update parameter, via `supported_flash_update_params`.
However, parameters are specified as function arguments. Adding a new
parameter still requires modifying the signature of the .flash_update
callback in all drivers.

Convert the .flash_update function to take a new `struct
devlink_flash_update_params` instead. By using this structure, and the
`supported_flash_update_params` bit field, a new parameter to
flash_update can be added without requiring modification to existing
drivers.

As before, all parameters except file_name will require driver opt-in.
Because file_name is a necessary field to for the flash_update to make
sense, no "SUPPORTED" bitflag is provided and it is always considered
valid. All future additional parameters will require a new bit in the
supported_flash_update_params bitfield.

Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
Cc: Jiri Pirko <jiri@mellanox.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Michael Chan <michael.chan@broadcom.com>
Cc: Bin Luo <luobin9@huawei.com>
Cc: Saeed Mahameed <saeedm@mellanox.com>
Cc: Leon Romanovsky <leon@kernel.org>
Cc: Ido Schimmel <idosch@mellanox.com>
Cc: Danielle Ratson <danieller@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 22ec3d23
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -17,8 +17,9 @@
#include "bnxt_ethtool.h"

static int
bnxt_dl_flash_update(struct devlink *dl, const char *filename,
		     const char *region, struct netlink_ext_ack *extack)
bnxt_dl_flash_update(struct devlink *dl,
		     struct devlink_flash_update_params *params,
		     struct netlink_ext_ack *extack)
{
	struct bnxt *bp = bnxt_get_bp_from_dl(dl);
	int rc;
@@ -31,7 +32,7 @@ bnxt_dl_flash_update(struct devlink *dl, const char *filename,

	devlink_flash_update_begin_notify(dl);
	devlink_flash_update_status_notify(dl, "Preparing to flash", NULL, 0, 0);
	rc = bnxt_flash_package_from_file(bp->dev, filename, 0);
	rc = bnxt_flash_package_from_file(bp->dev, params->file_name, 0);
	if (!rc)
		devlink_flash_update_status_notify(dl, "Flashing done", NULL, 0, 0);
	else
+2 −3
Original line number Diff line number Diff line
@@ -281,15 +281,14 @@ static int hinic_firmware_update(struct hinic_devlink_priv *priv,
}

static int hinic_devlink_flash_update(struct devlink *devlink,
				      const char *file_name,
				      const char *component,
				      struct devlink_flash_update_params *params,
				      struct netlink_ext_ack *extack)
{
	struct hinic_devlink_priv *priv = devlink_priv(devlink);
	const struct firmware *fw;
	int err;

	err = request_firmware_direct(&fw, file_name,
	err = request_firmware_direct(&fw, params->file_name,
				      &priv->hwdev->hwif->pdev->dev);
	if (err)
		return err;
+5 −5
Original line number Diff line number Diff line
@@ -233,8 +233,7 @@ static int ice_devlink_info_get(struct devlink *devlink,
/**
 * ice_devlink_flash_update - Update firmware stored in flash on the device
 * @devlink: pointer to devlink associated with device to update
 * @path: the path of the firmware file to use via request_firmware
 * @component: name of the component to update, or NULL
 * @params: flash update parameters
 * @extack: netlink extended ACK structure
 *
 * Perform a device flash update. The bulk of the update logic is contained
@@ -243,8 +242,9 @@ static int ice_devlink_info_get(struct devlink *devlink,
 * Returns: zero on success, or an error code on failure.
 */
static int
ice_devlink_flash_update(struct devlink *devlink, const char *path,
			 const char *component, struct netlink_ext_ack *extack)
ice_devlink_flash_update(struct devlink *devlink,
			 struct devlink_flash_update_params *params,
			 struct netlink_ext_ack *extack)
{
	struct ice_pf *pf = devlink_priv(devlink);
	struct device *dev = &pf->pdev->dev;
@@ -261,7 +261,7 @@ ice_devlink_flash_update(struct devlink *devlink, const char *path,
	if (err)
		return err;

	err = request_firmware(&fw, path, dev);
	err = request_firmware(&fw, params->file_name, dev);
	if (err) {
		NL_SET_ERR_MSG_MOD(extack, "Unable to read file from disk");
		return err;
+2 −3
Original line number Diff line number Diff line
@@ -8,15 +8,14 @@
#include "eswitch.h"

static int mlx5_devlink_flash_update(struct devlink *devlink,
				     const char *file_name,
				     const char *component,
				     struct devlink_flash_update_params *params,
				     struct netlink_ext_ack *extack)
{
	struct mlx5_core_dev *dev = devlink_priv(devlink);
	const struct firmware *fw;
	int err;

	err = request_firmware_direct(&fw, file_name, &dev->pdev->dev);
	err = request_firmware_direct(&fw, params->file_name, &dev->pdev->dev);
	if (err)
		return err;

+4 −5
Original line number Diff line number Diff line
@@ -1102,13 +1102,13 @@ static int mlxsw_core_fw_rev_validate(struct mlxsw_core *mlxsw_core,
}

static int mlxsw_core_fw_flash_update(struct mlxsw_core *mlxsw_core,
				      const char *file_name, const char *component,
				      struct devlink_flash_update_params *params,
				      struct netlink_ext_ack *extack)
{
	const struct firmware *firmware;
	int err;

	err = request_firmware_direct(&firmware, file_name, mlxsw_core->bus_info->dev);
	err = request_firmware_direct(&firmware, params->file_name, mlxsw_core->bus_info->dev);
	if (err)
		return err;
	err = mlxsw_core_fw_flash(mlxsw_core, firmware, extack);
@@ -1431,13 +1431,12 @@ mlxsw_devlink_core_bus_device_reload_up(struct devlink *devlink,
}

static int mlxsw_devlink_flash_update(struct devlink *devlink,
				      const char *file_name,
				      const char *component,
				      struct devlink_flash_update_params *params,
				      struct netlink_ext_ack *extack)
{
	struct mlxsw_core *mlxsw_core = devlink_priv(devlink);

	return mlxsw_core_fw_flash_update(mlxsw_core, file_name, component, extack);
	return mlxsw_core_fw_flash_update(mlxsw_core, params, extack);
}

static int mlxsw_devlink_trap_init(struct devlink *devlink,
Loading