From: Richard Cochran <richardcochran@gmail.com> Date: 2011-06-20 07:51:28
This patch series represents a continuation of the effort to get
better coverage of the SO_TIMESTAMPING socket API in the Ethernet
drivers. Adding time stamping support to a given driver solves two
separate issues, namely software transmit time stamping and hardware
time stamping in PHY devices.
This second batch adds the hooks into all remaining (?) arm and
powerpc MAC drivers using phylib. The first patch exports the receive
hook for use by non-NAPI drivers when compiled as modules. Patch #5
has been tested on real hardware, but the rest have only been compile
tested.
Richard Cochran (11):
net: export the receive time stamping hook for non-NAPI drivers
lib8390: enable transmit and receive time stamping.
emaclite: enable transmit and receive time stamping.
ll_temac: enable transmit and receive time stamping.
fec_mpc52xx: enable transmit and receive time stamping.
macb: enable transmit time stamping.
fs_enet: enable transmit time stamping.
smsc911x: enable transmit time stamping.
pxa168_eth: enable transmit time stamping.
mv643xx_eth: enable transmit time stamping.
ucc_geth: enable transmit time stamping.
drivers/net/fec_mpc52xx.c | 4 +++-
drivers/net/fs_enet/fs_enet-main.c | 2 ++
drivers/net/lib8390.c | 5 +++--
drivers/net/ll_temac_main.c | 5 ++++-
drivers/net/macb.c | 2 ++
drivers/net/mv643xx_eth.c | 2 ++
drivers/net/pxa168_eth.c | 3 +++
drivers/net/smsc911x.c | 1 +
drivers/net/ucc_geth.c | 2 ++
drivers/net/xilinx_emaclite.c | 9 +++++++--
net/core/timestamping.c | 1 +
11 files changed, 30 insertions(+), 6 deletions(-)
From: Richard Cochran <richardcochran@gmail.com> Date: 2011-06-20 07:51:30
Ethernet MAC drivers based on phylib (but not using NAPI) can
enable hardware time stamping in phy devices by calling netif_rx()
conditionally based on a call to skb_defer_rx_timestamp().
This commit exports that function so that drivers calling it may
be compiled as modules.
Signed-off-by: Richard Cochran <redacted>
---
net/core/timestamping.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
From: Richard Cochran <richardcochran@gmail.com> Date: 2011-06-20 07:51:33
This patch enables software (and phy device) time stamping. This file is
included by drivers/net/ax88796.c, which is based on phylib. So, this
patch makes hardware time stamping in the PHY possible.
Compile tested only.
Signed-off-by: Richard Cochran <redacted>
---
drivers/net/lib8390.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
From: Richard Cochran <richardcochran@gmail.com> Date: 2011-06-20 07:51:36
This patch enables software (and phy device) time stamping. Since this
MAC uses phylib, adding the hooks make hardware time stamping in the phy
possible.
Compile tested only.
Cc: John Linn <redacted>
Signed-off-by: Richard Cochran <redacted>
---
drivers/net/xilinx_emaclite.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
@@ -647,7 +647,8 @@ static void xemaclite_rx_handler(struct net_device *dev)dev->stats.rx_packets++;dev->stats.rx_bytes+=len;-netif_rx(skb);/* Send the packet upstream */+if(!skb_defer_rx_timestamp(skb))+netif_rx(skb);/* Send the packet upstream */}/**
@@ -1029,15 +1030,19 @@ static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev)spin_lock_irqsave(&lp->reset_lock,flags);if(xemaclite_send_data(lp,(u8*)new_skb->data,len)!=0){/* If the Emaclite Tx buffer is busy, stop the Tx queue and-*defertheskbfortransmissionatalaterpointwhenthe+*defertheskbfortransmissionduringtheISR,afterthe*currenttransmissioniscomplete*/netif_stop_queue(dev);lp->deferred_skb=new_skb;+/* Take the time stamp now, since we can't do this in an ISR. */+skb_tx_timestamp(new_skb);spin_unlock_irqrestore(&lp->reset_lock,flags);return0;}spin_unlock_irqrestore(&lp->reset_lock,flags);+skb_tx_timestamp(new_skb);+dev->stats.tx_bytes+=len;dev_kfree_skb(new_skb);
From: Richard Cochran <richardcochran@gmail.com> Date: 2011-06-20 07:51:40
This patch enables software (and phy device) time stamping. Since this MAC
is based on phylib, adding the hooks makes hardware time stamping in the
phy possible.
Compile tested only.
Cc: Grant Likely <redacted>
Signed-off-by: Richard Cochran <redacted>
---
drivers/net/ll_temac_main.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
@@ -727,6 +727,8 @@ static int temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)if(lp->tx_bd_tail>=TX_BD_NUM)lp->tx_bd_tail=0;+skb_tx_timestamp(skb);+/* Kick off the transfer */lp->dma_out(lp,TX_TAILDESC_PTR,tail_p);/* DMA start */
From: Richard Cochran <richardcochran@gmail.com> Date: 2011-06-20 07:51:46
This patch enables software (and phy device) time stamping. Software
time stamping using the SO_TIMESTAMPING API was tested and found to be
working on the LITE5200B board.
Cc: Grant Likely <redacted>
Signed-off-by: Richard Cochran <redacted>
---
drivers/net/fec_mpc52xx.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
@@ -847,6 +847,8 @@ no_csum:/* clear TX_END status */mp->work_tx_end&=~(1<<txq->index);+skb_tx_timestamp(skb);+/* ensure all descriptors are written before poking hardware */wmb();txq_enable(txq);
@@ -847,6 +847,8 @@ no_csum:/* clear TX_END status */mp->work_tx_end&=~(1<<txq->index);+skb_tx_timestamp(skb);+/* ensure all descriptors are written before poking hardware */wmb();txq_enable(txq);
This only timestamps the skb _after_ writing the final (cmd_sts) HW TX
descriptor word, and so if your previous patch is correct (which I don't
think it is), this would be buggy as well.
@@ -847,6 +847,8 @@ no_csum:/* clear TX_END status */mp->work_tx_end&=~(1<<txq->index);+skb_tx_timestamp(skb);+/* ensure all descriptors are written before poking hardware */wmb();txq_enable(txq);
This only timestamps the skb _after_ writing the final (cmd_sts) HW TX
descriptor word, and so if your previous patch is correct (which I don't
think it is), this would be buggy as well.
Agreed.
I'll apply the other patches and leave this one for now.
@@ -840,6 +840,8 @@ no_csum:__skb_queue_tail(&txq->tx_skb,skb);+skb_tx_timestamp(skb);+/* ensure all other descriptors are written before first cmd_sts */wmb();desc->cmd_sts=cmd_sts;
@@ -3165,6 +3165,8 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)ugeth->txBd[txQ]=bd;+skb_tx_timestamp(skb);+if(ugeth->p_scheduler){ugeth->cpucount[txQ]++;/* Indicate to QE that there are more Tx bds ready for
From: David Miller <davem@davemloft.net> Date: 2011-06-20 20:57:20
From: Richard Cochran <richardcochran@gmail.com>
Date: Mon, 20 Jun 2011 09:51:22 +0200
This patch series represents a continuation of the effort to get
better coverage of the SO_TIMESTAMPING socket API in the Ethernet
drivers. Adding time stamping support to a given driver solves two
separate issues, namely software transmit time stamping and hardware
time stamping in PHY devices.
This second batch adds the hooks into all remaining (?) arm and
powerpc MAC drivers using phylib. The first patch exports the receive
hook for use by non-NAPI drivers when compiled as modules. Patch #5
has been tested on real hardware, but the rest have only been compile
tested.