Commit c79e975e authored by Richard Cochran's avatar Richard Cochran Committed by David S. Miller

ptp: igb: Use the high resolution frequency method.

The 82580 and related devices offer a frequency resolution of about
0.029 ppb.  This patch lets users of the device benefit from the
increased frequency resolution when tuning the clock.
Signed-off-by: default avatarRichard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d8d26354
...@@ -226,7 +226,7 @@ static int igb_ptp_adjfreq_82576(struct ptp_clock_info *ptp, s32 ppb) ...@@ -226,7 +226,7 @@ static int igb_ptp_adjfreq_82576(struct ptp_clock_info *ptp, s32 ppb)
return 0; return 0;
} }
static int igb_ptp_adjfreq_82580(struct ptp_clock_info *ptp, s32 ppb) static int igb_ptp_adjfine_82580(struct ptp_clock_info *ptp, long scaled_ppm)
{ {
struct igb_adapter *igb = container_of(ptp, struct igb_adapter, struct igb_adapter *igb = container_of(ptp, struct igb_adapter,
ptp_caps); ptp_caps);
...@@ -235,13 +235,13 @@ static int igb_ptp_adjfreq_82580(struct ptp_clock_info *ptp, s32 ppb) ...@@ -235,13 +235,13 @@ static int igb_ptp_adjfreq_82580(struct ptp_clock_info *ptp, s32 ppb)
u64 rate; u64 rate;
u32 inca; u32 inca;
if (ppb < 0) { if (scaled_ppm < 0) {
neg_adj = 1; neg_adj = 1;
ppb = -ppb; scaled_ppm = -scaled_ppm;
} }
rate = ppb; rate = scaled_ppm;
rate <<= 26; rate <<= 13;
rate = div_u64(rate, 1953125); rate = div_u64(rate, 15625);
inca = rate & INCVALUE_MASK; inca = rate & INCVALUE_MASK;
if (neg_adj) if (neg_adj)
...@@ -1103,7 +1103,7 @@ void igb_ptp_init(struct igb_adapter *adapter) ...@@ -1103,7 +1103,7 @@ void igb_ptp_init(struct igb_adapter *adapter)
adapter->ptp_caps.max_adj = 62499999; adapter->ptp_caps.max_adj = 62499999;
adapter->ptp_caps.n_ext_ts = 0; adapter->ptp_caps.n_ext_ts = 0;
adapter->ptp_caps.pps = 0; adapter->ptp_caps.pps = 0;
adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82580; adapter->ptp_caps.adjfine = igb_ptp_adjfine_82580;
adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576; adapter->ptp_caps.adjtime = igb_ptp_adjtime_82576;
adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576; adapter->ptp_caps.gettime64 = igb_ptp_gettime_82576;
adapter->ptp_caps.settime64 = igb_ptp_settime_82576; adapter->ptp_caps.settime64 = igb_ptp_settime_82576;
...@@ -1131,7 +1131,7 @@ void igb_ptp_init(struct igb_adapter *adapter) ...@@ -1131,7 +1131,7 @@ void igb_ptp_init(struct igb_adapter *adapter)
adapter->ptp_caps.n_pins = IGB_N_SDP; adapter->ptp_caps.n_pins = IGB_N_SDP;
adapter->ptp_caps.pps = 1; adapter->ptp_caps.pps = 1;
adapter->ptp_caps.pin_config = adapter->sdp_config; adapter->ptp_caps.pin_config = adapter->sdp_config;
adapter->ptp_caps.adjfreq = igb_ptp_adjfreq_82580; adapter->ptp_caps.adjfine = igb_ptp_adjfine_82580;
adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210; adapter->ptp_caps.adjtime = igb_ptp_adjtime_i210;
adapter->ptp_caps.gettime64 = igb_ptp_gettime_i210; adapter->ptp_caps.gettime64 = igb_ptp_gettime_i210;
adapter->ptp_caps.settime64 = igb_ptp_settime_i210; adapter->ptp_caps.settime64 = igb_ptp_settime_i210;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment