|
|
@@ -0,0 +1,459 @@
|
|
|
+From 163b07bda901b728f4f208a296c15b513f9d5b49 Mon Sep 17 00:00:00 2001
|
|
|
+From: Robert Marko <[email protected]>
|
|
|
+Date: Sun, 2 Jan 2022 15:10:34 +0100
|
|
|
+Subject: [PATCH 3/3] arm: mvebu: add support for MikroTik RB5009UG+S+IN
|
|
|
+
|
|
|
+Specifications:
|
|
|
+ - SoC: Marvell Armada 7040 (88F7040) - 4 cores, ARMv8, 1.4GHz, 64bit
|
|
|
+ - RAM: 1024MB DDR4
|
|
|
+ - Flash: 16MB SPI NOR flash, 1024MB NAND
|
|
|
+ - Ethernet: One Marvell 88E6393X - Amethyst: one 2.5G + seven 1G ports and one SFP+
|
|
|
+ - LED: User, SFP, Hdr1, Hdr2
|
|
|
+ - Buttons: Reset
|
|
|
+ - UART: 115200 8n1
|
|
|
+ - USB: One USB3 port
|
|
|
+
|
|
|
+This provides only the basic support required to boot OpenWrt, however
|
|
|
+networking via the switch also works since its preconfigured by MikroTik
|
|
|
+RouterBoot since we are using U-Boot as the secondary bootloader.
|
|
|
+
|
|
|
+Signed-off-by: Robert Marko <[email protected]>
|
|
|
+---
|
|
|
+ arch/arm/dts/Makefile | 1 +
|
|
|
+ arch/arm/dts/armada-7040-rb5009.dts | 241 ++++++++++++++++++
|
|
|
+ arch/arm/mach-mvebu/arm64-common.c | 10 +-
|
|
|
+ .../mvebu_armada-8k/mikrotik-rb5009.env | 52 ++++
|
|
|
+ configs/mvebu_rb5009_defconfig | 97 +++++++
|
|
|
+ 5 files changed, 398 insertions(+), 3 deletions(-)
|
|
|
+ create mode 100644 arch/arm/dts/armada-7040-rb5009.dts
|
|
|
+ create mode 100644 board/Marvell/mvebu_armada-8k/mikrotik-rb5009.env
|
|
|
+ create mode 100644 configs/mvebu_rb5009_defconfig
|
|
|
+
|
|
|
+--- a/arch/arm/dts/Makefile
|
|
|
++++ b/arch/arm/dts/Makefile
|
|
|
+@@ -333,6 +333,7 @@ dtb-$(CONFIG_ARCH_MVEBU) += \
|
|
|
+ armada-3720-uDPU.dtb \
|
|
|
+ armada-7040-db-nand.dtb \
|
|
|
+ armada-7040-db.dtb \
|
|
|
++ armada-7040-rb5009.dtb \
|
|
|
+ armada-8040-clearfog-gt-8k.dtb \
|
|
|
+ armada-8040-db.dtb \
|
|
|
+ armada-8040-mcbin.dtb \
|
|
|
+--- /dev/null
|
|
|
++++ b/arch/arm/dts/armada-7040-rb5009.dts
|
|
|
+@@ -0,0 +1,241 @@
|
|
|
++// SPDX-License-Identifier: GPL-2.0+
|
|
|
++/*
|
|
|
++ * Copyright (C) 2016- 2021 Marvell International Ltd.
|
|
|
++ */
|
|
|
++
|
|
|
++/*
|
|
|
++ * Device Tree file for MikroTik RB5009
|
|
|
++ * Boot device: SPI NOR, 0x0
|
|
|
++ */
|
|
|
++
|
|
|
++#include "armada-7040.dtsi"
|
|
|
++#include <dt-bindings/gpio/gpio.h>
|
|
|
++#include <dt-bindings/input/input.h>
|
|
|
++
|
|
|
++/ {
|
|
|
++ model = "MikroTik RB5009";
|
|
|
++ compatible = "mikrotik,rb5009", "marvell,armada7040",
|
|
|
++ "marvell,armada-ap806-quad", "marvell,armada-ap806";
|
|
|
++
|
|
|
++ chosen {
|
|
|
++ stdout-path = "serial0:115200n8";
|
|
|
++ };
|
|
|
++
|
|
|
++ memory@00000000 {
|
|
|
++ device_type = "memory";
|
|
|
++ reg = <0x0 0x0 0x0 0x40000000>;
|
|
|
++ };
|
|
|
++
|
|
|
++ leds {
|
|
|
++ compatible = "gpio-leds";
|
|
|
++
|
|
|
++ led_user: user {
|
|
|
++ label = "green:user";
|
|
|
++ gpios = <&cp0_gpio1 26 GPIO_ACTIVE_LOW>;
|
|
|
++ default-state = "on";
|
|
|
++ };
|
|
|
++
|
|
|
++ sfp {
|
|
|
++ label = "green:sfp";
|
|
|
++ gpios = <&cp0_gpio1 25 GPIO_ACTIVE_LOW>;
|
|
|
++ };
|
|
|
++
|
|
|
++ hdr1 {
|
|
|
++ label = "blue:hdr1";
|
|
|
++ gpios = <&cp0_gpio0 4 GPIO_ACTIVE_LOW>;
|
|
|
++ };
|
|
|
++
|
|
|
++ hdr2 {
|
|
|
++ label = "blue:hdr2";
|
|
|
++ gpios = <&cp0_gpio1 19 GPIO_ACTIVE_LOW>;
|
|
|
++ };
|
|
|
++ };
|
|
|
++
|
|
|
++ keys {
|
|
|
++ compatible = "gpio-keys";
|
|
|
++
|
|
|
++ reset {
|
|
|
++ label = "reset";
|
|
|
++ gpios = <&cp0_gpio0 28 GPIO_ACTIVE_LOW>;
|
|
|
++ linux,code = <KEY_RESTART>;
|
|
|
++ };
|
|
|
++ };
|
|
|
++};
|
|
|
++
|
|
|
++&ap_pinctl {
|
|
|
++ /* MPP Bus:
|
|
|
++ * SPI [0-3]
|
|
|
++ * UART0 [11,19]
|
|
|
++ */
|
|
|
++ /* 0 1 2 3 4 5 6 7 8 9 */
|
|
|
++ pin-func = < 3 3 3 3 0 0 0 0 0 0
|
|
|
++ 0 3 0 0 0 0 0 0 0 3 >;
|
|
|
++
|
|
|
++ ap_spi_pins: ap-spi-pins {
|
|
|
++ marvell,pins = < 0 1 2 3 >;
|
|
|
++ marvell,function = <3>;
|
|
|
++ };
|
|
|
++};
|
|
|
++
|
|
|
++&uart0 {
|
|
|
++ status = "okay";
|
|
|
++};
|
|
|
++
|
|
|
++&ap_spi0 {
|
|
|
++ status = "okay";
|
|
|
++ pinctrl-names = "default";
|
|
|
++ pinctrl-0 = <&ap_spi_pins>;
|
|
|
++
|
|
|
++ spi-flash@0 {
|
|
|
++ #address-cells = <0x1>;
|
|
|
++ #size-cells = <0x1>;
|
|
|
++ compatible = "jedec,spi-nor";
|
|
|
++ reg = <0x0>;
|
|
|
++ spi-max-frequency = <20000000>;
|
|
|
++
|
|
|
++ partitions {
|
|
|
++ compatible = "fixed-partitions";
|
|
|
++ #address-cells = <1>;
|
|
|
++ #size-cells = <1>;
|
|
|
++
|
|
|
++ /* Empty space on NOR repurposed for U-Boot environment */
|
|
|
++ partition@fe0000 {
|
|
|
++ compatible = "u-boot,env";
|
|
|
++ label = "u-boot-env";
|
|
|
++ reg = <0xfe0000 0x20000>;
|
|
|
++ };
|
|
|
++ };
|
|
|
++ };
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_pinctl {
|
|
|
++ /* MPP Bus:
|
|
|
++ * NF_RBn [13]
|
|
|
++ * DEV_BUS [15-27]
|
|
|
++ * UART0 [29,30]
|
|
|
++ * SMI [35,36]
|
|
|
++ * I2C0 [37,38]
|
|
|
++ * SPI1 [47-50]
|
|
|
++ */
|
|
|
++ /* 0 1 2 3 4 5 6 7 8 9 */
|
|
|
++ pin-func = < 0 0 0 0 0 0 0 0 0 0
|
|
|
++ 0 0 0 2 0 1 1 1 1 1
|
|
|
++ 1 1 1 1 1 1 1 1 0 0xA
|
|
|
++ 0xA 0 0 0 0 8 8 2 2 0
|
|
|
++ 0 0 0 0 0 0 0 5 5 5
|
|
|
++ 5 0 0 0 0 0 0 0 0 0
|
|
|
++ 0 0 0 >;
|
|
|
++
|
|
|
++ cp0_nand_pins: cp0-nand-pins {
|
|
|
++ marvell,pins = < 15 16 17 18 19 20 21 22 23 24 25 26 27 >;
|
|
|
++ marvell,function = <1>;
|
|
|
++ };
|
|
|
++
|
|
|
++ cp0_smi_pins: cp0-smi-pins {
|
|
|
++ marvell,pins = < 35 36 >;
|
|
|
++ marvell,function = <8>;
|
|
|
++ };
|
|
|
++
|
|
|
++ cp0_spi1_pins: cp0-spi-pins-1 {
|
|
|
++ marvell,pins = < 47 48 49 50 >;
|
|
|
++ marvell,function = <5>;
|
|
|
++ };
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_gpio1 {
|
|
|
++ enable-usb-power {
|
|
|
++ gpio-hog;
|
|
|
++ gpios = <23 GPIO_ACTIVE_HIGH>;
|
|
|
++ output-high;
|
|
|
++ line-name = "enable USB power";
|
|
|
++ };
|
|
|
++
|
|
|
++ enable-leds-power {
|
|
|
++ gpio-hog;
|
|
|
++ gpios = <27 GPIO_ACTIVE_HIGH>;
|
|
|
++ output-high;
|
|
|
++ line-name = "enable LED-s power";
|
|
|
++ };
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_nand {
|
|
|
++ status = "okay";
|
|
|
++
|
|
|
++ pinctrl-names = "default";
|
|
|
++ pinctrl-0 = <&cp0_nand_pins>;
|
|
|
++
|
|
|
++ nand-ecc-strength = <4>;
|
|
|
++
|
|
|
++ partitions {
|
|
|
++ compatible = "fixed-partitions";
|
|
|
++ #address-cells = <1>;
|
|
|
++ #size-cells = <1>;
|
|
|
++
|
|
|
++ partition@0 {
|
|
|
++ label = "YAFFS";
|
|
|
++ reg = <0x0 0x800000>;
|
|
|
++ };
|
|
|
++
|
|
|
++ partition@800000 {
|
|
|
++ label = "ubi";
|
|
|
++ reg = <0x800000 0x3f800000>;
|
|
|
++ };
|
|
|
++ };
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_usb3_1 {
|
|
|
++ status = "okay";
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_utmi1 {
|
|
|
++ status = "okay";
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_i2c0 {
|
|
|
++ status = "okay";
|
|
|
++
|
|
|
++ pinctrl-names = "default";
|
|
|
++ pinctrl-0 = <&cp0_i2c0_pins>;
|
|
|
++ clock-frequency = <100000>;
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_comphy {
|
|
|
++ phy0 {
|
|
|
++ phy-type = <COMPHY_TYPE_UNCONNECTED>;
|
|
|
++ };
|
|
|
++
|
|
|
++ phy1 {
|
|
|
++ phy-type = <COMPHY_TYPE_UNCONNECTED>;
|
|
|
++ };
|
|
|
++
|
|
|
++ phy2 {
|
|
|
++ phy-type = <COMPHY_TYPE_SFI0>;
|
|
|
++ phy-speed = <COMPHY_SPEED_10_3125G>;
|
|
|
++ };
|
|
|
++
|
|
|
++ phy3 {
|
|
|
++ phy-type = <COMPHY_TYPE_USB3_HOST1>;
|
|
|
++ phy-speed = <COMPHY_SPEED_5G>;
|
|
|
++ };
|
|
|
++
|
|
|
++ phy4 {
|
|
|
++ phy-type = <COMPHY_TYPE_UNCONNECTED>;
|
|
|
++ };
|
|
|
++
|
|
|
++ phy5 {
|
|
|
++ phy-type = <COMPHY_TYPE_UNCONNECTED>;
|
|
|
++ };
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_mdio {
|
|
|
++ status = "okay";
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_ethernet {
|
|
|
++ status = "okay";
|
|
|
++};
|
|
|
++
|
|
|
++&cp0_eth0 {
|
|
|
++ status = "okay";
|
|
|
++ phy-mode = "10gbase-r";
|
|
|
++};
|
|
|
+--- a/arch/arm/mach-mvebu/arm64-common.c
|
|
|
++++ b/arch/arm/mach-mvebu/arm64-common.c
|
|
|
+@@ -62,9 +62,13 @@ __weak int dram_init_banksize(void)
|
|
|
+ __weak int dram_init(void)
|
|
|
+ {
|
|
|
+ if (IS_ENABLED(CONFIG_ARMADA_8K)) {
|
|
|
+- gd->ram_size = a8k_dram_scan_ap_sz();
|
|
|
+- if (gd->ram_size != 0)
|
|
|
+- return 0;
|
|
|
++ if (of_machine_is_compatible("mikrotik,rb5009"))
|
|
|
++ return fdtdec_setup_mem_size_base();
|
|
|
++ else {
|
|
|
++ gd->ram_size = a8k_dram_scan_ap_sz();
|
|
|
++ if (gd->ram_size != 0)
|
|
|
++ return 0;
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (IS_ENABLED(CONFIG_ARMADA_3700))
|
|
|
+--- /dev/null
|
|
|
++++ b/board/Marvell/mvebu_armada-8k/mikrotik-rb5009.env
|
|
|
+@@ -0,0 +1,52 @@
|
|
|
++openwrt_initramfs=openwrt-mvebu-cortexa72-mikrotik_rb5009-initramfs-uImage.itb
|
|
|
++boot_devices=ubi usb net
|
|
|
++recovery_boot_devices=usb net
|
|
|
++
|
|
|
++button_cmd_0_name=reset
|
|
|
++button_cmd_0=run recovery_bootcmd
|
|
|
++
|
|
|
++recovery_bootcmd=
|
|
|
++ led green:sfp on;
|
|
|
++ led blue:hdr1 on;
|
|
|
++ led blue:hdr2 on;
|
|
|
++
|
|
|
++ for b in ${recovery_boot_devices}; do
|
|
|
++ if test ${b} = usb; then
|
|
|
++ run usbboot;
|
|
|
++ fi;
|
|
|
++ if test ${b} = net; then
|
|
|
++ run netboot;
|
|
|
++ fi;
|
|
|
++ done;
|
|
|
++
|
|
|
++bootcmd=
|
|
|
++ for b in ${boot_devices}; do
|
|
|
++ if test ${b} = ubi; then
|
|
|
++ run ubiboot;
|
|
|
++ fi;
|
|
|
++ if test ${b} = usb; then
|
|
|
++ run usbboot;
|
|
|
++ fi;
|
|
|
++ if test ${b} = net; then
|
|
|
++ run netboot;
|
|
|
++ fi;
|
|
|
++ done;
|
|
|
++
|
|
|
++ubiboot=
|
|
|
++ echo Booting from NAND (UBI);
|
|
|
++ ubi part ubi;
|
|
|
++ setenv loadimagecmd ${ubiloadimage};
|
|
|
++ ubi read ${loadaddr} kernel;
|
|
|
++ bootm ${loadaddr};
|
|
|
++
|
|
|
++usbboot=
|
|
|
++ echo Booting from USB Storage;
|
|
|
++ usb start;
|
|
|
++ load usb 0:1 ${loadaddr} ${openwrt_initramfs};
|
|
|
++ bootm ${loadaddr};
|
|
|
++
|
|
|
++netboot=
|
|
|
++ echo Booting from Network;
|
|
|
++ dhcp;
|
|
|
++ tftpboot ${loadaddr} ${openwrt_initramfs};
|
|
|
++ bootm ${loadaddr};
|
|
|
+--- /dev/null
|
|
|
++++ b/configs/mvebu_rb5009_defconfig
|
|
|
+@@ -0,0 +1,97 @@
|
|
|
++CONFIG_ARM=y
|
|
|
++CONFIG_ARCH_CPU_INIT=y
|
|
|
++CONFIG_ARCH_MVEBU=y
|
|
|
++CONFIG_TEXT_BASE=0x0
|
|
|
++CONFIG_NR_DRAM_BANKS=2
|
|
|
++CONFIG_ENV_SOURCE_FILE="mikrotik-rb5009"
|
|
|
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
|
|
|
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000
|
|
|
++CONFIG_TARGET_MVEBU_ARMADA_8K=y
|
|
|
++CONFIG_ENV_SIZE=0x20000
|
|
|
++CONFIG_ENV_OFFSET=0xfe0000
|
|
|
++CONFIG_ENV_SECT_SIZE=0x10000
|
|
|
++CONFIG_DM_GPIO=y
|
|
|
++CONFIG_DEFAULT_DEVICE_TREE="armada-7040-rb5009"
|
|
|
++CONFIG_DEBUG_UART_BASE=0xf0512000
|
|
|
++CONFIG_DEBUG_UART_CLOCK=200000000
|
|
|
++CONFIG_SYS_LOAD_ADDR=0x800000
|
|
|
++CONFIG_DEBUG_UART=y
|
|
|
++# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
|
|
|
++CONFIG_REMAKE_ELF=y
|
|
|
++CONFIG_BUTTON_CMD=y
|
|
|
++CONFIG_FIT=y
|
|
|
++CONFIG_FIT_VERBOSE=y
|
|
|
++# CONFIG_BOOTSTD is not set
|
|
|
++CONFIG_SUPPORT_RAW_INITRD=y
|
|
|
++CONFIG_BOOTDELAY=5
|
|
|
++CONFIG_SYS_CONSOLE_INFO_QUIET=y
|
|
|
++CONFIG_LOG=y
|
|
|
++CONFIG_LOG_ERROR_RETURN=y
|
|
|
++# CONFIG_DISPLAY_CPUINFO is not set
|
|
|
++# CONFIG_DISPLAY_BOARDINFO is not set
|
|
|
++CONFIG_DISPLAY_BOARDINFO_LATE=y
|
|
|
++CONFIG_BOARD_EARLY_INIT_F=y
|
|
|
++CONFIG_HUSH_PARSER=y
|
|
|
++CONFIG_CMD_GPIO=y
|
|
|
++CONFIG_CMD_I2C=y
|
|
|
++CONFIG_CMD_MMC=y
|
|
|
++CONFIG_CMD_MTD=y
|
|
|
++CONFIG_CMD_PART=y
|
|
|
++CONFIG_CMD_PCI=y
|
|
|
++CONFIG_CMD_SPI=y
|
|
|
++CONFIG_CMD_USB=y
|
|
|
++# CONFIG_CMD_SETEXPR is not set
|
|
|
++CONFIG_CMD_DHCP=y
|
|
|
++CONFIG_CMD_TFTPPUT=y
|
|
|
++CONFIG_CMD_MII=y
|
|
|
++CONFIG_CMD_PING=y
|
|
|
++CONFIG_CMD_PXE=y
|
|
|
++CONFIG_CMD_CACHE=y
|
|
|
++CONFIG_CMD_TIME=y
|
|
|
++CONFIG_CMD_SYSBOOT=y
|
|
|
++CONFIG_CMD_EXT4=y
|
|
|
++CONFIG_CMD_EXT4_WRITE=y
|
|
|
++CONFIG_CMD_FAT=y
|
|
|
++CONFIG_CMD_FS_GENERIC=y
|
|
|
++CONFIG_CMD_UBI=y
|
|
|
++CONFIG_EFI_PARTITION=y
|
|
|
++CONFIG_ENV_OVERWRITE=y
|
|
|
++CONFIG_ENV_IS_IN_SPI_FLASH=y
|
|
|
++CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
|
|
++CONFIG_NET_RANDOM_ETHADDR=y
|
|
|
++CONFIG_BUTTON=y
|
|
|
++CONFIG_BUTTON_GPIO=y
|
|
|
++CONFIG_GPIO_HOG=y
|
|
|
++CONFIG_DM_I2C=y
|
|
|
++CONFIG_SYS_I2C_MVTWSI=y
|
|
|
++CONFIG_LED=y
|
|
|
++CONFIG_LED_GPIO=y
|
|
|
++CONFIG_MISC=y
|
|
|
++CONFIG_MTD_RAW_NAND=y
|
|
|
++CONFIG_SYS_NAND_USE_FLASH_BBT=y
|
|
|
++CONFIG_NAND_PXA3XX=y
|
|
|
++CONFIG_SYS_NAND_ONFI_DETECTION=y
|
|
|
++CONFIG_SPI_FLASH_SFDP_SUPPORT=y
|
|
|
++CONFIG_SPI_FLASH_WINBOND=y
|
|
|
++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
|
|
++CONFIG_SPI_FLASH_MTD=y
|
|
|
++CONFIG_PHY_MARVELL=y
|
|
|
++CONFIG_PHY_GIGE=y
|
|
|
++CONFIG_MVPP2=y
|
|
|
++CONFIG_PHY=y
|
|
|
++CONFIG_MVEBU_COMPHY_SUPPORT=y
|
|
|
++CONFIG_PINCTRL=y
|
|
|
++CONFIG_PINCTRL_ARMADA_8K=y
|
|
|
++CONFIG_DEBUG_UART_SHIFT=2
|
|
|
++CONFIG_DEBUG_UART_ANNOUNCE=y
|
|
|
++CONFIG_SYS_NS16550=y
|
|
|
++CONFIG_KIRKWOOD_SPI=y
|
|
|
++CONFIG_USB=y
|
|
|
++CONFIG_USB_XHCI_HCD=y
|
|
|
++CONFIG_USB_EHCI_HCD=y
|
|
|
++CONFIG_USB_STORAGE=y
|
|
|
++CONFIG_USB_HOST_ETHER=y
|
|
|
++CONFIG_USB_ETHER_RTL8152=y
|
|
|
++CONFIG_YAFFS2=y
|
|
|
++# CONFIG_SHA256 is not set
|
|
|
++# CONFIG_EFI_LOADER is not set
|