|
@@ -191,6 +191,26 @@ static int mlx4_devlink_ierr_reset_set(struct devlink *devlink, u32 id,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int mlx4_devlink_crdump_snapshot_get(struct devlink *devlink, u32 id,
|
|
|
+ struct devlink_param_gset_ctx *ctx)
|
|
|
+{
|
|
|
+ struct mlx4_priv *priv = devlink_priv(devlink);
|
|
|
+ struct mlx4_dev *dev = &priv->dev;
|
|
|
+
|
|
|
+ ctx->val.vbool = dev->persist->crdump.snapshot_enable;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int mlx4_devlink_crdump_snapshot_set(struct devlink *devlink, u32 id,
|
|
|
+ struct devlink_param_gset_ctx *ctx)
|
|
|
+{
|
|
|
+ struct mlx4_priv *priv = devlink_priv(devlink);
|
|
|
+ struct mlx4_dev *dev = &priv->dev;
|
|
|
+
|
|
|
+ dev->persist->crdump.snapshot_enable = ctx->val.vbool;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int
|
|
|
mlx4_devlink_max_macs_validate(struct devlink *devlink, u32 id,
|
|
|
union devlink_param_value val,
|
|
@@ -224,6 +244,11 @@ static const struct devlink_param mlx4_devlink_params[] = {
|
|
|
DEVLINK_PARAM_GENERIC(MAX_MACS,
|
|
|
BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
|
|
|
NULL, NULL, mlx4_devlink_max_macs_validate),
|
|
|
+ DEVLINK_PARAM_GENERIC(REGION_SNAPSHOT,
|
|
|
+ BIT(DEVLINK_PARAM_CMODE_RUNTIME) |
|
|
|
+ BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
|
|
|
+ mlx4_devlink_crdump_snapshot_get,
|
|
|
+ mlx4_devlink_crdump_snapshot_set, NULL),
|
|
|
DEVLINK_PARAM_DRIVER(MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE,
|
|
|
"enable_64b_cqe_eqe", DEVLINK_PARAM_TYPE_BOOL,
|
|
|
BIT(DEVLINK_PARAM_CMODE_DRIVERINIT),
|
|
@@ -270,6 +295,11 @@ static void mlx4_devlink_set_params_init_values(struct devlink *devlink)
|
|
|
mlx4_devlink_set_init_value(devlink,
|
|
|
MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR,
|
|
|
value);
|
|
|
+
|
|
|
+ value.vbool = false;
|
|
|
+ mlx4_devlink_set_init_value(devlink,
|
|
|
+ DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT,
|
|
|
+ value);
|
|
|
}
|
|
|
|
|
|
static inline void mlx4_set_num_reserved_uars(struct mlx4_dev *dev,
|
|
@@ -3862,6 +3892,9 @@ static int mlx4_devlink_port_type_set(struct devlink_port *devlink_port,
|
|
|
|
|
|
static void mlx4_devlink_param_load_driverinit_values(struct devlink *devlink)
|
|
|
{
|
|
|
+ struct mlx4_priv *priv = devlink_priv(devlink);
|
|
|
+ struct mlx4_dev *dev = &priv->dev;
|
|
|
+ struct mlx4_fw_crdump *crdump = &dev->persist->crdump;
|
|
|
union devlink_param_value saved_value;
|
|
|
int err;
|
|
|
|
|
@@ -3889,6 +3922,14 @@ static void mlx4_devlink_param_load_driverinit_values(struct devlink *devlink)
|
|
|
&saved_value);
|
|
|
if (!err)
|
|
|
enable_4k_uar = saved_value.vbool;
|
|
|
+ err = devlink_param_driverinit_value_get(devlink,
|
|
|
+ DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT,
|
|
|
+ &saved_value);
|
|
|
+ if (!err && crdump->snapshot_enable != saved_value.vbool) {
|
|
|
+ crdump->snapshot_enable = saved_value.vbool;
|
|
|
+ devlink_param_value_changed(devlink,
|
|
|
+ DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static int mlx4_devlink_reload(struct devlink *devlink,
|