diff options
-rw-r--r-- | drivers/net/ethernet/freescale/fec_ptp.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c index 5352140468ce..c40526c78c20 100644 --- a/drivers/net/ethernet/freescale/fec_ptp.c +++ b/drivers/net/ethernet/freescale/fec_ptp.c | |||
@@ -145,6 +145,7 @@ static int fec_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) | |||
145 | u64 diff; | 145 | u64 diff; |
146 | unsigned long flags; | 146 | unsigned long flags; |
147 | int neg_adj = 0; | 147 | int neg_adj = 0; |
148 | u32 mult = FEC_CC_MULT; | ||
148 | 149 | ||
149 | struct fec_enet_private *fep = | 150 | struct fec_enet_private *fep = |
150 | container_of(ptp, struct fec_enet_private, ptp_caps); | 151 | container_of(ptp, struct fec_enet_private, ptp_caps); |
@@ -154,6 +155,10 @@ static int fec_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) | |||
154 | neg_adj = 1; | 155 | neg_adj = 1; |
155 | } | 156 | } |
156 | 157 | ||
158 | diff = mult; | ||
159 | diff *= ppb; | ||
160 | diff = div_u64(diff, 1000000000ULL); | ||
161 | |||
157 | spin_lock_irqsave(&fep->tmreg_lock, flags); | 162 | spin_lock_irqsave(&fep->tmreg_lock, flags); |
158 | /* | 163 | /* |
159 | * dummy read to set cycle_last in tc to now. | 164 | * dummy read to set cycle_last in tc to now. |
@@ -161,15 +166,8 @@ static int fec_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb) | |||
161 | * timercounter_read. | 166 | * timercounter_read. |
162 | */ | 167 | */ |
163 | timecounter_read(&fep->tc); | 168 | timecounter_read(&fep->tc); |
164 | fep->cc.mult = FEC_CC_MULT; | ||
165 | diff = fep->cc.mult; | ||
166 | diff *= ppb; | ||
167 | diff = div_u64(diff, 1000000000ULL); | ||
168 | 169 | ||
169 | if (neg_adj) | 170 | fep->cc.mult = neg_adj ? mult - diff : mult + diff; |
170 | fep->cc.mult -= diff; | ||
171 | else | ||
172 | fep->cc.mult += diff; | ||
173 | 171 | ||
174 | spin_unlock_irqrestore(&fep->tmreg_lock, flags); | 172 | spin_unlock_irqrestore(&fep->tmreg_lock, flags); |
175 | 173 | ||