openwrt/target/linux/layerscape
Mathew McBride 68a4c60b5c layerscape: armv8_64b: add Traverse Ten64 NAND variant
The Ten64 board[1] is based around NXP's Layerscape LS1088A SoC.
It is capable of booting both standard Linux distributions
from disk devices, using EFI, and booting OpenWrt
from NAND.

See the online manual for more information, including the
flash layout[2].

This patchset adds support for generating Ten64 images
for NAND boot.
For disk boot, one can use the EFI support that was
recently added to the armvirt target.

We previously supported NAND users by building
inside our armvirt/EFI target[3], but this approach
is not suitable for OpenWrt upstream. Users who
used our supplied NAND images will be able to upgrade
to this via sysupgrade.

Signed-off-by: Mathew McBride <matt@traverse.com.au>

[1] - https://www.traverse.com.au/hardware/ten64
[2] - https://ten64doc.traverse.com.au/hardware/flash/
[3] - Example:
285e4360e1
(cherry picked from commit af0546da34)
2023-07-26 13:36:58 +02:00
..
armv7 kernel: backport NVMEM patches queued for the v6.5 2023-07-10 12:54:53 +02:00
armv8_64b layerscape: armv8_64b: add Traverse Ten64 NAND variant 2023-07-26 13:36:58 +02:00
base-files layerscape: armv8_64b: add Traverse Ten64 NAND variant 2023-07-26 13:36:58 +02:00
files/arch/arm64/boot/dts/freescale layerscape: dts: Unify naming of gpio-keys nodes 2019-01-24 15:53:04 +01:00
image layerscape: armv8_64b: add Traverse Ten64 NAND variant 2023-07-26 13:36:58 +02:00
patches-5.15 kernel: bump 5.15 to 5.15.118 2023-06-25 16:05:18 +02:00
Makefile layerscape: switch to Kernel 5.15 by default 2023-03-17 12:20:24 +01:00
modules.mk layerscape: kmod-ppfe: Use ppfe driver as module 2022-11-27 13:18:29 +01:00
README layerscape: Add ls1028ardb support 2023-05-07 14:50:50 +02:00

Layerscape Quick Start

This is a quick start guide for Layerscape specific usage, like introducing
how to configure, build, and deploy OpenWrt to Layerscape boards, so that
users can bring up the board without difficulty.


1. Target support
----------------------------
* ARMv8 64-bit
  LS1012ARDB        (QSPI NOR boot)
  LS1012AFRDM       (QSPI NOR boot)
  LS1012AFRWY       (QSPI NOR boot)
  LS1028ARDB        (QSPI NOR boot    | SD card boot)
  LS1043ARDB        (NOR boot         | SD card boot)
  LS1046ARDB        (QSPI NOR boot    | SD card boot)
  LS1046AFRWY       (QSPI NOR boot    | SD card boot)
  LS1088ARDB        (QSPI NOR boot    | SD card boot)
  LS2088ARDB        (NOR boot)
  LX2160ARDB Rev2.0 (FlexSPI NOR boot | SD card boot)

* ARMv7
  LS1021ATWR        (NOR boot | SD card boot)
  LS1021AIOT        (SD card boot)


2. Build
--------
Before configuration and build, update and install package feeds.

$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

