[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.