From: "Jiawen Wu" <jiawenwu@trustnetic.com>
To: "'Andrew Lunn'" <andrew@lunn.ch>
Cc: <andrew+netdev@lunn.ch>, <davem@davemloft.net>,
<edumazet@google.com>, <kuba@kernel.org>, <pabeni@redhat.com>,
<richardcochran@gmail.com>, <linux@armlinux.org.uk>,
<horms@kernel.org>, <jacob.e.keller@intel.com>,
<netdev@vger.kernel.org>, <mengyuanlou@net-swift.com>
Subject: RE: [PATCH net-next 1/4] net: wangxun: Add support for PTP clock
Date: Mon, 6 Jan 2025 15:42:35 +0800 [thread overview]
Message-ID: <032b01db600e$8d845430$a88cfc90$@trustnetic.com> (raw)
In-Reply-To: <ab140807-2e49-4782-a58c-2b8d60da5556@lunn.ch>
On Thu, Jan 2, 2025 10:13 PM, Andrew Lunn wrote:
> > +static int wx_tx_map(struct wx_ring *tx_ring,
> > + struct wx_tx_buffer *first,
> > + const u8 hdr_len)
> > {
> > struct sk_buff *skb = first->skb;
> > struct wx_tx_buffer *tx_buffer;
> > @@ -1013,6 +1023,8 @@ static void wx_tx_map(struct wx_ring *tx_ring,
> >
> > netdev_tx_sent_queue(wx_txring_txq(tx_ring), first->bytecount);
> >
> > + /* set the timestamp */
> > + first->time_stamp = jiffies;
> > skb_tx_timestamp(skb);
> >
> > /* Force memory writes to complete before letting h/w know there
> > @@ -1038,7 +1050,7 @@ static void wx_tx_map(struct wx_ring *tx_ring,
> > if (netif_xmit_stopped(wx_txring_txq(tx_ring)) || !netdev_xmit_more())
> > writel(i, tx_ring->tail);
> >
> > - return;
> > + return 0;
> > dma_error:
> > dev_err(tx_ring->dev, "TX DMA map failed\n");
> >
> > @@ -1062,6 +1074,8 @@ static void wx_tx_map(struct wx_ring *tx_ring,
> > first->skb = NULL;
> >
> > tx_ring->next_to_use = i;
> > +
> > + return -EPERM;
>
> EPERM Operation not permitted (POSIX.1-2001).
>
> This is normally about restricted access because of security
> settings. So i don't think this is the correct error code here. What
> is the reason the function is exiting with an error? Once we
> understand that, maybe we can suggest a better error code.
I'll change it to -ENOMEM.
>
> > +static int wx_ptp_adjfine(struct ptp_clock_info *ptp, long ppb)
> > +{
> > + struct wx *wx = container_of(ptp, struct wx, ptp_caps);
> > + u64 incval, mask;
> > +
> > + smp_mb(); /* Force any pending update before accessing. */
> > + incval = READ_ONCE(wx->base_incval);
> > + incval = adjust_by_scaled_ppm(incval, ppb);
> > +
> > + mask = (wx->mac.type == wx_mac_em) ? 0x7FFFFFF : 0xFFFFFF;
> > + if (incval > mask)
> > + dev_warn(&wx->pdev->dev,
> > + "PTP ppb adjusted SYSTIME rate overflowed!\n");
>
> There is no return here, you just keep going. What happens if there is
> an overflow?
If there is an overflow, the calibration value of this second will be
inaccurate. But it does not affect the calibration value of the next
second. And this rarely happens.
>
> > +/**
> > + * wx_ptp_tx_hwtstamp_work
> > + * @work: pointer to the work struct
> > + *
> > + * This work item polls TSYNCTXCTL valid bit to determine when a Tx hardware
> > + * timestamp has been taken for the current skb. It is necessary, because the
> > + * descriptor's "done" bit does not correlate with the timestamp event.
> > + */
>
> Are you saying the "done" bit can be set, but the timestamp is not yet
> in place? I've not read the whole patch, but do you start polling once
> "done" is set, or as soon at the skbuff is queues for transmission?
The descriptor's "done" bit cannot be used as a basis for Tx hardware
timestamp. So we should poll the valid bit in the register.
>
> > static void ngbe_mac_link_down(struct phylink_config *config,
> > unsigned int mode, phy_interface_t interface)
> > {
> > + struct wx *wx = phylink_to_wx(config);
> > +
> > + wx->speed = SPEED_UNKNOWN;
> > + if (test_bit(WX_STATE_PTP_RUNNING, wx->state))
> > + wx_ptp_start_cyclecounter(wx);
>
> This is probably a naming issue, but it seems odd to call a _start_
> function on link down.
I think this function could be named wx_ptp_reset_cyclecounter().
next prev parent reply other threads:[~2025-01-06 7:42 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-02 10:30 [PATCH net-next 0/4] Support PTP clock for Wangxun NICs Jiawen Wu
2025-01-02 10:30 ` [PATCH net-next 1/4] net: wangxun: Add support for PTP clock Jiawen Wu
2025-01-02 14:13 ` Andrew Lunn
2025-01-06 7:42 ` Jiawen Wu [this message]
2025-01-06 14:26 ` Andrew Lunn
2025-01-07 2:24 ` Jiawen Wu
2025-01-07 13:33 ` Andrew Lunn
2025-01-08 0:34 ` Keller, Jacob E
2025-01-08 7:26 ` Jiawen Wu
2025-01-08 18:32 ` Andrew Lunn
2025-01-02 16:16 ` kernel test robot
2025-01-02 17:33 ` Vadim Fedorenko
2025-01-06 21:29 ` Keller, Jacob E
2025-01-02 10:30 ` [PATCH net-next 2/4] net: wangxun: Implement get_ts_info Jiawen Wu
2025-01-02 17:44 ` Vadim Fedorenko
2025-01-06 2:35 ` Jiawen Wu
2025-01-02 10:30 ` [PATCH net-next 3/4] net: wangxun: Add watchdog task for PTP clock Jiawen Wu
2025-01-02 17:53 ` Vadim Fedorenko
2025-01-03 8:45 ` Richard Cochran
2025-01-02 10:30 ` [PATCH net-next 4/4] net: ngbe: Add support for 1PPS and TOD Jiawen Wu
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='032b01db600e$8d845430$a88cfc90$@trustnetic.com' \
--to=jiawenwu@trustnetic.com \
--cc=andrew+netdev@lunn.ch \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jacob.e.keller@intel.com \
--cc=kuba@kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mengyuanlou@net-swift.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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.