summaryrefslogtreecommitdiff
path: root/drivers
AgeCommit message (Collapse)Author
2026-10-08accel/ivpu: Limit DMA address width to 42 bits on 40XX and laterKarol Wachowski
On 40XX and later the NPU does not treat address bits 42 and above as part of the memory address, as the hardware uses them internally, but ivpu sets a 48-bit DMA mask for these generations. In practice the IOMMU capabilities already limit the DMA addresses to 42 bits, so this does not fix an observed problem. Set the DMA mask to 42 bits anyway, so the driver does not depend on the IOMMU configuration to stay within the range the NPU can address. 37XX keeps its 38-bit mask. Reviewed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com> Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com> Link: https://patch.msgid.link/20261006093740.2304835-1-karol.wachowski@linux.intel.com
2026-10-08rtc: pcf8563: add SMBus supportMichael Walle
Since commit 00f1bb9b8486 ("rtc: pcf8563: Switch to regmap") the driver uses regmap to access the RTC. Regmap itself will figure out if there is a suitable I2C or SMBus host controllers. Thus, don't restict the driver to just I2C controllers and make it work on SMBus controllers supporting i2c block accesses, too. This was tested on a custom x86 board. Signed-off-by: Michael Walle <mwalle@kernel.org> Link: https://patch.msgid.link/20261008071408.3548442-1-mwalle@kernel.org Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
2026-10-08rtc: ftrtc010: fix castAlexandre Belloni
The hour and minute registers will rollover before the multiplication to convert to a number of seconds can exceed an 32bit integer, there is no need to cast them. Reported-by: Dan Carpenter <error27@gmail.com> Link: https://patch.msgid.link/20261002105946.8rdteIpO7uWGEcTlS65F8iSi4gsRoXi2kgq8FTSaDPA@z/ Reviewed-by: Linus Walleij <linusw@kernel.org> Link: https://patch.msgid.link/20261005111502.159855-1-alexandre.belloni@bootlin.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
2026-10-08crypto: talitos - init tasklets before requesting IRQsRosen Penev
The talitos interrupt handlers schedule priv->done_task[] via tasklet_schedule(). Since the second IRQ support, probe has requested the IRQs before calling tasklet_init(), so an interrupt already pending when a line is requested, e.g. engine state left by the bootloader or a kexec'd kernel, would schedule a tasklet with a NULL callback. Look up the IRQ numbers and map the registers up front, so that -EPROBE_DEFER returns before anything is allocated and the done_task[] selection and reset_device() can see the secondary IRQ. Only request the IRQs once the channel fifos are allocated and init_device() has reset the engine. This matches remove(), which frees the IRQs before killing the tasklets. remove() frees every IRQ number that is > 0, so make sure that only requested lines are set when it runs from the probe error path: clear both numbers when probe fails before the request, and clear any line talitos_probe_irq() did not request. Previously a failed primary request in the two-IRQ case freed the never-requested secondary line. Fixes: c3e337f88a5b ("crypto: talitos - support for channel remap and 2nd IRQ") Assisted-by: LLM Signed-off-by: Rosen Penev <rosenp@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08crypto: sa2ul - Remove unused fieldsEric Biggers
Remove the shash, authkey, and auth fields from sa_tfm_ctx since they have no purpose and create confusion with fields that actually matter. Signed-off-by: Eric Biggers <ebiggers@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08hwrng: stm32 - use devm_platform_ioremap_resource() in stm32_rng_probe()Thorsten Blum
The resource pointer is unused - use devm_platform_ioremap_resource() and remove the unnecessary local variable. Signed-off-by: Thorsten Blum <blum@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08hwrng: stm32 - drop redundant initializationsThorsten Blum
The variables are reassigned before their initial values are read - drop the redundant initializations. Signed-off-by: Thorsten Blum <blum@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08hwrng: amd - simplify control flow in amd_rng_mod_init()Thorsten Blum
Replace the goto found statement with a break and check pdev after the loop. Also consolidate the cleanup paths. Signed-off-by: Thorsten Blum <blum@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08hwrng: stm32 - reuse clock rate in stm32_rng_clock_freq_restrain()Thorsten Blum
Reuse clock_rate and avoid calling clk_get_rate() again. Remove the extra space before the colon while at it. Signed-off-by: Thorsten Blum <blum@kernel.org> acked-by: Maxime Méré <maxime.mere@foss.st.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08hwrng: stm32 - use swap() in stm32_rng_probe()Thorsten Blum
Use swap() to simplify stm32_rng_probe(). Signed-off-by: Thorsten Blum <blum@kernel.org> Acked-by: Maxime Méré <maxime.mere@foss.st.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08hwrng: cctrng - drop redundant initializationsThorsten Blum
The variables are reassigned before their initial values are read - drop the redundant initializations. Signed-off-by: Thorsten Blum <blum@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08crypto: qat - remove unused get_num_accels()Ahsan Atta
The get_num_accels() hook in struct adf_hw_device_data has had no callers since commit d237230728c5 ("crypto: qat - remove unused character device and IOCTLs"), which deleted its last user in adf_ctl_drv.c. Every device driver still populates it and two implementations are still exported, all of it dead code. Remove the hook, its generation-level implementations adf_gen2_get_num_accels() and adf_gen4_get_num_accels(), the per-device static implementations and all the assignments. The hw_data->num_accel field is left untouched as it is still used. Signed-off-by: Ahsan Atta <ahsan.atta@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08hwrng: atmel - use HZ_PER_MHZ in atmel_trng_init()Thorsten Blum
Combine and inline the rate check to simplify the code. Drop the local rate variable and use HZ_PER_MHZ instead of the hard-coded frequency. Signed-off-by: Thorsten Blum <blum@kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08crypto: caam/qi2 - lower the algorithm priorityVincent Jardin
Lower the priority to 100, as done for QAT in commit 8024774190a5 ("crypto: qat - lower priority for skcipher and aead algorithms"). The SEC stays reachable by driver name, and user space can raise its priority through the crypto_user interface. Suggested-by: Herbert Xu <herbert@gondor.apana.org.au> Link: https://lore.kernel.org/r/aruvJECCDNdguMdw@gondor.apana.org.au Signed-off-by: Vincent Jardin <vjardin@free.fr> Reviewed-by: Sahil Malhotra <sahil.malhotra@nxp.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08crypto: qat - force an edge when re-enabling all VF2PF interruptsGeorge Abraham P
VF2PF interrupts are edge-triggered: a source only fires on a masked -> unmasked transition of VM2PF_MSK, not by being unmasked. adf_enable_all_vf2pf_interrupts() does a plain read-modify-write unmask, assuming VM2PF_MSK still holds the all-masked value left by adf_disable_all_vf2pf_interrupts(). That breaks across a device reset: adf_dev_autoreset() (and AER recovery) FLR the PF while VFs stay alive, so a VF can latch a source in VM2PF_SOU with no vectors set up to deliver it. The FLR then resets VM2PF_MSK to its power-on default of 0 (unmasked) without a software write, so the following RMW unmask writes 0 over an already-0 register: no edge occurs and the latched VF2PF message is never delivered. Fix by having adf_enable_all_vf2pf_interrupts() mask all sources immediately before unmasking them, mirroring the idiom already used in adf_gen4_disable_pending_vf2pf_interrupts(), forcing the required edge regardless of the prior state of VM2PF_MSK. Fixes: 575185000539 ("crypto: qat - keep VFs enabled during reset") Signed-off-by: George Abraham P <george.abraham.p@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08crypto: caam/qi,qi2 - set plain_keylen for skcipher descriptorsVincent Jardin
Since the commit 66b9a095f7f9 ("crypto: caam - Add support of paes algorithm") The shared descriptor then loads a zero-length key and the SEC decodes the inlined key bytes as commands. Test: with CONFIG_CRYPTO_SELFTESTS on LX2160A every skcipher but xts fails: dpaa2_caam dpseci.0: 40000307: DECO: desc idx 3: Invalid LOAD Command alg: skcipher: ctr-aes-caam-qi2 encryption failed on test vector 0; expected_error=0, actual_error=-22, cfg="in-place (one sglist)" caamalg_qi.c is compile-tested only. Fixes: 66b9a095f7f9 ("crypto: caam - Add support of paes algorithm") Signed-off-by: Vincent Jardin <vjardin@free.fr> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08crypto: caam/qi2 - reset the DPSECI at probe only when enabledVincent Jardin
Since the commit 060ce5037d5f ("crypto: caam/qi2 - add support for dpseci_reset()") probe resets every DPSECI. On a DPSECI the MC has just created from the DPL, never enabled, MC 10.40.x then logs for each of its queues: [E, qbman_rec_isr:396, QBMAN] QBMAN recoverable event 0x1000000 [E, dpmng_dump_rerr_fqid:1335, QBMAN] REL_FQ (FQ[0]) has 1 messages, dumping up to 16: [W, DPSECI] DPSECI ID[0]: Flush on queue 43 not confirmed That is 16 error lines for an 8-queue DPSECI, at every boot, although there is nothing to flush: a disabled DPSECI has no request in flight. The reset at remove is unchanged. Signed-off-by: Vincent Jardin <vjardin@free.fr> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2026-10-08regmap: debugfs: Use __free(kfree) for regmap_reg_ranges_read_filePeng Fan
Convert buf and entry in regmap_reg_ranges_read_file() from manual kfree() to __free(kfree) scope-based cleanup. This eliminates the goto error path and the manual kfree(buf) on entry allocation failure, simplifying the function to use straight-line returns. Signed-off-by: Peng Fan <peng.fan@nxp.com> Link: https://patch.msgid.link/20261008-regmap-debugfs-fix-v1-1-3df2f25c01b6@nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
2026-10-08wifi: rtw89: usb: shorten the RX aggregation hold on RTL8922AU over USB 3Devin Wittmayer
The RTL8922AU holds received frames for up to a millisecond before handing them to the host, a value carried over from the RTL8852CU. On USB 3 that adds up to a millisecond of round trip, and under load at 160 MHz the access point drops to lower rates and download suffers. Shorten the hold on USB 3 only. On USB 2 the bus is the limit, and a slow host needs the long hold to keep up. RTL8922AU on USB 3 at 160 MHz, power save off for the round trip: x86, 6 GHz x86, 5 GHz Pi 5, 6 GHz before after before after before after TCP down, 1 flow 613 1002 579 948 587 1010 Mbps TCP down, 8 flows 656 1187 629 1080 605 1122 Mbps round trip 2.33 1.29 2.25 1.18 1.42 0.84 ms busiest core, UDP 200M 8.4 12.8 8.3 12.9 2.1 3.3 % RTL8922AU on USB 2, Raspberry Pi 1 B+ at 5 GHz, 80 MHz: long hold short hold TCP up, 1 flow 102.3 87.7 Mbps CPU, UDP 20M 50.5 77.4 % loss, UDP 50M 3.8 85.7 % Fixes: 32cee8a9bb66 ("wifi: rtw89: usb: Enable RX aggregation for RTL8922AU") Reported-by: Nick Morrow <morrownr@gmail.com> Cc: stable@vger.kernel.org Signed-off-by: Devin Wittmayer <lucid_duck@justthetip.ca> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261007210958.56528-1-lucid_duck@justthetip.ca
2026-10-08wifi: rtw89: fix IE length passed to cfg80211_find_ie() in WoW AKMTristan Madani
__rtw89_wow_parse_akm() computes a pointer to the IE area from an association request frame: ies = mgmt->u.assoc_req.variable; but then passes skb->len as the IE data length to cfg80211_find_ie(). Since skb->len covers the entire frame including the 28-byte management header and fixed fields, cfg80211_find_ie() may read past the end of the actual IE data. Fix by computing the correct IE data length as skb->len minus the header offset, and validating the minimum frame length before parsing. Fixes: 92790c4e50d2 ("wifi: rtw89: wow: parsing Auth Key Management from associate request") Cc: stable@vger.kernel.org Signed-off-by: Tristan Madani <tristan@talencesecurity.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261007161721.261452-3-tristmd@gmail.com
2026-10-08wifi: rtw89: Override antenna number for RTL8852BE-VSBitterblue Smith
RTL8852BE-VS (PCI ID 10ec:b85b, RFE type 41) has only one spatial stream and likely one physical antenna, but the firmware reports two antennas. This results in the driver configuring the wrong RF path, which leads to very poor reception. Users complain that 5 GHz networks are not visible. Hardcode the number of antennas for this RFE type to one, and the correct RF path for the Bluetooth coexistence code. This is what the vendor driver does. Closes: https://lore.kernel.org/linux-wireless/10543730.tdPhlSkOF2@topolinux/ Closes: https://github.com/morrownr/rtw89/issues/128 Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/c6f85442-dd1e-4971-943a-31bfb54eb0ed@gmail.com
2026-10-08Merge tag 'soc-fixes-7.3-2' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc Pull SoC fixes from Arnd Bergmann: - Four distinct issues in TEE firmware, all fairly minor - Five devicetree mistakes on NXP i.MX8, lx2160a and Qualcomm based machines, one of these may cause file system corruption from an incorrect SD card supply voltage - Five fixes for clk drivers on new Qualcomm platforms, addressing issues with incorrect enable states * tag 'soc-fixes-7.3-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: MAINTAINERS: update my email address tee: optee: ffa: support shared memory offsets on large-page kernels optee: register TEE devices only once fully initialized tee: shm: reject zero-sized allocations in tee_dyn_shm_alloc_helper() arm64: dts: imx8mp-var-dart-sonata: Fix Sonata SD I/O supply arm64: dts: lx2160a: fix the iic5 spi3 pinmux offset and value arm64: dts: lx2160a: fix IIC1 pinmux submask rejected by pinctrl-single arm64: dts: lx2160a: fix incorrect pinmux clk: qcom: gpucc-kaanapali: Mark the GPU CX GDSC as votable clk: qcom: gpucc-glymur: Mark the GPU CX GDSC as votable clk: qcom: gcc-kaanapali: Fix always-enabling PCIE_RSCC clocks clk: qcom: gcc-hawi: Fix always-enabling PCIE_RSCC clocks clk: qcom: gcc-eliza: Fix always-enabling PCIE_RSCC clocks arm64: dts: qcom: x1-denali: Fix microphone distortion tee: qcomtee: fix kernel-doc warnings
2026-10-08Merge tag 'usb-mtu3.2026.10.06a' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu Pull tracing fix from Paul McKenney: "Fix a double-dereference splat in TP_printk in usb mtu3. This was a pre-existing bug that can corrupt tracing output, but which was exposed this cycle by additional checking that was added to the tracing subsystem. This splat is reporting a double-dereference that can result in garbage traces being dumped due to the possibility of the TP_printk() being executed without the benefit of main memory being present. The fix is to move the extra dereference from TP_printk() time to TP_fast_assign() time" * tag 'usb-mtu3.2026.10.06a' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu: usb: mtu3: Fix double dereference in TP_printk
2026-10-08staging: rtl8723bs: remove the obsolete driverLuka Gejak
RTW88 now supports RTL8723B family, via rtw8723b driver which handles RTL8723BS, so the staging driver is obsolete. Remove it together with its Kconfig and Makefile wiring. Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261007102819.19904-1-luka.gejak@linux.dev
2026-10-08wifi: rtw88: 8723bs: enable building the RTL8723BS driverLuka Gejak
Now that the chip support, firmware interface, coexistence, power management and the SDIO transfer and association paths are all in place, add the Kconfig symbols and Makefile rules that build the RTL8723B chip module and the RTL8723BS SDIO front end. Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Reviewed-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261006130701.120460-8-luka.gejak@linux.dev
2026-10-08wifi: rtw88: 8723bs: add the RTL8723BS SDIO bindLuka Gejak
Add the SDIO module for the RTL8723BS, the SDIO variant of the RTL8723B. It binds the Realtek SDIO device ids to the shared rtw88 SDIO probe and points it at the RTL8723B chip information. The device id table carries the same six ids the staging rtl8723bs driver binds to this chip, so the staging driver can be dropped without losing hardware support. I only have the 0xb723 variant to test with. The other five are included for parity with staging, which has carried them for years, rather than being left behind. The RTL8723B chip support is based on the initial work by Michael Straube <straube.linux@gmail.com>. Link: https://github.com/mistraube/rtw88/tree/rtl8723bs Co-developed-by: Michael Straube <straube.linux@gmail.com> Signed-off-by: Michael Straube <straube.linux@gmail.com> Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Reviewed-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261006130701.120460-7-luka.gejak@linux.dev
2026-10-07vxlan: report a circular route as SKB_DROP_REASON_RECURSION_LIMITAnton Danilov
udp_tunnel_dst_lookup() and udp_tunnel6_dst_lookup() return -ELOOP when the route to the remote end goes out of the vxlan device itself, and vxlan_xmit_one() counts that in collisions, apart from the -ENETUNREACH of a failed lookup. The drop reason does not tell them apart: both are reported as SKB_DROP_REASON_IP_OUTNOROUTES, which describes a failed route lookup. Such a route would send the encapsulated packet back into the device it leaves, which is the dead loop on a virtual device that SKB_DROP_REASON_RECURSION_LIMIT describes. Report the -ELOOP case with that reason, and add the tunnel case to the description of the reason as an example. ip_tunnel and ip6_tunnel make the same check, rt->dst.dev == dev in ip_tunnel_xmit() and ip_md_tunnel_xmit() and tdev == dev in ip6_tnl_xmit(), and can report it with the same reason. Signed-off-by: Anton Danilov <littlesmilingcloud@gmail.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Link: https://patch.msgid.link/20261005201417.906344-5-littlesmilingcloud@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07vxlan: report the drop reason of __iptunnel_pull_header()Anton Danilov
vxlan_rcv() reports SKB_DROP_REASON_NOMEM whenever __iptunnel_pull_header() fails, as the helper used to return -ENOMEM for any failure. The VXLAN header is already in the linear area at this point, but the inner Ethernet header of a packet without GPE may not be, so a packet whose inner frame is shorter than an Ethernet header is reported as an out of memory condition. Report the reason __iptunnel_pull_header() now returns instead: PKT_TOO_SMALL for such a packet, NOMEM when an allocation fails. Suggested-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: Anton Danilov <littlesmilingcloud@gmail.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Link: https://patch.msgid.link/20261005201417.906344-4-littlesmilingcloud@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07vxlan: rename the drop reasons for use by other tunnelsAnton Danilov
VXLAN_INVALID_HDR and VXLAN_VNI_NOT_FOUND describe conditions that are not specific to vxlan: a malformed tunnel header, and a packet for which no tunnel device is found. The GRE receive paths drop packets for the same two conditions, and can report them with the same reasons once they are converted to drop reasons. Rename them to TUNNEL_INVALID_HDR and TUNNEL_NOT_FOUND and reword their descriptions, the way VXLAN_NO_REMOTE became NO_TX_TARGET in commit 46e0ccfb88f0 ("net: vxlan: rename SKB_DROP_REASON_VXLAN_NO_REMOTE"). The numeric values stay the same; the names that the skb:kfree_skb tracepoint and drop_monitor report change. Suggested-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: Anton Danilov <littlesmilingcloud@gmail.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Link: https://patch.msgid.link/20261005201417.906344-2-littlesmilingcloud@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-08wifi: rtw88: 8723b: add the RTL8723B chip driverLuka Gejak
Add the Realtek RTL8723B 802.11n chip driver: the chip operations, the power sequences, the efuse layout, the RF and IQ calibration, and the chip specific coexistence handling. The RTL8723B chip support is based on the initial work by Michael Straube <straube.linux@gmail.com>. Link: https://github.com/mistraube/rtw88/tree/rtl8723bs Co-developed-by: Michael Straube <straube.linux@gmail.com> Signed-off-by: Michael Straube <straube.linux@gmail.com> Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Reviewed-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261006130701.120460-6-luka.gejak@linux.dev
2026-10-08wifi: rtw88: move the shared 8723x definitions to rtw8723x.hLuka Gejak
The RTL8723B driver needs the receive PHY status layout, the SDIO aggregation burst fields and four baseband registers, which currently live in rtw8703b.h. Move them to rtw8723x.h, the header for the definitions shared within the family, and rename struct phy_status_8703b to struct phy_status_8723x. The layout is called phy_status_rpt_8192cd in the vendor driver. This is not a logical change. Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261006130701.120460-5-luka.gejak@linux.dev
2026-10-08wifi: rtw88: 8723b: add the RTL8723B BB, RF and AGC tablesLuka Gejak
Add the MAC register table and the baseband, RF and AGC parameter tables for the RTL8723B, and the transmit power limit and power by rate tables, in the layout the shared rtw88 phy code expects. The RTL8723B chip support is based on the initial work by Michael Straube <straube.linux@gmail.com>. Link: https://github.com/mistraube/rtw88/tree/rtl8723bs Co-developed-by: Michael Straube <straube.linux@gmail.com> Signed-off-by: Michael Straube <straube.linux@gmail.com> Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Reviewed-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261006130701.120460-4-luka.gejak@linux.dev
2026-10-08wifi: rtw88: 8723b: add the RTL8723B register definitionsLuka Gejak
Add the register offsets and bit definitions the RTL8723B driver uses, including the power and system function bits, the BT antenna and efuse control registers, the packet lifetime and MAC ID drop registers, the FPGA0 HSSI and RF switch control registers, and the RFE antenna path registers. Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Reviewed-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261006130701.120460-3-luka.gejak@linux.dev
2026-10-08wifi: rtw88: move the 88xxa CCK power detect setter to phy.cLuka Gejak
The CCK power detect setter in rtw88xxa.c programs values that are not specific to that chip family. The RTL8723B wants the same setter, but pulling in the whole rtw88_88xxa module for one helper is not worth it. Move it to phy.c as rtw_phy_cck_pd_set(), where the rest of the CCK power detect code and the level enum already live. rtw8812a and rtw8821a call the core version, so rtw88xxa.c no longer provides it. No logical changes have been made at all. Signed-off-by: Luka Gejak <luka.gejak@linux.dev> Reviewed-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Acked-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261006130701.120460-2-luka.gejak@linux.dev
2026-10-08wifi: rtw89: 8922d: update supported firmware format to 1Ping-Ke Shih
The firmware version 0.35.119.0 changes hw_scan format, which isn't compatible with old driver. The BT-coexistence also implements much features in firmware side until 0.35.119.3, which needs driver side implementation accordingly. The REGD table included in firmware file add NZ/BR/AR countries. Increase format to 1 to prevent old driver load the new firmware. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261007011057.12125-4-pkshih@realtek.com
2026-10-08wifi: rtw89: regd: add NZ/BR/AR for individual TX power settingsZong-Zhe Yang
Add NZ (New Zealand), BR (Brazil) and Add AR (Argentina) into Realtek regulatory enum. Some chipsets may need individual TX power settings for them. Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261007011057.12125-3-pkshih@realtek.com
2026-10-08wifi: rtw89: coex: Update Wi-Fi/Bluetooth coexistence version to 9.24.2Ching-Te Ku
Update 0.35.119.3 Wi-Fi firmware support. Fix dual BT, dual MAC, MLO mechanism binding control not working issue. Fix AX/BE serial chips logic mixing error. Signed-off-by: Ching-Te Ku <ku920601@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261007011057.12125-2-pkshih@realtek.com
2026-10-07net: usb: sierra_net: reject short firmware attribute readsXinsheng Zhu
sierra_net_get_fw_attr() only checks usbnet_read_cmd() for negative return values before converting attrdata and storing it in *datap. A zero-length or one-byte response leaves attrdata wholly or partially uninitialized. Although sierra_net_bind() rejects responses of unexpected length, its dev_dbg() call uses fwattr before that check. When the debug message is enabled, the incomplete value may therefore be used in the debug output. Require the return value to equal sizeof(attrdata) before accessing the buffer. Return -EIO for short reads, retaining the existing handling of negative errors and leaving the output parameter untouched on failure. Found by manual code inspection with LLM assistance. The issue has not been reproduced at runtime. Cc: stable+noautosel@kernel.org # LLM report + LLM fix, untested Fixes: eb4fd8cd355c ("net/usb: add sierra_net.c driver") Signed-off-by: Xinsheng Zhu <xinsheng.zhu.ny@gmail.com> Link: https://patch.msgid.link/20261005155920.27735-1-xinsheng.zhu.ny@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07net: usb: r8153_ecm: reject short register readsXinsheng Zhu
pla_read_word() and pla_write_word() read four bytes into an uninitialized stack variable, but only check usbnet_read_cmd() for negative return values. The helper can also return a non-negative length smaller than requested, leaving part or all of tmp uninitialized. pla_read_word() may then derive the register value from uninitialized bytes. pla_write_word() may include uninitialized bytes in the buffer sent to the device during its read-modify-write operation. Require the return value to equal sizeof(tmp) before using the buffer. Return -ENODATA for short reads while preserving negative errors from usbnet_read_cmd(). Found by manual code inspection with LLM assistance. The issue has not been reproduced at runtime. Cc: stable+noautosel@kernel.org # LLM report + LLM fix, untested Fixes: c1aedf015ebd ("net/usb/r8153_ecm: support ECM mode for RTL8153") Signed-off-by: Xinsheng Zhu <xinsheng.zhu.ny@gmail.com> Link: https://patch.msgid.link/20261005055943.35180-1-xinsheng.zhu.ny@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-08platform/chrome: cros_ec_typec: Poll for role swap completionMarek Maslanka
Depending on the EC USB-C stack (TCPMv2 vs PDC), EC_CMD_USB_PD_CONTROL with a role swap request may either block until the swap completes or queue the request asynchronously for the EC PD task and return the current (pre-swap) role in the immediate response. On platforms where the EC handles the swap asynchronously, checking resp.role right after issuing the swap command sees the old role and fails with -EIO before the USB PD handshake completes. If the immediate response does not yet reflect the target role, poll EC_CMD_USB_PD_CONTROL with USB_PD_CTRL_SWAP_NONE until the target role is reached while connected, or until ROLE_SWAP_TIMEOUT_MS expires. The timeout mirrors PD_ROLE_SWAP_TIMEOUT used by the TCPM port manager, since a PR_Swap may legitimately take seconds when the partner answers with Wait and the initiator retries. While at it, report the failure modes the same way tcpm.c does, so that userspace can tell a rejected swap from a disconnect: -ETIMEDOUT when the partner never completes the swap, and -ENOTCONN when the port goes away while waiting. Decoding of the swapped role is factored out into cros_typec_resp_to_role() instead of being open coded for each swap type, which also keeps an unhandled swap type from being misread as a power role swap. Fixes: ab229c2b72c3 ("platform/chrome: cros_ec_typec: Add role swap ops") Signed-off-by: Marek Maslanka <mmaslanka@google.com> Link: https://lore.kernel.org/r/20261007033837.708119-1-mmaslanka@google.com Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
2026-10-07bareudp: set the inner protocol to the protocol of the packetHaishuang Yan
bareudp_xmit_skb() sets the inner protocol of the skb to the configured ethertype, and bareudp6_xmit_skb() does not set it at all. The inner protocol is used by skb_udp_tunnel_segment() to segment the inner packet when GSO has to be done in software, for instance when the lower device does not offload the checksum. With multiproto, an IPv4 device also carries IPv6, so the IPv6 header is parsed as an IPv4 one. With IPv6 underlay, the inner protocol is whatever the skb had before. In both cases segmentation fails and the packets are dropped. With veth tx checksum offload disabled, iperf3 TCP over bareudp gets about 10 Mbit/s with thousands of retransmits instead of about 700 Mbit/s for IPv6 over IPv4 and for both families over IPv6, while IPv4 over IPv4 works. At this point skb->protocol is the protocol of the inner packet, which bareudp_xmit() has already checked against the configuration, so use it on both paths. Fixes: 571912c69f0e ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.") Fixes: 4b5f67232d95 ("net: Special handling for IP & MPLS.") Signed-off-by: Haishuang Yan <yanhaishuang@cmss.chinamobile.com> Reviewed-by: Willem de Bruijn <willemb@google.com> Link: https://patch.msgid.link/20261002153039.462663-1-yanhaishuang@cmss.chinamobile.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-08wifi: rtw89: coex: fix off-by-one in H2C macro buffer full checkChing-Te Ku
The buffer full check used >=, which rejects a command that would exactly fill the buffer even though it still fits. Change to > so a command is only rejected when it would actually overflow hbuf. Also drop the duplicate BTC_H2C_MAXLENC definition in core.h and keep BTC_H2C_MAXLEN from coex.h as the single source of truth for the H2C macro buffer size. Signed-off-by: Ching-Te Ku <ku920601@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20261005053855.17740-1-pkshih@realtek.com
2026-10-07amt: mark relay data as a UDP tunnel packet before sending itOmar Ramadan
amt_send_multicast_data() encapsulates the multicast packet in AMT + UDP + IP headers, but unlike other UDP tunnels it never calls udp_tunnel_handle_offloads(). If tx checksum offload is enabled on the amt device (off by default), GSO packets (e.g. from a UDP_SEGMENT sender) reach amt_dev_xmit() unsegmented. They are then sent with neither skb->encapsulation nor SKB_GSO_UDP_TUNNEL_CSUM set, and the lower device drops them: __udp_gso_segment() fails because csum_start does not match the (outer) transport header. Call udp_tunnel_handle_offloads(skb, true), as other UDP tunnels do. udp_csum is true because udp_tunnel_xmit_skb() is called with nocheck == false. Also reset the mac header of the copy before recording the inner headers. amt_dev_xmit() pulled the Ethernet header without moving mac_header, so inner_mac_header would point 14 bytes before the inner IP header. That makes tnl_hlen negative in __skb_udp_tunnel_segment(). Suggested-by: Eric Dumazet <edumazet@kernel.org> Signed-off-by: Omar Ramadan <omar@blockcast.net> Link: https://patch.msgid.link/20261004161200.27196-2-omar@blockcast.net Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07e1000e: Fix out-of-bounds MMIO access by validating BAR0 sizePu Lehui
Syzkaller reported a kernel panic caused by an out-of-bounds MMIO access in the e1000e driver. [ 82.868719][ T404] e1000e 0000:00:02.0: The NVM Checksum Is Not Valid [ 82.872328][ T404] Unable to handle kernel paging request at virtual address ffff80008894e090 [ 83.085218][ T404] CPU: 2 UID: 0 PID: 404 Comm: bash Not tainted 7.2.0-rc2-g3f1f75536668 #1 PREEMPTLAZY [ 83.129013][ T404] pc : e1000_get_cfg_done_82571+0x70/0x158 [ 83.140092][ T404] lr : e1000_get_cfg_done_82571+0x68/0x158 [ 83.151196][ T404] sp : ffff80008ac37410 [ 83.158922][ T404] x29: ffff80008ac37410 x28: ffff0000cd6a11b8 x27: ffff0000c58190d0 [ 83.173919][ T404] x26: ffff0000cd6a11b8 x25: ffff0000cd6a0bc0 x24: ffff0000cd6a0000 [ 83.189417][ T404] x23: 0000000000001010 x22: ffff0000cd6a11c0 x21: ffff0000cd6a11b8 [ 83.205195][ T404] x20: 0000000000000064 x19: ffff80008894e090 x18: 0000000000000000 [ 83.220545][ T404] x17: ffff800081c1a3f4 x16: ffff800081c19c10 x15: ffff800081e86510 [ 83.235764][ T404] x14: 0000000000000001 x13: 0000000000000001 x12: ffff60001bc8a8b3 [ 83.251301][ T404] x11: 1fffe0001bc8a8b2 x10: ffff60001bc8a8b2 x9 : ffff800081eae25c [ 83.266705][ T404] x8 : 00009fffe437574e x7 : ffff0000de454593 x6 : 0000000000000001 [ 83.281919][ T404] x5 : ffff0000cf2b9640 x4 : 0000000000000000 x3 : dfff800000000000 [ 83.297317][ T404] x2 : 0000000000000007 x1 : ffff0000cd6a11c0 x0 : 0000000000000000 [ 83.312601][ T404] Call trace: [ 83.318662][ T404] e1000_get_cfg_done_82571+0x70/0x158 (P) [ 83.329748][ T404] e1000e_phy_hw_reset_generic+0x17c/0x1a8 [ 83.341541][ T404] e1000_probe+0xbd8/0x1988 [ 83.350334][ T404] local_pci_probe+0x84/0x130 Repetition steps: 1. Find PCI device which BAR0 size <= 4K. If it's: Device Addr: 0000:00:02.0 BAR0 SIZE: 4K Vendor/Device ID: 0x1af4 0x1004 2. Unbind the above PCI device echo '0000:00:02.0' > /sys/bus/pci/devices/0000:00:02.0/driver/unbind 3. Set the above device to e1000e new_id echo '1af4 1004' > /sys/bus/pci/drivers/e1000e/new_id During e1000_probe(), the driver maps the device's BAR0 memory region. If the device has a 4K BAR0, ioremap() maps only 4K of space. Later in the probe process, when the NVM checksum validation fails, the driver attempts to perform a hardware reset and falls back to the err_eeprom cleanup path. This cleanup path will trigger an OOB access kernel panic: e1000_phy_hw_reset e1000e_phy_hw_reset_generic e1000_get_cfg_done_82571 er32(EEMNGCTL) readl(hw->hw_addr + EEMNGCTL); <-- EEMNGCTL(0x1010) > 4K, OOB access Fix this by verifying that the MMIO length (pci_resource_len(pdev, 0)) is at least SZ_64K before calling ioremap(). This accounts not only for standard registers up to E1000_SYSSTMPH, but also for flash registers mapped on ICH/PCH chipsets (up to offset 0xE074 / ~57.1 KB). Since PCI BAR sizes are power-of-two aligned, SZ_64K is the minimum valid BAR0 size required to ensure all subsequent MMIO accesses remain strictly within the mapped boundary. Cc: stable+noautosel@kernel.org # assumes malicious PCIe device Fixes: bc7f75fa9788 ("[E1000E]: New pci-express e1000 driver (currently for ICH9 devices only)") Signed-off-by: Pu Lehui <pulehui@huawei.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Link: https://patch.msgid.link/20261001222443.3500206-6-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07e1000e: fix IRQ leak when request_irq() fails in e1000_request_msix()Jiayuan Chen
An internal syzbot instance reported the warning below. comedi (comedi_parport) lets userspace request_irq() an arbitrary IRQ number and can thus grab one of e1000e's MSI-X vectors. When e1000_request_msix() then fails partway through, it returned without freeing the vectors it had already requested; pci_disable_msix() later tears those descriptors down while their irqaction is still attached, leaking the /proc/irq entry. Free the already requested IRQs on the error path. genirq: Flags mismatch irq 28. 00200000 (eth1-tx-0) vs. 00200000 (comedi_parport) remove_proc_entry: removing non-empty directory 'irq/27', leaking at least 'eth1-rx-0' WARNING: fs/proc/generic.c:742 at remove_proc_entry+0x436/0x560, CPU#3: ip/445 Modules linked in: CPU: 3 UID: 0 PID: 445 Comm: ip Not tainted 7.1.0+ #284 PREEMPT RIP: 0010:remove_proc_entry (fs/proc/generic.c:742 (discriminator 4)) PKRU: 55555554 Call Trace: <TASK> unregister_irq_proc (kernel/irq/proc.c:406) free_desc (kernel/irq/irqdesc.c:482) irq_free_descs (kernel/irq/irqdesc.c:874 kernel/irq/irqdesc.c:865) irq_domain_free_irqs (kernel/irq/irqdomain.c:1917) msi_domain_free_locked.part.0 (kernel/irq/msi.c:1619 kernel/irq/msi.c:1645) msi_domain_free_irqs_all_locked (kernel/irq/msi.c:1632) pci_msi_teardown_msi_irqs (drivers/pci/msi/irqdomain.c:28) pci_free_msi_irqs (drivers/pci/msi/msi.c:925) pci_disable_msix (drivers/pci/msi/api.c:200 drivers/pci/msi/api.c:193) e1000_request_irq (drivers/net/ethernet/intel/e1000e/netdev.c:2028) e1000e_open (drivers/net/ethernet/intel/e1000e/netdev.c:4681) __dev_open (net/core/dev.c:1702) netif_change_flags (net/core/dev.c:9806) do_setlink.isra.0 (net/core/rtnetlink.c:3207 (discriminator 1)) rtnetlink_rcv_msg (net/core/rtnetlink.c:7068) netlink_rcv_skb (net/netlink/af_netlink.c:2556) Cc: stable+noautosel@kernel.org # assumes malicious PCIe device Fixes: 4662e82b2cb4 ("e1000e: add support for new 82574L part") Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev> Reviewed-by: Dima Ruinskiy <dima.ruinskiy@intel.com> Reviewed-by: Simon Horman <horms@kernel.org> Reviewed-by: Piotr Kwapulinski <piotr.kwapulinski@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Link: https://patch.msgid.link/20261001222443.3500206-5-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07e1000e: add system to disable K1 listTony Nguyen
Javier reports seeing packet loss issues related to the re-enablement of K1; disabling it makes the issues go away. Add the reported system to have K1 disabled by default. Reproduction steps (from the Link): Plug the cable and ping the default gateway on the LAN. No suspend/resume involved, machine freshly booted and on AC power. Nothing e1000e-related in dmesg apart from the link up/down messages; no "Hardware Unit Hang". Default (K1 enabled): $ ping -c 30 192.168.10.1 --- 192.168.10.1 ping statistics --- 30 packets transmitted, 18 received, 40% packet loss, time 29734ms rtt min/avg/max/mdev = 0.211/0.315/0.384/0.046 ms The lost packets are spread over the run (seq 6, 8, 9, 11, 13, 14, 16, 19, 20, 24, 25, 30), not a single burst. DHCP on this link also takes 1-2 minutes to get a lease, consistent with incoming packets being dropped. With K1 disabled at runtime: # ethtool --set-priv-flags enp0s31f6 disable-k1 on $ ethtool --show-priv-flags enp0s31f6 Private flags for enp0s31f6: s0ix-enabled: on disable-k1 : on $ ping -c 30 192.168.10.1 --- 192.168.10.1 ping statistics --- 30 packets transmitted, 30 received, 0% packet loss, time 29713ms rtt min/avg/max/mdev = 0.169/0.251/0.468/0.054 ms $ ping -c 30 192.168.10.1 --- 192.168.10.1 ping statistics --- 30 packets transmitted, 30 received, 0% packet loss, time 29677ms rtt min/avg/max/mdev = 0.101/0.222/0.360/0.064 ms I have only compile tested this, but Javier has tested that disabling K1 on his system (Lenovo ThinkPad P14s Gen 5 (Intel), I219-LM [8086:550a]) resolves his issues. Cc: stable@vger.kernel.org Fixes: 578294b8b60d ("e1000e: Reconfigure PLL clock gate timeout and re-enable K1 on Meteor Lake") Reported-by: Javier Herrera <javier.herrera@afronta.com> Link: https://lore.kernel.org/intel-wired-lan/CAKRuCQLWEcci9hPgNUmvq44Bd2H30T5_vP=exMjsknXMN5Yh9A@mail.gmail.com/ Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Link: https://patch.msgid.link/20261001222443.3500206-7-anthony.l.nguyen@intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07bnxt_en: fix DMA mapping length for padded small packetsEric Dumazet
Stefan Fleischmann reported Intel IOMMU DMA Read faults on BCM57412 NetXtreme-E NICs when transmitting packets on VLAN/macvlan interfaces: DMAR: [DMA Read NO_PASID] Request device [18:00.0] fault addr 0xfc499000 [fault reason 0x06] PTE Read access is not set bnxt_en 0000:18:00.0 eno1np0: Abandoning msg {0xb4 0x41a} len: 0 due to firmware status: 0x2000001 ... NETDEV WATCHDOG: eno1np0 (bnxt_en): transmit queue 0 timed out The fault address (0xfc499000) is on an exact 4KB page boundary, pointing to a DMA read buffer overrun. In bnxt_start_xmit(), packets smaller than BNXT_MIN_PKT_SIZE (52 bytes), such as 42-byte untagged ARP frames, are padded: if (length < BNXT_MIN_PKT_SIZE) { pad = BNXT_MIN_PKT_SIZE - length; if (skb_pad(skb, pad)) goto tx_kick_pending; length = BNXT_MIN_PKT_SIZE; } mapping = dma_map_single(&pdev->dev, skb->data, len, DMA_TO_DEVICE); ... dma_unmap_len_set(tx_buf, len, len); However, 'len' was initialized earlier to skb_headlen(skb) (e.g. 42 bytes) and is left unadjusted after padding. Consequently, dma_map_single() and dma_unmap_len_set() map and track only 42 bytes. Later, the hardware TX buffer descriptor is programmed with the padded length: txbd->tx_bd_len_flags_type = cpu_to_le32(((len + pad) << TX_BD_LEN_SHIFT) | flags | TX_BD_FLAGS_PACKET_END); The NIC DMA engine is thus instructed to read 52 bytes from a region where only 42 bytes were DMA-mapped. If skb->data ends near the boundary of a 4KB page (within 'pad' bytes of the next page), the hardware DMA read overruns into the unmapped adjacent page, triggering an IOMMU fault. This issue was exposed after commit 447cbe95ebb9 ("vlan: fix skb_under_panic and races when toggling HW VLAN offload") because reserving extra VLAN headroom rounded LL_RESERVED_SPACE from 48 up to 64 bytes, shifting skb->data offsets and potentially causing small frames to land right against page boundaries. Fix this by using skb_put_padto(skb, BNXT_MIN_PKT_SIZE) in bnxt_start_xmit(), before skb_shinfo(skb)->nr_frags is sampled, because padding might linearize the skb. This ensures skb->len and skb_headlen(skb) reflect the padded size so that dma_map_single() maps the full buffer and the descriptor length is consistent. This also removes the temporary 'pad' variable and masking logic. The padding is done after the SW USO branch, otherwise bnxt_sw_udp_gso_xmit() would account the padding as UDP payload and send it in extra segments. Note that SW USO segments are still not padded: with IPv4, a segment carrying less than 10 bytes of UDP payload (small gso_size, or a short last segment) is sent as a frame shorter than BNXT_MIN_PKT_SIZE. This is a separate issue, left for a followup patch. Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.") Cc: stable@vger.kernel.org Reported-by: Stefan Fleischmann <sfle@kth.se> Closes: https://lore.kernel.org/netdev/20261004122616.56714cbd@nargothrond/ Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Michael Chan <michael.chan@broadcom.com> Link: https://patch.msgid.link/20261007051747.455273-1-edumazet@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07bnxt_en: Re-write the BARs following any type of PCIe errorsPavan Chebbi
Currently the driver zeroes the BARs only when fatal PCIe errors are reported so that pci_restore_state() restores it. However firmware handles both fatal and non-fatal errors the same way when it sees the slot reset resulting from the PCI_ERS_RESULT_NEED_RESET return code from the driver. This means that we must re-write the BARs post recovery even during non-fatal errors. Otherwise we will see that every MMIO access returns all-ones and the firmware appears dead. Zero-out the BARs during PCIe error recovery regardless of type of PCIe error, and make the wait after the hot reset unconditional. Disable memory decode and bus mastering before rewriting the BARs so the device doesn't decode a half-updated address, bailing out if config space is still inaccessible. Defer pci_enable_device() until after the BAR rewrite and restore, so the device isn't re-enabled while its BARs are still being rewritten, then re-enable the device and re-assert bus mastering. Guard the same Command register cleanup on the re-enable failure path against an inaccessible device. Skip re-enabling the device in bnxt_io_slot_reset() if it is already enabled, so enable_cnt does not go unbalanced. A concurrent bnxt_fw_reset_task() can also be re-enabling the same device in its ENABLE_DEV state, so guard that call the same way. Fixes: f75d9a0aa967 ("bnxt_en: Re-write PCI BARs after PCI fatal error.") Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Reviewed-by: Scott Branden <scott.branden@broadcom.com> Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://patch.msgid.link/20261005204246.3822563-4-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07bnxt_en: Fix driver init in kdump kernelMichael Chan
Fix and strengthen the FLR sequence when initializing in the kdump kernel. If the NIC is behind a PCIe switch in synthetic (smart) mode, the switch may need to see that the BARs have been initialized before it will pass mem read/write TLPs to the NIC. On a Dell system with a PEX89144 PCIe switch, echo c > /proc/sysrq-trigger will trigger fatal AER without this patch: bnxt_en 0000:67:00.0: enabling device (0000 -> 0002) [Hardware Error]: Hardware error from APEI Generic Hardware Error Source: 5 [Hardware Error]: event severity: recoverable [Hardware Error]: Error 0, type: fatal [Hardware Error]: section_type: PCIe error [Hardware Error]: port_type: 5, upstream switch port ... Add a new bnxt_kdump_reset() to do the expanded FLR sequence in the kdump kernel. We now disable bus master and memory, save the PCI state, do the FLR, clear the BARs, and restore the PCI state. The BARs have to be cleared to ensure that they get re-initialized and visible to the PCIe switch. Since it is the kdump kernel, we make every effort to continue in the best possible way even if pci_save_state() or pcie_flr() returns error. After FLR, we poll for an additional 5 seconds before aborting in case the device is not properly returning CRS. This is similar to the 5-second wait in bnxt_io_slot_reset(). Fixes: 8743db4a9acf ("bnxt_en: Issue PCIe FLR in kdump kernel to cleanup pending DMAs.") Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://patch.msgid.link/20261005204246.3822563-3-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-07bnxt_en: Add bnxt_clear_bars() helperMichael Chan
In bnxt_io_slot_reset(), we clear the 6 BAR registers. Add a helper function to do that. The helper will be used again in the next patch. Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com> Reviewed-by: Joe Damato <joe@dama.to> Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://patch.msgid.link/20261005204246.3822563-2-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>