Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 846e980a authored by Shalom Toledo's avatar Shalom Toledo Committed by David S. Miller
Browse files

devlink: Add 'fw_load_policy' generic parameter



Many drivers load the device's firmware image during the initialization
flow either from the flash or from the disk. Currently this option is not
controlled by the user and the driver decides from where to load the
firmware image.

'fw_load_policy' gives the ability to control this option which allows the
user to choose between different loading policies supported by the driver.

This parameter can be useful while testing and/or debugging the device. For
example, testing a firmware bug fix.

Signed-off-by: default avatarShalom Toledo <shalomt@mellanox.com>
Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6915bf3b
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -40,3 +40,12 @@ msix_vec_per_pf_min [DEVICE, GENERIC]
			for the device initialization. Value is same across all
			for the device initialization. Value is same across all
			physical functions (PFs) in the device.
			physical functions (PFs) in the device.
			Type: u32
			Type: u32

fw_load_policy		[DEVICE, GENERIC]
			Controls the device's firmware loading policy.
			Valid values:
			* DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER (0)
			  Load firmware version preferred by the driver.
			* DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH (1)
			  Load firmware currently stored in flash.
			Type: u8
+4 −0
Original line number Original line Diff line number Diff line
@@ -365,6 +365,7 @@ enum devlink_param_generic_id {
	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI,
	DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI,
	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX,
	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX,
	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
	DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
	DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY,


	/* add new param generic ids above here*/
	/* add new param generic ids above here*/
	__DEVLINK_PARAM_GENERIC_ID_MAX,
	__DEVLINK_PARAM_GENERIC_ID_MAX,
@@ -392,6 +393,9 @@ enum devlink_param_generic_id {
#define DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_NAME "msix_vec_per_pf_min"
#define DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_NAME "msix_vec_per_pf_min"
#define DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_TYPE DEVLINK_PARAM_TYPE_U32
#define DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_TYPE DEVLINK_PARAM_TYPE_U32


#define DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_NAME "fw_load_policy"
#define DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_TYPE DEVLINK_PARAM_TYPE_U8

#define DEVLINK_PARAM_GENERIC(_id, _cmodes, _get, _set, _validate)	\
#define DEVLINK_PARAM_GENERIC(_id, _cmodes, _get, _set, _validate)	\
{									\
{									\
	.id = DEVLINK_PARAM_GENERIC_ID_##_id,				\
	.id = DEVLINK_PARAM_GENERIC_ID_##_id,				\
+5 −0
Original line number Original line Diff line number Diff line
@@ -163,6 +163,11 @@ enum devlink_param_cmode {
	DEVLINK_PARAM_CMODE_MAX = __DEVLINK_PARAM_CMODE_MAX - 1
	DEVLINK_PARAM_CMODE_MAX = __DEVLINK_PARAM_CMODE_MAX - 1
};
};


enum devlink_param_fw_load_policy_value {
	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER,
	DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH,
};

enum devlink_attr {
enum devlink_attr {
	/* don't change the order or add anything between, this is ABI! */
	/* don't change the order or add anything between, this is ABI! */
	DEVLINK_ATTR_UNSPEC,
	DEVLINK_ATTR_UNSPEC,
+5 −0
Original line number Original line Diff line number Diff line
@@ -2692,6 +2692,11 @@ static const struct devlink_param devlink_param_generic[] = {
		.name = DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_NAME,
		.name = DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_NAME,
		.type = DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_TYPE,
		.type = DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_TYPE,
	},
	},
	{
		.id = DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY,
		.name = DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_NAME,
		.type = DEVLINK_PARAM_GENERIC_FW_LOAD_POLICY_TYPE,
	},
};
};


static int devlink_param_generic_verify(const struct devlink_param *param)
static int devlink_param_generic_verify(const struct devlink_param *param)