460 lines
10 KiB
Diff
460 lines
10 KiB
Diff
From 163b07bda901b728f4f208a296c15b513f9d5b49 Mon Sep 17 00:00:00 2001
|
|
From: Robert Marko <robimarko@gmail.com>
|
|
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 <robimarko@gmail.com>
|
|
---
|
|
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
|