[PATCH net-next v7 09/14] net: lan966x: add shutdown callback to stop the FDMA on reboot
Simon Horman
horms at kernel.org
Wed Sep 23 02:02:10 PDT 2026
On Fri, Sep 18, 2026 at 01:34:01PM +0200, Daniel Machon wrote:
> As a PCIe endpoint, lan966x is not reset by a host reboot: its FDMA
> channels and interrupt sources stay armed, and the OIC ORs every
> source into the shared PCIe INTx, asserted before the driver has
> re-probed. A still-active channel also keeps write access to host
> memory the next kernel will reuse.
>
> Add a shutdown callback that:
> - frees the ana, xtr and FDMA irqs, masking and unmapping them at
> the OIC (disable_irq() would leave both set - the OIC has no
> irq_disable())
> - masks the analyzer source, armed unconditionally by lan966x_init()
> and re-armed by the MAC table's age timer
> - stops and detaches the netdevs, draining in-flight xmit and
> clearing netif_device_present() so ndo_open/ndo_change_mtu cannot
> re-enter the FDMA against a disabled NAPI
> - disables both FDMA channels and masks their interrupts
> - unmaps the outbound ATU windows, leaving none armed
>
> NAPI is skipped when fdma_ndev is unset (a probed switch with no
> usable port never adds one), and XDP attach cannot re-enter either,
> since lan966x_xdp_setup() returns early on PCIe before touching the
> FDMA.
>
> Only the PCIe instantiation needs this - the SoC one resets with the
> chip - so the callback returns early on a platform device; the check
> is at runtime since .shutdown belongs to the driver, and a
> PCIe-enabled kernel binds both.
>
> FDMA_INTR_ENA persists across a warm reboot, so also restore the
> full enable in lan966x_fdma_rx_start(), run after both rings are
> allocated, re-arming both backends from one site.
>
> Tested-by: Herve Codina <herve.codina at bootlin.com>
> Signed-off-by: Daniel Machon <daniel.machon at microchip.com>
Reviewed-by: Simon Horman <horms at kernel.org>
More information about the linux-arm-kernel
mailing list