
Hi Michael,
Am Mo., 7. Sept. 2020 um 23:08 Uhr schrieb Michael Walle michael@walle.cc:
Add basic support for the Kontron SMARC-sAL28 board. This includes just the bare minimum to be able to bring up the board and boot linux.
For now, the Single and Dual PHY variant is supported. Other variants will fall back to the basic variant.
In particular, there is no watchdog support for now. This means that you have to disable the default watchdog, otherwise you'll end up in the recovery bootloader. See the board README for details.
Signed-off-by: Michael Walle michael@walle.cc
After applying the patch (https://patchwork.ozlabs.org/project/uboot/patch/20200803221633.24096-1-mich...) I could boot the mainline kernel.
Tested-by: Heiko Thiery heiko.thiery@gmail.com
arch/arm/Kconfig | 11 + arch/arm/dts/Makefile | 3 + .../dts/fsl-ls1028a-kontron-sl28-u-boot.dtsi | 135 +++++++++++++ .../fsl-ls1028a-kontron-sl28-var3-u-boot.dtsi | 2 + .../arm/dts/fsl-ls1028a-kontron-sl28-var3.dts | 15 ++ .../fsl-ls1028a-kontron-sl28-var4-u-boot.dtsi | 2 + .../arm/dts/fsl-ls1028a-kontron-sl28-var4.dts | 48 +++++ arch/arm/dts/fsl-ls1028a-kontron-sl28.dts | 189 ++++++++++++++++++ board/kontron/sl28/Kconfig | 18 ++ board/kontron/sl28/MAINTAINERS | 7 + board/kontron/sl28/Makefile | 8 + board/kontron/sl28/common.c | 10 + board/kontron/sl28/ddr.c | 98 +++++++++ board/kontron/sl28/sl28.c | 68 +++++++ board/kontron/sl28/spl.c | 32 +++ configs/kontron_sl28_defconfig | 107 ++++++++++ doc/board/index.rst | 1 + doc/board/kontron/index.rst | 9 + doc/board/kontron/sl28.rst | 160 +++++++++++++++ include/configs/kontron_sl28.h | 108 ++++++++++ 20 files changed, 1031 insertions(+) create mode 100644 arch/arm/dts/fsl-ls1028a-kontron-sl28-u-boot.dtsi create mode 100644 arch/arm/dts/fsl-ls1028a-kontron-sl28-var3-u-boot.dtsi create mode 100644 arch/arm/dts/fsl-ls1028a-kontron-sl28-var3.dts create mode 100644 arch/arm/dts/fsl-ls1028a-kontron-sl28-var4-u-boot.dtsi create mode 100644 arch/arm/dts/fsl-ls1028a-kontron-sl28-var4.dts create mode 100644 arch/arm/dts/fsl-ls1028a-kontron-sl28.dts create mode 100644 board/kontron/sl28/Kconfig create mode 100644 board/kontron/sl28/MAINTAINERS create mode 100644 board/kontron/sl28/Makefile create mode 100644 board/kontron/sl28/common.c create mode 100644 board/kontron/sl28/ddr.c create mode 100644 board/kontron/sl28/sl28.c create mode 100644 board/kontron/sl28/spl.c create mode 100644 configs/kontron_sl28_defconfig create mode 100644 doc/board/kontron/index.rst create mode 100644 doc/board/kontron/sl28.rst create mode 100644 include/configs/kontron_sl28.h
[snip]
--- a/doc/board/index.rst +++ b/doc/board/index.rst @@ -15,6 +15,7 @@ Board-specific doc freescale/index google/index intel/index
- kontron/index renesas/index rockchip/index sifive/index
diff --git a/doc/board/kontron/index.rst b/doc/board/kontron/index.rst new file mode 100644 index 0000000000..543b22e2f5 --- /dev/null +++ b/doc/board/kontron/index.rst @@ -0,0 +1,9 @@ +.. SPDX-License-Identifier: GPL-2.0+
+Kontron +=======
+.. toctree::
- :maxdepth: 2
- sl28
diff --git a/doc/board/kontron/sl28.rst b/doc/board/kontron/sl28.rst new file mode 100644 index 0000000000..e458fbc607 --- /dev/null +++ b/doc/board/kontron/sl28.rst @@ -0,0 +1,160 @@ +.. SPDX-License-Identifier: GPL-2.0+
+Summary +=======
+The Kontron SMARC-sAL28 board is a TSN-enabled dual-core ARM A72 +processor module with an on-chip 6-port TSN switch and a 3D GPU.
+Quickstart +==========
+Compile U-Boot +--------------
+Configure and compile the binary::
- $ make kontron_sl28_defconfig
- $ CROSS_COMPILE=aarch64-linux-gnu make
Small typo here. A missing '-'. $ CROSS_COMPILE=aarch64-linux-gnu- make
+Copy u-boot.rom to a TFTP server.
+Install the bootloader on the board +-----------------------------------
+Please note, this bootloader doesn't support the builtin watchdog (yet), +therefore you have to disable it, see below. Otherwise you'll end up in +the failsafe bootloader on every reset::
tftp path/to/u-boot.rom sf probe 0 sf update $fileaddr 0x210000 $filesize+The board is fully failsafe, you can't break anything. But because you've +disabled the builtin watchdog you might have to manually enter failsafe +mode by asserting the ``FORCE_RECOV#`` line during board reset.
+Disable the builtin watchdog +----------------------------
+- boot into the failsafe bootloader, either by asserting the
- ``FORCE_RECOV#`` line or if you still have the original bootloader
- installed you can use the command::
wdt dev cpld_watchdog@4a; wdt expire 1+- in the failsafe bootloader use the "sl28 nvm" command to disable
- the automatic start of the builtin watchdog::
sl28 nvm 0008+- power-cycle the board
+Useful I2C tricks +=================
+The board has a board management controller which is not supported in +u-boot (yet). But you can use the i2c command to access it.
+- reset into failsafe bootloader::
i2c mw 4a 5.1 0; i2c mw 4a 6.1 6b; i2c mw 4a 4.1 42+- read board management controller version::
i2c md 4a 3.1 1+Non-volatile Board Configuration Bits +=====================================
+The board has 16 configuration bits which are stored in the CPLD and are +non-volatile. These can be changed by the `sl28 nvm` command.
+=== =============================================================== +Bit Description +=== ===============================================================
- 0 Power-on inhibit
- 1 Enable eMMC boot
- 2 Enable watchdog by default
- 3 Disable failsafe watchdog by default
- 4 Clock generator selection bit 0
- 5 Clock generator selection bit 1
- 6 Disable CPU SerDes clock #2 and PCIe-A clock output
- 7 Disable PCIe-B and PCIe-C clock output
- 8 Keep onboard PHYs in reset
- 9 Keep USB hub in reset
- 10 Keep eDP-to-LVDS converter in reset
- 11 Enable I2C stuck recovery on I2C PM and I2C GP busses
- 12 Enable automatic onboard PHY H/W reset
- 13 reserved
- 14 Used by the RCW to determine boot source
- 15 Used by the RCW to determine boot source
+=== ===============================================================
+Please note, that if the board is in failsafe mode, the bits will have the +factory defaults, ie. all bits are off.
+Power-On Inhibit +----------------
+If this is set, the board doesn't automatically turn on when power is +applied. Instead, the user has to either toggle the ``PWR_BTN#`` line or +use any other wake-up source such as RTC alarm or Wake-on-LAN.
+eMMC Boot +---------
+If this is set, the RCW will be fetched from the on-board eMMC at offset +1MiB. For further details, have a look at the `Reset Configuration Word +Documentation`_.
+Watchdog +--------
+By default, the CPLD watchdog is enabled in failsafe mode. Using bits 2 and +3, the user can change its mode or disable it altogether.
+===== ===== =============================== +Bit 2 Bit 3 Description +===== ===== ===============================
- 0 0 Watchdog enabled, failsafe mode
- 0 1 Watchdog disabled
- 1 0 Watchdog enabled, failsafe mode
- 1 1 Watchdog enabled, normal mode
+===== ===== ===============================
+Clock Generator Select +----------------------
+The board is prepared to supply different SerDes clock speeds. But for now, +only setting 0 is supported, otherwise the CPU will hang because the PLL +will not lock.
+Clock Output Disable And Keep Devices In Reset +----------------------------------------------
+To safe power, the user might disable different devices and clock output of +the board. It is not supported to disable the "CPU SerDes clock #2" for +now, otherwise the CPU will hang because the PLL will not lock.
+Automatic reset of the onboard PHYs +-----------------------------------
+By default, there is no hardware reset of the onboard PHY. This is because +for Wake-on-LAN, some registers have to retain their values. If you don't +use the WOL feature and a soft reset of the PHY is not enough you can +enable the hardware reset. The onboard PHY hardware reset follows the +power-on reset.
+Further documentation +=====================
+- `Vendor Documentation`_ +- `Reset Configuration Word Documentation`_
+.. _Reset Configuration Word Documentation: https://raw.githubusercontent.com/kontron/rcw-smarc-sal28/master/README.md +.. _Vendor Documentation: https://raw.githubusercontent.com/kontron/u-boot-smarc-sal28/master/board/ko... diff --git a/include/configs/kontron_sl28.h b/include/configs/kontron_sl28.h new file mode 100644 index 0000000000..afe512a8c7 --- /dev/null +++ b/include/configs/kontron_sl28.h @@ -0,0 +1,108 @@ +/* SPDX-License-Identifier: GPL-2.0+ */
+#ifndef __SL28_H +#define __SL28_H
+#include <asm/arch/stream_id_lsch3.h> +#include <asm/arch/config.h> +#include <asm/arch/soc.h>
+/* we don't use hwconfig but this has to be defined.. */ +#define HWCONFIG_BUFFER_SIZE 256
+/* we don't have secure memory unless we have a BL31 */ +#ifndef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT +#undef CONFIG_SYS_MEM_RESERVE_SECURE +#endif
+/* DDR */ +#define CONFIG_DDR_ECC +#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER +#define CONFIG_MEM_INIT_VALUE 0xdeadbeef
+#define CONFIG_VERY_BIG_RAM +#define CONFIG_CHIP_SELECTS_PER_CTRL 4 +#define CONFIG_DIMM_SLOTS_PER_CTLR 1 +#define CONFIG_SYS_DDR_SDRAM_BASE 0x80000000 +#define CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY 0 +#define CONFIG_SYS_SDRAM_BASE CONFIG_SYS_DDR_SDRAM_BASE +#define CONFIG_SYS_DDR_BLOCK2_BASE 0x2080000000ULL +#define CONFIG_SYS_FSL_DDR_MAIN_NUM_CTRLS 1
+/* early stack pointer */ +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_FSL_OCRAM_BASE + 0xeff0)
+/* memtest command */ +#define CONFIG_SYS_MEMTEST_START 0x80000000 +#define CONFIG_SYS_MEMTEST_END 0x9fffffff
+/* SMP */ +#define CPU_RELEASE_ADDR secondary_boot_addr
+/* generic timer */ +#define COUNTER_FREQUENCY 25000000
+/* size of malloc() pool */ +#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 2048 * 1024)
+/* early heap for SPL DM */ +#define CONFIG_MALLOC_F_ADDR CONFIG_SYS_FSL_OCRAM_BASE
+/* serial port */ +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE 1 +#define CONFIG_SYS_NS16550_CLK (get_bus_freq(0) / 2) +#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+#define CONFIG_SYS_CLK_FREQ 100000000 +#define CONFIG_DDR_CLK_FREQ 100000000 +#define COUNTER_FREQUENCY_REAL (CONFIG_SYS_CLK_FREQ / 4)
+/* MMC */ +#ifdef CONFIG_MMC +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 +#endif
+/* ethernet */ +#define CONFIG_SYS_RX_ETH_BUFFER 8
+/* SPL */ +#define CONFIG_SPL_BSS_START_ADDR 0x80100000 +#define CONFIG_SPL_BSS_MAX_SIZE 0x00100000 +#define CONFIG_SPL_MAX_SIZE 0x20000 +#define CONFIG_SPL_STACK (CONFIG_SYS_FSL_OCRAM_BASE + 0x9ff0)
+#define CONFIG_SYS_SPL_MALLOC_SIZE 0x00100000 +#define CONFIG_SYS_SPL_MALLOC_START 0x80200000 +#define CONFIG_SYS_MONITOR_LEN (1024 * 1024)
+/* environment */ +/* see include/configs/ti_armv7_common.h */ +#define CONFIG_SYS_LOAD_ADDR 0x82000000 +#define ENV_MEM_LAYOUT_SETTINGS \
"loadaddr=0x82000000\0" \
"kernel_addr_r=0x82000000\0" \
"fdt_addr_r=0x88000000\0" \
"bootm_size=0x10000000\0" \
"pxefile_addr_r=0x80100000\0" \
"scriptaddr=0x80000000\0" \
"ramdisk_addr_r=0x88080000\0"
+#define BOOT_TARGET_DEVICES(func) \
func(MMC, mmc, 1) \
func(MMC, mmc, 0) \
func(NVME, nvme, 0) \
func(USB, usb, 0) \
func(DHCP, dhcp, 0) \
func(PXE, pxe, 0)
+#include <config_distro_bootcmd.h>
+#define CONFIG_EXTRA_ENV_SETTINGS \
"env_addr=0x203e0004\0" \
"envload=env import -d -b ${env_addr}\0" \
"install_rcw=source 20200000\0" \
"fdtfile=freescale/fsl-ls1028a-kontron-sl28.dtb\0" \
ENV_MEM_LAYOUT_SETTINGS \
BOOTENV
+#endif /* __SL28_H */
2.20.1