@@ -238,11 +238,8 @@ static u32 axienet_usec_to_timer(struct axienet_local *lp, u32 coalesce_usec)
238
238
239
239
/* 1 Timeout Interval = 125 * (clock period of SG clock) */
240
240
result = DIV64_U64_ROUND_CLOSEST ((u64 )coalesce_usec * clk_rate ,
241
- (u64 )125000000 );
242
- if (result > 255 )
243
- result = 255 ;
244
-
245
- return result ;
241
+ XAXIDMA_DELAY_SCALE );
242
+ return min (result , FIELD_MAX (XAXIDMA_DELAY_MASK ));
246
243
}
247
244
248
245
/**
@@ -2062,14 +2059,25 @@ axienet_ethtools_set_coalesce(struct net_device *ndev,
2062
2059
return - EINVAL ;
2063
2060
}
2064
2061
2065
- if (ecoalesce -> rx_max_coalesced_frames )
2066
- lp -> coalesce_count_rx = ecoalesce -> rx_max_coalesced_frames ;
2067
- if (ecoalesce -> rx_coalesce_usecs )
2068
- lp -> coalesce_usec_rx = ecoalesce -> rx_coalesce_usecs ;
2069
- if (ecoalesce -> tx_max_coalesced_frames )
2070
- lp -> coalesce_count_tx = ecoalesce -> tx_max_coalesced_frames ;
2071
- if (ecoalesce -> tx_coalesce_usecs )
2072
- lp -> coalesce_usec_tx = ecoalesce -> tx_coalesce_usecs ;
2062
+ if (!ecoalesce -> rx_max_coalesced_frames ||
2063
+ !ecoalesce -> tx_max_coalesced_frames ) {
2064
+ NL_SET_ERR_MSG (extack , "frames must be non-zero" );
2065
+ return - EINVAL ;
2066
+ }
2067
+
2068
+ if ((ecoalesce -> rx_max_coalesced_frames > 1 &&
2069
+ !ecoalesce -> rx_coalesce_usecs ) ||
2070
+ (ecoalesce -> tx_max_coalesced_frames > 1 &&
2071
+ !ecoalesce -> tx_coalesce_usecs )) {
2072
+ NL_SET_ERR_MSG (extack ,
2073
+ "usecs must be non-zero when frames is greater than one" );
2074
+ return - EINVAL ;
2075
+ }
2076
+
2077
+ lp -> coalesce_count_rx = ecoalesce -> rx_max_coalesced_frames ;
2078
+ lp -> coalesce_usec_rx = ecoalesce -> rx_coalesce_usecs ;
2079
+ lp -> coalesce_count_tx = ecoalesce -> tx_max_coalesced_frames ;
2080
+ lp -> coalesce_usec_tx = ecoalesce -> tx_coalesce_usecs ;
2073
2081
2074
2082
return 0 ;
2075
2083
}
0 commit comments