* [PATCH net v2 1/4] net: sb1250-mac: Add ethtool link settings support
2026-11-10 23:02 [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates Florian Fainelli
@ 2026-11-10 23:02 ` Florian Fainelli
2026-11-10 23:02 ` [PATCH net v2 2/4] net: sb1250-mac: Advertise and honor RX checksum offload Florian Fainelli
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2026-11-10 23:02 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, Maciej W. Rozycki, Daniel Machon, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
open list
The driver connects to its PHY through phylib, but does not provide
ethtool operations. As a result, ethtool cannot report or configure the
link settings.
Use the phylib get_link_ksettings and set_link_ksettings helpers, and
provide ethtool_op_get_link for carrier reporting. The helpers return
-ENODEV when the PHY is not attached, as the driver attaches it when
the interface is opened and disconnects it when the interface is closed.
Acked-by: Maciej W. Rozycki <macro@orcam.me.uk>
Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/ethernet/broadcom/sb1250-mac.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/net/ethernet/broadcom/sb1250-mac.c b/drivers/net/ethernet/broadcom/sb1250-mac.c
index c839dd9804d3..1843b52e96f5 100644
--- a/drivers/net/ethernet/broadcom/sb1250-mac.c
+++ b/drivers/net/ethernet/broadcom/sb1250-mac.c
@@ -2128,6 +2128,12 @@ static void sbmac_setmulti(struct sbmac_softc *sc)
}
}
+static const struct ethtool_ops sbmac_ethtool_ops = {
+ .get_link = ethtool_op_get_link,
+ .get_link_ksettings = phy_ethtool_get_link_ksettings,
+ .set_link_ksettings = phy_ethtool_set_link_ksettings,
+};
+
static const struct net_device_ops sbmac_netdev_ops = {
.ndo_open = sbmac_open,
.ndo_stop = sbmac_close,
@@ -2197,6 +2203,7 @@ static int sbmac_init(struct platform_device *pldev, long long base)
spin_lock_init(&(sc->sbm_lock));
dev->netdev_ops = &sbmac_netdev_ops;
+ dev->ethtool_ops = &sbmac_ethtool_ops;
dev->watchdog_timeo = TX_TIMEOUT;
dev->min_mtu = 0;
dev->max_mtu = ENET_PACKET_SIZE;
--
2.53.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH net v2 2/4] net: sb1250-mac: Advertise and honor RX checksum offload
2026-11-10 23:02 [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates Florian Fainelli
2026-11-10 23:02 ` [PATCH net v2 1/4] net: sb1250-mac: Add ethtool link settings support Florian Fainelli
@ 2026-11-10 23:02 ` Florian Fainelli
2026-11-10 23:02 ` [PATCH net v2 3/4] net: sb1250-mac: Add ethtool autonegotiation restart support Florian Fainelli
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2026-11-10 23:02 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, Maciej W. Rozycki, Daniel Machon, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
open list
The driver already trusts hardware RX checksum status on supported
chip revisions, but does not advertise NETIF_F_RXCSUM. Consequently,
ethtool does not report the offload or allow it to be disabled.
Advertise RX checksum offload in hw_features and enable it by default
when the existing hardware revision check reports support. Test the
active feature bit in the receive path before marking a packet as
CHECKSUM_UNNECESSARY, so disabling RX checksum offload restores software
verification. Hardware can continue computing checksums while their
results are ignored.
BCM1250 pass 1 does not support the offload and retains the existing
software checksum behavior.
Acked-by: Maciej W. Rozycki <macro@orcam.me.uk>
Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/ethernet/broadcom/sb1250-mac.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/sb1250-mac.c b/drivers/net/ethernet/broadcom/sb1250-mac.c
index 1843b52e96f5..546415d3134c 100644
--- a/drivers/net/ethernet/broadcom/sb1250-mac.c
+++ b/drivers/net/ethernet/broadcom/sb1250-mac.c
@@ -1142,8 +1142,8 @@ static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d,
* the kernel
*/
sb->protocol = eth_type_trans(sb,d->sbdma_eth->sbm_dev);
- /* Check hw IPv4/TCP checksum if supported */
- if (sc->rx_hw_checksum == ENABLE) {
+ /* Honor the RX checksum offload feature setting. */
+ if (dev->features & NETIF_F_RXCSUM) {
if (!((dsc->dscr_a) & M_DMA_ETHRX_BADIP4CS) &&
!((dsc->dscr_a) & M_DMA_ETHRX_BADTCPCS)) {
sb->ip_summed = CHECKSUM_UNNECESSARY;
@@ -2214,6 +2214,10 @@ static int sbmac_init(struct platform_device *pldev, long long base)
/* This is needed for PASS2 for Rx H/W checksum feature */
sbmac_set_iphdr_offset(sc);
+ if (sc->rx_hw_checksum == ENABLE) {
+ dev->hw_features |= NETIF_F_RXCSUM;
+ dev->features |= NETIF_F_RXCSUM;
+ }
sc->mii_bus = mdiobus_alloc();
if (sc->mii_bus == NULL) {
--
2.53.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH net v2 3/4] net: sb1250-mac: Add ethtool autonegotiation restart support
2026-11-10 23:02 [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates Florian Fainelli
2026-11-10 23:02 ` [PATCH net v2 1/4] net: sb1250-mac: Add ethtool link settings support Florian Fainelli
2026-11-10 23:02 ` [PATCH net v2 2/4] net: sb1250-mac: Advertise and honor RX checksum offload Florian Fainelli
@ 2026-11-10 23:02 ` Florian Fainelli
2026-11-10 23:03 ` [PATCH net v2 4/4] net: sb1250-mac: Fix RX checksum status and header offset setup Florian Fainelli
2026-11-10 23:52 ` [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates netdev-bot+sinfo
4 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2026-11-10 23:02 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, Maciej W. Rozycki, Daniel Machon, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
open list
Wire up the nway_reset callback to phy_ethtool_nway_reset() so that
ethtool -r can restart PHY autonegotiation. The phylib helper handles
PHY locking and returns -ENODEV when the interface has no attached PHY.
Acked-by: Maciej W. Rozycki <macro@orcam.me.uk>
Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/ethernet/broadcom/sb1250-mac.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/broadcom/sb1250-mac.c b/drivers/net/ethernet/broadcom/sb1250-mac.c
index 546415d3134c..433aa1e24439 100644
--- a/drivers/net/ethernet/broadcom/sb1250-mac.c
+++ b/drivers/net/ethernet/broadcom/sb1250-mac.c
@@ -2129,6 +2129,7 @@ static void sbmac_setmulti(struct sbmac_softc *sc)
}
static const struct ethtool_ops sbmac_ethtool_ops = {
+ .nway_reset = phy_ethtool_nway_reset,
.get_link = ethtool_op_get_link,
.get_link_ksettings = phy_ethtool_get_link_ksettings,
.set_link_ksettings = phy_ethtool_set_link_ksettings,
--
2.53.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH net v2 4/4] net: sb1250-mac: Fix RX checksum status and header offset setup
2026-11-10 23:02 [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates Florian Fainelli
` (2 preceding siblings ...)
2026-11-10 23:02 ` [PATCH net v2 3/4] net: sb1250-mac: Add ethtool autonegotiation restart support Florian Fainelli
@ 2026-11-10 23:03 ` Florian Fainelli
2026-11-10 23:52 ` [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates netdev-bot+sinfo
4 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2026-11-10 23:03 UTC (permalink / raw)
To: netdev
Cc: Florian Fainelli, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Maciej W. Rozycki, Daniel Machon,
open list
The receive path tests M_DMA_ETHRX_BADTCPCS in descriptor A, but the
hardware reports it in descriptor B. Bit zero of descriptor A belongs
to the buffer address and is clear for the aligned receive buffers.
Consequently, a frame with a valid IPv4 checksum and a bad TCP checksum
can be marked CHECKSUM_UNNECESSARY. Read the TCP status from descriptor B.
The IP header offset setup also only masks the old register value due
to the combined AND/OR expression. Split the mask and field assignment
so that the intended offset of 15 is actually programmed.
Channel startup clears the receive filter register, losing any offset
set during probe. Program it again before enabling reception on every
channel start, including link changes, and preserve it when enabling
unicast and broadcast reception.
Both bugs predate the RX checksum feature advertisement. Sashiko AI
reported them during review of that change.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/ethernet/broadcom/sb1250-mac.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/sb1250-mac.c b/drivers/net/ethernet/broadcom/sb1250-mac.c
index 433aa1e24439..7998ab9fc46c 100644
--- a/drivers/net/ethernet/broadcom/sb1250-mac.c
+++ b/drivers/net/ethernet/broadcom/sb1250-mac.c
@@ -280,6 +280,7 @@ static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d,
int poll);
static int sbmac_initctx(struct sbmac_softc *s);
static void sbmac_channel_start(struct sbmac_softc *s);
+static void sbmac_set_iphdr_offset(struct sbmac_softc *sc);
static void sbmac_channel_stop(struct sbmac_softc *s);
static enum sbmac_state sbmac_set_channel_state(struct sbmac_softc *,
enum sbmac_state);
@@ -1145,7 +1146,7 @@ static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d,
/* Honor the RX checksum offload feature setting. */
if (dev->features & NETIF_F_RXCSUM) {
if (!((dsc->dscr_a) & M_DMA_ETHRX_BADIP4CS) &&
- !((dsc->dscr_a) & M_DMA_ETHRX_BADTCPCS)) {
+ !((dsc->dscr_b) & M_DMA_ETHRX_BADTCPCS)) {
sb->ip_summed = CHECKSUM_UNNECESSARY;
/* don't need to set sb->csum */
} else {
@@ -1496,6 +1497,7 @@ static void sbmac_channel_start(struct sbmac_softc *s)
*/
__raw_writeq(0, s->sbm_rxfilter);
+ sbmac_set_iphdr_offset(s);
__raw_writeq(0, s->sbm_imr);
__raw_writeq(framecfg, s->sbm_framecfg);
__raw_writeq(fifo, s->sbm_fifocfg);
@@ -1549,7 +1551,9 @@ static void sbmac_channel_start(struct sbmac_softc *s)
* Enable receiving unicasts and broadcasts
*/
- __raw_writeq(M_MAC_UCAST_EN | M_MAC_BCAST_EN, s->sbm_rxfilter);
+ reg = __raw_readq(s->sbm_rxfilter);
+ reg |= M_MAC_UCAST_EN | M_MAC_BCAST_EN;
+ __raw_writeq(reg, s->sbm_rxfilter);
/*
* we're running now.
@@ -1717,7 +1721,8 @@ static void sbmac_set_iphdr_offset(struct sbmac_softc *sc)
/* Hard code the off set to 15 for now */
reg = __raw_readq(sc->sbm_rxfilter);
- reg &= ~M_MAC_IPHDR_OFFSET | V_MAC_IPHDR_OFFSET(15);
+ reg &= ~M_MAC_IPHDR_OFFSET;
+ reg |= V_MAC_IPHDR_OFFSET(15);
__raw_writeq(reg, sc->sbm_rxfilter);
/* BCM1250 pass1 didn't have hardware checksum. Everything
--
2.53.0
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates
2026-11-10 23:02 [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates Florian Fainelli
` (3 preceding siblings ...)
2026-11-10 23:03 ` [PATCH net v2 4/4] net: sb1250-mac: Fix RX checksum status and header offset setup Florian Fainelli
@ 2026-11-10 23:52 ` netdev-bot+sinfo
2026-11-10 23:54 ` Florian Fainelli
4 siblings, 1 reply; 7+ messages in thread
From: netdev-bot+sinfo @ 2026-11-10 23:52 UTC (permalink / raw)
To: Florian Fainelli
Cc: netdev, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Maciej W. Rozycki, Daniel Machon,
linux-kernel
Hi!
This is an automated message. This series looks like a fix, but its
commit messages seem to be missing some information:
- Whether the issue was actually triggered, or is only theoretical
(e.g. found by LLM and not proven at runtime). If it was triggered
please include the symptoms, like the stack trace or kernel messages.
- What hardware the change was tested on. For driver fixes please
mention the device (and if relevant firmware version) used for
testing, or say that the change was not tested on real hardware.
Please do not repost the series just to address the above. Instead,
reply to this email with the missing information, so that reviewers
can take it into account. If the series needs another revision for
other reasons, please include the information in the commit messages
then.
The evaluation is done by an LLM so it may be wrong, if you think
that is the case please reply and explain.
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates
2026-11-10 23:52 ` [PATCH net v2 0/4] net: sb1250-mac: ethtool link updates netdev-bot+sinfo
@ 2026-11-10 23:54 ` Florian Fainelli
0 siblings, 0 replies; 7+ messages in thread
From: Florian Fainelli @ 2026-11-10 23:54 UTC (permalink / raw)
To: netdev-bot+sinfo
Cc: netdev, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Maciej W. Rozycki, Daniel Machon,
linux-kernel
On 11/10/26 15:52, netdev-bot+sinfo@kernel.org wrote:
> Hi!
>
> This is an automated message. This series looks like a fix, but its
> commit messages seem to be missing some information:
>
> - Whether the issue was actually triggered, or is only theoretical
> (e.g. found by LLM and not proven at runtime). If it was triggered
> please include the symptoms, like the stack trace or kernel messages.
These issues were all triggered by running ethool and not obtaining what
was expected: link information, checksum offload indication, auto
negotiation restart.
>
> - What hardware the change was tested on. For driver fixes please
> mention the device (and if relevant firmware version) used for
> testing, or say that the change was not tested on real hardware.
This was tested on a BCM91250E (Sentosa) reference board.
--
Florian
^ permalink raw reply [flat|nested] 7+ messages in thread