Thread (9 messages) 9 messages, 2 authors, 2d ago

Re: [PATCH net-next v19 4/6] net: dsa: mxl862xx: add devlink flash_update and info_get

From: Andrew Lunn <andrew@lunn.ch>
Date: 2026-10-04 14:44:13
Also in: driver-core, linux-doc, lkml

On Sat, Oct 03, 2026 at 04:52:37PM +0100, Daniel Golle wrote:
Implement "devlink dev flash" for firmware upgrade and "devlink dev
info" for version reporting. info reports the chip part number and
revision as the asic.id and asic.rev fixed versions, and the firmware
version as both the running and the stored version, since the switch
boots its firmware from its own flash; a zero part number or an all-zero
version is omitted rather than published as a bogus match for userspace.

flash validates the image and its payload CRCs, reboots the switch into
its MCUboot loader with SYS_MISC_FW_UPDATE, transfers the image over the
SB PDI clause-22 SMDIO protocol, and reboots into the new firmware once
the loader has verified it. For the duration the driver closes and
detaches the user ports so userspace cannot reopen them, closes the
conduit, and blocks firmware API access under the MDIO bus lock so
nothing reaches the bus after the switch has left for MCUboot. A blocked
write reports success, so a bridge tearing its ports down over a flash
does not see port_vlan_del() fail and leak its VLAN group. A transfer
that fails leaves the switch in the loader; the next patch recovers it
from there.

MCUboot offers no in-place path back, so the driver reinitialises with a
deferred re-probe scheduled through device_schedule_reprobe() from the
previous patch, which runs in the driver core off the devlink caller's
locks and without pinning the driver module. ->shutdown() and
.remove() take the devlink instance lock up front, since neither goes
through devlink and dsa_unregister_switch() frees the user netdevs
before devlink_unregister() would: this waits out a transfer in flight,
for as long as the transfer's own timeouts allow, rather than cutting
it in half, and refuses a flash that starts once teardown has begun. A
flash is refused as well until the DSA tree has finished its setup,
since devlink registers the switch before the core creates the user
ports.

Assisted-by: LLM
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help