* make menuconfig
  Target System:   "NXP Layerscape"
  Subtarget:       (Select subtarget)
  Target Profile:  (Select device, or "Multiple devices")
  Target Devices:  (Select devices. Available when Target Profile is "Multiple devices")
  Target Images:   (Disable "GZip images" if you don't want to unzip manually to use the images.)

  Note: The first time make menuconfig would create a .config file which
  would include all dependencies for selected target. After that, make
  menuconfig still could be used to modify packages. If want to change
  other target, please remove .config and make menuconfig to select again.
  Otherwise the packages selected in .config would be a mess.

* make download (or make download -j<n>)

* make (or make -j<n>)

* Final firmware/image
  Path:               bin/targets/layerscape/<subtarget>/
  Firmware for flash: openwrt-layerscape-<subtarget>-<device>-<rootfs>-firmware.bin
  Image for SD card:  openwrt-layerscape-<subtarget>-<device>-<rootfs>-sdcard.img.gz
  Sysupgrade images:  openwrt-layerscape-<subtarget>-<device>-<rootfs>-sysupgrade.bin


3. Deploy
---------
The firmware.bin or sdcard.img is an all-in-one image including all things
for OpenWrt staring up except LS1012AFRWY (Refer to 3.3).
If you want to install all things into flash, please use firmware.bin.
If you want to install all things into SD card, please use sdcard.img.

3.1 Program sdcard.img to SD card
---------------------------------
sdcard.img could be programmed to SD card in either u-boot environment
or linux environment. After programming, configure the board to boot
from SD card. (sdcard.img images are gz-iped to save space. Please extract them first.)

* u-boot environment

  => tftp a0000000 <image_name>-sdcard.img
  => mmc write a0000000 0 a0000

  Note: The default sdcard.img size is 320MB. a0000 is the block number for 320MB.
  blk_num = filesize / 512.

* linux environment

  $ dd if=./<image_name>-sdcard.img of=/dev/mmcblkx

  Note: Need to check the SD card device name to replace "mmcblkx".

3.2 Program firmware.bin to flash
---------------------------------
* LS1012ARDB
  Start up from bank1, and program firmware to bank2 with below commands.
  Switch to bank2 to start up OpenWrt.

  => tftp a0000000 <firmware_name>-firmware.bin
  => i2c mw 0x24 0x7 0xfc;i2c mw 0x24 0x3 0xf5
  => sf probe 0:0
  => sf erase 0 +$filesize
  => sf write a0000000 0 $filesize
  => reset

* LS1028ARDB
  Board has only one bank. Those commands will replace stock bootloader
  and firmware.
  => tftp a0000000 <firmware_name>-firmware.bin
  => sf probe 0:0
  => sf erase 0 +$filesize
  => sf write a0000000 0 $filesize
  => reset

* LS1043ARDB
  Start up from bank0, and program firmware to bank4 with below commands.
  Switch to bank4 to start up OpenWrt.

  => tftp a0000000 <firmware_name>-firmware.bin
  => protect off all
  => erase 64000000 +$filesize
  => cp.b a0000000 64000000 $filesize
  => cpld reset altbank

* LS1046ARDB
  Start up from bank1, and program firmware to bank2 with below commands.
  Switch to bank2 to start up OpenWrt.

  => tftp a0000000 <firmware_name>-firmware.bin
  => sf probe 0:1
  => sf erase 0 +$filesize
  => sf write a0000000 0 $filesize
  => cpld reset altbank

* LS2088ARDB
  Start up from bank0, and program firmware to bank4 with below commands.
  Switch to bank4 to start up OpenWrt.

  => tftp a0000000 <firmware_name>-firmware.bin
  => protect off all
  => erase 584000000 +$filesize
  => cp.b a0000000 584000000 $filesize
  => qix altbank

* LS1012FRDM/LS1046AFRWY
  Board has only one bank. Those commands will replace stock bootloader
  and firmware.

  => tftp a0000000 <firmware_name>-firmware.bin
  => sf probe 0:0
  => sf erase 0 +$filesize
  => sf write a0000000 0 $filesize
  => reset

* LS1088ARDB/LX2160ARDB Rev2.0
  Start up from bank0, and program firmware to bank1 with below commands.
  Switch to bank1 to start up OpenWrt.

  => tftp a0000000 <firmware_name>-firmware.bin
  => sf probe 0:1
  => sf erase 0 +$filesize
  => sf write a0000000 0 $filesize
  => qix altbank

  Note: old version u-boot of ls1088ardb may use below commands to switch to
  bank1 instead of 'qix altbank'.
  => i2c mw 66 50 20;i2c mw 66 10 20;i2c mw 66 10 21

* LS1021ATWR
  Start up from bank0, and program firmware to bank4 with below commands.
  Switch to bank4 to start up OpenWrt.

  => tftp a0000000 <firmware_name>-firmware.bin
  => protect off all
  => erase 64000000 +$filesize
  => cp.b a0000000 64000000 $filesize
  => boot_bank 1

3.3 Program LS1012AFRWY
-----------------------
* LS1012AFRWY (QSPI flash + SD card)
  LS1012AFRWY only supports 2MB QSPI flash. We have to put u-boot, and
  some firmwares on QSPI flash, and kernel/dtb/rootfs on SD card.
  So both firmware.bin and sdcard.img are needed for OpenWrt starting up.

  To program sdcard.img, please use linux command described in 3.1 on a
  linux machine.
  To program firmware.bin, start up board from QSPI flash, and program
  firmware with below commands. Reset to start up OpenWrt. (LS1012AFRWY
  supports only one bank.)

  => tftp 96000000 <firmware_name>-firmware.bin
  => sf probe 0:0
  => sf erase 0 +$filesize
  => sf write 96000000 0 $filesize
  => reset


4. Known issues and limitation
------------------------------
* U-boot may fail to read MAC addresses from EEPROM on some boards and there
  won't be MAC addresses set in environment. This may cause kernel fails to
  probe these network interfaces. The workaround is to set MAC addresses
  manually, for example,

  => setenv ethaddr 00:04:9F:04:65:4b
  => setenv eth1addr 00:04:9F:04:65:4c
  => saveenv

* In case users want to refer Layerscape SDK doc for network configuration,
  like TSN (Time-Sensitive Networking) on LS1028A, the OpenWrt LAN/WAN router
  setting should be removed before that.

  # ubus call network.interface.lan remove
  # ubus call network.interface.wan remove
  # ubus call network.interface.wan6 remove

  And firewall may be needed to stop.

  # /etc/init.d/firewall stop


5. Other references
-------------------
- NXP LSDK source: https://lsdk.github.io/

- NXP LSDK site: https://www.nxp.com/design/software/embedded-software/linux-software-and-development-tools/layerscape-software-development-kit:LAYERSCAPE-SDK

- OpenWrt documentation: https://openwrt.org/docs/start