Loading drivers/net/ethernet/sfc/ptp.c +24 −20 Original line number Original line Diff line number Diff line Loading @@ -435,7 +435,6 @@ efx_ptp_process_times(struct efx_nic *efx, MCDI_DECLARE_STRUCT_PTR(synch_buf), MCDI_VAR_ARRAY_LEN(response_length, MCDI_VAR_ARRAY_LEN(response_length, PTP_OUT_SYNCHRONIZE_TIMESET); PTP_OUT_SYNCHRONIZE_TIMESET); unsigned i; unsigned i; unsigned total; unsigned ngood = 0; unsigned ngood = 0; unsigned last_good = 0; unsigned last_good = 0; struct efx_ptp_data *ptp = efx->ptp_data; struct efx_ptp_data *ptp = efx->ptp_data; Loading @@ -446,29 +445,34 @@ efx_ptp_process_times(struct efx_nic *efx, MCDI_DECLARE_STRUCT_PTR(synch_buf), if (number_readings == 0) if (number_readings == 0) return -EAGAIN; return -EAGAIN; /* Read the set of results and increment stats for any results that /* Read the set of results and find the last good host-MC * appera to be erroneous. * synchronization result. The MC times when it finishes reading the * host time so the corrected window time should be fairly constant * for a given platform. */ */ for (i = 0; i < number_readings; i++) { for (i = 0; i < number_readings; i++) { s32 window, corrected; efx_ptp_read_timeset( efx_ptp_read_timeset( MCDI_ARRAY_STRUCT_PTR(synch_buf, MCDI_ARRAY_STRUCT_PTR(synch_buf, PTP_OUT_SYNCHRONIZE_TIMESET, i), PTP_OUT_SYNCHRONIZE_TIMESET, i), &ptp->timeset[i]); &ptp->timeset[i]); } /* Find the last good host-MC synchronization result. The MC times window = ptp->timeset[i].window; * when it finishes reading the host time so the corrected window time corrected = window - ptp->timeset[i].waitns; * should be fairly constant for a given platform. /* We expect the uncorrected synchronization window to be at * least as large as the interval between host start and end * times. If it is smaller than this then this is mostly likely * to be a consequence of the host's time being adjusted. * Check that the corrected sync window is in a reasonable * range. If it is out of range it is likely to be because an * interrupt or other delay occurred between reading the system * time and writing it to MC memory. */ */ total = 0; if (window >= SYNCHRONISATION_GRANULARITY_NS && for (i = 0; i < number_readings; i++) corrected < MAX_SYNCHRONISATION_NS && if (ptp->timeset[i].window > ptp->timeset[i].waitns) { corrected >= MIN_SYNCHRONISATION_NS) { unsigned win; win = ptp->timeset[i].window - ptp->timeset[i].waitns; if (win >= MIN_SYNCHRONISATION_NS && win < MAX_SYNCHRONISATION_NS) { total += ptp->timeset[i].window; ngood++; ngood++; last_good = i; last_good = i; } } Loading Loading
drivers/net/ethernet/sfc/ptp.c +24 −20 Original line number Original line Diff line number Diff line Loading @@ -435,7 +435,6 @@ efx_ptp_process_times(struct efx_nic *efx, MCDI_DECLARE_STRUCT_PTR(synch_buf), MCDI_VAR_ARRAY_LEN(response_length, MCDI_VAR_ARRAY_LEN(response_length, PTP_OUT_SYNCHRONIZE_TIMESET); PTP_OUT_SYNCHRONIZE_TIMESET); unsigned i; unsigned i; unsigned total; unsigned ngood = 0; unsigned ngood = 0; unsigned last_good = 0; unsigned last_good = 0; struct efx_ptp_data *ptp = efx->ptp_data; struct efx_ptp_data *ptp = efx->ptp_data; Loading @@ -446,29 +445,34 @@ efx_ptp_process_times(struct efx_nic *efx, MCDI_DECLARE_STRUCT_PTR(synch_buf), if (number_readings == 0) if (number_readings == 0) return -EAGAIN; return -EAGAIN; /* Read the set of results and increment stats for any results that /* Read the set of results and find the last good host-MC * appera to be erroneous. * synchronization result. The MC times when it finishes reading the * host time so the corrected window time should be fairly constant * for a given platform. */ */ for (i = 0; i < number_readings; i++) { for (i = 0; i < number_readings; i++) { s32 window, corrected; efx_ptp_read_timeset( efx_ptp_read_timeset( MCDI_ARRAY_STRUCT_PTR(synch_buf, MCDI_ARRAY_STRUCT_PTR(synch_buf, PTP_OUT_SYNCHRONIZE_TIMESET, i), PTP_OUT_SYNCHRONIZE_TIMESET, i), &ptp->timeset[i]); &ptp->timeset[i]); } /* Find the last good host-MC synchronization result. The MC times window = ptp->timeset[i].window; * when it finishes reading the host time so the corrected window time corrected = window - ptp->timeset[i].waitns; * should be fairly constant for a given platform. /* We expect the uncorrected synchronization window to be at * least as large as the interval between host start and end * times. If it is smaller than this then this is mostly likely * to be a consequence of the host's time being adjusted. * Check that the corrected sync window is in a reasonable * range. If it is out of range it is likely to be because an * interrupt or other delay occurred between reading the system * time and writing it to MC memory. */ */ total = 0; if (window >= SYNCHRONISATION_GRANULARITY_NS && for (i = 0; i < number_readings; i++) corrected < MAX_SYNCHRONISATION_NS && if (ptp->timeset[i].window > ptp->timeset[i].waitns) { corrected >= MIN_SYNCHRONISATION_NS) { unsigned win; win = ptp->timeset[i].window - ptp->timeset[i].waitns; if (win >= MIN_SYNCHRONISATION_NS && win < MAX_SYNCHRONISATION_NS) { total += ptp->timeset[i].window; ngood++; ngood++; last_good = i; last_good = i; } } Loading