Patch "net/mlx5e: Add field select to MTPPS register" has been added to the 4.12-stable tree
Subsystems (5)
This is a note to let you know that I've just added the patch titled
net/mlx5e: Add field select to MTPPS register
to the 4.12-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-mlx5e-add-field-select-to-mtpps-register.patch
and it can be found in the queue-4.12 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Aug 8 16:27:29 PDT 2017
From: Eugenia Emantayev <[email protected]>
Date: Thu, 25 May 2017 16:09:34 +0300
Subject: net/mlx5e: Add field select to MTPPS register
From: Eugenia Emantayev <[email protected]>
[ Upstream commit fa3676885e3b5be1edfa1b2cc775e20a45b34a19 ]
In order to mark relevant fields while setting the MTPPS register add field select. Otherwise it can cause a misconfiguration in firmware.
--- drivers/net/ethernet/mellanox/mlx5/core/en_clock.c | 29 +++++++++++++++----- drivers/net/ethernet/mellanox/mlx5/core/eq.c | 2 - drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h | 5 +++ include/linux/mlx5/mlx5_ifc.h | 10 ++++-- 4 files changed, 36 insertions(+), 10 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/en_clock.c +23 -6
@@ -53,6 +53,15 @@ enum { MLX5E_EVENT_MODE_ONCE_TILL_ARM = 0x2, }; +enum { +MLX5E_MTPPS_FS_ENABLE =BIT (0x0 ), +MLX5E_MTPPS_FS_PATTERN =BIT (0x2 ), +MLX5E_MTPPS_FS_PIN_MODE =BIT (0x3 ), +MLX5E_MTPPS_FS_TIME_STAMP =BIT (0x4 ), +MLX5E_MTPPS_FS_OUT_PULSE_DURATION =BIT (0x5 ), +MLX5E_MTPPS_FS_ENH_OUT_PER_ADJ =BIT (0x7 ), +}; +void mlx5e_fill_hwstamp (struct mlx5e_tstamp *tstamp,u64 timestamp,struct skb_shared_hwtstamps *hwts) {
@@ -222,7 +231,10 @@ static int mlx5e_ptp_adjfreq(struct ptp_/* For future use need to add a loop for finding all 1PPS out pins */ MLX5_SET (mtpps_reg, in, pin_mode,MLX5E_PIN_MODE_OUT ); -MLX5_SET (mtpps_reg, in, out_periodic_adjustment, delta &0xFFFF ); +MLX5_SET (mtpps_reg, in, enhanced_out_periodic_adjustment, delta); +MLX5_SET (mtpps_reg, in, field_select, +MLX5E_MTPPS_FS_PIN_MODE | +MLX5E_MTPPS_FS_ENH_OUT_PER_ADJ );mlx5_set_mtpps (priv->mdev, in,sizeof (in)); }
@@ -258,8 +270,7 @@ static int mlx5e_extts_configure(structint pin =-1 ;int err =0 ; -if (!MLX5_CAP_GEN (priv->mdev, pps) || - !MLX5_CAP_GEN (priv->mdev, pps_modify)) +if (!MLX5_PPS_CAP (priv->mdev))return -EOPNOTSUPP ;if (rq->extts.index >= tstamp->ptp_info.n_pins)
@@ -278,6 +289,9 @@ static int mlx5e_extts_configure(structMLX5_SET (mtpps_reg, in, pin_mode,MLX5E_PIN_MODE_IN );MLX5_SET (mtpps_reg, in, pattern, pattern);MLX5_SET (mtpps_reg, in, enable, on); +MLX5_SET (mtpps_reg, in, field_select,MLX5E_MTPPS_FS_PIN_MODE | +MLX5E_MTPPS_FS_PATTERN | +MLX5E_MTPPS_FS_ENABLE ); err =mlx5_set_mtpps (priv->mdev, in,sizeof (in));if (err)
@@ -303,7 +317,7 @@ static int mlx5e_perout_configure(structint pin =-1 ;s64 ns; -if (!MLX5_CAP_GEN (priv->mdev, pps_modify)) +if (!MLX5_PPS_CAP (priv->mdev))return -EOPNOTSUPP ;if (rq->perout.index >= tstamp->ptp_info.n_pins)
@@ -338,7 +352,10 @@ static int mlx5e_perout_configure(structMLX5_SET (mtpps_reg, in, pattern,MLX5E_OUT_PATTERN_PERIODIC );MLX5_SET (mtpps_reg, in, enable, on);MLX5_SET64 (mtpps_reg, in, time_stamp, time_stamp); - +MLX5_SET (mtpps_reg, in, field_select,MLX5E_MTPPS_FS_PIN_MODE | +MLX5E_MTPPS_FS_PATTERN | +MLX5E_MTPPS_FS_ENABLE | +MLX5E_MTPPS_FS_TIME_STAMP );return mlx5_set_mtpps (priv->mdev, in,sizeof (in)); }
@@ -488,7 +505,7 @@ void mlx5e_timestamp_init(struct mlx5e_p#define MAX_PIN_NUM 8 tstamp->pps_pin_caps =kzalloc (sizeof (u8) *MAX_PIN_NUM ,GFP_KERNEL );if (tstamp->pps_pin_caps) { -if (MLX5_CAP_GEN (priv->mdev, pps)) +if (MLX5_PPS_CAP (priv->mdev))mlx5e_get_pps_caps (priv, tstamp);if (tstamp->ptp_info.n_pins)mlx5e_init_pin_config (tstamp);
drivers/net/ethernet/mellanox/mlx5/core/eq.c +1 -1
@@ -690,7 +690,7 @@ int mlx5_start_eqs(struct mlx5_core_develse mlx5_core_dbg (dev,"port_module_event is not set\n" ); -if (MLX5_CAP_GEN (dev, pps)) +if (MLX5_PPS_CAP (dev)) async_event_mask |= (1ull <<MLX5_EVENT_TYPE_PPS_EVENT ); err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h +5 -0
@@ -153,6 +153,11 @@ int mlx5_set_mtpps(struct mlx5_core_devint mlx5_query_mtppse (struct mlx5_core_dev *mdev,u8 pin,u8 *arm,u8 *mode);int mlx5_set_mtppse (struct mlx5_core_dev *mdev,u8 pin,u8 arm,u8 mode); +#define MLX5_PPS_CAP (mdev) (MLX5_CAP_GEN((mdev), pps) && \ + MLX5_CAP_GEN((mdev), pps_modify) && \ + MLX5_CAP_MCAM_FEATURE((mdev), mtpps_fs) && \ + MLX5_CAP_MCAM_FEATURE((mdev), mtpps_enh_out_per_adj)) +void mlx5e_init (void );void mlx5e_cleanup (void );
include/linux/mlx5/mlx5_ifc.h +7 -3
@@ -7718,8 +7718,10 @@ struct mlx5_ifc_pcam_reg_bits { };struct mlx5_ifc_mcam_enhanced_features_bits { -u8 reserved_at_0[0x7f ]; +u8 reserved_at_0[0x7d ]; +u8 mtpps_enh_out_per_adj[0x1 ]; +u8 mtpps_fs[0x1 ];u8 pcie_performance_group[0x1 ]; };
@@ -8115,7 +8117,8 @@ struct mlx5_ifc_mtpps_reg_bits {u8 reserved_at_78[0x4 ];u8 cap_pin_4_mode[0x4 ]; -u8 reserved_at_80[0x80 ]; +u8 field_select[0x20 ]; +u8 reserved_at_a0[0x60 ];u8 enable[0x1 ];u8 reserved_at_101[0xb ];
@@ -8130,8 +8133,9 @@ struct mlx5_ifc_mtpps_reg_bits {u8 out_pulse_duration[0x10 ];u8 out_periodic_adjustment[0x10 ]; +u8 enhanced_out_periodic_adjustment[0x20 ]; -u8 reserved_at_1a0[0x40 ]; +u8 reserved_at_1c0[0x20 ]; };struct mlx5_ifc_mtppse_reg_bits {
Patches currently in stable-queue which might be from [email protected] are
queue-4.12/net-mlx5e-change-1pps-out-scheme.patch queue-4.12/net-mlx5e-schedule-overflow-check-work-to-mlx5e-workqueue.patch queue-4.12/net-mlx5e-fix-wrong-delay-calculation-for-overflow-check-scheduling.patch queue-4.12/net-mlx5e-add-missing-support-for-ptp_clk_req_pps-request.patch queue-4.12/net-mlx5e-fix-broken-disable-1pps-flow.patch queue-4.12/net-mlx5-fix-mlx5_ifc_mtpps_reg_bits-structure-size.patch queue-4.12/net-mlx5e-add-field-select-to-mtpps-register.patch