e1000: Correct Rx descriptor threshold programming

Jumbo receive tuning on integrated controllers enabled PTHRESH without
a nonzero HTHRESH, contrary to the hardware programming requirements.
It also covered only the integrated MAC generations present when the
workaround was added.  Enumerate every jumbo-capable ICH and PCH type
and program PTHRESH=3 with HTHRESH=1.  Linux fixed the same HTHRESH
omission in b701cacdbcfb.

The 82574 path combined threshold values with the reset values using
bitwise OR.  Requesting WTHRESH=4 while the reset value was one thus
programmed five.  Clear the complete threshold fields before installing
the established PTHRESH=32, HTHRESH=4, WTHRESH=4 descriptor-granularity
policy.

(cherry picked from commit abe22383f1)
This commit is contained in:
Kevin Bowling committed 2026-08-21 17:49:40 -07:00
1 parent 0817452623
commit 98b95af873
1 file changed
+21
+21
View File
@@ -3920,6 +3920,27 @@ em_integrated_jumbo_rx(struct e1000_hw *hw)
}
}
static bool
em_integrated_jumbo_rx(struct e1000_hw *hw)
{
switch (hw->mac.type) {
case e1000_ich9lan:
case e1000_ich10lan:
case e1000_pchlan:
case e1000_pch2lan:
case e1000_pch_lpt:
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
case e1000_pch_adp:
case e1000_pch_mtp:
case e1000_pch_ptp:
return (true);
default:
return (false);
}
}
static void
em_initialize_receive_unit(if_ctx_t ctx)
{