[PATCH 0/7] sparc64: add Fujitsu M3000 support

From: Magnus Lindholm

Date: Fri Oct 02 2026 - 12:16:20 EST


Several years ago I salvaged an M3000 SPARC Enterprise box being
decommissioned at work. The box has been sitting ever since, it did
not run Linux. It did not seem impossible to get Linux running but
my earlier attempts failed. I recently found some documentation;
"SPARC JPS2: Common Specification" and the "Fujitsu SPARC64 II
Extensions", which gave me some of the missingpieces.
Getting this up and running required extensive testing, some
kernel instrumentation, debug printouts and many reboot iterations.
For thisi, Codex proved very helpful. Along the way, I stumbled upon
some generic sparc and driver bugs that this series addresses as well.

This series adds support for the Fujitsu SPARC Enterprise M3000, with
SPARC64 VII+, Oberon PCIe, BCM5718 networking and a firmware hvc console.
It applies to Linux v7.3-rc1, base cee9395acd8043be0644b25c34bfa86623f2b935.

Patches 1-3 fix existing sparc64 defects in generic clear_page, secondary
queued-spinlock acquisition and sun4u kernel huge-PUD mappings. Each has
a Fixes tag. Patches 4-7 add the CPU/MMU/SMP path, PCIe bridge, narrowly
matched tg3 firmware-state correction and console. They form one series
so the complete port can be built without collecting prerequisites.

VII context-write and demap synchronization follows the cited JPS2 and
SPARC64 VII manual sections. Existing Cheetah routines are unchanged:
similar assembly does not establish the same hardware requirement there.

The final tree includes the demap-all instruction synchronization in the
CPU/MMU patch. All seven cumulative prefixes build. The exact final image
boots Gentoo/OpenRC and SSH with eight threads; kernel taint is zero.

HugeTLB/THP, CPU offlining, Oberon MSI and complete RAS recovery remain
unsupported. Firmware console calls cannot be bounded if firmware stalls.

SPARC64 VII/VII+ support is currently opt-in through Kconfig while the new
CPU/MMU/SMP paths receive broader testing. The option also excludes HugeTLB
and THP configurations, which this implementation does not yet support.
The longer-term aim is to rely on runtime CPU detection once unsupported
huge-page configurations can be handled safely.

Magnus Lindholm (7):
sparc64: return from the generic clear_page implementation
sparc64: honor queued spinlock layout in secondary startup
sparc64: avoid huge kernel PUD mappings on sun4u
sparc64: add SPARC64 VII CPU, MMU and SMP support
sparc64: add M3000 Oberon PCIe support
tg3: normalize inherited M3000 register byte order
hvc: add an M3000 firmware console backend

MAINTAINERS | 6 +
arch/sparc/Kconfig | 19 +++
arch/sparc/include/asm/head_64.h | 15 ++
arch/sparc/include/asm/iommu_64.h | 1 +
arch/sparc/include/asm/irq_64.h | 1 +
arch/sparc/include/asm/setup.h | 5 +
arch/sparc/include/asm/smp_64.h | 4 +
arch/sparc/include/asm/spitfire.h | 1 +
arch/sparc/include/asm/trap_block.h | 6 +
arch/sparc/kernel/cpu.c | 3 +
arch/sparc/kernel/entry.h | 2 +
arch/sparc/kernel/head_64.S | 18 +++
arch/sparc/kernel/helpers.S | 41 +++++
arch/sparc/kernel/iommu.c | 44 ++++++
arch/sparc/kernel/irq_64.c | 50 ++++--
arch/sparc/kernel/pci_fire.c | 31 +++-
arch/sparc/kernel/pci_impl.h | 1 +
arch/sparc/kernel/prom_64.c | 6 +
arch/sparc/kernel/prom_irqtrans.c | 7 +
arch/sparc/kernel/ptrace_64.c | 7 +
arch/sparc/kernel/setup_64.c | 55 +++++++
arch/sparc/kernel/smp_64.c | 82 +++++++++-
arch/sparc/kernel/trampoline_64.S | 53 ++++++-
arch/sparc/kernel/traps_64.c | 27 ++++
arch/sparc/lib/GENpage.S | 3 +
arch/sparc/mm/init_64.c | 110 ++++++++++++-
arch/sparc/mm/tsb.c | 19 ++-
arch/sparc/mm/ultra.S | 236 ++++++++++++++++++++++++++++
drivers/net/ethernet/broadcom/tg3.c | 91 ++++++++++-
drivers/tty/hvc/Kconfig | 10 ++
drivers/tty/hvc/Makefile | 2 +
drivers/tty/hvc/hvc_m3000.c | 167 ++++++++++++++++++++
32 files changed, 1088 insertions(+), 35 deletions(-)
create mode 100644 drivers/tty/hvc/hvc_m3000.c


base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
--
2.43.0