* [PATCH] net: sunhme: Fix sbus regression
@ 2026-02-05 16:09 René Rebe
2026-02-06 1:41 ` Sean Anderson
2026-02-10 12:10 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 6+ messages in thread
From: René Rebe @ 2026-02-05 16:09 UTC (permalink / raw)
To: Sean Anderson; +Cc: Andrew Lunn, David S. Miller, netdev
Commit cc216e4b44ce ("net: sunhme: Switch SBUS to devres") changed
explicit sized of_ioremap with BMAC_REG_SIZEs to
devm_platform_ioremap_resource mapping all the resource. However,
this does not work on my Sun Ultra 2 with SBUS HMEs:
hme f0072f38: error -EBUSY: can't request region for resource [mem 0x1ffe8c07000-0x1ffe8c0701f]
hme f0072f38: Cannot map TCVR registers.
hme f0072f38: probe with driver hme failed with error -16
hme f007ab44: error -EBUSY: can't request region for resource [mem 0x1ff28c07000-0x1ff28c0701f]
hme f007ab44: Cannot map TCVR registers.
hme f007ab44: probe with driver hme failed with error -16
Turns out the open-firmware resources overlap, at least on this
machines and PROM version:
hexdump /proc/device-tree/sbus@1f,0/SUNW,hme@2,8c00000/reg:
00 00 00 02 08 c0 00 00 00 00 01 08
00 00 00 02 08 c0 20 00 00 00 20 00
00 00 00 02 08 c0 40 00 00 00 20 00
00 00 00 02 08 c0 60 00 00 00 20 00
00 00 00 02 08 c0 70 00 00 00 00 20
And the driver previously explicitly mapped way smaller mmio regions:
/proc/iomem:
1ff28c00000-1ff28c00107 : HME Global Regs
1ff28c02000-1ff28c02033 : HME TX Regs
1ff28c04000-1ff28c0401f : HME RX Regs
1ff28c06000-1ff28c0635f : HME BIGMAC Regs
1ff28c07000-1ff28c0701f : HME Tranceiver Regs
Quirk this specific issue by truncating the previous resource to not
overlap into the TCVR registers.
Fixes: cc216e4b44ce ("net: sunhme: Switch SBUS to devres")
Signed-off-by: René Rebe <rene@exactco.de>
---
Tested on Sun Ultra 2 running T2/Linux.
Alternatively we could explicitly size all regions, or check overlap
in startup code (I also already have a patch for that, too).
---
--- linux-6.18/drivers/net/ethernet/sun/sunhme.c.vanilla 2026-02-05 11:50:33.288906134 +0100
+++ linux-6.18/drivers/net/ethernet/sun/sunhme.c 2026-02-05 11:55:22.541384377 +0100
@@ -2551,6 +2551,9 @@
goto err_out_clear_quattro;
}
+ /* BIGMAC may have bogus sizes */
+ if ((op->resource[3].end - op->resource[3].start) >= BMAC_REG_SIZE)
+ op->resource[3].end = op->resource[3].start + BMAC_REG_SIZE - 1;
hp->bigmacregs = devm_platform_ioremap_resource(op, 3);
if (IS_ERR(hp->bigmacregs)) {
dev_err(&op->dev, "Cannot map BIGMAC registers.\n");
--
René Rebe, ExactCODE GmbH, Berlin, Germany
https://exactco.de • https://t2linux.com • https://patreon.com/renerebe
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] net: sunhme: Fix sbus regression 2026-02-05 16:09 [PATCH] net: sunhme: Fix sbus regression René Rebe @ 2026-02-06 1:41 ` Sean Anderson 2026-02-06 9:05 ` René Rebe 2026-02-10 12:10 ` patchwork-bot+netdevbpf 1 sibling, 1 reply; 6+ messages in thread From: Sean Anderson @ 2026-02-06 1:41 UTC (permalink / raw) To: René Rebe; +Cc: Andrew Lunn, David S. Miller, netdev On 2/5/26 11:09, René Rebe wrote: > Commit cc216e4b44ce ("net: sunhme: Switch SBUS to devres") changed > explicit sized of_ioremap with BMAC_REG_SIZEs to > devm_platform_ioremap_resource mapping all the resource. However, > this does not work on my Sun Ultra 2 with SBUS HMEs: > > hme f0072f38: error -EBUSY: can't request region for resource [mem 0x1ffe8c07000-0x1ffe8c0701f] > hme f0072f38: Cannot map TCVR registers. > hme f0072f38: probe with driver hme failed with error -16 > hme f007ab44: error -EBUSY: can't request region for resource [mem 0x1ff28c07000-0x1ff28c0701f] > hme f007ab44: Cannot map TCVR registers. > hme f007ab44: probe with driver hme failed with error -16 > > Turns out the open-firmware resources overlap, at least on this > machines and PROM version: > > hexdump /proc/device-tree/sbus@1f,0/SUNW,hme@2,8c00000/reg: > 00 00 00 02 08 c0 00 00 00 00 01 08 > 00 00 00 02 08 c0 20 00 00 00 20 00 > 00 00 00 02 08 c0 40 00 00 00 20 00 > 00 00 00 02 08 c0 60 00 00 00 20 00 > 00 00 00 02 08 c0 70 00 00 00 00 20 > > And the driver previously explicitly mapped way smaller mmio regions: > > /proc/iomem: > 1ff28c00000-1ff28c00107 : HME Global Regs > 1ff28c02000-1ff28c02033 : HME TX Regs > 1ff28c04000-1ff28c0401f : HME RX Regs > 1ff28c06000-1ff28c0635f : HME BIGMAC Regs > 1ff28c07000-1ff28c0701f : HME Tranceiver Regs > > Quirk this specific issue by truncating the previous resource to not > overlap into the TCVR registers. > > Fixes: cc216e4b44ce ("net: sunhme: Switch SBUS to devres") > Signed-off-by: René Rebe <rene@exactco.de> > --- > Tested on Sun Ultra 2 running T2/Linux. > Alternatively we could explicitly size all regions, or check overlap > in startup code (I also already have a patch for that, too). What does this look like? > --- > > --- linux-6.18/drivers/net/ethernet/sun/sunhme.c.vanilla 2026-02-05 11:50:33.288906134 +0100 > +++ linux-6.18/drivers/net/ethernet/sun/sunhme.c 2026-02-05 11:55:22.541384377 +0100 > @@ -2551,6 +2551,9 @@ > goto err_out_clear_quattro; > } > > + /* BIGMAC may have bogus sizes */ > + if ((op->resource[3].end - op->resource[3].start) >= BMAC_REG_SIZE) > + op->resource[3].end = op->resource[3].start + BMAC_REG_SIZE - 1; > hp->bigmacregs = devm_platform_ioremap_resource(op, 3); > if (IS_ERR(hp->bigmacregs)) { > dev_err(&op->dev, "Cannot map BIGMAC registers.\n"); > Reviewed-by: Sean Anderson <seanga2@gmail.com> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] net: sunhme: Fix sbus regression 2026-02-06 1:41 ` Sean Anderson @ 2026-02-06 9:05 ` René Rebe 2026-02-06 14:49 ` Sean Anderson 0 siblings, 1 reply; 6+ messages in thread From: René Rebe @ 2026-02-06 9:05 UTC (permalink / raw) To: seanga2; +Cc: andrew+netdev, davem, netdev On Thu, 5 Feb 2026 20:41:11 -0500, Sean Anderson <seanga2@gmail.com> wrote: > On 2/5/26 11:09, René Rebe wrote: > > Commit cc216e4b44ce ("net: sunhme: Switch SBUS to devres") changed > > explicit sized of_ioremap with BMAC_REG_SIZEs to > > devm_platform_ioremap_resource mapping all the resource. However, > > this does not work on my Sun Ultra 2 with SBUS HMEs: > > hme f0072f38: error -EBUSY: can't request region for resource [mem > > 0x1ffe8c07000-0x1ffe8c0701f] > > hme f0072f38: Cannot map TCVR registers. > > hme f0072f38: probe with driver hme failed with error -16 > > hme f007ab44: error -EBUSY: can't request region for resource [mem > > 0x1ff28c07000-0x1ff28c0701f] > > hme f007ab44: Cannot map TCVR registers. > > hme f007ab44: probe with driver hme failed with error -16 > > Turns out the open-firmware resources overlap, at least on this > > machines and PROM version: > > hexdump /proc/device-tree/sbus@1f,0/SUNW,hme@2,8c00000/reg: > > 00 00 00 02 08 c0 00 00 00 00 01 08 > > 00 00 00 02 08 c0 20 00 00 00 20 00 > > 00 00 00 02 08 c0 40 00 00 00 20 00 > > 00 00 00 02 08 c0 60 00 00 00 20 00 > > 00 00 00 02 08 c0 70 00 00 00 00 20 > > And the driver previously explicitly mapped way smaller mmio regions: > > /proc/iomem: > > 1ff28c00000-1ff28c00107 : HME Global Regs > > 1ff28c02000-1ff28c02033 : HME TX Regs > > 1ff28c04000-1ff28c0401f : HME RX Regs > > 1ff28c06000-1ff28c0635f : HME BIGMAC Regs > > 1ff28c07000-1ff28c0701f : HME Tranceiver Regs > > Quirk this specific issue by truncating the previous resource to not > > overlap into the TCVR registers. > > Fixes: cc216e4b44ce ("net: sunhme: Switch SBUS to devres") > > Signed-off-by: René Rebe <rene@exactco.de> > > --- > > Tested on Sun Ultra 2 running T2/Linux. > > Alternatively we could explicitly size all regions, or check overlap > > in startup code (I also already have a patch for that, too). > > What does this look like? This only checks for "sorted" overlaps w/ the previous res, but given they probably usually are and it catches this case, ... The downside is, it may break other devices, I only test booted this on an Ultra 2 and Ultra 30. On the U2 it fixes the hme ethernet, too. On the U30 it causes an eprom region to be truncated. I probably should investiage that and test boot on all my SPARC systems before we consider this. That's why I sent the trivial hme driver hotfix first. Alternatively we could also overwrite all sbus res in the hme driver with the previously used known good sizes. I can send a patch for that, too if you like: diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c index f53092b07b9e..8bd405cbc04f 100644 --- a/arch/sparc/kernel/of_device_64.c +++ b/arch/sparc/kernel/of_device_64.c @@ -412,6 +412,15 @@ static void __init build_device_resources(struct platform_device *op, r->start = result; r->end = result + size - 1; r->flags = flags; + + /* check for and correct simple bogusly overlapping resources */ + if (index > 0 && + op->resource[index-1].start <= r->end && + op->resource[index-1].end > r->start) { + printk(KERN_WARNING "%pOF: prev regs overlap (%x), limiting %x.\n", + op->dev.of_node, op->resource[index-1].end, r->start - 1); + op->resource[index-1].end = r->start - 1; + } } r->name = op->dev.of_node->full_name; } > > --- > > --- linux-6.18/drivers/net/ethernet/sun/sunhme.c.vanilla 2026-02-05 > > --- 11:50:33.288906134 +0100 > > +++ linux-6.18/drivers/net/ethernet/sun/sunhme.c 2026-02-05 > > 11:55:22.541384377 +0100 > > @@ -2551,6 +2551,9 @@ > > goto err_out_clear_quattro; > > } > > + /* BIGMAC may have bogus sizes */ > > + if ((op->resource[3].end - op->resource[3].start) >= BMAC_REG_SIZE) > > + op->resource[3].end = op->resource[3].start + BMAC_REG_SIZE - 1; > > hp->bigmacregs = devm_platform_ioremap_resource(op, 3); > > if (IS_ERR(hp->bigmacregs)) { > > dev_err(&op->dev, "Cannot map BIGMAC registers.\n"); > > > > Reviewed-by: Sean Anderson <seanga2@gmail.com> -- René Rebe, ExactCODE GmbH, Berlin, Germany https://exactco.de • https://t2linux.com • https://patreon.com/renerebe ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] net: sunhme: Fix sbus regression 2026-02-06 9:05 ` René Rebe @ 2026-02-06 14:49 ` Sean Anderson 2026-02-10 11:57 ` Paolo Abeni 0 siblings, 1 reply; 6+ messages in thread From: Sean Anderson @ 2026-02-06 14:49 UTC (permalink / raw) To: René Rebe, David S. Miller, Andreas Larsson, sparclinux Cc: andrew+netdev, davem, netdev On 2/6/26 04:05, René Rebe wrote: > On Thu, 5 Feb 2026 20:41:11 -0500, Sean Anderson <seanga2@gmail.com> wrote: > >> On 2/5/26 11:09, René Rebe wrote: >>> Commit cc216e4b44ce ("net: sunhme: Switch SBUS to devres") changed >>> explicit sized of_ioremap with BMAC_REG_SIZEs to >>> devm_platform_ioremap_resource mapping all the resource. However, >>> this does not work on my Sun Ultra 2 with SBUS HMEs: >>> hme f0072f38: error -EBUSY: can't request region for resource [mem >>> 0x1ffe8c07000-0x1ffe8c0701f] >>> hme f0072f38: Cannot map TCVR registers. >>> hme f0072f38: probe with driver hme failed with error -16 >>> hme f007ab44: error -EBUSY: can't request region for resource [mem >>> 0x1ff28c07000-0x1ff28c0701f] >>> hme f007ab44: Cannot map TCVR registers. >>> hme f007ab44: probe with driver hme failed with error -16 >>> Turns out the open-firmware resources overlap, at least on this >>> machines and PROM version: >>> hexdump /proc/device-tree/sbus@1f,0/SUNW,hme@2,8c00000/reg: >>> 00 00 00 02 08 c0 00 00 00 00 01 08 >>> 00 00 00 02 08 c0 20 00 00 00 20 00 >>> 00 00 00 02 08 c0 40 00 00 00 20 00 >>> 00 00 00 02 08 c0 60 00 00 00 20 00 >>> 00 00 00 02 08 c0 70 00 00 00 00 20 >>> And the driver previously explicitly mapped way smaller mmio regions: >>> /proc/iomem: >>> 1ff28c00000-1ff28c00107 : HME Global Regs >>> 1ff28c02000-1ff28c02033 : HME TX Regs >>> 1ff28c04000-1ff28c0401f : HME RX Regs >>> 1ff28c06000-1ff28c0635f : HME BIGMAC Regs >>> 1ff28c07000-1ff28c0701f : HME Tranceiver Regs >>> Quirk this specific issue by truncating the previous resource to not >>> overlap into the TCVR registers. >>> Fixes: cc216e4b44ce ("net: sunhme: Switch SBUS to devres") >>> Signed-off-by: René Rebe <rene@exactco.de> >>> --- >>> Tested on Sun Ultra 2 running T2/Linux. >>> Alternatively we could explicitly size all regions, or check overlap >>> in startup code (I also already have a patch for that, too). >> >> What does this look like? > > This only checks for "sorted" overlaps w/ the previous res, but given > they probably usually are and it catches this case, ... > > The downside is, it may break other devices, I only test booted this > on an Ultra 2 and Ultra 30. On the U2 it fixes the hme ethernet, > too. On the U30 it causes an eprom region to be truncated. I probably > should investiage that and test boot on all my SPARC systems before we > consider this. That's why I sent the trivial hme driver hotfix first. > Alternatively we could also overwrite all sbus res in the hme driver > with the previously used known good sizes. I can send a patch for > that, too if you like: I'm not really familiar enough with SPARC to say whether this is reasonable or not. I've added the SPARC maintainers to CC so maybe they can comment. > diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c > index f53092b07b9e..8bd405cbc04f 100644 > --- a/arch/sparc/kernel/of_device_64.c > +++ b/arch/sparc/kernel/of_device_64.c > @@ -412,6 +412,15 @@ static void __init build_device_resources(struct platform_device *op, > r->start = result; > r->end = result + size - 1; > r->flags = flags; > + > + /* check for and correct simple bogusly overlapping resources */ > + if (index > 0 && > + op->resource[index-1].start <= r->end && > + op->resource[index-1].end > r->start) { > + printk(KERN_WARNING "%pOF: prev regs overlap (%x), limiting %x.\n", > + op->dev.of_node, op->resource[index-1].end, r->start - 1); > + op->resource[index-1].end = r->start - 1; > + } > } > r->name = op->dev.of_node->full_name; > } > > >>> --- >>> --- linux-6.18/drivers/net/ethernet/sun/sunhme.c.vanilla 2026-02-05 >>> --- 11:50:33.288906134 +0100 >>> +++ linux-6.18/drivers/net/ethernet/sun/sunhme.c 2026-02-05 >>> 11:55:22.541384377 +0100 >>> @@ -2551,6 +2551,9 @@ >>> goto err_out_clear_quattro; >>> } >>> + /* BIGMAC may have bogus sizes */ >>> + if ((op->resource[3].end - op->resource[3].start) >= BMAC_REG_SIZE) >>> + op->resource[3].end = op->resource[3].start + BMAC_REG_SIZE - 1; >>> hp->bigmacregs = devm_platform_ioremap_resource(op, 3); >>> if (IS_ERR(hp->bigmacregs)) { >>> dev_err(&op->dev, "Cannot map BIGMAC registers.\n"); >>> >> >> Reviewed-by: Sean Anderson <seanga2@gmail.com> > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] net: sunhme: Fix sbus regression 2026-02-06 14:49 ` Sean Anderson @ 2026-02-10 11:57 ` Paolo Abeni 0 siblings, 0 replies; 6+ messages in thread From: Paolo Abeni @ 2026-02-10 11:57 UTC (permalink / raw) To: Sean Anderson, René Rebe, David S. Miller, Andreas Larsson, sparclinux Cc: andrew+netdev, netdev On 2/6/26 3:49 PM, Sean Anderson wrote: > On 2/6/26 04:05, René Rebe wrote: >> On Thu, 5 Feb 2026 20:41:11 -0500, Sean Anderson <seanga2@gmail.com> wrote: >> >>> On 2/5/26 11:09, René Rebe wrote: >>>> Commit cc216e4b44ce ("net: sunhme: Switch SBUS to devres") changed >>>> explicit sized of_ioremap with BMAC_REG_SIZEs to >>>> devm_platform_ioremap_resource mapping all the resource. However, >>>> this does not work on my Sun Ultra 2 with SBUS HMEs: >>>> hme f0072f38: error -EBUSY: can't request region for resource [mem >>>> 0x1ffe8c07000-0x1ffe8c0701f] >>>> hme f0072f38: Cannot map TCVR registers. >>>> hme f0072f38: probe with driver hme failed with error -16 >>>> hme f007ab44: error -EBUSY: can't request region for resource [mem >>>> 0x1ff28c07000-0x1ff28c0701f] >>>> hme f007ab44: Cannot map TCVR registers. >>>> hme f007ab44: probe with driver hme failed with error -16 >>>> Turns out the open-firmware resources overlap, at least on this >>>> machines and PROM version: >>>> hexdump /proc/device-tree/sbus@1f,0/SUNW,hme@2,8c00000/reg: >>>> 00 00 00 02 08 c0 00 00 00 00 01 08 >>>> 00 00 00 02 08 c0 20 00 00 00 20 00 >>>> 00 00 00 02 08 c0 40 00 00 00 20 00 >>>> 00 00 00 02 08 c0 60 00 00 00 20 00 >>>> 00 00 00 02 08 c0 70 00 00 00 00 20 >>>> And the driver previously explicitly mapped way smaller mmio regions: >>>> /proc/iomem: >>>> 1ff28c00000-1ff28c00107 : HME Global Regs >>>> 1ff28c02000-1ff28c02033 : HME TX Regs >>>> 1ff28c04000-1ff28c0401f : HME RX Regs >>>> 1ff28c06000-1ff28c0635f : HME BIGMAC Regs >>>> 1ff28c07000-1ff28c0701f : HME Tranceiver Regs >>>> Quirk this specific issue by truncating the previous resource to not >>>> overlap into the TCVR registers. >>>> Fixes: cc216e4b44ce ("net: sunhme: Switch SBUS to devres") >>>> Signed-off-by: René Rebe <rene@exactco.de> >>>> --- >>>> Tested on Sun Ultra 2 running T2/Linux. >>>> Alternatively we could explicitly size all regions, or check overlap >>>> in startup code (I also already have a patch for that, too). >>> >>> What does this look like? >> >> This only checks for "sorted" overlaps w/ the previous res, but given >> they probably usually are and it catches this case, ... >> >> The downside is, it may break other devices, I only test booted this >> on an Ultra 2 and Ultra 30. On the U2 it fixes the hme ethernet, >> too. On the U30 it causes an eprom region to be truncated. I probably >> should investiage that and test boot on all my SPARC systems before we >> consider this. That's why I sent the trivial hme driver hotfix first. >> Alternatively we could also overwrite all sbus res in the hme driver >> with the previously used known good sizes. I can send a patch for >> that, too if you like: > > I'm not really familiar enough with SPARC to say whether this is reasonable > or not. I've added the SPARC maintainers to CC so maybe they can comment. FTR, I think we are better off applying this patch as quick fix and eventually follow-up with the more complete/less trivial solution. /P ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] net: sunhme: Fix sbus regression 2026-02-05 16:09 [PATCH] net: sunhme: Fix sbus regression René Rebe 2026-02-06 1:41 ` Sean Anderson @ 2026-02-10 12:10 ` patchwork-bot+netdevbpf 1 sibling, 0 replies; 6+ messages in thread From: patchwork-bot+netdevbpf @ 2026-02-10 12:10 UTC (permalink / raw) To: =?utf-8?q?Ren=C3=A9_Rebe_=3Crene=40exactco=2Ede=3E?= Cc: seanga2, andrew+netdev, davem, netdev Hello: This patch was applied to netdev/net.git (main) by Paolo Abeni <pabeni@redhat.com>: On Thu, 05 Feb 2026 17:09:59 +0100 (CET) you wrote: > Commit cc216e4b44ce ("net: sunhme: Switch SBUS to devres") changed > explicit sized of_ioremap with BMAC_REG_SIZEs to > devm_platform_ioremap_resource mapping all the resource. However, > this does not work on my Sun Ultra 2 with SBUS HMEs: > > hme f0072f38: error -EBUSY: can't request region for resource [mem 0x1ffe8c07000-0x1ffe8c0701f] > hme f0072f38: Cannot map TCVR registers. > hme f0072f38: probe with driver hme failed with error -16 > hme f007ab44: error -EBUSY: can't request region for resource [mem 0x1ff28c07000-0x1ff28c0701f] > hme f007ab44: Cannot map TCVR registers. > hme f007ab44: probe with driver hme failed with error -16 > > [...] Here is the summary with links: - net: sunhme: Fix sbus regression https://git.kernel.org/netdev/net/c/8c5d17834ec1 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-02-10 12:10 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-02-05 16:09 [PATCH] net: sunhme: Fix sbus regression René Rebe 2026-02-06 1:41 ` Sean Anderson 2026-02-06 9:05 ` René Rebe 2026-02-06 14:49 ` Sean Anderson 2026-02-10 11:57 ` Paolo Abeni 2026-02-10 12:10 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox