| From foo@baz Mon Jan 13 09:44:41 PST 2014 |
| From: Ben Hutchings <bhutchings@solarflare.com> |
| Date: Thu, 5 Dec 2013 17:24:06 +0000 |
| Subject: sfc: Maintain current frequency adjustment when applying a time offset |
| |
| From: Ben Hutchings <bhutchings@solarflare.com> |
| |
| [ Upstream commit cd6fe65e923175e4f2e9fb585b1d78c6bf580fc6 ] |
| |
| There is a single MCDI PTP operation for setting the frequency |
| adjustment and applying a time offset to the hardware clock. When |
| applying a time offset we should not change the frequency adjustment. |
| |
| These two operations can now be requested separately but this requires |
| a flash firmware update. Keep using the single operation, but |
| remember and repeat the previous frequency adjustment. |
| |
| Fixes: 7c236c43b838 ('sfc: Add support for IEEE-1588 PTP') |
| Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/sfc/ptp.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/ethernet/sfc/ptp.c |
| +++ b/drivers/net/ethernet/sfc/ptp.c |
| @@ -1426,7 +1426,7 @@ static int efx_phc_adjfreq(struct ptp_cl |
| if (rc != 0) |
| return rc; |
| |
| - ptp_data->current_adjfreq = delta; |
| + ptp_data->current_adjfreq = adjustment_ns; |
| return 0; |
| } |
| |
| @@ -1441,7 +1441,7 @@ static int efx_phc_adjtime(struct ptp_cl |
| |
| MCDI_SET_DWORD(inbuf, PTP_IN_OP, MC_CMD_PTP_OP_ADJUST); |
| MCDI_SET_DWORD(inbuf, PTP_IN_PERIPH_ID, 0); |
| - MCDI_SET_QWORD(inbuf, PTP_IN_ADJUST_FREQ, 0); |
| + MCDI_SET_QWORD(inbuf, PTP_IN_ADJUST_FREQ, ptp_data->current_adjfreq); |
| MCDI_SET_DWORD(inbuf, PTP_IN_ADJUST_SECONDS, (u32)delta_ts.tv_sec); |
| MCDI_SET_DWORD(inbuf, PTP_IN_ADJUST_NANOSECONDS, (u32)delta_ts.tv_nsec); |
| return efx_mcdi_rpc(efx, MC_CMD_PTP, inbuf, sizeof(inbuf), |