[PATCH v2 0/9] mips: add EcoNet/Airoha EN75xx (EN7512/EN7528) SoC support
AK Sharma <[email protected]>
| Newsgroups | org.u-boot-project.lists.u-boot |
|---|---|
| Message-ID | <[email protected]> |
This series adds U-Boot support for the EcoNet/Airoha EN75xx MIPS SoC
family: the big-endian MIPS34Kc EN7512/EN7521 and the little-endian
MIPS1004Kc EN7528, used in many GPON/XPON ONT home gateways. It extends
the existing Airoha SNFI SPI-NAND and GDM Ethernet drivers.
This is a minimal core: SoC bring-up (TPL/SPL, cache/CM init), UART,
SPI-NAND, Ethernet, device trees, EN7512/EN7528 reference boards and
documentation. It boots to the U-Boot prompt with working Ethernet/TFTP
and SPI-NAND. The vendor-specific pieces from v1 (the BMT bad-block
translation, the env/cmd MTD changes, the boot/image decompression hooks
and the R3-hook boot variant) are dropped from this series and will return
as separate, justified changes, as discussed on v1.
The DDR calibration stage is a vendor artifact and is not shipped in-tree.
The reference board packages it as a binman "blob-ext"; build those configs
with BINMAN_ALLOW_MISSING=1 and supply the blob to run (see
doc/board/econet/en7528.rst). A native DDR-init implementation is a known
TODO.
Tested on a Nokia G-2425G-A (EN7528, MT29F2G01 SPI-NAND) via RAM-loaded
U-Boot: boots to the prompt with correct 256 MiB DRAM, working
Ethernet/TFTP and SPI-NAND. All defconfigs build and are in savedefconfig
form; checkpatch reports no errors.
Apart from the usual registration wiring (arch/mips Makefile/Kconfig for
the new SoC, the driver Kconfig/Makefile entries and the DT Makefile),
the only change to generic behaviour is one opt-in Kconfig flag,
MIPS_SKIP_CP0_COUNT_CLEAR in arch/mips/Kconfig (added alongside the
existing MIPS_CACHE_SETUP / ROM_EXCEPTION_VECTORS start.S options), and
the two-line #ifndef guard it gates in arch/mips/cpu/start.S: the
EN7528 CP0 Count register is GIC/CM backed and the reset-time clear in
arch/mips/cpu/start.S stalls the CPU. It defaults off and changes nothing
for other targets; happy to move it to a mach reset path if preferred.
Changes in v2:
- Reworked from a full vendor port into a minimal bootable core, per
review feedback (Tom Rini). Dropped from the series, to return as
separate, justified changes:
- spi-nand BMT: no chip-specific code in the spinand core; the
bad-block-table support will go to the Linux kernel first, then sync
to U-Boot (Frieder Schrempf, Tom Rini).
- boot/image decompression weak hooks: to be replaced by bootm_size and
an uncached load address from the environment (Tom Rini).
- cmd/mtd and env/mtd changes: to be resubmitted standalone as generic
fixes, not tied to this SoC (Tom Rini).
- the R3-hook board variant and its image packaging (to return using
binman and a board default environment).
- Documentation moved to reStructuredText under doc/ (Tom Rini).
- MAINTAINERS uses N: en75xx / N: en7528 pattern entries (Tom Rini).
- Device trees noted as not yet in Linux; the bindings and DTs will be
submitted to the kernel and kept in sync (Tom Rini).
- Defconfigs regenerated in savedefconfig form.
Known follow-ups (not in this minimal core; direction welcome):
- The extended airoha-snfi/airoha-eth drivers use a small CKSEG1 uncached
shim for DMA buffers instead of a MIPS dma_alloc_coherent(); a proper
arch DMA-mapping implementation would remove the per-arch #if.
- The SNFI controller selects its variant from the root-node machine
compatible; keying off the device's own compatible would be cleaner.
- A native DDR-init to remove the vendor DDR-blob dependency.
- USB: the EN7528 xHCI controller and its T-PHY bring-up (reuses the
existing MediaTek xHCI driver) is left out of this core and will come
back as a follow-up.
Link to v1:
https://lore.kernel.org/u-boot/[email protected]/
AK Sharma (9):
mips: en75xx: add EcoNet/Airoha EN75xx SoC support
mips: en75xx: add TPL and SPL early boot stages
serial: en75xx: add EcoNet/Airoha EN75xx UART driver
spi: airoha-snfi: add EN75xx SPI-NAND controller support
net: airoha-eth: add EN7528 Ethernet support
mips: dts: add EcoNet EN75xx device trees
board: econet: add EN7512 reference board
board: econet: add EN7528 board support
doc: board: econet: add EN75xx documentation
arch/mips/Kconfig | 29 +
arch/mips/Makefile | 2 +
arch/mips/cpu/start.S | 2 +
arch/mips/dts/Makefile | 2 +
.../dts/econet,en7512-reference-u-boot.dtsi | 58 ++
arch/mips/dts/econet,en7512-reference.dts | 27 +
arch/mips/dts/econet,en7512.dtsi | 88 ++
arch/mips/dts/econet,en7528-ram-u-boot.dtsi | 6 +
arch/mips/dts/econet,en7528-ram.dts | 72 ++
.../dts/econet,en7528-reference-u-boot.dtsi | 62 ++
arch/mips/dts/econet,en7528-reference.dts | 25 +
arch/mips/dts/econet,en7528.dtsi | 154 ++++
arch/mips/mach-en75xx/Kconfig | 100 +++
arch/mips/mach-en75xx/Makefile | 15 +
arch/mips/mach-en75xx/cache.c | 85 ++
arch/mips/mach-en75xx/cpu.c | 95 ++
arch/mips/mach-en75xx/early_sfc.c | 352 ++++++++
arch/mips/mach-en75xx/include/mach/en75xx.h | 103 +++
arch/mips/mach-en75xx/spl/Makefile | 2 +
arch/mips/mach-en75xx/spl/spl.c | 47 +
arch/mips/mach-en75xx/tpl/Makefile | 3 +
arch/mips/mach-en75xx/tpl/start.S | 101 +++
arch/mips/mach-en75xx/tpl/tpl.c | 158 ++++
board/econet/en7512/MAINTAINERS | 8 +
board/econet/en7512/Makefile | 2 +
board/econet/en7512/board.c | 34 +
board/econet/en7528/MAINTAINERS | 13 +
board/econet/en7528/Makefile | 2 +
board/econet/en7528/board.c | 37 +
configs/en7512_reference_defconfig | 90 ++
configs/en7528_ram_defconfig | 43 +
configs/en7528_reference_defconfig | 38 +
doc/board/econet/en7512.rst | 66 ++
doc/board/econet/en7528.rst | 66 ++
doc/board/econet/index.rst | 10 +
doc/board/index.rst | 1 +
drivers/net/Kconfig | 8 +-
drivers/net/airoha_eth.c | 850 +++++++++++++++++-
drivers/serial/Kconfig | 7 +
drivers/serial/Makefile | 1 +
drivers/serial/serial_en75xx.c | 170 ++++
drivers/spi/Kconfig | 3 +-
drivers/spi/airoha_snfi_spi.c | 412 +++++++--
include/configs/en7512.h | 8 +
include/configs/en7528.h | 9 +
45 files changed, 3339 insertions(+), 127 deletions(-)
create mode 100644 arch/mips/dts/econet,en7512-reference-u-boot.dtsi
create mode 100644 arch/mips/dts/econet,en7512-reference.dts
create mode 100644 arch/mips/dts/econet,en7512.dtsi
create mode 100644 arch/mips/dts/econet,en7528-ram-u-boot.dtsi
create mode 100644 arch/mips/dts/econet,en7528-ram.dts
create mode 100644 arch/mips/dts/econet,en7528-reference-u-boot.dtsi
create mode 100644 arch/mips/dts/econet,en7528-reference.dts
create mode 100644 arch/mips/dts/econet,en7528.dtsi
create mode 100644 arch/mips/mach-en75xx/Kconfig
create mode 100644 arch/mips/mach-en75xx/Makefile
create mode 100644 arch/mips/mach-en75xx/cache.c
create mode 100644 arch/mips/mach-en75xx/cpu.c
create mode 100644 arch/mips/mach-en75xx/early_sfc.c
create mode 100644 arch/mips/mach-en75xx/include/mach/en75xx.h
create mode 100644 arch/mips/mach-en75xx/spl/Makefile
create mode 100644 arch/mips/mach-en75xx/spl/spl.c
create mode 100644 arch/mips/mach-en75xx/tpl/Makefile
create mode 100644 arch/mips/mach-en75xx/tpl/start.S
create mode 100644 arch/mips/mach-en75xx/tpl/tpl.c
create mode 100644 board/econet/en7512/MAINTAINERS
create mode 100644 board/econet/en7512/Makefile
create mode 100644 board/econet/en7512/board.c
create mode 100644 board/econet/en7528/MAINTAINERS
create mode 100644 board/econet/en7528/Makefile
create mode 100644 board/econet/en7528/board.c
create mode 100644 configs/en7512_reference_defconfig
create mode 100644 configs/en7528_ram_defconfig
create mode 100644 configs/en7528_reference_defconfig
create mode 100644 doc/board/econet/en7512.rst
create mode 100644 doc/board/econet/en7528.rst
create mode 100644 doc/board/econet/index.rst
create mode 100644 drivers/serial/serial_en75xx.c
create mode 100644 include/configs/en7512.h
create mode 100644 include/configs/en7528.h
--
2.53.0