Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83982cbe authored by Vladimir Kondratiev's avatar Vladimir Kondratiev Committed by John W. Linville
Browse files

wil6210: interrupt moderation



Use hardware capabilities to limit IRQ generation to about 15 per msec
It corresponds to about 7 packets/IRQ when running iperf with default
parameters at 1.3Gbps

Do not enable this feature in the sniffer (monitor)  mode, because
interrupt moderation cause timestamp accuracy deterioration.
For the sniffer flow, it is important to get precise timestamp.

Signed-off-by: default avatarVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 11e69c36
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -156,6 +156,19 @@ void wil6210_enable_irq(struct wil6210_priv *wil)
	iowrite32(WIL_ICR_ICC_VALUE, wil->csr + HOSTADDR(RGF_DMA_EP_MISC_ICR) +
		  offsetof(struct RGF_ICR, ICC));

	/* interrupt moderation parameters */
	if (wil->wdev->iftype == NL80211_IFTYPE_MONITOR) {
		/* disable interrupt moderation for monitor
		 * to get better timestamp precision
		 */
		iowrite32(0, wil->csr + HOSTADDR(RGF_DMA_ITR_CNT_CRL));
	} else {
		iowrite32(WIL6210_ITR_TRSH,
			  wil->csr + HOSTADDR(RGF_DMA_ITR_CNT_TRSH));
		iowrite32(BIT_DMA_ITR_CNT_CRL_EN,
			  wil->csr + HOSTADDR(RGF_DMA_ITR_CNT_CRL));
	}

	wil6210_unmask_irq_pseudo(wil);
	wil6210_unmask_irq_tx(wil);
	wil6210_unmask_irq_rx(wil);
+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ static inline u32 WIL_GET_BITS(u32 x, int b0, int b1)
#define WIL6210_MAX_TX_RINGS	(24) /* HW limit */
#define WIL6210_MAX_CID		(8) /* HW limit */
#define WIL6210_NAPI_BUDGET	(16) /* arbitrary */
#define WIL6210_ITR_TRSH	(10000) /* arbitrary - about 15 IRQs/msec */

/* Hardware definitions begin */