mirror of https://gitee.com/openkylin/linux.git
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: Richard Cochran <richardcochran@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d8d2635419
commit
c79e975e1f
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue