[dpdk-dev] e1000: fix ieee1588 timestamp issue

Message ID 1438245257-7328-1-git-send-email-wenzhuo.lu@intel.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Wenzhuo Lu July 30, 2015, 8:34 a.m. UTC
  Ieee1588 reads system time to set its timestamp. On 1G NICs, for example,
i350, system time is disabled by default. It means the ieee1588 timestamp
will always be 0.
This patch enables system time when ieee1588 is enabled.

Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
---
 drivers/net/e1000/igb_ethdev.c | 8 ++++++++
 1 file changed, 8 insertions(+)
  

Comments

John McNamara July 30, 2015, 9:58 a.m. UTC | #1
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wenzhuo Lu
> Sent: Thursday, July 30, 2015 9:34 AM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] e1000: fix ieee1588 timestamp issue
> 
> Ieee1588 reads system time to set its timestamp. On 1G NICs, for example,
> i350, system time is disabled by default. It means the ieee1588 timestamp
> will always be 0.
> This patch enables system time when ieee1588 is enabled.

Looks good.


> +#define E1000_TSAUXC_DISABLE_SYSTIME 0x80000000

Probably best to move this to the top of the file with the other timesync defines.


I wonder if this would also fix the following known issue with i210 timesyncing from the release notes:

http://dpdk.org/doc/guides/rel_notes/known_issues.html#ieee1588-support-possibly-not-working-with-an-intel-ethernet-controller-i210-nic

I don't have an i210 NIC to test but perhaps someone could verify it.

John
  
Wenzhuo Lu July 31, 2015, 1:03 a.m. UTC | #2
Hi John,

> -----Original Message-----
> From: Mcnamara, John
> Sent: Thursday, July 30, 2015 5:59 PM
> To: Lu, Wenzhuo; dev@dpdk.org
> Subject: RE: [dpdk-dev] [PATCH] e1000: fix ieee1588 timestamp issue
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wenzhuo Lu
> > Sent: Thursday, July 30, 2015 9:34 AM
> > To: dev@dpdk.org
> > Subject: [dpdk-dev] [PATCH] e1000: fix ieee1588 timestamp issue
> >
> > Ieee1588 reads system time to set its timestamp. On 1G NICs, for
> > example, i350, system time is disabled by default. It means the
> > ieee1588 timestamp will always be 0.
> > This patch enables system time when ieee1588 is enabled.
> 
> Looks good.
> 
> 
> > +#define E1000_TSAUXC_DISABLE_SYSTIME 0x80000000
> 
> Probably best to move this to the top of the file with the other timesync defines.
Thanks for looking into this. I'll send a V2.

> 
> 
> I wonder if this would also fix the following known issue with i210 timesyncing
> from the release notes:
> 
> http://dpdk.org/doc/guides/rel_notes/known_issues.html#ieee1588-support-
> possibly-not-working-with-an-intel-ethernet-controller-i210-nic
> 
> I don't have an i210 NIC to test but perhaps someone could verify it.
> 
> John
  

Patch

diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c
index 56734a3..8fb67ac 100644
--- a/drivers/net/e1000/igb_ethdev.c
+++ b/drivers/net/e1000/igb_ethdev.c
@@ -3898,11 +3898,19 @@  eth_igb_set_mc_addr_list(struct rte_eth_dev *dev,
 	return 0;
 }
 
+#define E1000_TSAUXC_DISABLE_SYSTIME 0x80000000
+
 static int
 igb_timesync_enable(struct rte_eth_dev *dev)
 {
 	struct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	uint32_t tsync_ctl;
+	uint32_t tsauxc;
+
+	/* Enable system time for it isn't on by default. */
+	tsauxc = E1000_READ_REG(hw, E1000_TSAUXC);
+	tsauxc &= ~E1000_TSAUXC_DISABLE_SYSTIME;
+	E1000_WRITE_REG(hw, E1000_TSAUXC, tsauxc);
 
 	/* Start incrementing the register used to timestamp PTP packets. */
 	E1000_WRITE_REG(hw, E1000_TIMINCA, E1000_TIMINCA_INIT);