diff options
Diffstat (limited to 'drivers/net/ethernet/microchip/lan743x_ptp.c')
| -rw-r--r-- | drivers/net/ethernet/microchip/lan743x_ptp.c | 54 | 
1 files changed, 6 insertions, 48 deletions
diff --git a/drivers/net/ethernet/microchip/lan743x_ptp.c b/drivers/net/ethernet/microchip/lan743x_ptp.c index da3ea905adbb..39e1066ecd5f 100644 --- a/drivers/net/ethernet/microchip/lan743x_ptp.c +++ b/drivers/net/ethernet/microchip/lan743x_ptp.c @@ -339,59 +339,18 @@ static int lan743x_ptpci_adjfine(struct ptp_clock_info *ptpci, long scaled_ppm)  	struct lan743x_adapter *adapter =  		container_of(ptp, struct lan743x_adapter, ptp);  	u32 lan743x_rate_adj = 0; -	bool positive = true; -	u64 u64_delta = 0; +	u64 u64_delta;  	if ((scaled_ppm < (-LAN743X_PTP_MAX_FINE_ADJ_IN_SCALED_PPM)) ||  	    scaled_ppm > LAN743X_PTP_MAX_FINE_ADJ_IN_SCALED_PPM) {  		return -EINVAL;  	} -	if (scaled_ppm > 0) { -		u64_delta = (u64)scaled_ppm; -		positive = true; -	} else { -		u64_delta = (u64)(-scaled_ppm); -		positive = false; -	} -	u64_delta = (u64_delta << 19); -	lan743x_rate_adj = div_u64(u64_delta, 1000000); - -	if (positive) -		lan743x_rate_adj |= PTP_CLOCK_RATE_ADJ_DIR_; - -	lan743x_csr_write(adapter, PTP_CLOCK_RATE_ADJ, -			  lan743x_rate_adj); - -	return 0; -} - -static int lan743x_ptpci_adjfreq(struct ptp_clock_info *ptpci, s32 delta_ppb) -{ -	struct lan743x_ptp *ptp = -		container_of(ptpci, struct lan743x_ptp, ptp_clock_info); -	struct lan743x_adapter *adapter = -		container_of(ptp, struct lan743x_adapter, ptp); -	u32 lan743x_rate_adj = 0; -	bool positive = true; -	u32 u32_delta = 0; -	u64 u64_delta = 0; -	if ((delta_ppb < (-LAN743X_PTP_MAX_FREQ_ADJ_IN_PPB)) || -	    delta_ppb > LAN743X_PTP_MAX_FREQ_ADJ_IN_PPB) { -		return -EINVAL; -	} -	if (delta_ppb > 0) { -		u32_delta = (u32)delta_ppb; -		positive = true; -	} else { -		u32_delta = (u32)(-delta_ppb); -		positive = false; -	} -	u64_delta = (((u64)u32_delta) << 35); -	lan743x_rate_adj = div_u64(u64_delta, 1000000000); - -	if (positive) -		lan743x_rate_adj |= PTP_CLOCK_RATE_ADJ_DIR_; +	/* diff_by_scaled_ppm returns true if the difference is negative */ +	if (diff_by_scaled_ppm(1ULL << 35, scaled_ppm, &u64_delta)) +		lan743x_rate_adj = (u32)u64_delta; +	else +		lan743x_rate_adj = (u32)u64_delta | PTP_CLOCK_RATE_ADJ_DIR_;  	lan743x_csr_write(adapter, PTP_CLOCK_RATE_ADJ,  			  lan743x_rate_adj); @@ -1583,7 +1542,6 @@ int lan743x_ptp_open(struct lan743x_adapter *adapter)  	ptp->ptp_clock_info.pps = LAN743X_PTP_N_PPS;  	ptp->ptp_clock_info.pin_config = ptp->pin_config;  	ptp->ptp_clock_info.adjfine = lan743x_ptpci_adjfine; -	ptp->ptp_clock_info.adjfreq = lan743x_ptpci_adjfreq;  	ptp->ptp_clock_info.adjtime = lan743x_ptpci_adjtime;  	ptp->ptp_clock_info.gettime64 = lan743x_ptpci_gettime64;  	ptp->ptp_clock_info.getcrosststamp = NULL;  |