Skip to content

Commit 50309d3

Browse files
committed
Merge branch 'net-xilinx-axienet-enable-adaptive-irq-coalescing-with-dim'
Sean Anderson says: ==================== net: xilinx: axienet: Report an error for bad coalesce settings ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents a26892e + 9d301a5 commit 50309d3

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

drivers/net/ethernet/xilinx/xilinx_axienet.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@
120120
#define XAXIDMA_IRQ_ERROR_MASK 0x00004000 /* Error interrupt */
121121
#define XAXIDMA_IRQ_ALL_MASK 0x00007000 /* All interrupts */
122122

123+
/* Constant to convert delay counts to microseconds */
124+
#define XAXIDMA_DELAY_SCALE (125ULL * USEC_PER_SEC)
125+
123126
/* Default TX/RX Threshold and delay timer values for SGDMA mode */
124127
#define XAXIDMA_DFT_TX_THRESHOLD 24
125128
#define XAXIDMA_DFT_TX_USEC 50

drivers/net/ethernet/xilinx/xilinx_axienet_main.c

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,8 @@ static u32 axienet_usec_to_timer(struct axienet_local *lp, u32 coalesce_usec)
238238

239239
/* 1 Timeout Interval = 125 * (clock period of SG clock) */
240240
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));
246243
}
247244

248245
/**
@@ -2062,14 +2059,25 @@ axienet_ethtools_set_coalesce(struct net_device *ndev,
20622059
return -EINVAL;
20632060
}
20642061

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;
20732081

20742082
return 0;
20752083
}

0 commit comments

Comments
 (0)