[SRU][B/E/F][PATCH] can: peak_canfd: provide hw timestamps in rx skbs
Andrea Righi
andrea.righi at canonical.com
Wed Apr 22 07:39:08 UTC 2020
On Tue, Apr 21, 2020 at 11:38:24AM -0700, Sultan Alsawaf wrote:
> From: Stephane Grosjean <s.grosjean at peak-system.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1874124
>
> PEAK-System's CAN FD interfaces based on an IP core provide a timestamp
> for each CAN and STATUS message received. This patch transfers these
> received timestamps (clocked in microseconds) to hardware timestamps
> (clocked in nanoseconds) in the corresponding skbs raised to the network
> layer.
>
> Signed-off-by: Stephane Grosjean <s.grosjean at peak-system.com>
> Signed-off-by: Marc Kleine-Budde <mkl at pengutronix.de>
> (cherry picked from commit 2b1a4547c122dcb9999e1a876236b44408c7d01c)
> Signed-off-by: Sultan Alsawaf <sultan.alsawaf at canonical.com>
Clean cherry pick, looks good to me.
Acked-by: Andrea Righi <andrea.righi at canonical.com>
> ---
> drivers/net/can/peak_canfd/peak_canfd.c | 18 ++++++++++++++++--
> 1 file changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/can/peak_canfd/peak_canfd.c b/drivers/net/can/peak_canfd/peak_canfd.c
> index 6b0c6a99fc8d..e1876fbf7b14 100644
> --- a/drivers/net/can/peak_canfd/peak_canfd.c
> +++ b/drivers/net/can/peak_canfd/peak_canfd.c
> @@ -232,6 +232,20 @@ static int pucan_setup_rx_barrier(struct peak_canfd_priv *priv)
> return pucan_write_cmd(priv);
> }
>
> +static int pucan_netif_rx(struct sk_buff *skb, __le32 ts_low, __le32 ts_high)
> +{
> + struct skb_shared_hwtstamps *hwts = skb_hwtstamps(skb);
> + u64 ts_us;
> +
> + ts_us = (u64)le32_to_cpu(ts_high) << 32;
> + ts_us |= le32_to_cpu(ts_low);
> +
> + /* IP core timestamps are µs. */
> + hwts->hwtstamp = ns_to_ktime(ts_us * NSEC_PER_USEC);
> +
> + return netif_rx(skb);
> +}
> +
> /* handle the reception of one CAN frame */
> static int pucan_handle_can_rx(struct peak_canfd_priv *priv,
> struct pucan_rx_msg *msg)
> @@ -299,7 +313,7 @@ static int pucan_handle_can_rx(struct peak_canfd_priv *priv,
> stats->rx_bytes += cf->len;
> stats->rx_packets++;
>
> - netif_rx(skb);
> + pucan_netif_rx(skb, msg->ts_low, msg->ts_high);
>
> return 0;
> }
> @@ -393,7 +407,7 @@ static int pucan_handle_status(struct peak_canfd_priv *priv,
>
> stats->rx_packets++;
> stats->rx_bytes += cf->can_dlc;
> - netif_rx(skb);
> + pucan_netif_rx(skb, msg->ts_low, msg->ts_high);
>
> return 0;
> }
> --
> 2.20.1
>
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
More information about the kernel-team
mailing list