aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
Commit message (Collapse)AuthorAgeFilesLines
...
* acpi_spmc: Make sure constraints array doesn't end up sparseAymeric Wibo2026-09-101-2/+4
| | | | | | | | | | | If we skip one of the constraint package elements and decrement sc->constraint_count, sc->constraints would end up sparse and some of our constraints would be put after sc->constraint_count. Reviewed by: olce Sponsored by: The FreeBSD Foundation Event: EuroBSDCon Devsummit 2026 Differential Revision: https://reviews.freebsd.org/D59562
* ig4: Add Lunar Lake-M I2C controllers 4 and 5Kang Kang2026-09-101-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | Commit 851dffef532a added the Lunar Lake-M I2C controllers 0 through 3 (0xa878-0xa87b), which sit on PCI device 0x15. The platform exposes two further controllers at 0xa850 and 0xa851 on PCI device 0x19, reported by Intel as I2C #4 and #5. This mirrors the layout already handled for Arrow Lake-U, where both the 0x777x and 0x775x ranges are listed. On an HP OmniBook X Flip 16-as0xxx (Core Ultra 9 288V) the firmware enables only four of the six controllers, and both HID devices sit on the two that were missing: an ELAN2514 touchscreen on controller 4 and a SYNA3503 touchpad on controller 5. Neither attaches without this change, so the machine has no working pointing device. Like the other four, these use the Tiger Lake revision of the I2C IP; Linux treats 0xa850/0xa851 identically to 0xa878-0xa87b in intel-lpss-pci.c. Tested on: HP OmniBook X Flip 16-as0xxx (Intel Core Ultra 9 288V) Reviewed by: vexeduxr MFC after: 2 weeks Signed-off-by: Kang Kang <kk1987@gmail.com> Pull Request: https://github.com/freebsd/freebsd-src/pull/2406
* cxgb(4): remove unused variableSiva Mahadevan2026-09-101-2/+2
| | | | | | | | | | | | This fixes the build with gcc 16 after the changes to -Wunused*[0]. [0] https://gcc.gnu.org/gcc-16/porting_to.html#changes-to-wunused Reviewed by: np MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D59545
* dpaa2: Make cleanup budget values sysctl(9) tunableDmitry Salychev2026-09-102-20/+99
| | | | | | | | | Reviewed by: dsl Approved by: dsl Obtained from: flo_purplekraken.com MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D59497 Event: EuroBSDcon Devsummit 2026
* dpaa2: Allocate DMA tag per Rx bufferDmitry Salychev2026-09-105-46/+80
| | | | | | | | | | | | | | | | | | | | Previously each channel allocated its own set of buffers using the channel's DMA tag which causes a DMA lock contention under load. Even a single saturated 1 Gbps link caused ~50,000 adaptive mutex spin events (as per lockstat) per second. With the proposed approach there's no more contention on the channel's DMA mutex and the adaptive mutex spin events dropped to ~6,000/s. Stress test where iperf3 pushed as much traffic as possible to the 4 ports revealed that throughput drops from expected 940 Mbps down to 600-800 on each link with the "bounce pages lock" generating ~110,000 adaptive mutex spin events per second, but this is to be addressed later on. Tested by: flo_purplekraken.com, gnikl_justmail.de, bofh@ MFC after: 3 weeks Differential Revision: reviews.freebsd.org/D59463 Event: EuroBSDcon Devsummit 2026
* hwpmc: add MPERF/APERF MSR support for AMD/Intel CPUsAnderson Nascimento2026-09-095-1/+434
| | | | | | | | | | | | | | | | | | | | | | | | | | Add support for reading the MPERF (MSR 0xE7) and APERF (MSR 0xE8) model-specific registers on AMD/Intel CPUs through hwpmc(4). These counters track maximum and actual performance frequency respectively, and are used to compute effective CPU frequency scaling independent of the nominal TSC rate. The name of the class was chosen as PERF because later support for other PERF MSRs can be added to the same class. Extend libpmc(3) to expose the AMD/Intel MPERF/APERF counters added to hwpmc(4) in the companion kernel change, so userland consumers (pmcstat(8), etc.) can allocate and read these events by name. Document the new PERF class and its MPERF/APERF counters in a new pmc.perf.3 manual page, describing their semantics and how to read them via pmc(3) and pmcstat(8). Bump PMC_VERSION_MINOR. Signed-off-by: Anderson Nascimento <anascime@amd.com> Reviewed by: Ali Mashtizadeh <ali@mashtizadeh.com>, mhorne Reviewed by: ziaee (manpages) Sponsored by: AMD Differential Revision: https://reviews.freebsd.org/D58647
* sys: arm64: acpica: Add support for GICv5 ITS & IWB nodesSarah Walker2026-09-081-0/+2
| | | | | | Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D59168
* tpm: crb: make the Pluton startmethod more resilientKyle Evans2026-09-091-28/+87
| | | | | | | | | | | | | | | | | The original implementation assumed that the start/reply doorbells lived within the device _CRS space, but that isn't always the case. On my AMD Ryzen 7640U-based frame.work laptop, device memory runs from 0xc0500000-0xc0500fff while the doorbells are up around 0xc0508000. Stop sanity checking the addresses and just map them in to work reliably whether they're within the device range or not. pluton_wait_reply is cribbed from tpm_wait_for_u32, but rewritten slightly to read in just one place and to read one last time before giving up at the end of the timeout, just in case. Reviewed by: kbowling Differential Revision: https://reviews.freebsd.org/D59327
* nvme: limit I/O queue trackers to Identify MAXCMDAbdelkader Boudih2026-09-081-0/+7
| | | | | | | | | | | | MAXCMD is the maximum number of commands the controller processes at one time for a particular I/O queue. Allocating more trackers than that only queues commands inside the controller. Controllers reporting 0 are unaffected. Approved by: ngie (co-mentor) Reviewed by: ngie, imp Differential Revision: https://reviews.freebsd.org/D59154
* nvme: name the Create I/O queue cdw11 fields, use Medium QPRIOAbdelkader Boudih2026-09-082-4/+19
| | | | | | | | | | | | The Create I/O queue commands carried magic 0x1/0x3 cdw11 values, and the implicit QPRIO of zero classifies every I/O queue Urgent the moment weighted round robin arbitration is enabled. No functional change with the round robin default. Approved by: ngie (co-mentor) Reviewed by: ngie, imp, adrian Differential Revision: https://reviews.freebsd.org/D59153
* bce_vhci: fix duplicate endpoint queue registration, ratelimit failure loggingAbdelkader Boudih2026-09-082-87/+135
| | | | | | | | | | | | | | | | | bce_vhci_endpoint_create() was registering both the IN and OUT submission queues on every call, regardless of which direction the endpoint actually needed. The per-stage firmware registration failures weren't rate-limited, so a stuck registration will spam the console. Tested on: MacBookPro15,2 Macmini8,1 MacBookPro15,3 MacBookPro16,2 Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58831
* usbdevs: add TP-Link Archer T4U ver 3Bjoern A. Zeeb2026-09-071-0/+1
| | | | | | | | | | USB Vendor:Product 0x2357:0x0115 The data was provided by Pavel Timofeev (timp87 gmail com) and the device will be supported by rtw88 USB (rtw8822bu.c) in the future. MFC after: 3 days
* mlx5ib: use the hardware Toeplitz id when creating an RSS TIRAriel Ehrenberg2026-09-071-1/+2
| | | | | | | | | | | create_rss_raw_qp_tir() wrote MLX5_RX_HASH_FUNC_TOEPLITZ (the userspace ABI flag, value 1) into tirc.rx_hash_fn. That field takes the hardware encoding from mlx5_ifc.h, where 1 is INVERTED_XOR8 and Toeplitz is MLX5_TIRC_RX_HASH_FN_HASH_TOEPLITZ (2). Reviewed by: kib, slavash Sponsored by: Nvidia Networking MFC after: 1 week
* snd_emu10kx: Make sure the block count and size cover the whole bufferChristos Margiolis2026-09-071-2/+19
| | | | | | | | | | | | | | | | | | The playback voices always loop over the whole EMU_PLAY_BUFSZ buffer, but emupchan_setblocksize() only recorded the new block size and left the block count as it was set up by emu_vinit(). The blocks then no longer covered the whole buffer, and the part they left out was played without ever being written to, which became audible as distortion once playback started going through a virtual channel. Resize the buffer, so that the block count and size always cover it. Fixes: 02d4eeabfd73 ("sound: Allocate vchans on-demand") PR: 287687 MFC after: 1 week Sponsored by: The FreeBSD Foundation Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D59444
* snd_dummy: Bump primary channel countChristos Margiolis2026-09-071-2/+2
| | | | | | | | | | Makes it easier to test scenarios involving more than 1 primary channels per direction. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D59085
* sound: Prefer idle primary channels when allocatingChristos Margiolis2026-09-071-7/+17
| | | | | | | | | | | | | | | | | | | | | dsp_chn_alloc() stopped at the first primary channel that was either idle or already had vchans. Since the list is walked in order, the first channel matched both conditions once it had been used, so every client after the first was stacked onto it as a vchan and the remaining primary channels were never allocated at all. This is invisible on devices with a single primary channel, but not on those which provide several. snd_emu10kx(4), for instance, registers four primary channels for its front device, each able to run with its own rate. Look for an idle primary channel first, and only fall back to sharing one that already has vchans when there is none left. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D59084
* e1000: Fence DMA when hardware reset failsKevin Bowling2026-09-071-1/+3
| | | | | | | | | | | | | | | | iflib releases queue mappings after IFDI_STOP() returns. If a Physical Function reset fails, returning with PCI bus mastering enabled can therefore leave the device able to access mappings which the framework is about to recycle. Disable bus mastering and drain pending PCIe transactions when reset fails during initialization or stop. Re-enable and verify bus mastering only after a later reset succeeds and before queue programming begins. Treat inability to establish the DMA fence as a fail-stop invariant violation. MFC after: 2 weeks Sponsored by: BBOX.io
* iavf: Probe the Hyper-V VF device IDAndrey V. Elsukov2026-09-071-0/+2
| | | | | | | | | The shared code already recognizes IAVF_DEV_ID_VF_HV and handles it through the regular iavf register and virtchnl paths, but the PCI probe table omits it. Add the missing entry so the driver attaches. PR: 239849 MFC after: 1 week
* apple_bce: initiate IN data phase for control transfersAbdelkader Boudih2026-09-061-0/+70
| | | | | | | | | | For IN control transfers, the firmware does not send TRANSFER_REQUEST for the data phase the host must send BCE_VHCI_CMD_TRANSFER_REQUEST with an IN DMA buffer once the setup phase completes. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58872
* apple_bce: fix C_CONNECT_STATUS during port resetAbdelkader Boudih2026-09-061-1/+23
| | | | | | | | | | | Only set the port change bit when the corresponding status bit actually transitioned, instead of unconditionally flagging C_CONNECT_STATUS on every port change event. Also clear any flaky C_CONNECT_STATUS that the port change taskqueue may have set while the bus lock was dropped during a successful port reset. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58875
* apple_bce: ignore duplicate TRANSFER_REQUEST in STATUS stateAbdelkader Boudih2026-09-061-0/+5
| | | | | | | | | | Since the host initiates IN data transfers, the firmware's own TRANSFER_REQUEST for the same phase arrives after we've already moved to STATUS state. Ignoring instead of failing the transfer with USB_ERR_IOERROR. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58873
* apple_bce: fix cold boot panic in mailbox sendAbdelkader Boudih2026-09-061-12/+36
| | | | | | | | | Poll mailbox reply registers with DELAY() when the system is still cold, falling back to the interrupt-driven sema_timedwait path once timers are available. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58871
* apple_bce: kick USB explore thread after VHCI attachAbdelkader Boudih2026-09-061-0/+6
| | | | | | | | Call usb_needs_explore() after attach so the hub explore thread enumerates all initially connected ports instead of only the first. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58870
* asmc: add sleep indicator LED control via sysctlAbdelkader Boudih2026-09-062-2/+58
| | | | | | | | | | | Add dev.asmc.0.sil sysctl to control the SIL LED via SMC keys MSLD (duty/brightness) and MSLS (state latch, must be set before re-enabling). MFC After: 1 week Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58865
* ixl: Report SR-IOV VF statusKevin Bowling2026-09-063-1/+109
| | | | | | | | | | | | | | | | | | | | Expose cached per-VF configuration through the iflib VF status method. Report mailbox initialization and the negotiated virtual-channel API, MAC address, access or trunk VLAN mode, queue resources, administrator policy, PF traffic permission, and fault containment. Expose per-VF malicious-driver isolation and cumulative transmit and receive event counts through a versioned driver.ixl extension. Track successful PCI IOV attachment separately from hardware capability. This lets a successfully attached but unconfigured PF return an empty snapshot without claiming support when PCI IOV registration was unavailable. The query uses driver-cached state and does not issue AdminQ requests or read device registers. Sponsored by: BBOX.io
* ixgbe: Report SR-IOV VF statusKevin Bowling2026-09-064-3/+110
| | | | | | | | | | | | | | | Expose cached VF configuration, policy, and runtime state through the iflib VF status method. Include access or trunk VLAN mode, transmit and receive queue counts selected by the current virtualization mode, negotiated mailbox API, PF traffic permission, fault containment, and quarantine state. Initialize every cached API version before VF enumeration so an unconfigured slot cannot be mistaken for API 1.0. The query does not issue mailbox requests or read hardware registers. Sponsored by: BBOX.io
* igb: Report SR-IOV VF statusKevin Bowling2026-09-063-0/+70
| | | | | | | | | | | Expose cached per-VF configuration through the iflib VF status method. Report mailbox handshake state, MAC address, access or trunk VLAN mode, hardware transmit and receive queue counts, administrator policy, and fault-containment state. The query does not issue mailbox requests or read hardware registers. Sponsored by: BBOX.io
* dpaa2: Make software portal holdoff time a sysctl tunableDmitry Salychev2026-09-064-11/+72
| | | | | | | | | | | | | When debugging the D59463 review, it is very handy to be able to change the software portal holdoff time without recompiling the kernel. This commit makes the holdoff time a sysctl tunable, so it can be changed at runtime. Tested by: dsl Obtained from: flo_purplekraken.com MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D59461 Event: Berlin Hackathon 202609
* ntsync(4): do not double-free the alert event when a dup was detected for ↵Konstantin Belousov2026-09-041-0/+2
| | | | | | | | | WAIT_ALL Reported by: Andrew Griffiths <andrew@calif.io> Reported by: Chris Jarrett-Davies <chrisjd@openai.com> Sponsored by: The FreeBSD Foundation MFC after: 1 week
* ixgbe: Correct Wake-on-LAN configurationKevin Bowling2026-09-043-162/+215
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Wake-on-LAN capability was inferred from NVM bits on every MAC even though 82599 support is board and sometimes port specific. Private sysctls formed a second policy interface, and the driver neither coordinated the controller wake source with PCI PME nor reliably rebuilt address filters erased by the stop-time reset. Use the standard ifconfig wake capabilities. Derive support from the 82599 board and port matrix or the X540-and-newer NVM capability. Require D3hot PME support, and use the NVM APME bit only to select the initial magic-packet policy after initializing the LAN function number. Snapshot requested filters before the terminal stop so shared reset and PHY code sees the active wake policy. After reset, restore RAR0, the multicast table, receive filtering, and the optical laser before arming WUFC, WUC, and PCI PME. Remove device wake sources before clearing PCI PME on detach, resume, and when wake is disabled. Clear autonomous APM so ifconfig remains authoritative. Treat X550EM low-power-link-up failure as best effort and allow shutdown to continue after a wake-programming error. The 82599, X540, X550, and E610 datasheets document the standard ACPI wake filters used here; the E610 ACPI path includes magic-packet wake. Validated on a dual-port E610. Both ports completed three direct-D3 cycles covering wake disabled and magic-packet wake armed. A system S3 cycle woke through ix0 with WUS 0x00000002 (magic packet). Link and traffic recovered after each transition. Note that many add-in cards in this family do not support WoL; LOM and OCP cards are more likely. The E610 as tested does. MFC after: 2 weeks Sponsored by: Dirk-Willem van Gulik from Web Weaving (E610 hardware) Sponsored by: BBOX.io
* ixl: Reset VSI statistics after initial samplingKevin Bowling2026-09-041-0/+1
| | | | | | | | | | | | | | | | | | The initial statistics update runs before the PF VSI has obtained its firmware-assigned statistics counter index. Discard that provisional VSI baseline so the first update after initialization records the correct hardware counter. Without this reset, subtracting a larger provisional value from a newly selected counter can be mistaken for a 32-bit wrap and report nearly UINT32_MAX receive drops immediately after boot. Reported by: Daniel Braniss <danny@cs.huji.ac.il> Tested by: Daniel Braniss <danny@cs.huji.ac.il> Obtained from: Intel ixl 1.14.2 MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59336
* pmc: Add support for AMD UMC countersAli Mashtizadeh2026-09-032-21/+102
| | | | | | | | | | | | This change adds support for AMD's UMC performance counters. It is a bit more complicated than existing counters because the enable bit has moved. This supports Zen 4 through most Zen 6 chips as UMC counters are per-node, where a node does not necessarily translate to a NUMA domain. A few follow up changes to PMC will address this limitation. Reviewed by: mhorne Sponsored by: Netflix Pull Request: https://github.com/freebsd/freebsd-src/pull/2368
* nvme: limit namespace character-device I/O sizeAbdelkader Boudih2026-09-031-1/+8
| | | | | | | | | | | | | The namespace character device does not initialize si_iosize_max, so physio falls back to DFLTPHYS and can produce a bio larger than the qpair payload DMA tag on a controller whose maximum transfer size is below 64KB. Such a bio fails DMA mapping and is never submitted. Approved by: ngie (co-mentor) MFC after: 1 week Reviewed by: ngie, imp Differential Revision: https://reviews.freebsd.org/D59152
* nvme: complete requests when payload DMA mapping failsAbdelkader Boudih2026-09-031-26/+11
| | | | | | | | | | | | | | bus_dmamap_load_mem() reports most mapping failures, including EFBIG, only through its callback and then returns zero. nvme_payload_map() logged the error without telling the submission path, so the tracker stayed on the outstanding list with no command submitted and no timeout armed, stalling all later I/O on the queue behind it. Approved by: ngie (co-mentor) MFC after: 1 week Reviewed by: ngie, imp Differential Revision: https://reviews.freebsd.org/D59151
* tpm20: Move user copies outside the lifecycle lockKevin Bowling2026-09-032-8/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | The TPM 2.0 character-device methods held the global device lock while uiomove() accessed user memory. User page faults could therefore delay suspend or detach even though the read response was already buffered. Add a per-open sleepable lock to serialize operations on each response buffer. Stage commands under that lock before acquiring the device lock, and copy them into the response buffer only after the lifecycle checks succeed. This preserves an unread response when suspend or detach rejects a write. Release the device lock before copying buffered responses out. Also advance the response offset by the bytes actually copied when uiomove() returns after a partial transfer. Validated on an Intel TPM 2.0 TIS device. PCR reads and GetRandom passed under 16-process mixed command load. A response was consumed correctly in 5-byte, 7-byte, and remainder reads. Module unload/reload recreated the device and entropy source without lock diagnostics. Source inspection confirmed rejected writes preserve unread responses. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59245
* tpm20: Correct 32-bit register helpersKevin Bowling2026-09-031-2/+2
| | | | | | | | | | | | | | OR4() reads only the low byte before writing the complete 32-bit register. Preserve all register bits by using a matching 32-bit read. Make BIT() produce an unsigned value so masks containing bit 31 do not rely on a signed left shift into the sign bit. OpenBSD carries the same change. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59244
* tpm20: Release transport state after command failuresKevin Bowling2026-09-032-43/+77
| | | | | | | | | | | | | | | | | | | Once a transport acquires locality, several TIS and CRB error paths return without relinquishing it. They can also leave a partial FIFO transaction or an active CRB command for the next operation to inherit. Route post-locality exits through common cleanup. Reset the TIS command state on every attempt. For CRB, cancel an active failed command when necessary, request the idle state, and relinquish locality even when the state transition itself fails. Successful command handling is unchanged apart from sharing the same cleanup path. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59243
* tpm_tis: Close interrupt wait racesKevin Bowling2026-09-032-53/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The TIS interrupt handler can acknowledge and signal an event after the waiter checks the device status but before it enters tsleep(). Since the handler is MPSAFE, the command lock does not close this window. A lost wakeup can delay a completed command for its full timeout, up to 40 seconds for long TPM 2.0 operations. Publish the expected event under an interrupt mutex and use a generation counter to record matching interrupts. Recheck the device predicate without the mutex because register access may sleep on a SPI transport, then compare the generation before atomically waiting on a condition variable. This closes the check-to-sleep race without placing sleeping bus operations under a mutex. Use an absolute deadline while retrying the predicate after wakeups. Apply the same scheme to locality acquisition, which had an equivalent race. Leave the expected event published while polling so the attach-time test can still prove that an advertised interrupt arrived. Regression-tested the polling fallback on two TPM 2.0 FIFO systems with 200 concurrent PCR reads per system and repeated device suspend/resume. Neither ACPI device exposes an IRQ, so the interrupt-mode path remains hardware unvalidated. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59241
* tpm20: Harden the common device lifecycleKevin Bowling2026-09-032-45/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mark the device as dying before teardown and destroy the character device before freeing its private state or lock. This prevents cdev methods from entering with a freed internal buffer or a destroyed sx. Check the teardown state in command paths, honor failures from the cdev private data interface, and publish teardown before waiting for the lifecycle lock. Keep that lock across TPM retry delays so commands cannot interpose and private state remains pinned, but abort before the next retry once teardown begins. Block new cdev operations after a successful Shutdown(STATE). Keep the suspend gate and the TPM command under the same lock so a userspace command cannot invalidate the saved state before S3 entry. Clear the gate only after Startup(STATE) succeeds. Keep entropy harvesting scheduled after a transient command or suspend failure, but stop it while suspended or once teardown begins. Queue the next timeout while holding the lifecycle lock so release cannot miss a concurrent requeue. Validated on two TPM 2.0 FIFO systems. Each completed five device suspend/resume cycles, rejected both new and already-open cdev operations with EBUSY while suspended, completed 200 concurrent PCR reads, and detached cleanly while four PCR readers were active. A ThinkPad P51 also completed a full S3 cycle with PCR 0 unchanged and 50 successful reads after resume. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59240
* tpm_tis: Restore validated interrupts after resumeKevin Bowling2026-09-032-24/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | TIS interrupt routing and enable registers may lose their state across S3, while the driver retains its software indication that interrupts work. A subsequent locality or command wait can then sleep for an interrupt that cannot arrive. Remember whether interrupts worked before suspend and restore the vector, pending status, and enable mask before TPM2_Startup. Put the transport in polling mode first; the interrupt handler promotes it back to interrupt waits only after observing an interrupt from the restored configuration. If register restoration fails, Startup and subsequent commands continue using polling. Preserve the initial interrupt-enable mask, including the firmware's trigger and polarity selection proven by the attach time interrupt test, and restore that exact mask rather than accepting post-S3 defaults. Program the same safe baseline for polling devices during attach and resume. Acquire locality, disable global interrupt delivery, and acknowledge pending status so firmware cannot leave interrupts armed without a handler. Use the same register programming helper during attach and resume, and stop trying to configure interrupts after a locality acquisition failure. Three consecutive device suspend and resume cycles completed on a Lenovo TPM2 FIFO device without an IRQ resource. GetRandom succeeded after each resume, and module detach completed without errors. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59197
* tpm20: Initialize common state before testing TIS interruptsKevin Bowling2026-09-033-10/+24
| | | | | | | | | | | | | | | | | | | | | | | The TIS attach path tested its interrupt by transmitting GetRandom before tpm20_init() allocated the internal command buffer. A TPM2 FIFO device with a usable IRQ could therefore dereference a null internal_priv. Initialize the common TPM2 state before running the interrupt test. Make common cleanup safe for partially initialized devices and leave cleanup to the attachment after tpm20_init() fails, avoiding duplicate release of the lock, command buffer, and random-source state. Clear the IRQ resource pointer after releasing it when interrupt handler setup fails so the later polling-mode detach does not release it twice. Free the internal command allocation through its object pointer rather than relying on its embedded buffer being the first structure member. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59196
* tpm20: Validate suspend and resume commandsKevin Bowling2026-09-032-52/+94
| | | | | | | | | | | | | | | | | | | | | | | The internal TPM2_Shutdown and TPM2_Startup paths ignored both transport failures and the TPM response. Suspend could therefore enter S3 without saved TPM state, while resume could restart entropy harvesting after a failed state restoration. Build both commands through one helper, validate their response framing and TPM return codes, and propagate failures. Retry the standard RETRY and TESTING responses with bounded exponential backoff. Accept TPM_RC_INITIALIZE from Startup because firmware may already have started the TPM during resume. Do not enter S3 after an unsuccessful state save, and do not restart the entropy task when TPM state restoration failed. If Shutdown fails after the entropy task was drained, requeue it before returning so an aborted suspend does not permanently stop harvesting. Reviewed by: kevans MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D59195
* ixl: Route suspend and resume through iflibKevin Bowling2026-09-031-6/+2
| | | | | | | | | | Register the iflib device suspend and resume methods. Remove the direct initialization from the driver resume callback because iflib_device_resume() performs the datapath restart after the callback returns. MFC after: 2 weeks Sponsored by: BBOX.io
* ixv: Wire iflib suspend and resume methodsKevin Bowling2026-09-031-0/+2
| | | | | | | | | Register the standard iflib device suspend and resume methods so the framework reinitializes the VF datapath after a system power transition. MFC after: 2 weeks Sponsored by: BBOX.io
* iavf: Wire iflib suspend and resume methodsKevin Bowling2026-09-031-0/+2
| | | | | | | | | | Register the iflib device suspend and resume methods so the existing driver callbacks run during system power transitions. This stops mailbox retry work before suspend and lets iflib reinitialize the datapath after resume. MFC after: 2 weeks Sponsored by: BBOX.io
* axgbe: Wire iflib power management methodsKevin Bowling2026-09-031-0/+3
| | | | | | | | | Register the standard iflib device methods for shutdown, suspend, and resume. This gives axgbe the framework managed reinitialization used by other iflib drivers after a power transition. MFC after: 2 weeks Sponsored by: BBOX.io
* enic: Route resets through iflib lifecycleKevin Bowling2026-09-031-4/+4
| | | | | | | | | | | | | Mark the driver stopped after attach so its first IFDI_STOP() call does not repeat hardware shutdown. Defer error interrupt recovery through iflib instead of calling driver stop and init methods from interrupt context. Let iflib own the stop and restart around MTU changes as well, avoiding duplicate lifecycle operations. MFC after: 2 weeks Sponsored by: BBOX.io
* hwpmc(4): stop overwalking past _start on amd64 user callchainsNick Banks2026-09-021-1/+2
| | | | | | | | | | | | | | | | | | | | | | pmc_save_user_callchain() emits the pc it just loaded before checking whether fp is the ABI's zero frame-chain terminator. At the bottom of a well-formed chain under _start, fp comes back 0 as expected, but the paired pc is stale rtld data left on the stack -- a legal userspace VA that still passes PMC_IN_USERSPACE(), so it gets emitted as a bogus extra frame. This shows up in flame graphs as a spurious hex-valued root frame below _start. Check fp == 0 alongside the existing checks before emitting, matching how arm/arm64/powerpc already load the next fp before their check. Measured via 1kHz hwpmc sampling on an OCA: stacks with any unresolved hex frame drop from 23.9% to 1.3%, and stacks with hex at the root drop from 5.5% to 0.3%. Reviewed by: mhorne, Ali Mashtizadeh <ali@mashtizadeh.com>, gallatin MFC after: 3 days Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D59229
* snd_uaudio: drop the default monitor level to 10%Kyle Evans2026-09-021-0/+9
| | | | | | | | | | | As noted in the comment, some headsets with a hardware sidetone are incredibly sensitive and emit immediate feedback upon attach with the current system-wide default of 75%. Drop it down just for snd_uaudio(4) to avoid incredibly unpleasant surprises. MFC after: 3 days Reviewed by: christos Differential Revision: https://reviews.freebsd.org/D59199
* ufshci: skip the reinit when the new link worksJaeyoon Choi2026-09-021-4/+19
| | | | | | | | | | | | | | | UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH always rebuilt the link after the gear switch. It threw away a working HS link and ended up in PWM. The reinit is only needed for a dead link. There the local side reports HS and the peer never answers. A local readback cannot tell the two apart. Peer traffic can. Probe the peer with DME_PEER_GET after the switch. Skip the reinit when the probe succeeds. Log it when the probe fails. Reviewed by: imp (mentor) Sponsored by: Samsung Electronics Differential Revision: https://reviews.freebsd.org/D59299