From 163b07bda901b728f4f208a296c15b513f9d5b49 Mon Sep 17 00:00:00 2001 From: Robert Marko 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 --- 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 @@ -177,6 +177,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 +#include + +/ { + 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 = ; + }; + }; +}; + +&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 = ; + }; + + phy1 { + phy-type = ; + }; + + phy2 { + phy-type = ; + phy-speed = ; + }; + + phy3 { + phy-type = ; + phy-speed = ; + }; + + phy4 { + phy-type = ; + }; + + phy5 { + phy-type = ; + }; +}; + +&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