OSDN Git Service

devlink: Add 'fw_load_policy' generic parameter
authorShalom Toledo <shalomt@mellanox.com>
Mon, 3 Dec 2018 07:58:59 +0000 (07:58 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Dec 2018 21:55:43 +0000 (13:55 -0800)
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: Shalom Toledo <shalomt@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/devlink-params.txt
include/net/devlink.h
include/uapi/linux/devlink.h
net/core/devlink.c

index ae444ff..2d26434 100644 (file)
@@ -40,3 +40,12 @@ msix_vec_per_pf_min  [DEVICE, GENERIC]
                        for the device initialization. Value is same across all
                        physical functions (PFs) in the device.
                        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
index 45db0c7..67f4293 100644 (file)
@@ -365,6 +365,7 @@ enum devlink_param_generic_id {
        DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI,
        DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX,
        DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
+       DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY,
 
        /* add new param generic ids above here*/
        __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_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)     \
 {                                                                      \
        .id = DEVLINK_PARAM_GENERIC_ID_##_id,                           \
index 79407bb..6e52d36 100644 (file)
@@ -163,6 +163,11 @@ enum devlink_param_cmode {
        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 {
        /* don't change the order or add anything between, this is ABI! */
        DEVLINK_ATTR_UNSPEC,
index 3a4b29a..abb0da9 100644 (file)
@@ -2692,6 +2692,11 @@ static const struct devlink_param devlink_param_generic[] = {
                .name = DEVLINK_PARAM_GENERIC_MSIX_VEC_PER_PF_MIN_NAME,
                .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)