From: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
To: Tony Nguyen <anthony.l.nguyen@intel.com>
Cc: <davem@davemloft.net>, <kuba@kernel.org>, <pabeni@redhat.com>,
<edumazet@google.com>, <netdev@vger.kernel.org>,
Milena Olech <milena.olech@intel.com>, <richardcochran@gmail.com>,
Przemek Kitszel <przemyslaw.kitszel@intel.com>,
Jacob Keller <jacob.e.keller@intel.com>,
Karol Kolacinski <karol.kolacinski@intel.com>,
Simon Horman <horms@kernel.org>,
Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com>
Subject: Re: [PATCH net v2 1/4] ice: Fix improper extts handling
Date: Wed, 3 Jul 2024 13:56:33 +0200 [thread overview]
Message-ID: <ZoU8cSUjkEN5w7Y4@boxer> (raw)
In-Reply-To: <20240702171459.2606611-2-anthony.l.nguyen@intel.com>
On Tue, Jul 02, 2024 at 10:14:54AM -0700, Tony Nguyen wrote:
> From: Milena Olech <milena.olech@intel.com>
>
> Extts events are disabled and enabled by the application ts2phc.
> However, in case where the driver is removed when the application is
> running, a specific extts event remains enabled and can cause a kernel
> crash.
> As a side effect, when the driver is reloaded and application is started
> again, remaining extts event for the channel from a previous run will
> keep firing and the message "extts on unexpected channel" might be
> printed to the user.
>
> To avoid that, extts events shall be disabled when PTP is released.
>
> Fixes: 172db5f91d5f ("ice: add support for auxiliary input/output pins")
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
> Co-developed-by: Jacob Keller <jacob.e.keller@intel.com>
> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> Signed-off-by: Milena Olech <milena.olech@intel.com>
> Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
> Reviewed-by: Simon Horman <horms@kernel.org>
> Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> ---
> drivers/net/ethernet/intel/ice/ice_ptp.c | 105 ++++++++++++++++++-----
> drivers/net/ethernet/intel/ice/ice_ptp.h | 8 ++
> 2 files changed, 91 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index 0f17fc1181d2..4d6555fadd83 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -1584,27 +1584,24 @@ void ice_ptp_extts_event(struct ice_pf *pf)
> /**
> * ice_ptp_cfg_extts - Configure EXTTS pin and channel
> * @pf: Board private structure
> - * @ena: true to enable; false to disable
> * @chan: GPIO channel (0-3)
> - * @gpio_pin: GPIO pin
> - * @extts_flags: request flags from the ptp_extts_request.flags
> + * @config: desired EXTTS configuration.
> + * @store: If set to true, the values will be stored
> + *
> + * Configure an external timestamp event on the requested channel.
> */
> -static int
> -ice_ptp_cfg_extts(struct ice_pf *pf, bool ena, unsigned int chan, u32 gpio_pin,
> - unsigned int extts_flags)
> +static void ice_ptp_cfg_extts(struct ice_pf *pf, unsigned int chan,
> + struct ice_extts_channel *config, bool store)
> {
> u32 func, aux_reg, gpio_reg, irq_reg;
> struct ice_hw *hw = &pf->hw;
> u8 tmr_idx;
>
> - if (chan > (unsigned int)pf->ptp.info.n_ext_ts)
> - return -EINVAL;
> -
> tmr_idx = hw->func_caps.ts_func_info.tmr_index_owned;
>
> irq_reg = rd32(hw, PFINT_OICR_ENA);
>
> - if (ena) {
> + if (config->ena) {
> /* Enable the interrupt */
> irq_reg |= PFINT_OICR_TSYN_EVNT_M;
> aux_reg = GLTSYN_AUX_IN_0_INT_ENA_M;
> @@ -1613,9 +1610,9 @@ ice_ptp_cfg_extts(struct ice_pf *pf, bool ena, unsigned int chan, u32 gpio_pin,
> #define GLTSYN_AUX_IN_0_EVNTLVL_FALLING_EDGE BIT(1)
>
> /* set event level to requested edge */
> - if (extts_flags & PTP_FALLING_EDGE)
> + if (config->flags & PTP_FALLING_EDGE)
> aux_reg |= GLTSYN_AUX_IN_0_EVNTLVL_FALLING_EDGE;
> - if (extts_flags & PTP_RISING_EDGE)
> + if (config->flags & PTP_RISING_EDGE)
> aux_reg |= GLTSYN_AUX_IN_0_EVNTLVL_RISING_EDGE;
>
> /* Write GPIO CTL reg.
> @@ -1636,9 +1633,47 @@ ice_ptp_cfg_extts(struct ice_pf *pf, bool ena, unsigned int chan, u32 gpio_pin,
>
> wr32(hw, PFINT_OICR_ENA, irq_reg);
> wr32(hw, GLTSYN_AUX_IN(chan, tmr_idx), aux_reg);
> - wr32(hw, GLGEN_GPIO_CTL(gpio_pin), gpio_reg);
> + wr32(hw, GLGEN_GPIO_CTL(config->gpio_pin), gpio_reg);
>
> - return 0;
> + if (store)
> + memcpy(&pf->ptp.extts_channels[chan], config, sizeof(*config));
> +}
> +
> +/**
> + * ice_ptp_disable_all_extts - Disable all EXTTS channels
> + * @pf: Board private structure
> + */
> +static void ice_ptp_disable_all_extts(struct ice_pf *pf)
> +{
> + struct ice_extts_channel extts_cfg = {};
> + int i;
> +
> + for (i = 0; i < pf->ptp.info.n_ext_ts; i++) {
> + if (pf->ptp.extts_channels[i].ena) {
> + extts_cfg.gpio_pin = pf->ptp.extts_channels[i].gpio_pin;
> + extts_cfg.ena = false;
> + ice_ptp_cfg_extts(pf, i, &extts_cfg, false);
> + }
> + }
> +
> + synchronize_irq(pf->oicr_irq.virq);
> +}
> +
> +/**
> + * ice_ptp_enable_all_extts - Enable all EXTTS channels
> + * @pf: Board private structure
> + *
> + * Called during reset to restore user configuration.
> + */
> +static void ice_ptp_enable_all_extts(struct ice_pf *pf)
> +{
> + int i;
> +
> + for (i = 0; i < pf->ptp.info.n_ext_ts; i++) {
> + if (pf->ptp.extts_channels[i].ena)
> + ice_ptp_cfg_extts(pf, i, &pf->ptp.extts_channels[i],
> + false);
> + }
Still one redundant pair of braces. Just do:
for (i = 0; i < pf->ptp.info.n_ext_ts; i++)
if (pf->ptp.extts_channels[i].ena)
ice_ptp_cfg_extts(pf, i, &pf->ptp.extts_channels[i],
false);
> }
>
next prev parent reply other threads:[~2024-07-03 11:56 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-02 17:14 [PATCH net v2 0/4][pull request] Intel Wired LAN Driver Updates 2024-06-25 (ice) Tony Nguyen
2024-07-02 17:14 ` [PATCH net v2 1/4] ice: Fix improper extts handling Tony Nguyen
2024-07-03 11:56 ` Maciej Fijalkowski [this message]
2024-07-03 13:59 ` Przemek Kitszel
2024-07-03 14:16 ` Maciej Fijalkowski
2024-07-02 17:14 ` [PATCH net v2 2/4] ice: Don't process extts if PTP is disabled Tony Nguyen
2024-07-02 17:14 ` [PATCH net v2 3/4] ice: Reject pin requests with unsupported flags Tony Nguyen
2024-07-02 17:14 ` [PATCH net v2 4/4] ice: use proper macro for testing bit Tony Nguyen
2024-07-04 2:50 ` [PATCH net v2 0/4][pull request] Intel Wired LAN Driver Updates 2024-06-25 (ice) patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZoU8cSUjkEN5w7Y4@boxer \
--to=maciej.fijalkowski@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=himasekharx.reddy.pucha@intel.com \
--cc=horms@kernel.org \
--cc=jacob.e.keller@intel.com \
--cc=karol.kolacinski@intel.com \
--cc=kuba@kernel.org \
--cc=milena.olech@intel.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=richardcochran@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.