git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net: dp83640: Fix tx timestamp overflow handling.
[pandora-kernel.git]
/
drivers
/
net
/
phy
/
dp83640.c
diff --git
a/drivers/net/phy/dp83640.c
b/drivers/net/phy/dp83640.c
index
9663e0b
..
2a0178d
100644
(file)
--- a/
drivers/net/phy/dp83640.c
+++ b/
drivers/net/phy/dp83640.c
@@
-42,7
+42,7
@@
#define PSF_TX 0x1000
#define EXT_EVENT 1
#define CAL_EVENT 7
#define PSF_TX 0x1000
#define EXT_EVENT 1
#define CAL_EVENT 7
-#define CAL_TRIGGER
7
+#define CAL_TRIGGER
1
#define PER_TRIGGER 6
/* phyter seems to miss the mark by 16 ns */
#define PER_TRIGGER 6
/* phyter seems to miss the mark by 16 ns */
@@
-680,6
+680,11
@@
static void decode_rxts(struct dp83640_private *dp83640,
{
struct rxts *rxts;
unsigned long flags;
{
struct rxts *rxts;
unsigned long flags;
+ u8 overflow;
+
+ overflow = (phy_rxts->ns_hi >> 14) & 0x3;
+ if (overflow)
+ pr_debug("rx timestamp queue overflow, count %d\n", overflow);
spin_lock_irqsave(&dp83640->rx_lock, flags);
spin_lock_irqsave(&dp83640->rx_lock, flags);
@@
-703,6
+708,7
@@
static void decode_txts(struct dp83640_private *dp83640,
struct skb_shared_hwtstamps shhwtstamps;
struct sk_buff *skb;
u64 ns;
struct skb_shared_hwtstamps shhwtstamps;
struct sk_buff *skb;
u64 ns;
+ u8 overflow;
/* We must already have the skb that triggered this. */
/* We must already have the skb that triggered this. */
@@
-712,6
+718,17
@@
static void decode_txts(struct dp83640_private *dp83640,
pr_debug("dp83640: have timestamp but tx_queue empty\n");
return;
}
pr_debug("dp83640: have timestamp but tx_queue empty\n");
return;
}
+
+ overflow = (phy_txts->ns_hi >> 14) & 0x3;
+ if (overflow) {
+ pr_debug("tx timestamp queue overflow, count %d\n", overflow);
+ while (skb) {
+ skb_complete_tx_timestamp(skb, NULL);
+ skb = skb_dequeue(&dp83640->tx_queue);
+ }
+ return;
+ }
+
ns = phy2txts(phy_txts);
memset(&shhwtstamps, 0, sizeof(shhwtstamps));
shhwtstamps.hwtstamp = ns_to_ktime(ns);
ns = phy2txts(phy_txts);
memset(&shhwtstamps, 0, sizeof(shhwtstamps));
shhwtstamps.hwtstamp = ns_to_ktime(ns);