diff options
| author | Kevin Bowling <kbowling@FreeBSD.org> | 2026-08-29 02:38:43 +0000 |
|---|---|---|
| committer | Kevin Bowling <kbowling@FreeBSD.org> | 2026-08-29 13:23:00 +0000 |
| commit | 245437113020582f3622c9bcc6d841b7d9dc8f96 (patch) | |
| tree | 2b25b2c1dbd768fcedd3f83537942c7529c06c7a /lib/CodeGen/GlobalMerge.cpp | |
| parent | 46f09c4f099b11a997a58207c78bd5f5752cc853 (diff) | |
The disabled path wrote the complement of DMAC_EN to DMACR. That
set every other field, including reserved bits, the one-shot EXIT_DC
command, watchdog enables, receive threshold, and PCIe Lx selection.
When DMA coalescing was enabled, the requested watchdog and Lx-delay
values were ORed into their reset values rather than replacing the
fields. PCIEMISC.LX_DECISION was also cleared, preventing
DMACR.DMAC_Lx from controlling PCIe low-power entry.
Disable coalescing by clearing only DMAC_EN and retaining the
documented DMAC_Lx policy and watchdog fields. On enable, replace the
variable fields under their masks, select DMA requirements for PCIe
low-power entry, and program the loopback and BMC watchdog policies
independently of prior state.
Make igb_init_dmac() the sole owner of this policy, including when
SR-IOV is active, so later IOV initialization cannot overwrite it.
Apply this consistently to I350, I354, and I210 while preserving the
I354-specific timer units. Leave I210 reserved fields at their
required encodings and do not expose the ineffective control on I211.
Validated on I210 and I350 hardware. Repeated I210 enable, disable,
and reset cycles preserved the watchdog, Lx, TTLX, and LX_DECISION
fields. On I350, dmac values of 250, 1000, and 10000 programmed DMACWT
as 0x7, 0x1f, and 0x138, respectively, while retaining a four-tick TTLX
and leaving the reserved and watchdog fields stable. A real reset
initiated by a sibling function restored the enabled dmac=1000 tuple
and a down interface path restored the disabled tuple.
MFC after: 2 weeks
Sponsored by: BBOX.io
Diffstat (limited to 'lib/CodeGen/GlobalMerge.cpp')
0 files changed, 0 insertions, 0 deletions
