diff mbox

[v3,00/20] Refactor the architecture parts of mt7628

Message ID fd102252-346b-9649-b953-6b1595195a07@mclink.it
State New
Headers show

Commit Message

Mauro Condarelli Feb. 11, 2020, 10:58 a.m. UTC
Thanks Daniel.

On 2/10/20 10:28 PM, Daniel Schwierzeck wrote:
> Hi Mauro,
>
> Am 10.02.20 um 21:20 schrieb Mauro Condarelli:
>> FYI
>> I've been using this patchset for over a week without any adverse effect.
>> It allowed me to port to VoCore2 board.
>> Should I add a "Tested-by" flag?
>> If so: how should I do it?
>>
>> Regards
>> Mauro Codarelli
>>
> sorry that I could respond to your questions earlier. I've pushed the
> complete patch set from Weijie to:
>
> https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
I tried to use this repo/branch, but something is wrong (or I goofed badly).
> Maybe this helps you with development. If you have a bootable patch set
> (you can do MMC later) for your VoCore2 board, please submit a regular
> patch series based on that branch so that we can review again.
I *do* have a bootable patchset built on top of master + Nemirovsky
"reconfigurable cpu clocks" + Weijie v3.
Result is fully working, including net and mmc/SD.

This patchset applies cleanly to uboot-mips/testing and compile
apparently without errors, but resulting u-boot.bin does not work.
By "does not work" I mean it does not utter a single char on debug
serial.

I tried to do a complete diff between my working tree and this
non-working one and there are tons of differences, but I couldn't
spot anything that might be relevant.

I am unsure on how to proceed; please advise.
> ===8<----
Many thanks
Mauro Condarelli


My complete patchset follows:
This includes some project-specific settings I need to remove
before actual submission, but I left them in because *this*
is working for me.
0:1 uboot.scr && source 84000000 && echo Flash updated\0"               
                                    \
+    "boot_a=echo \"Loading System A\";load mmc 0:5 85000000
/boot/uImage; setenv bootargs \"${default_bootargs} mtdparts=${mtdparts}
root=/dev/mmcblk0p5\"; bootm ${fileaddr}\0"                            \
+    "boot_b=echo \"Loading System B\";load mmc 0:6 85000000
/boot/uImage; setenv bootargs \"${default_bootargs} mtdparts=${mtdparts}
root=/dev/mmcblk0p6\"; bootm ${fileaddr}\0"                            \
+    "boot_r=echo \"Loading Recovery\"; setenv bootargs
\"${default_bootargs} mtdparts=${mtdparts} root=/dev/mtdblock5\"; bootm
bc050000\0"                                                \
+    "remove_boot=if env exists BOOT_CURRENT; then setenv BOOT_CURRENT;
saveenv; elif env exixts BOOT_A_GOOD; then setenv BOOT_A_GOOD; saveenv;
elif env exists BOOT_B_GOOD; then setenv BOOT_B_GOOD; saveenv; fi\0"   
        \
+    "boot_now=if test \"${BOOT_CURRENT}\" = A; then run boot_a; elif
test \"${BOOT_CURRENT}\" = B; then run boot_b; elif env exists
BOOT_A_GOOD; then run boot_a; elif env exists test BOOT_B_GOOD; then run
boot_b; else run boot_r; fi\0"    \
+    "do_boot=test ${bootcount} -gt 1 && run remove_boot; run boot_now"
+    // "\0bootcmd=mmc rescan && run do_boot"
+
+#endif //__VOCORE2_CONFIG_H__

Comments

Stefan Roese Feb. 11, 2020, 11:16 a.m. UTC | #1
Hi Mauro,

On 11.02.20 11:58, Mauro Condarelli wrote:
> Thanks Daniel.
> 
> On 2/10/20 10:28 PM, Daniel Schwierzeck wrote:
>> Hi Mauro,
>>
>> Am 10.02.20 um 21:20 schrieb Mauro Condarelli:
>>> FYI
>>> I've been using this patchset for over a week without any adverse effect.
>>> It allowed me to port to VoCore2 board.
>>> Should I add a "Tested-by" flag?
>>> If so: how should I do it?
>>>
>>> Regards
>>> Mauro Codarelli
>>>
>> sorry that I could respond to your questions earlier. I've pushed the
>> complete patch set from Weijie to:
>>
>> https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
> I tried to use this repo/branch, but something is wrong (or I goofed badly).

Just a quick reply: I tested u-boot-mips/testing today and it works just
fine on both LinkIt and the GARDENA board. So there is nothing wrong
with this repository AFAICT.

You might need to rebase your patch on top of this branch, as some files
might have changes in the meantime.

Thanks,
Stefan

>> Maybe this helps you with development. If you have a bootable patch set
>> (you can do MMC later) for your VoCore2 board, please submit a regular
>> patch series based on that branch so that we can review again.
> I *do* have a bootable patchset built on top of master + Nemirovsky
> "reconfigurable cpu clocks" + Weijie v3.
> Result is fully working, including net and mmc/SD.
> 
> This patchset applies cleanly to uboot-mips/testing and compile
> apparently without errors, but resulting u-boot.bin does not work.
> By "does not work" I mean it does not utter a single char on debug
> serial.
> 
> I tried to do a complete diff between my working tree and this
> non-working one and there are tons of differences, but I couldn't
> spot anything that might be relevant.
> 
> I am unsure on how to proceed; please advise.
>> ===8<----
> Many thanks
> Mauro Condarelli
> 
> 
> My complete patchset follows:
> This includes some project-specific settings I need to remove
> before actual submission, but I left them in because *this*
> is working for me.
> ==========================================
>  From f1828bcacbd3fc3bc8aa9243b302ab2b7a509d88 Mon Sep 17 00:00:00 2001
> From: Mauro Condarelli <mc5686 at mclink.it>
> Date: Tue, 17 Dec 2019 10:54:21 +0100
> Subject: [PATCH] Add support for SoM "VoCore2".
> 
> Small patch series to add support for VoCore/VoCore2 board.
> 
> VoCore is open hardware and runs OpenWrt/LEDE.
> It has WIFI, USB, UART, 20+ GPIOs but is only one inch square.
> It will help you to make a smart house, study embedded system
> or even make the tiniest router in the world.
> 
> Details about this SoM can be found at "https://vocore.io/v2.html".
> 
> Series-notes:
> This port is working for me and able to boot Linux v5.0.
> Standard subsystems are enabled (SPI NOR, MMC/SD and USB).
> Network is not currently enabled as my Vocore2 board networking
> relies essentially on WiFi (which works under Linux).
> END
> 
> Series-to: uboot
> Series-name: VoCore2
> Series-cc: danielschwierzeck
> Series-cc: stroese
> Series-cc: Weijie Gao <weijie.gao at mediatek.com>
> Series-version: 5
> 
> Series-changes: 2
> - Removed some dead code
> - Changed Author to my full name (no nick)
> - Removed unwanted fixup to .dts generation (not my call).
> - Fixed commit message
> - Fixed various variables/filenames to include Vendor name
> - Changed Vendor name (Vonger -> Vocore)
> 
> Series-changes: 3
> - based on top of Weijie Gao patchset:
>      "[v3,xx/20]Refactor the architecture parts of mt7628"
> 
> Series-changes: 4
> - Reverted some overzealous DTS cleaning.
> - Added support for bootcount
> 
> Series-changes: 5
> - Added network setup.
> - Move back environment to SPI NOR.
> - Changes to environment default settings.
> 
> Signed-off-by: Mauro Condarelli <mc5686 at mclink.it>
> ---
>   arch/mips/dts/Makefile               |   1 +
>   arch/mips/dts/mt7628a.dtsi           |   5 ++
>   arch/mips/dts/vocore_vocore2.dts     |  78 ++++++++++++++++++++
>   arch/mips/mach-mtmips/Kconfig        |   8 ++
>   board/vocore/vocore2/Kconfig         |  12 +++
>   board/vocore/vocore2/Makefile        |   3 +
>   board/vocore/vocore2/board.c         |  33 +++++++++
>   configs/vocore2_defconfig            | 105 +++++++++++++++++++++++++++
>   configs/vocore2_defconfig_ENV_IN_FAT | 104 ++++++++++++++++++++++++++
>   include/configs/vocore2.h            |  76 +++++++++++++++++++
>   10 files changed, 425 insertions(+)
>   create mode 100644 arch/mips/dts/vocore_vocore2.dts
>   create mode 100644 board/vocore/vocore2/Kconfig
>   create mode 100644 board/vocore/vocore2/Makefile
>   create mode 100644 board/vocore/vocore2/board.c
>   create mode 100644 configs/vocore2_defconfig
>   create mode 100644 configs/vocore2_defconfig_ENV_IN_FAT
>   create mode 100644 include/configs/vocore2.h
> 
> diff --git a/arch/mips/dts/Makefile b/arch/mips/dts/Makefile
> index cbd0c8bc8b..f711e9fb59 100644
> --- a/arch/mips/dts/Makefile
> +++ b/arch/mips/dts/Makefile
> @@ -23,6 +23,7 @@ dtb-$(CONFIG_BOARD_NETGEAR_DGND3700V2) +=
> netgear,dgnd3700v2.dtb
>   dtb-$(CONFIG_BOARD_SAGEM_FAST1704) += sagem,f at st1704.dtb
>   dtb-$(CONFIG_BOARD_SFR_NB4_SER) += sfr,nb4-ser.dtb
>   dtb-$(CONFIG_BOARD_TPLINK_WDR4300) += tplink_wdr4300.dtb
> +dtb-$(CONFIG_BOARD_VOCORE2) += vocore_vocore2.dtb
>   dtb-$(CONFIG_TARGET_JZ4780_CI20) += ci20.dtb
>   dtb-$(CONFIG_SOC_LUTON) += luton_pcb090.dtb luton_pcb091.dtb
>   dtb-$(CONFIG_SOC_OCELOT) += ocelot_pcb120.dtb ocelot_pcb123.dtb
> diff --git a/arch/mips/dts/mt7628a.dtsi b/arch/mips/dts/mt7628a.dtsi
> index 6baa63add3..192599c37f 100644
> --- a/arch/mips/dts/mt7628a.dtsi
> +++ b/arch/mips/dts/mt7628a.dtsi
> @@ -402,6 +402,11 @@
>           builtin-cd = <1>;
>           r_smpl = <1>;
>   
> +        bus-width = <4>;
> +        max-frequency = <48000000>;
> +        cap-sd-highspeed;
> +        cap-mmc-highspeed;
> +
>           clocks = <&clk48m>, <&clkctrl CLK_SDXC>;
>           clock-names = "source", "hclk";
>   
> diff --git a/arch/mips/dts/vocore_vocore2.dts
> b/arch/mips/dts/vocore_vocore2.dts
> new file mode 100644
> index 0000000000..1d611abb73
> --- /dev/null
> +++ b/arch/mips/dts/vocore_vocore2.dts
> @@ -0,0 +1,78 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2019 Mauro Condarelli <mc5686 at mclink.it>
> + */
> +
> +/dts-v1/;
> +
> +#include "mt7628a.dtsi"
> +#include <dt-bindings/gpio/gpio.h>
> +
> +/ {
> +    compatible = "vocore,vocore2", "ralink,mt7628a-soc";
> +    model = "VoCore2";
> +
> +    aliases {
> +        serial0 = &uart2;
> +        spi0 = &spi0;
> +    };
> +
> +    memory at 0 {
> +        device_type = "memory";
> +        reg = <0x0 0x08000000>;
> +    };
> +    leds {
> +        compatible = "gpio-leds";
> +
> +        power {
> +            label = "vocore:power";
> +            gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
> +            default-state = "off";
> +        };
> +    };
> +
> +    chosen {
> +        bootargs = "console=ttyS2,115200";
> +        stdout-path = &uart2;
> +    };
> +};
> +
> +&pinctrl {
> +    state_default: pin_state {
> +        p0led {
> +            groups = "p0led_a";
> +            function = "led";
> +        };
> +    };
> +};
> +
> +&uart2 {
> +    status = "okay";
> +};
> +
> +&spi0 {
> +    status = "okay";
> +    nor0: spi-flash at 0 {
> +        #address-cells = <1>;
> +        #size-cells = <1>;
> +        compatible = "jedec,spi-nor";
> +        spi-max-frequency = <25000000>;
> +        reg = <0>;
> +    };
> +};
> +
> +&eth {
> +    status = "okay";
> +
> +    pinctrl-names = "default";
> +    pinctrl-0 = <&ephy_iot_mode>;
> +    mediatek,poll-link-phy = <0>;
> +};
> +
> +&mmc {
> +    status = "okay";
> +
> +    pinctrl-names = "default";
> +    pinctrl-0 = <&sd_iot_mode>;
> +    pinctrl-1 = <&sd_iot_mode>;
> +};
> diff --git a/arch/mips/mach-mtmips/Kconfig b/arch/mips/mach-mtmips/Kconfig
> index bcd635f438..489e466daf 100644
> --- a/arch/mips/mach-mtmips/Kconfig
> +++ b/arch/mips/mach-mtmips/Kconfig
> @@ -83,6 +83,13 @@ config BOARD_MT7628_RFB
>         SPI-NOR flash, 1 built-in switch with 5 ports, 1 UART, 1 USB host,
>         1 SDXC, 1 PCIe socket and JTAG pins.
>   
> +config BOARD_VOCORE2
> +    bool "VoCore2"
> +    depends on SOC_MT7628
> +    help
> +      VoCore VoCore2 board has a MT7628 SoC with 128 MiB of RAM
> +      and 16 MiB of flash (SPI).
> +
>   endchoice
>   
>   config SPL_UART2_SPIS_PINMUX
> @@ -96,5 +103,6 @@ config SPL_UART2_SPIS_PINMUX
>   source "board/gardena/smart-gateway-mt7688/Kconfig"
>   source "board/mediatek/mt7628/Kconfig"
>   source "board/seeed/linkit-smart-7688/Kconfig"
> +source "board/vocore/vocore2/Kconfig"
>   
>   endmenu
> diff --git a/board/vocore/vocore2/Kconfig b/board/vocore/vocore2/Kconfig
> new file mode 100644
> index 0000000000..baeff31b69
> --- /dev/null
> +++ b/board/vocore/vocore2/Kconfig
> @@ -0,0 +1,12 @@
> +if BOARD_VOCORE2
> +
> +config SYS_BOARD
> +    default "vocore2"
> +
> +config SYS_VENDOR
> +    default "vocore"
> +
> +config SYS_CONFIG_NAME
> +    default "vocore2"
> +
> +endif
> diff --git a/board/vocore/vocore2/Makefile b/board/vocore/vocore2/Makefile
> new file mode 100644
> index 0000000000..70cd7a8e56
> --- /dev/null
> +++ b/board/vocore/vocore2/Makefile
> @@ -0,0 +1,3 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +
> +obj-y += board.o
> diff --git a/board/vocore/vocore2/board.c b/board/vocore/vocore2/board.c
> new file mode 100644
> index 0000000000..d387715d14
> --- /dev/null
> +++ b/board/vocore/vocore2/board.c
> @@ -0,0 +1,33 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2019 Mauro Condarelli <mc5686 at mclink.it>
> + *
> + * Note: this is largely copied from:
> + *       board/seeed/linkit_smart_7688/board.c
> + *       Copyright (C) 2018 Stefan Roese <sr at denx.de>
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +
> +#define MT76XX_GPIO1_MODE   0x10000060
> +
> +void board_debug_uart_init(void)
> +{
> +    void __iomem *gpio_mode;
> +
> +    /* Select UART2 mode instead of GPIO mode (default) */
> +    gpio_mode = ioremap_nocache(MT76XX_GPIO1_MODE, 0x100);
> +    clrbits_le32(gpio_mode, GENMASK(27, 26));
> +}
> +
> +int board_early_init_f(void)
> +{
> +    /*
> +     * The pin muxing of UART2 also needs to be done, if debug uart
> +     * is not enabled. So we need to call this function here as well.
> +     */
> +    board_debug_uart_init();
> +
> +    return 0;
> +}
> diff --git a/configs/vocore2_defconfig b/configs/vocore2_defconfig
> new file mode 100644
> index 0000000000..d243c0f79b
> --- /dev/null
> +++ b/configs/vocore2_defconfig
> @@ -0,0 +1,105 @@
> +CONFIG_MIPS=y
> +CONFIG_SPL_LIBCOMMON_SUPPORT=y
> +CONFIG_SPL_LIBGENERIC_SUPPORT=y
> +CONFIG_ENV_SIZE=0x1000
> +CONFIG_ENV_SECT_SIZE=0x1000
> +CONFIG_ENV_OFFSET=0x04e000
> +CONFIG_SPL_SERIAL_SUPPORT=y
> +CONFIG_SPL_SYS_MALLOC_F_LEN=0x20000
> +CONFIG_NR_DRAM_BANKS=1
> +CONFIG_SPL=y
> +CONFIG_SYS_BOOTCOUNT_SINGLEWORD=y
> +CONFIG_SYS_BOOTCOUNT_ADDR=0xb000006c
> +CONFIG_ARCH_MTMIPS=y
> +CONFIG_BOARD_VOCORE2=y
> +CONFIG_SPL_UART2_SPIS_PINMUX=y
> +CONFIG_RESTORE_EXCEPTION_VECTOR_BASE=y
> +CONFIG_MIPS_BOOT_FDT=y
> +CONFIG_ENV_VARS_UBOOT_CONFIG=y
> +CONFIG_SYS_BOOT_GET_CMDLINE=y
> +CONFIG_SYS_BOOT_GET_KBD=y
> +CONFIG_FIT=y
> +CONFIG_FIT_SIGNATURE=y
> +CONFIG_LEGACY_IMAGE_FORMAT=y
> +CONFIG_OF_STDOUT_VIA_ALIAS=y
> +CONFIG_USE_BOOTARGS=y
> +CONFIG_LOGLEVEL=8
> +CONFIG_SYS_CONSOLE_INFO_QUIET=y
> +CONFIG_VERSION_VARIABLE=y
> +CONFIG_DISPLAY_BOARDINFO_LATE=y
> +CONFIG_BOARD_EARLY_INIT_F=y
> +CONFIG_SPL_SYS_MALLOC_SIMPLE=y
> +CONFIG_SPL_NOR_SUPPORT=y
> +CONFIG_HUSH_PARSER=y
> +CONFIG_CMD_LICENSE=y
> +# CONFIG_BOOTM_NETBSD is not set
> +# CONFIG_BOOTM_PLAN9 is not set
> +# CONFIG_BOOTM_RTEMS is not set
> +# CONFIG_BOOTM_VXWORKS is not set
> +# CONFIG_CMD_ELF is not set
> +# CONFIG_CMD_XIMG is not set
> +# CONFIG_CMD_CRC32 is not set
> +CONFIG_CMD_MEMINFO=y
> +# CONFIG_CMD_FLASH is not set
> +CONFIG_CMD_GPIO=y
> +CONFIG_CMD_GPT=y
> +CONFIG_CMD_GPT_RENAME=y
> +# CONFIG_CMD_LOADS is not set
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_MTD=y
> +CONFIG_CMD_PART=y
> +CONFIG_CMD_SPI=y
> +CONFIG_CMD_USB=y
> +CONFIG_CMD_WDT=y
> +CONFIG_CMD_DHCP=y
> +CONFIG_CMD_MII=y
> +CONFIG_CMD_PING=y
> +CONFIG_CMD_BOOTCOUNT=y
> +CONFIG_CMD_TIME=y
> +CONFIG_CMD_FAT=y
> +CONFIG_CMD_FS_GENERIC=y
> +CONFIG_CMD_MTDPARTS=y
> +CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
> +CONFIG_MTDPARTS_DEFAULT="spi0.0:312k(u-boot),4k(env),4k(factory),2368k(kernel),-(filesystem)"
> +CONFIG_DEFAULT_DEVICE_TREE="vocore_vocore2"
> +CONFIG_ENV_IS_IN_SPI_FLASH=y
> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
> +CONFIG_NET_RANDOM_ETHADDR=y
> +CONFIG_SPL_DM=y
> +# CONFIG_DM_DEVICE_REMOVE is not set
> +CONFIG_BOOTCOUNT_LIMIT=y
> +CONFIG_LED=y
> +CONFIG_LED_BLINK=y
> +CONFIG_LED_GPIO=y
> +CONFIG_MMC=y
> +CONFIG_DM_MMC=y
> +# CONFIG_MMC_HW_PARTITIONING is not set
> +CONFIG_MMC_MTK=y
> +CONFIG_MTD=y
> +CONFIG_SPI_FLASH_SFDP_SUPPORT=y
> +CONFIG_SPI_FLASH_GIGADEVICE=y
> +CONFIG_SPI_FLASH_MACRONIX=y
> +CONFIG_SPI_FLASH_SPANSION=y
> +CONFIG_SPI_FLASH_STMICRO=y
> +CONFIG_SPI_FLASH_WINBOND=y
> +CONFIG_SPI_FLASH_MTD=y
> +CONFIG_MT7628_ETH=y
> +CONFIG_PHY=y
> +CONFIG_MT76X8_USB_PHY=y
> +# CONFIG_RAM_ROCKCHIP_DEBUG is not set
> +CONFIG_SPECIFY_CONSOLE_INDEX=y
> +CONFIG_CONS_INDEX=3
> +CONFIG_SPI=y
> +CONFIG_MT7621_SPI=y
> +CONFIG_USB=y
> +CONFIG_DM_USB=y
> +CONFIG_USB_EHCI_HCD=y
> +CONFIG_USB_EHCI_GENERIC=y
> +CONFIG_USB_STORAGE=y
> +CONFIG_WDT=y
> +CONFIG_WDT_MT7621=y
> +CONFIG_FS_EXT4=y
> +CONFIG_FAT_WRITE=y
> +CONFIG_LZMA=y
> +CONFIG_LZO=y
> diff --git a/configs/vocore2_defconfig_ENV_IN_FAT
> b/configs/vocore2_defconfig_ENV_IN_FAT
> new file mode 100644
> index 0000000000..02727859e4
> --- /dev/null
> +++ b/configs/vocore2_defconfig_ENV_IN_FAT
> @@ -0,0 +1,104 @@
> +CONFIG_MIPS=y
> +CONFIG_SPL_LIBCOMMON_SUPPORT=y
> +CONFIG_SPL_LIBGENERIC_SUPPORT=y
> +CONFIG_ENV_SIZE=0x1000
> +CONFIG_SPL_SERIAL_SUPPORT=y
> +CONFIG_SPL_SYS_MALLOC_F_LEN=0x20000
> +CONFIG_NR_DRAM_BANKS=1
> +CONFIG_SPL=y
> +CONFIG_SYS_BOOTCOUNT_SINGLEWORD=y
> +CONFIG_SYS_BOOTCOUNT_ADDR=0xb000006c
> +CONFIG_ARCH_MTMIPS=y
> +CONFIG_BOARD_VOCORE2=y
> +CONFIG_SPL_UART2_SPIS_PINMUX=y
> +CONFIG_RESTORE_EXCEPTION_VECTOR_BASE=y
> +CONFIG_MIPS_BOOT_FDT=y
> +CONFIG_ENV_VARS_UBOOT_CONFIG=y
> +CONFIG_SYS_BOOT_GET_CMDLINE=y
> +CONFIG_SYS_BOOT_GET_KBD=y
> +CONFIG_FIT=y
> +CONFIG_FIT_SIGNATURE=y
> +CONFIG_LEGACY_IMAGE_FORMAT=y
> +CONFIG_OF_STDOUT_VIA_ALIAS=y
> +CONFIG_USE_BOOTARGS=y
> +CONFIG_LOGLEVEL=8
> +CONFIG_SYS_CONSOLE_INFO_QUIET=y
> +CONFIG_VERSION_VARIABLE=y
> +CONFIG_DISPLAY_BOARDINFO_LATE=y
> +CONFIG_BOARD_EARLY_INIT_F=y
> +CONFIG_SPL_SYS_MALLOC_SIMPLE=y
> +CONFIG_SPL_NOR_SUPPORT=y
> +CONFIG_HUSH_PARSER=y
> +CONFIG_CMD_LICENSE=y
> +# CONFIG_BOOTM_NETBSD is not set
> +# CONFIG_BOOTM_PLAN9 is not set
> +# CONFIG_BOOTM_RTEMS is not set
> +# CONFIG_BOOTM_VXWORKS is not set
> +# CONFIG_CMD_ELF is not set
> +# CONFIG_CMD_XIMG is not set
> +# CONFIG_CMD_CRC32 is not set
> +CONFIG_CMD_MEMINFO=y
> +# CONFIG_CMD_FLASH is not set
> +CONFIG_CMD_GPIO=y
> +CONFIG_CMD_GPT=y
> +CONFIG_CMD_GPT_RENAME=y
> +# CONFIG_CMD_LOADS is not set
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_MTD=y
> +CONFIG_CMD_PART=y
> +CONFIG_CMD_SPI=y
> +CONFIG_CMD_USB=y
> +CONFIG_CMD_WDT=y
> +CONFIG_CMD_DHCP=y
> +CONFIG_CMD_MII=y
> +CONFIG_CMD_PING=y
> +CONFIG_CMD_BOOTCOUNT=y
> +CONFIG_CMD_TIME=y
> +CONFIG_CMD_FAT=y
> +CONFIG_CMD_FS_GENERIC=y
> +CONFIG_CMD_MTDPARTS=y
> +CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
> +CONFIG_MTDPARTS_DEFAULT="spi0.0:312k(u-boot),4k(env),4k(factory),2368k(kernel),-(filesystem)"
> +CONFIG_DEFAULT_DEVICE_TREE="vocore_vocore2"
> +CONFIG_ENV_IS_IN_FAT=y
> +CONFIG_ENV_FAT_INTERFACE="mmc"
> +CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
> +CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
> +CONFIG_NET_RANDOM_ETHADDR=y
> +CONFIG_SPL_DM=y
> +# CONFIG_DM_DEVICE_REMOVE is not set
> +CONFIG_BOOTCOUNT_LIMIT=y
> +CONFIG_LED=y
> +CONFIG_LED_BLINK=y
> +CONFIG_LED_GPIO=y
> +CONFIG_MMC=y
> +CONFIG_DM_MMC=y
> +# CONFIG_MMC_HW_PARTITIONING is not set
> +CONFIG_MMC_MTK=y
> +CONFIG_MTD=y
> +CONFIG_SPI_FLASH_SFDP_SUPPORT=y
> +CONFIG_SPI_FLASH_GIGADEVICE=y
> +CONFIG_SPI_FLASH_MACRONIX=y
> +CONFIG_SPI_FLASH_SPANSION=y
> +CONFIG_SPI_FLASH_STMICRO=y
> +CONFIG_SPI_FLASH_WINBOND=y
> +CONFIG_SPI_FLASH_MTD=y
> +CONFIG_MT7628_ETH=y
> +CONFIG_PHY=y
> +CONFIG_MT76X8_USB_PHY=y
> +# CONFIG_RAM_ROCKCHIP_DEBUG is not set
> +CONFIG_SPECIFY_CONSOLE_INDEX=y
> +CONFIG_CONS_INDEX=3
> +CONFIG_SPI=y
> +CONFIG_MT7621_SPI=y
> +CONFIG_USB=y
> +CONFIG_DM_USB=y
> +CONFIG_USB_EHCI_HCD=y
> +CONFIG_USB_EHCI_GENERIC=y
> +CONFIG_USB_STORAGE=y
> +CONFIG_WDT=y
> +CONFIG_WDT_MT7621=y
> +CONFIG_FS_EXT4=y
> +CONFIG_LZMA=y
> +CONFIG_LZO=y
> diff --git a/include/configs/vocore2.h b/include/configs/vocore2.h
> new file mode 100644
> index 0000000000..0e8f063acf
> --- /dev/null
> +++ b/include/configs/vocore2.h
> @@ -0,0 +1,76 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright (C) 2019 Mauro Condarelli <mc5686 at mclink.it>
> + */
> +
> +#ifndef __VOCORE2_CONFIG_H__
> +#define __VOCORE2_CONFIG_H__
> +
> +/* CPU */
> +#define CONFIG_SYS_MIPS_TIMER_FREQ    290000000
> +
> +/* RAM */
> +#define CONFIG_SYS_SDRAM_BASE        0x80000000
> +
> +#define CONFIG_SYS_LOAD_ADDR    CONFIG_SYS_SDRAM_BASE + 0x100000
> +
> +#define CONFIG_SYS_INIT_SP_OFFSET    0x400000
> +
> +/* SPL */
> +#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
> +#define CONFIG_SKIP_LOWLEVEL_INIT
> +#endif
> +
> +#define CONFIG_SYS_UBOOT_START        CONFIG_SYS_TEXT_BASE
> +#define CONFIG_SPL_BSS_START_ADDR    0x80010000
> +#define CONFIG_SPL_BSS_MAX_SIZE        0x10000
> +#define CONFIG_SPL_MAX_SIZE        0x10000
> +
> +/* Dummy value */
> +#define CONFIG_SYS_UBOOT_BASE        0
> +
> +/* Serial SPL */
> +#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_SERIAL_SUPPORT)
> +#define CONFIG_SYS_NS16550_MEM32
> +#define CONFIG_SYS_NS16550_CLK        40000000
> +#define CONFIG_SYS_NS16550_REG_SIZE    -4
> +#define CONFIG_SYS_NS16550_COM3        0xb0000e00
> +#define CONFIG_CONS_INDEX        3
> +
> +#endif
> +
> +/* UART */
> +#define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200, \
> +                    230400, 460800, 921600 }
> +
> +/* RAM */
> +#define CONFIG_SYS_MEMTEST_START    0x80100000
> +#define CONFIG_SYS_MEMTEST_END        0x80400000
> +
> +/* Memory usage */
> +#define CONFIG_SYS_MAXARGS        64
> +#define CONFIG_SYS_MALLOC_LEN        (1024 * 1024)
> +#define CONFIG_SYS_BOOTPARAMS_LEN    (128 * 1024)
> +#define CONFIG_SYS_CBSIZE        512
> +
> +/* U-Boot */
> +#define CONFIG_SYS_MONITOR_BASE        CONFIG_SYS_TEXT_BASE
> +
> +/* Environment settings */
> +#define CONFIG_BOOTCOMMAND \
> +    "run fupdate; setenv bootargs ${default_bootargs}
> mtdparts=${mtdparts} root=/dev/mtdblock5 && bootm 1c050000"
> +//  "load mmc 0:1 85000000 recov.uImage && load mmc 0:1 86000000
> recov.squashfs && setenv bootargs ${default_bootargs}
> mtdparts=${mtdparts} rd_start=0x${fileaddr} rd_size=0x${filesize} &&
> bootm 85000000;"
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> +    "default_bootargs=earlyprintk rootwait console=ttyS2,115200\0"
>                                                                         
>          \
> +    "mtdids=nor0=spi0.0\0"
>                                                              \
> +
> "mtdparts=spi0.0:312k(u-boot),4k(env),4k(factory),2368k(kernel),-(filesystem)\0"
>                                                                          \
> +    "fupdate=mmc rescan && load mmc 0:1 84000000 uboot.scr && fatrm mmc
> 0:1 uboot.scr && source 84000000 && echo Flash updated\0"
>                                      \
> +    "boot_a=echo \"Loading System A\";load mmc 0:5 85000000
> /boot/uImage; setenv bootargs \"${default_bootargs} mtdparts=${mtdparts}
> root=/dev/mmcblk0p5\"; bootm ${fileaddr}\0"                            \
> +    "boot_b=echo \"Loading System B\";load mmc 0:6 85000000
> /boot/uImage; setenv bootargs \"${default_bootargs} mtdparts=${mtdparts}
> root=/dev/mmcblk0p6\"; bootm ${fileaddr}\0"                            \
> +    "boot_r=echo \"Loading Recovery\"; setenv bootargs
> \"${default_bootargs} mtdparts=${mtdparts} root=/dev/mtdblock5\"; bootm
> bc050000\0"                                                \
> +    "remove_boot=if env exists BOOT_CURRENT; then setenv BOOT_CURRENT;
> saveenv; elif env exixts BOOT_A_GOOD; then setenv BOOT_A_GOOD; saveenv;
> elif env exists BOOT_B_GOOD; then setenv BOOT_B_GOOD; saveenv; fi\0"
>          \
> +    "boot_now=if test \"${BOOT_CURRENT}\" = A; then run boot_a; elif
> test \"${BOOT_CURRENT}\" = B; then run boot_b; elif env exists
> BOOT_A_GOOD; then run boot_a; elif env exists test BOOT_B_GOOD; then run
> boot_b; else run boot_r; fi\0"    \
> +    "do_boot=test ${bootcount} -gt 1 && run remove_boot; run boot_now"
> +    // "\0bootcmd=mmc rescan && run do_boot"
> +
> +#endif //__VOCORE2_CONFIG_H__
> 


Viele Grüße,
Stefan Roese
Mauro Condarelli Feb. 11, 2020, 12:34 p.m. UTC | #2
Thanks for the fast answer, Stefan.

On 2/11/20 12:16 PM, Stefan wrote:
> Hi Mauro,
> ===8<----
>>> https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
>> I tried to use this repo/branch, but something is wrong (or I goofed
>> badly).
>
> Just a quick reply: I tested u-boot-mips/testing today and it works just
> fine on both LinkIt and the GARDENA board. So there is nothing wrong
> with this repository AFAICT.
Suspect is there's something wrong with handling of SPL_UART2_SPIS_PINMUX
(that's where our boards are different), but I couldn't spot any relevant
difference.

> You might need to rebase your patch on top of this branch, as some files
> might have changes in the meantime.
What is the recommended procedure, in this case?
I did a:
  git format-patch --full-index -o ../transport weijie.v3
on old branch ("weijie.v3" is the branch on which I added Weijie's patches,
of course), an then I tried simply (on u-boot-mips):
  git checkout -b vocore2 testing
  git am -3 ../transport/*

>
> Thanks,
> Stefan
> ===8<----
Regards
Mauro
Stefan Roese Feb. 11, 2020, 12:41 p.m. UTC | #3
On 11.02.20 13:34, Mauro Condarelli wrote:
> Thanks for the fast answer, Stefan.
> 
> On 2/11/20 12:16 PM, Stefan wrote:
>> Hi Mauro,
>> ===8<----
>>>> https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
>>> I tried to use this repo/branch, but something is wrong (or I goofed
>>> badly).
>>
>> Just a quick reply: I tested u-boot-mips/testing today and it works just
>> fine on both LinkIt and the GARDENA board. So there is nothing wrong
>> with this repository AFAICT.
> Suspect is there's something wrong with handling of SPL_UART2_SPIS_PINMUX
> (that's where our boards are different), but I couldn't spot any relevant
> difference.

Correct, I have not selected this one. You need to select it via "make
menuconfig" for your board and save it to your defconfig by "make
savedefconfig".

If this does not work, then please double-check, if the correct code is
called in this pinx-mux case.

>> You might need to rebase your patch on top of this branch, as some files
>> might have changes in the meantime.
> What is the recommended procedure, in this case?
> I did a:
>    git format-patch --full-index -o ../transport weijie.v3
> on old branch ("weijie.v3" is the branch on which I added Weijie's patches,
> of course), an then I tried simply (on u-boot-mips):
>    git checkout -b vocore2 testing
>    git am -3 ../transport/*

This sounds like a valid approach.

There are many ways. I usually use "git rebase" for this:

In your case:

- Check out your current working branch
- git checkout -b new-version
- git rebase u-boot-mips/testing

The rebase command will most likely issue some warnings or errors on
files that you need to manually fix. After this "git rebase --continue".
But the output will tell you, what to do.

But again, your approach looks also fine.

Thanks,
Stefan
Daniel Schwierzeck Feb. 11, 2020, 1:54 p.m. UTC | #4
On Tue, Feb 11, 2020 at 11:58 AM Mauro Condarelli <mc5686 at mclink.it> wrote:
>
> Thanks Daniel.
>
> On 2/10/20 10:28 PM, Daniel Schwierzeck wrote:
> > Hi Mauro,
> >
> > Am 10.02.20 um 21:20 schrieb Mauro Condarelli:
> >> FYI
> >> I've been using this patchset for over a week without any adverse effect.
> >> It allowed me to port to VoCore2 board.
> >> Should I add a "Tested-by" flag?
> >> If so: how should I do it?
> >>
> >> Regards
> >> Mauro Codarelli
> >>
> > sorry that I could respond to your questions earlier. I've pushed the
> > complete patch set from Weijie to:
> >
> > https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
> I tried to use this repo/branch, but something is wrong (or I goofed badly).
> > Maybe this helps you with development. If you have a bootable patch set
> > (you can do MMC later) for your VoCore2 board, please submit a regular
> > patch series based on that branch so that we can review again.
> I *do* have a bootable patchset built on top of master + Nemirovsky
> "reconfigurable cpu clocks" + Weijie v3.
> Result is fully working, including net and mmc/SD.
>
> This patchset applies cleanly to uboot-mips/testing and compile
> apparently without errors, but resulting u-boot.bin does not work.
> By "does not work" I mean it does not utter a single char on debug
> serial.
>
> I tried to do a complete diff between my working tree and this
> non-working one and there are tons of differences, but I couldn't
> spot anything that might be relevant.
>
> I am unsure on how to proceed; please advise.

but do you reach the U-Boot prompt? If I apply your patch and build
it, I need to be able to program the resulting U-Boot image to SPI
flash and boot to U-Boot prompt. Also note that the final U-Boot image
with SPL is now called u-boot-mtmips.bin. Don't try to use u-boot.bin.

Regarding debug UART you also need to configure the serial driver with
"make menuconfig" (register base, clocks, baud rate etc.). There is no
driver model or device-tree involved at that point. I think Stefan
already told you the correct settings and you need this
board_early_init_f magic for the pinmux (don't forget to enable
CONFIG_BOARD_EARLY_INIT_F). But for the production mode debug UART
should be disabled anyway. SPL UART is different than debug UART.
AFAIU the regular driver model and device-tree stuff should work
there. For the pinmux you'll need the new CONFIG_SPL_UART2_SPIS_PINMUX
option. According to the code, you'll also need to configure
CONFIG_CONS_INDEX = 3.
Stefan Roese Feb. 11, 2020, 2:27 p.m. UTC | #5
On 11.02.20 14:54, Daniel Schwierzeck wrote:
> On Tue, Feb 11, 2020 at 11:58 AM Mauro Condarelli <mc5686 at mclink.it> wrote:
>>
>> Thanks Daniel.
>>
>> On 2/10/20 10:28 PM, Daniel Schwierzeck wrote:
>>> Hi Mauro,
>>>
>>> Am 10.02.20 um 21:20 schrieb Mauro Condarelli:
>>>> FYI
>>>> I've been using this patchset for over a week without any adverse effect.
>>>> It allowed me to port to VoCore2 board.
>>>> Should I add a "Tested-by" flag?
>>>> If so: how should I do it?
>>>>
>>>> Regards
>>>> Mauro Codarelli
>>>>
>>> sorry that I could respond to your questions earlier. I've pushed the
>>> complete patch set from Weijie to:
>>>
>>> https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
>> I tried to use this repo/branch, but something is wrong (or I goofed badly).
>>> Maybe this helps you with development. If you have a bootable patch set
>>> (you can do MMC later) for your VoCore2 board, please submit a regular
>>> patch series based on that branch so that we can review again.
>> I *do* have a bootable patchset built on top of master + Nemirovsky
>> "reconfigurable cpu clocks" + Weijie v3.
>> Result is fully working, including net and mmc/SD.
>>
>> This patchset applies cleanly to uboot-mips/testing and compile
>> apparently without errors, but resulting u-boot.bin does not work.
>> By "does not work" I mean it does not utter a single char on debug
>> serial.
>>
>> I tried to do a complete diff between my working tree and this
>> non-working one and there are tons of differences, but I couldn't
>> spot anything that might be relevant.
>>
>> I am unsure on how to proceed; please advise.
> 
> but do you reach the U-Boot prompt? If I apply your patch and build
> it, I need to be able to program the resulting U-Boot image to SPI
> flash and boot to U-Boot prompt. Also note that the final U-Boot image
> with SPL is now called u-boot-mtmips.bin. Don't try to use u-boot.bin.

A quick remark on this, as I've forgotten to write about this:

I would like to change the resulting image name from this specific
"u-boot-mips.bin" to the already known "u-boot-with-spl.bin" name.
There is no need to introduce a new name here and there is nothing
"mtmips" specific in this image type.

Thanks,
Stefan
Mauro Condarelli Feb. 11, 2020, 4:11 p.m. UTC | #6
Sorry Daniel,
I seem unable to pass the message through.

I have, in front of me two, very similar directories:

u-boot.master:
built from master + Weijie.v3 patches + my vocore2 patch.

u-boot-mips:
built from u-boot-mips/testing + my vocore2 patch.

I was very careful not to change anything after patching.

In both directories I do:

make ARCH=mips CROSS_COMPILE=mipsel-linux- distclean
make ARCH=mips CROSS_COMPILE=mipsel-linux- vocore2_defconfig
make ARCH=mips CROSS_COMPILE=mipsel-linux-

Both produce similarly-sized u-boot-mtmips.bin (Flash version)
and u-boot.bin (RAM version).

On my target I do:

setenv autoload no; dhcp; tftpboot 80200000 192.168.7.101:u-boot.bin; go
${fileaddr}

In the case of the "master dir I get:

=> setenv autoload no; dhcp; tftpboot 80200000 192.168.7.101:u-boot.bin;
go ${fileaddr}
BOOTP broadcast 1
DHCP client bound to address 192.168.7.135 (115 ms)
Using eth at 10110000 device
TFTP from server 192.168.7.101; our IP address is 192.168.7.135
Filename 'u-boot.bin'.
Load address: 0x80200000
Loading: ####################################
     1.1 MiB/s
done
Bytes transferred = 527090 (80af2 hex)
## Starting application at 0x80200000 ...


U-Boot 2020.01-00648-gc46834052a-dirty (Feb 11 2020 - 09:30:52 +0100)

CPU:   MediaTek MT7628A ver:1 eco:2
Boot:  DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
Model: VoCore2
DRAM:  128 MiB
WDT:   Started with servicing (60s timeout)
MMC:   mmc at 10130000: 0
Loading Environment from SPI Flash... SF: Detected w25q128 with page
size 256 Bytes, erase size 4 KiB, total 16 MiB
OK
Model: VoCore2
Net:  
Warning: eth at 10110000 (eth0) using random MAC address - 26:9f:0f:24:ae:39
eth0: eth at 10110000
Hit any key to stop autoboot:  0
=>

If I do the same with product of "mips" dir I get:

=> setenv autoload no; dhcp; tftpboot 80200000 192.168.7.101:u-boot.bin;
go ${fileaddr}
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.7.112 (3136 ms)
Using eth at 10110000 device
TFTP from server 192.168.7.101; our IP address is 192.168.7.112
Filename 'u-boot.bin'.
Load address: 0x80200000
Loading: ####################################
     1 MiB/s
done
Bytes transferred = 527390 (80c1e hex)
## Starting application at 0x80200000 ...
<*DEAD*>

I am trying to understand where difference lies... and failing, to date :(

I already sent "my vocore2 patch" (Note: that is a "git rebase -i"
squashing the three commits in one, no change) earlier today;
if You think it might be useful I can send also the complete
"git format-patch" from a known u-boot master commit from
where I branched off
(currently 8b9cc858e0239823b051a9324431d511baf2b998)

My "git log --oneline" on "master" is:
c46834052a (HEAD -> weijie.v3.vocore.net, syno0/weijie.v3.vocore.net)
Move back environment to SPI NOR. Changes to environment default settings.
7dbd7fc8bc Added network setup.
375435c35e (syno0/weijie.v3.vocore, weijie.v3.vocore) Add support for
SoM "VoCore2".
f4fa7f499e (syno0/weijie.v3, weijie.v3) mips: mtmips: add support for
mt7628-rfb
724463aa9e mips: mtmips: enable SPL for all boards
1fe4eda6c3 mips: mtmips: add SPL support
5ea8181206 spl: nor: add lzma decompression support for legacy image
173aa9cb6c tools: binman: add etype file for u-boot-lzma-img
789a9085d3 Makefile: add support to generate LZMA compressed u-boot image
e4721a8b98 lib: enable lzma decompression support for SPL build
b769d64488 mips: add an option to enable u_boot_list section for SPL
loaders in u-boot-spl.lds
c704313c7e mips: enable support for appending dtb to spl binary
8801d2b226 dts: mtmips: add alternative pinmux node for uart2
4cda40c3ea mips: mtmips: rewrite lowlevel codes of mt7628
13299d7651 mips: add a option to support not reserving malloc space on
initial stack
eb8a3689b0 mips: add a mtmips-specific field to architecture-specific
global data
f5fda08bed configs: enable CONFIG_RESTORE_EXCEPTION_VECTOR_BASE for all
mtmips boards
e95f8beabe mips: mtmips: make use of sysreset-resetctrl for mt7628 soc
58246e0175 sysreset: add reset controller based reboot driver
b6a20ebced mips: start.S: avoid overwriting outside gd when clearing
global data in stack
c2359e8947 mips: add an option to support initialize SRAM for initial stack
a6eecdd28e mips: mtmips: add predefined i-cache/d-cache size and linesize
b096b2e05f mips: add support to restore exception vector base before
booting linux
2e5b1c00fd MIPS: allow override of get_tbclk()
8b9cc858e0 mx7ulp: Move SoC base address to a common file
...

while in the "mips" directory I have:
cd23ee2179 (HEAD -> VoCore2) Move back environment to SPI NOR. Changes
to environment default settings.
ddc07fb968 Added network setup.
9eabc0c0bb Add support for SoM "VoCore2".
b3d1d5d05b (origin/testing, testing, master) mips: mtmips: add support
for mt7628-rfb

As said: there must be some difference, somewhere,
but it's not evident (to me) where it is and how to find it.

Thanks in Advance for any advice
Best Regards
Mauro

On 2/11/20 2:54 PM, Daniel Schwierzeck wrote:
> On Tue, Feb 11, 2020 at 11:58 AM Mauro Condarelli <mc5686 at mclink.it> wrote:
>> Thanks Daniel.
>>
>> On 2/10/20 10:28 PM, Daniel Schwierzeck wrote:
>>> Hi Mauro,
>>>
>>> Am 10.02.20 um 21:20 schrieb Mauro Condarelli:
>>>> FYI
>>>> I've been using this patchset for over a week without any adverse effect.
>>>> It allowed me to port to VoCore2 board.
>>>> Should I add a "Tested-by" flag?
>>>> If so: how should I do it?
>>>>
>>>> Regards
>>>> Mauro Codarelli
>>>>
>>> sorry that I could respond to your questions earlier. I've pushed the
>>> complete patch set from Weijie to:
>>>
>>> https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
>> I tried to use this repo/branch, but something is wrong (or I goofed badly).
>>> Maybe this helps you with development. If you have a bootable patch set
>>> (you can do MMC later) for your VoCore2 board, please submit a regular
>>> patch series based on that branch so that we can review again.
>> I *do* have a bootable patchset built on top of master + Nemirovsky
>> "reconfigurable cpu clocks" + Weijie v3.
>> Result is fully working, including net and mmc/SD.
>>
>> This patchset applies cleanly to uboot-mips/testing and compile
>> apparently without errors, but resulting u-boot.bin does not work.
>> By "does not work" I mean it does not utter a single char on debug
>> serial.
>>
>> I tried to do a complete diff between my working tree and this
>> non-working one and there are tons of differences, but I couldn't
>> spot anything that might be relevant.
>>
>> I am unsure on how to proceed; please advise.
> but do you reach the U-Boot prompt? If I apply your patch and build
> it, I need to be able to program the resulting U-Boot image to SPI
> flash and boot to U-Boot prompt. Also note that the final U-Boot image
> with SPL is now called u-boot-mtmips.bin. Don't try to use u-boot.bin.
>
> Regarding debug UART you also need to configure the serial driver with
> "make menuconfig" (register base, clocks, baud rate etc.). There is no
> driver model or device-tree involved at that point. I think Stefan
> already told you the correct settings and you need this
> board_early_init_f magic for the pinmux (don't forget to enable
> CONFIG_BOARD_EARLY_INIT_F). But for the production mode debug UART
> should be disabled anyway. SPL UART is different than debug UART.
> AFAIU the regular driver model and device-tree stuff should work
> there. For the pinmux you'll need the new CONFIG_SPL_UART2_SPIS_PINMUX
> option. According to the code, you'll also need to configure
> CONFIG_CONS_INDEX = 3.
>
Daniel Schwierzeck Feb. 11, 2020, 4:49 p.m. UTC | #7
On Tue, Feb 11, 2020 at 5:11 PM Mauro Condarelli <mc5686 at mclink.it> wrote:
>
> Sorry Daniel,
> I seem unable to pass the message through.
>
> I have, in front of me two, very similar directories:
>
> u-boot.master:
> built from master + Weijie.v3 patches + my vocore2 patch.
>
> u-boot-mips:
> built from u-boot-mips/testing + my vocore2 patch.
>
> I was very careful not to change anything after patching.
>
> In both directories I do:
>
> make ARCH=mips CROSS_COMPILE=mipsel-linux- distclean
> make ARCH=mips CROSS_COMPILE=mipsel-linux- vocore2_defconfig
> make ARCH=mips CROSS_COMPILE=mipsel-linux-
>
> Both produce similarly-sized u-boot-mtmips.bin (Flash version)
> and u-boot.bin (RAM version).
>
> On my target I do:
>
> setenv autoload no; dhcp; tftpboot 80200000 192.168.7.101:u-boot.bin; go
> ${fileaddr}
>
> In the case of the "master dir I get:
>
> => setenv autoload no; dhcp; tftpboot 80200000 192.168.7.101:u-boot.bin;
> go ${fileaddr}
> BOOTP broadcast 1
> DHCP client bound to address 192.168.7.135 (115 ms)
> Using eth at 10110000 device
> TFTP from server 192.168.7.101; our IP address is 192.168.7.135
> Filename 'u-boot.bin'.
> Load address: 0x80200000
> Loading: ####################################
>      1.1 MiB/s
> done
> Bytes transferred = 527090 (80af2 hex)
> ## Starting application at 0x80200000 ...
>
>
> U-Boot 2020.01-00648-gc46834052a-dirty (Feb 11 2020 - 09:30:52 +0100)
>
> CPU:   MediaTek MT7628A ver:1 eco:2
> Boot:  DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
> Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
> Model: VoCore2
> DRAM:  128 MiB
> WDT:   Started with servicing (60s timeout)
> MMC:   mmc at 10130000: 0
> Loading Environment from SPI Flash... SF: Detected w25q128 with page
> size 256 Bytes, erase size 4 KiB, total 16 MiB
> OK
> Model: VoCore2
> Net:
> Warning: eth at 10110000 (eth0) using random MAC address - 26:9f:0f:24:ae:39
> eth0: eth at 10110000
> Hit any key to stop autoboot:  0
> =>

ok, booting from RAM works. But what I meant with bootable is, that
you can write the
the u-boot-mtmips.bin to SPI flash and do a cold boot. Only then we
can merge your patch.

>
> If I do the same with product of "mips" dir I get:
>
> => setenv autoload no; dhcp; tftpboot 80200000 192.168.7.101:u-boot.bin;
> go ${fileaddr}
> BOOTP broadcast 1
> BOOTP broadcast 2
> BOOTP broadcast 3
> BOOTP broadcast 4
> DHCP client bound to address 192.168.7.112 (3136 ms)
> Using eth at 10110000 device
> TFTP from server 192.168.7.101; our IP address is 192.168.7.112
> Filename 'u-boot.bin'.
> Load address: 0x80200000
> Loading: ####################################
>      1 MiB/s
> done
> Bytes transferred = 527390 (80c1e hex)
> ## Starting application at 0x80200000 ...
> <*DEAD*>
>
> I am trying to understand where difference lies... and failing, to date :(
>
> I already sent "my vocore2 patch" (Note: that is a "git rebase -i"
> squashing the three commits in one, no change) earlier today;
> if You think it might be useful I can send also the complete
> "git format-patch" from a known u-boot master commit from
> where I branched off
> (currently 8b9cc858e0239823b051a9324431d511baf2b998)
>
> My "git log --oneline" on "master" is:
> c46834052a (HEAD -> weijie.v3.vocore.net, syno0/weijie.v3.vocore.net)
> Move back environment to SPI NOR. Changes to environment default settings.
> 7dbd7fc8bc Added network setup.
> 375435c35e (syno0/weijie.v3.vocore, weijie.v3.vocore) Add support for
> SoM "VoCore2".
> f4fa7f499e (syno0/weijie.v3, weijie.v3) mips: mtmips: add support for
> mt7628-rfb
> 724463aa9e mips: mtmips: enable SPL for all boards
> 1fe4eda6c3 mips: mtmips: add SPL support
> 5ea8181206 spl: nor: add lzma decompression support for legacy image
> 173aa9cb6c tools: binman: add etype file for u-boot-lzma-img
> 789a9085d3 Makefile: add support to generate LZMA compressed u-boot image
> e4721a8b98 lib: enable lzma decompression support for SPL build
> b769d64488 mips: add an option to enable u_boot_list section for SPL
> loaders in u-boot-spl.lds
> c704313c7e mips: enable support for appending dtb to spl binary
> 8801d2b226 dts: mtmips: add alternative pinmux node for uart2
> 4cda40c3ea mips: mtmips: rewrite lowlevel codes of mt7628
> 13299d7651 mips: add a option to support not reserving malloc space on
> initial stack
> eb8a3689b0 mips: add a mtmips-specific field to architecture-specific
> global data
> f5fda08bed configs: enable CONFIG_RESTORE_EXCEPTION_VECTOR_BASE for all
> mtmips boards
> e95f8beabe mips: mtmips: make use of sysreset-resetctrl for mt7628 soc
> 58246e0175 sysreset: add reset controller based reboot driver
> b6a20ebced mips: start.S: avoid overwriting outside gd when clearing
> global data in stack
> c2359e8947 mips: add an option to support initialize SRAM for initial stack
> a6eecdd28e mips: mtmips: add predefined i-cache/d-cache size and linesize
> b096b2e05f mips: add support to restore exception vector base before
> booting linux
> 2e5b1c00fd MIPS: allow override of get_tbclk()
> 8b9cc858e0 mx7ulp: Move SoC base address to a common file
> ...
>
> while in the "mips" directory I have:
> cd23ee2179 (HEAD -> VoCore2) Move back environment to SPI NOR. Changes
> to environment default settings.
> ddc07fb968 Added network setup.
> 9eabc0c0bb Add support for SoM "VoCore2".
> b3d1d5d05b (origin/testing, testing, master) mips: mtmips: add support
> for mt7628-rfb
>
> As said: there must be some difference, somewhere,
> but it's not evident (to me) where it is and how to find it.
>
> Thanks in Advance for any advice
> Best Regards
> Mauro
>
> On 2/11/20 2:54 PM, Daniel Schwierzeck wrote:
> > On Tue, Feb 11, 2020 at 11:58 AM Mauro Condarelli <mc5686 at mclink.it> wrote:
> >> Thanks Daniel.
> >>
> >> On 2/10/20 10:28 PM, Daniel Schwierzeck wrote:
> >>> Hi Mauro,
> >>>
> >>> Am 10.02.20 um 21:20 schrieb Mauro Condarelli:
> >>>> FYI
> >>>> I've been using this patchset for over a week without any adverse effect.
> >>>> It allowed me to port to VoCore2 board.
> >>>> Should I add a "Tested-by" flag?
> >>>> If so: how should I do it?
> >>>>
> >>>> Regards
> >>>> Mauro Codarelli
> >>>>
> >>> sorry that I could respond to your questions earlier. I've pushed the
> >>> complete patch set from Weijie to:
> >>>
> >>> https://gitlab.denx.de/u-boot/custodians/u-boot-mips/commits/testing
> >> I tried to use this repo/branch, but something is wrong (or I goofed badly).
> >>> Maybe this helps you with development. If you have a bootable patch set
> >>> (you can do MMC later) for your VoCore2 board, please submit a regular
> >>> patch series based on that branch so that we can review again.
> >> I *do* have a bootable patchset built on top of master + Nemirovsky
> >> "reconfigurable cpu clocks" + Weijie v3.
> >> Result is fully working, including net and mmc/SD.
> >>
> >> This patchset applies cleanly to uboot-mips/testing and compile
> >> apparently without errors, but resulting u-boot.bin does not work.
> >> By "does not work" I mean it does not utter a single char on debug
> >> serial.
> >>
> >> I tried to do a complete diff between my working tree and this
> >> non-working one and there are tons of differences, but I couldn't
> >> spot anything that might be relevant.
> >>
> >> I am unsure on how to proceed; please advise.

maybe you have a big diff because you are not on the latest master
branch. I currently
have ae347120eed8204b1fdf018ddf79131964e57016. The u-boot-mips/testing is based
on u-boot-mips/next and only contains Weijie's v3 patches from 14/20
to 20/20. For
u-boot-mips/next I intend to create a pull request soon. The existing
mtmips boards should
still work without SPL support. Maybe Stefan could give it a quick test.

Maybe I messed something up in u-boot-mips/testing. There were some
merge conflicts.
Could you build a new patch queue on top of u-boot-mips/next with the remaining
Weijie v3 patches and your VoCore2 patches?

As long as all u-boot-mips changes aren't merged to mainline, your
patches must work with
the latest u-boot-mips/next branch. There could always be new and
incompatible changes
in mainline or in other MIPS patches which you have to figure out then.
Mauro Condarelli Feb. 11, 2020, 6:05 p.m. UTC | #8
Thanks Daniel.

On 2/11/20 5:49 PM, Daniel Schwierzeck wrote:
> On Tue, Feb 11, 2020 at 5:11 PM Mauro Condarelli <mc5686 at mclink.it> wrote:
>> ===8<----
>> Hit any key to stop autoboot:  0
>> =>
> ok, booting from RAM works. But what I meant with bootable is, that
> you can write the
> the u-boot-mtmips.bin to SPI flash and do a cold boot. Only then we
> can merge your patch.
It *does* work.
The U-Boot I have flashed is essentially the same as the one built
in the "master" directory, just a few days old (I changed essentially
my project-specific CONFIG_EXTRA_ENV_SETTINGS).

... which reminds me of something...

... it turns out that flashing *does* work:

=> setenv autoload no; dhcp; tftpboot 85000000
192.168.7.101:u-boot-mtmips.bin; sf probe; sf update ${fileaddr} 0
${filesize}
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.7.110 (2953 ms)
Using eth at 10110000 device
TFTP from server 192.168.7.101; our IP address is 192.168.7.110
Filename 'u-boot-mtmips.bin'.
Load address: 0x85000000
Loading: #################
     762.7 KiB/s
done
Bytes transferred = 244458 (3baea hex)
device 0 offset 0x0, size 0x3baea
240362 bytes written, 4096 bytes skipped in 2.232s, speed 111952 B/s
=> reset
resetting ...

U-Boot SPL 2020.04-rc1-01620-gcd23ee2179 (Feb 11 2020 - 18:33:48 +0100)
Trying to boot from NOR


U-Boot 2020.04-rc1-01620-gcd23ee2179 (Feb 11 2020 - 18:33:48 +0100)

CPU:   MediaTek MT7628A ver:1 eco:2
Boot:  DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
Model: VoCore2
DRAM:  128 MiB
WDT:   Started with servicing (60s timeout)
MMC:   mmc at 10130000: 0
Loading Environment from SPI Flash... SF: Detected w25q128 with page
size 256 Bytes, erase size 4 KiB, total 16 MiB
OK
Model: VoCore2
Net:  
Warning: eth at 10110000 (eth0) using random MAC address - 8a:fb:d0:3b:d1:93
eth0: eth at 10110000
Hit any key to stop autoboot:  0
=>

What *does NOT* work is loading RAM version or, to be more precise:
It works IF (and only if) you load the same code already running.
I *think* this is because current Weijie code unpacks to this same location
(80200000) before relocating. If you are rewriting the same code in the
same location any cache inconsistencies are unimportant, otherwise
Bad Things happen.
I spoke with Stephan about this, but we never found a fix.

Now that I reflashed "u-boot-mips/testing" version I can run it also
"from RAM", while trying to load "master" hangs (I tried just now).

If this is considered "acceptable" (probably it has nothing to do with my
vocore2 port) I can clean-up my patches and resubmit.
I'm not a mips expert and I don't know how to debug this "RAM load"
misbehavior, but I'm available for testing, if useful.


>> ===8<---
>>>> I *do* have a bootable patchset built on top of master + Nemirovsky
>>>> "reconfigurable cpu clocks" + Weijie v3.
>>>> Result is fully working, including net and mmc/SD.
>>>>
>>>> This patchset applies cleanly to uboot-mips/testing and compile
>>>> apparently without errors, but resulting u-boot.bin does not work.
>>>> By "does not work" I mean it does not utter a single char on debug
>>>> serial.
>>>>
>>>> I tried to do a complete diff between my working tree and this
>>>> non-working one and there are tons of differences, but I couldn't
>>>> spot anything that might be relevant.
>>>>
>>>> I am unsure on how to proceed; please advise.
> maybe you have a big diff because you are not on the latest master
> branch. I currently
> have ae347120eed8204b1fdf018ddf79131964e57016. The u-boot-mips/testing is based
> on u-boot-mips/next and only contains Weijie's v3 patches from 14/20
> to 20/20. For
> u-boot-mips/next I intend to create a pull request soon. The existing
> mtmips boards should
> still work without SPL support. Maybe Stefan could give it a quick test.
>
> Maybe I messed something up in u-boot-mips/testing. There were some
> merge conflicts.
I don't think so.
As said problem is with RAM loading.

> Could you build a new patch queue on top of u-boot-mips/next with the remaining
> Weijie v3 patches and your VoCore2 patches?
I can do that if You think it's still useful, otherwise we can
just use testing.

> As long as all u-boot-mips changes aren't merged to mainline, your
> patches must work with
> the latest u-boot-mips/next branch. There could always be new and
> incompatible changes
Understood.

> in mainline or in other MIPS patches which you have to figure out then.
I don't think  there'll be problems.
My patches are quite basic and board-only.

I plan to clean my patch expunging all project-specific stuff,
rebase from the (current) tip of uboot-mips-mips/testing and
resubmit (unless You tell me to do something different,
of course).

For the Ram-lading problem I do not currently plan any
action, but I'm available.

Best Regards (and pardon me for the noise, please)
Mauro Condarelli
Stefan Roese Feb. 12, 2020, 6:39 a.m. UTC | #9
Hi Mauro,
Hi Daniel,

On 11.02.20 19:05, Mauro Condarelli wrote:
> Thanks Daniel.
> 
> On 2/11/20 5:49 PM, Daniel Schwierzeck wrote:
>> On Tue, Feb 11, 2020 at 5:11 PM Mauro Condarelli <mc5686 at mclink.it> wrote:
>>> ===8<----
>>> Hit any key to stop autoboot:  0
>>> =>
>> ok, booting from RAM works. But what I meant with bootable is, that
>> you can write the
>> the u-boot-mtmips.bin to SPI flash and do a cold boot. Only then we
>> can merge your patch.
> It *does* work.
> The U-Boot I have flashed is essentially the same as the one built
> in the "master" directory, just a few days old (I changed essentially
> my project-specific CONFIG_EXTRA_ENV_SETTINGS).
> 
> ... which reminds me of something...
> 
> ... it turns out that flashing *does* work:
> 
> => setenv autoload no; dhcp; tftpboot 85000000
> 192.168.7.101:u-boot-mtmips.bin; sf probe; sf update ${fileaddr} 0
> ${filesize}
> BOOTP broadcast 1
> BOOTP broadcast 2
> BOOTP broadcast 3
> BOOTP broadcast 4
> DHCP client bound to address 192.168.7.110 (2953 ms)
> Using eth at 10110000 device
> TFTP from server 192.168.7.101; our IP address is 192.168.7.110
> Filename 'u-boot-mtmips.bin'.
> Load address: 0x85000000
> Loading: #################
>       762.7 KiB/s
> done
> Bytes transferred = 244458 (3baea hex)
> device 0 offset 0x0, size 0x3baea
> 240362 bytes written, 4096 bytes skipped in 2.232s, speed 111952 B/s
> => reset
> resetting ...
> 
> U-Boot SPL 2020.04-rc1-01620-gcd23ee2179 (Feb 11 2020 - 18:33:48 +0100)
> Trying to boot from NOR
> 
> 
> U-Boot 2020.04-rc1-01620-gcd23ee2179 (Feb 11 2020 - 18:33:48 +0100)
> 
> CPU:   MediaTek MT7628A ver:1 eco:2
> Boot:  DDR2, SPI-NOR 3-Byte Addr, CPU clock from XTAL
> Clock: CPU: 580MHz, Bus: 193MHz, XTAL: 40MHz
> Model: VoCore2
> DRAM:  128 MiB
> WDT:   Started with servicing (60s timeout)
> MMC:   mmc at 10130000: 0
> Loading Environment from SPI Flash... SF: Detected w25q128 with page
> size 256 Bytes, erase size 4 KiB, total 16 MiB
> OK
> Model: VoCore2
> Net:
> Warning: eth at 10110000 (eth0) using random MAC address - 8a:fb:d0:3b:d1:93
> eth0: eth at 10110000
> Hit any key to stop autoboot:  0
> =>
> 
> What *does NOT* work is loading RAM version or, to be more precise:
> It works IF (and only if) you load the same code already running.
> I *think* this is because current Weijie code unpacks to this same location
> (80200000) before relocating. If you are rewriting the same code in the
> same location any cache inconsistencies are unimportant, otherwise
> Bad Things happen.
> I spoke with Stephan about this, but we never found a fix.
> 
> Now that I reflashed "u-boot-mips/testing" version I can run it also
> "from RAM", while trying to load "master" hangs (I tried just now).
> 
> If this is considered "acceptable" (probably it has nothing to do with my
> vocore2 port) I can clean-up my patches and resubmit.
> I'm not a mips expert and I don't know how to debug this "RAM load"
> misbehavior, but I'm available for testing, if useful.

I also noticed that "RAM loading" the U-Boot proper does not work all
the time on my MT7688 targets. It seems to depend on the image size
and some other factors (moon phase...). ;)

So there is very likely a bug somewhere hidden - perhaps in the
relocaton code. I will probably try to dig into this in sometime soon.
But I need a reproducable "bad" image for this. Right now, RAM loading
is working just fine.

BTW: I noticed that RAM loading does work even when loading into a
different address than TEXT_BASE. On the new MTMIPS targets TEXT_BASE is
0x80200000 and loadind to e.g. 0x81000000 does also work.

Daniel, perhaps a dumb question, but is the MIPS U-Boot code position
independant?

Mauro, please try loading into a different address on your non-working
setup and report back if RAM loading works in this case.

> 
>>> ===8<---
>>>>> I *do* have a bootable patchset built on top of master + Nemirovsky
>>>>> "reconfigurable cpu clocks" + Weijie v3.
>>>>> Result is fully working, including net and mmc/SD.
>>>>>
>>>>> This patchset applies cleanly to uboot-mips/testing and compile
>>>>> apparently without errors, but resulting u-boot.bin does not work.
>>>>> By "does not work" I mean it does not utter a single char on debug
>>>>> serial.
>>>>>
>>>>> I tried to do a complete diff between my working tree and this
>>>>> non-working one and there are tons of differences, but I couldn't
>>>>> spot anything that might be relevant.
>>>>>
>>>>> I am unsure on how to proceed; please advise.
>> maybe you have a big diff because you are not on the latest master
>> branch. I currently
>> have ae347120eed8204b1fdf018ddf79131964e57016. The u-boot-mips/testing is based
>> on u-boot-mips/next and only contains Weijie's v3 patches from 14/20
>> to 20/20. For
>> u-boot-mips/next I intend to create a pull request soon. The existing
>> mtmips boards should
>> still work without SPL support. Maybe Stefan could give it a quick test.
>>
>> Maybe I messed something up in u-boot-mips/testing. There were some
>> merge conflicts.
> I don't think so.
> As said problem is with RAM loading.

I also have this problem (sometimes). Please see above.

>> Could you build a new patch queue on top of u-boot-mips/next with the remaining
>> Weijie v3 patches and your VoCore2 patches?
> I can do that if You think it's still useful, otherwise we can
> just use testing.
> 
>> As long as all u-boot-mips changes aren't merged to mainline, your
>> patches must work with
>> the latest u-boot-mips/next branch. There could always be new and
>> incompatible changes
> Understood.
> 
>> in mainline or in other MIPS patches which you have to figure out then.
> I don't think  there'll be problems.
> My patches are quite basic and board-only.
> 
> I plan to clean my patch expunging all project-specific stuff,
> rebase from the (current) tip of uboot-mips-mips/testing and
> resubmit (unless You tell me to do something different,
> of course).
> 
> For the Ram-lading problem I do not currently plan any
> action, but I'm available.

A test with a different load address would be interesting.

Thanks,
Stefan
Mauro Condarelli Feb. 12, 2020, 9:23 a.m. UTC | #10
Hi Stefan,
Hi Daniel,

On 2/12/20 7:39 AM, Stefan wrote:
> Hi Mauro,
> Hi Daniel,
>
> On 11.02.20 19:05, Mauro Condarelli wrote:
>> ===8<---
>>
>> What *does NOT* work is loading RAM version or, to be more precise:
>> It works IF (and only if) you load the same code already running.
>> I *think* this is because current Weijie code unpacks to this same
>> location
>> (80200000) before relocating. If you are rewriting the same code in the
>> same location any cache inconsistencies are unimportant, otherwise
>> Bad Things happen.
>> I spoke with Stephan about this, but we never found a fix.
>>
>> ===8<---
>
> I also noticed that "RAM loading" the U-Boot proper does not work all
> the time on my MT7688 targets. It seems to depend on the image size
> and some other factors (moon phase...). ;)
>
> So there is very likely a bug somewhere hidden - perhaps in the
> relocaton code. I will probably try to dig into this in sometime soon.
> But I need a reproducable "bad" image for this. Right now, RAM loading
> is working just fine.
As said: In my setup RAM loading is consistently failing if I try to load
an u-boot build consistently different from the one currently running.
OTOH loading the same (or very similar, a rebuild is considered "the
same") version is _always_ working for me.

To rephrase: I have two setups; one based on master+weijiev3 and
the other based on plain mtmips/testing.
I can flash either one and it works from SPI NOR. no problems here.
I can always RAM load successfully the same kernel as flashed.
If I RAM load the "other" setup it always fails.

I did a few tests:
- erasing download area (mw.b 80200000 0 80000).
- do some other loading (e.g.: the Linux kernel) between RAM load and
"go" (attempt to clean caches, but I suspect this would only effectively
clear D-cache, not I-cache).
The above behavior does not change.

>
> BTW: I noticed that RAM loading does work even when loading into a
> different address than TEXT_BASE. On the new MTMIPS targets TEXT_BASE is
> 0x80200000 and loadind to e.g. 0x81000000 does also work.
I do confirm this:
  setenv autoload no; dhcp; tftpboot 81000000
192.168.7.101:u-boot.bin-mips.testing; go ${fileaddr}
works as expected (loading  same-as-flashed)

>
> Daniel, perhaps a dumb question, but is the MIPS U-Boot code position
> independant?
>
> Mauro, please try loading into a different address on your non-working
> setup and report back if RAM loading works in this case.
Attempt to load, even at different address, the "other" u-boot fails:
  setenv autoload no; dhcp; tftpboot 81000000
192.168.7.101:u-boot.bin-weijie.v3.vocore2; go ${fileaddr}
hangs after "## Starting application at 0x81000000 ..." (I currently have
in SPI NOR the u-boot-mtmips.bin-mips.testing built together
u-boot.bin-mips.testing).

>> ===8<---
>> I don't think so.
>> As said problem is with RAM loading.
>
> I also have this problem (sometimes). Please see above.
>
>> ===8<---
>> For the Ram-lading problem I do not currently plan any
>> action, but I'm available.
>
> A test with a different load address would be interesting.
Done (see above).
Tell me if You want me to rebuild with a different TEXT_BASE
and test that.

>
> Thanks,
> Stefan
Regards
Mauro
Stefan Roese Feb. 12, 2020, 12:25 p.m. UTC | #11
Hi Mauro,

On 12.02.20 10:23, Mauro Condarelli wrote:
> Hi Stefan,
> Hi Daniel,
> 
> On 2/12/20 7:39 AM, Stefan wrote:
>> Hi Mauro,
>> Hi Daniel,
>>
>> On 11.02.20 19:05, Mauro Condarelli wrote:
>>> ===8<---
>>>
>>> What *does NOT* work is loading RAM version or, to be more precise:
>>> It works IF (and only if) you load the same code already running.
>>> I *think* this is because current Weijie code unpacks to this same
>>> location
>>> (80200000) before relocating. If you are rewriting the same code in the
>>> same location any cache inconsistencies are unimportant, otherwise
>>> Bad Things happen.
>>> I spoke with Stephan about this, but we never found a fix.
>>>
>>> ===8<---
>>
>> I also noticed that "RAM loading" the U-Boot proper does not work all
>> the time on my MT7688 targets. It seems to depend on the image size
>> and some other factors (moon phase...). ;)
>>
>> So there is very likely a bug somewhere hidden - perhaps in the
>> relocaton code. I will probably try to dig into this in sometime soon.
>> But I need a reproducable "bad" image for this. Right now, RAM loading
>> is working just fine.
> As said: In my setup RAM loading is consistently failing if I try to load
> an u-boot build consistently different from the one currently running.
> OTOH loading the same (or very similar, a rebuild is considered "the
> same") version is _always_ working for me.
> 
> To rephrase: I have two setups; one based on master+weijiev3 and
> the other based on plain mtmips/testing.
> I can flash either one and it works from SPI NOR. no problems here.
> I can always RAM load successfully the same kernel as flashed.
> If I RAM load the "other" setup it always fails.
> 
> I did a few tests:
> - erasing download area (mw.b 80200000 0 80000).
> - do some other loading (e.g.: the Linux kernel) between RAM load and
> "go" (attempt to clean caches, but I suspect this would only effectively
> clear D-cache, not I-cache).
> The above behavior does not change.
> 
>>
>> BTW: I noticed that RAM loading does work even when loading into a
>> different address than TEXT_BASE. On the new MTMIPS targets TEXT_BASE is
>> 0x80200000 and loadind to e.g. 0x81000000 does also work.
> I do confirm this:
>    setenv autoload no; dhcp; tftpboot 81000000
> 192.168.7.101:u-boot.bin-mips.testing; go ${fileaddr}
> works as expected (loading  same-as-flashed)
> 
>>
>> Daniel, perhaps a dumb question, but is the MIPS U-Boot code position
>> independant?
>>
>> Mauro, please try loading into a different address on your non-working
>> setup and report back if RAM loading works in this case.
> Attempt to load, even at different address, the "other" u-boot fails:
>    setenv autoload no; dhcp; tftpboot 81000000
> 192.168.7.101:u-boot.bin-weijie.v3.vocore2; go ${fileaddr}
> hangs after "## Starting application at 0x81000000 ..." (I currently have
> in SPI NOR the u-boot-mtmips.bin-mips.testing built together
> u-boot.bin-mips.testing).

Could you please apply the new cmd/boot.c patch I've sent just a few
minutes ago [1] and burn this image into flash. And please test with
this image, if RAM booting of other, different images does work for you
now.

And sorry, using a different TEXT_BASE does not seem to work. Somehow
I seem to have goofed up this morning in my tests. Please use always the
correct TEXT_BASE as load address for the RAM image.

Thanks,
Stefan

[1] http://patchwork.ozlabs.org/patch/1236810/
Daniel Schwierzeck Feb. 12, 2020, 12:48 p.m. UTC | #12
On Wed, Feb 12, 2020 at 10:23 AM Mauro Condarelli <mc5686 at mclink.it> wrote:
>
> Hi Stefan,
> Hi Daniel,
>
> On 2/12/20 7:39 AM, Stefan wrote:
> > Hi Mauro,
> > Hi Daniel,
> >
> > On 11.02.20 19:05, Mauro Condarelli wrote:
> >> ===8<---
> >>
> >> What *does NOT* work is loading RAM version or, to be more precise:
> >> It works IF (and only if) you load the same code already running.
> >> I *think* this is because current Weijie code unpacks to this same
> >> location
> >> (80200000) before relocating. If you are rewriting the same code in the
> >> same location any cache inconsistencies are unimportant, otherwise
> >> Bad Things happen.
> >> I spoke with Stephan about this, but we never found a fix.
> >>
> >> ===8<---
> >
> > I also noticed that "RAM loading" the U-Boot proper does not work all
> > the time on my MT7688 targets. It seems to depend on the image size
> > and some other factors (moon phase...). ;)
> >
> > So there is very likely a bug somewhere hidden - perhaps in the
> > relocaton code. I will probably try to dig into this in sometime soon.
> > But I need a reproducable "bad" image for this. Right now, RAM loading
> > is working just fine.
> As said: In my setup RAM loading is consistently failing if I try to load
> an u-boot build consistently different from the one currently running.
> OTOH loading the same (or very similar, a rebuild is considered "the
> same") version is _always_ working for me.
>
> To rephrase: I have two setups; one based on master+weijiev3 and
> the other based on plain mtmips/testing.
> I can flash either one and it works from SPI NOR. no problems here.
> I can always RAM load successfully the same kernel as flashed.
> If I RAM load the "other" setup it always fails.
>
> I did a few tests:
> - erasing download area (mw.b 80200000 0 80000).
> - do some other loading (e.g.: the Linux kernel) between RAM load and
> "go" (attempt to clean caches, but I suspect this would only effectively
> clear D-cache, not I-cache).
> The above behavior does not change.
>
> >
> > BTW: I noticed that RAM loading does work even when loading into a
> > different address than TEXT_BASE. On the new MTMIPS targets TEXT_BASE is
> > 0x80200000 and loadind to e.g. 0x81000000 does also work.
> I do confirm this:
>   setenv autoload no; dhcp; tftpboot 81000000
> 192.168.7.101:u-boot.bin-mips.testing; go ${fileaddr}
> works as expected (loading  same-as-flashed)
>
> >
> > Daniel, perhaps a dumb question, but is the MIPS U-Boot code position
> > independant?

from your tests I can only conclude that RAM loading doesn't work at
all. If you see it
"working" than you simply junp to the old copy which the SPL created.
A MIPS U-Boot
is always built with position-dependant code. To make the U-Boot
binary relocatable,
we use the tools/mips-relocs.c which was ported from Linux. During
linking we let gcc
emit relocation entries which are post-processed by the mips-relocs
tool. The output
is then inserted into u-boot.bin in section ".data.reloc". Those reloc
entries are then
used by the MIPS relocation code to patch all symbols with the
relative offset to the
new text address.

If you build for example the Gardena Smart Gateway and disassemble the u-boot
binary (which becomes the SPL payload), the very first instruction is this:

80200000 <_start>:
#endif
        .endm

ENTRY(_start)
        /* U-Boot entry point */
        b       reset
80200000:       1000013f        b       80200500 <reset>
         mtc0   zero, CP0_COUNT # clear cp0 count for most accurate boot timing
80200004:       40804800        mtc0    zero,c0_count

So if you load u-boot.bin to a different address than 0x80200000 and jump to it,
the first instruction is a jump back to address 0x80200500. If the old SPL copy
of u-boot.bin is still there, you'll see a "working" RAM boot.

Actually Mauro already did the right thing with erasing the load area
at 0x80200000
before downloading a new binary.

A stable approach to a RAM boot binary (which I use in my out-of-tree boards)
would be to use a KSEG1 text address e.g. 0xa0200000 and explicitely switch
the CPU to non-caching mode (this is normally skipped with
CONFIG_SKIP_LOWLEVEL_INIT in the SPL payload). This approach always worked
for me for booting via UART or EJTAG without getting messed up by
cache effects.

So either we officially drop RAM boot support for mtmips platform (respectively
don't use the u-boot.bin intended for SPL payload as RAM boot binary)
or we keep the
special RAM boot configs.
Stefan Roese Feb. 12, 2020, 1:46 p.m. UTC | #13
Hi Daniel,

On 12.02.20 13:48, Daniel Schwierzeck wrote:

<snip>

>>> Daniel, perhaps a dumb question, but is the MIPS U-Boot code position
>>> independant?
> 
> from your tests I can only conclude that RAM loading doesn't work at
> all. If you see it
> "working" than you simply junp to the old copy which the SPL created.
> A MIPS U-Boot
> is always built with position-dependant code. To make the U-Boot
> binary relocatable,
> we use the tools/mips-relocs.c which was ported from Linux. During
> linking we let gcc
> emit relocation entries which are post-processed by the mips-relocs
> tool. The output
> is then inserted into u-boot.bin in section ".data.reloc". Those reloc
> entries are then
> used by the MIPS relocation code to patch all symbols with the
> relative offset to the
> new text address.
> 
> If you build for example the Gardena Smart Gateway and disassemble the u-boot
> binary (which becomes the SPL payload), the very first instruction is this:
> 
> 80200000 <_start>:
> #endif
>          .endm
> 
> ENTRY(_start)
>          /* U-Boot entry point */
>          b       reset
> 80200000:       1000013f        b       80200500 <reset>
>           mtc0   zero, CP0_COUNT # clear cp0 count for most accurate boot timing
> 80200004:       40804800        mtc0    zero,c0_count
> 
> So if you load u-boot.bin to a different address than 0x80200000 and jump to it,
> the first instruction is a jump back to address 0x80200500. If the old SPL copy
> of u-boot.bin is still there, you'll see a "working" RAM boot.

Thanks for this analysis. This is exactly what happened in my test this
morning.

> Actually Mauro already did the right thing with erasing the load area
> at 0x80200000
> before downloading a new binary.
> 
> A stable approach to a RAM boot binary (which I use in my out-of-tree boards)
> would be to use a KSEG1 text address e.g. 0xa0200000 and explicitely switch
> the CPU to non-caching mode (this is normally skipped with
> CONFIG_SKIP_LOWLEVEL_INIT in the SPL payload). This approach always worked
> for me for booting via UART or EJTAG without getting messed up by
> cache effects.
> 
> So either we officially drop RAM boot support for mtmips platform (respectively
> don't use the u-boot.bin intended for SPL payload as RAM boot binary)
> or we keep the
> special RAM boot configs.

I assume that you are also okay with the cache flush approach? I'll send
v2 of this patch pretty soon if nobody objects.

Thanks,
Stefan
diff mbox

Patch

==========================================
>From f1828bcacbd3fc3bc8aa9243b302ab2b7a509d88 Mon Sep 17 00:00:00 2001
From: Mauro Condarelli <mc5686 at mclink.it>
Date: Tue, 17 Dec 2019 10:54:21 +0100
Subject: [PATCH] Add support for SoM "VoCore2".

Small patch series to add support for VoCore/VoCore2 board.

VoCore is open hardware and runs OpenWrt/LEDE.
It has WIFI, USB, UART, 20+ GPIOs but is only one inch square.
It will help you to make a smart house, study embedded system
or even make the tiniest router in the world.

Details about this SoM can be found at "https://vocore.io/v2.html".

Series-notes:
This port is working for me and able to boot Linux v5.0.
Standard subsystems are enabled (SPI NOR, MMC/SD and USB).
Network is not currently enabled as my Vocore2 board networking
relies essentially on WiFi (which works under Linux).
END

Series-to: uboot
Series-name: VoCore2
Series-cc: danielschwierzeck
Series-cc: stroese
Series-cc: Weijie Gao <weijie.gao at mediatek.com>
Series-version: 5

Series-changes: 2
- Removed some dead code
- Changed Author to my full name (no nick)
- Removed unwanted fixup to .dts generation (not my call).
- Fixed commit message
- Fixed various variables/filenames to include Vendor name
- Changed Vendor name (Vonger -> Vocore)

Series-changes: 3
- based on top of Weijie Gao patchset:
    "[v3,xx/20]Refactor the architecture parts of mt7628"

Series-changes: 4
- Reverted some overzealous DTS cleaning.
- Added support for bootcount

Series-changes: 5
- Added network setup.
- Move back environment to SPI NOR.
- Changes to environment default settings.

Signed-off-by: Mauro Condarelli <mc5686 at mclink.it>
---
 arch/mips/dts/Makefile               |   1 +
 arch/mips/dts/mt7628a.dtsi           |   5 ++
 arch/mips/dts/vocore_vocore2.dts     |  78 ++++++++++++++++++++
 arch/mips/mach-mtmips/Kconfig        |   8 ++
 board/vocore/vocore2/Kconfig         |  12 +++
 board/vocore/vocore2/Makefile        |   3 +
 board/vocore/vocore2/board.c         |  33 +++++++++
 configs/vocore2_defconfig            | 105 +++++++++++++++++++++++++++
 configs/vocore2_defconfig_ENV_IN_FAT | 104 ++++++++++++++++++++++++++
 include/configs/vocore2.h            |  76 +++++++++++++++++++
 10 files changed, 425 insertions(+)
 create mode 100644 arch/mips/dts/vocore_vocore2.dts
 create mode 100644 board/vocore/vocore2/Kconfig
 create mode 100644 board/vocore/vocore2/Makefile
 create mode 100644 board/vocore/vocore2/board.c
 create mode 100644 configs/vocore2_defconfig
 create mode 100644 configs/vocore2_defconfig_ENV_IN_FAT
 create mode 100644 include/configs/vocore2.h

diff --git a/arch/mips/dts/Makefile b/arch/mips/dts/Makefile
index cbd0c8bc8b..f711e9fb59 100644
--- a/arch/mips/dts/Makefile
+++ b/arch/mips/dts/Makefile
@@ -23,6 +23,7 @@  dtb-$(CONFIG_BOARD_NETGEAR_DGND3700V2) +=
netgear,dgnd3700v2.dtb
 dtb-$(CONFIG_BOARD_SAGEM_FAST1704) += sagem,f at st1704.dtb
 dtb-$(CONFIG_BOARD_SFR_NB4_SER) += sfr,nb4-ser.dtb
 dtb-$(CONFIG_BOARD_TPLINK_WDR4300) += tplink_wdr4300.dtb
+dtb-$(CONFIG_BOARD_VOCORE2) += vocore_vocore2.dtb
 dtb-$(CONFIG_TARGET_JZ4780_CI20) += ci20.dtb
 dtb-$(CONFIG_SOC_LUTON) += luton_pcb090.dtb luton_pcb091.dtb
 dtb-$(CONFIG_SOC_OCELOT) += ocelot_pcb120.dtb ocelot_pcb123.dtb
diff --git a/arch/mips/dts/mt7628a.dtsi b/arch/mips/dts/mt7628a.dtsi
index 6baa63add3..192599c37f 100644
--- a/arch/mips/dts/mt7628a.dtsi
+++ b/arch/mips/dts/mt7628a.dtsi
@@ -402,6 +402,11 @@ 
         builtin-cd = <1>;
         r_smpl = <1>;
 
+        bus-width = <4>;
+        max-frequency = <48000000>;
+        cap-sd-highspeed;
+        cap-mmc-highspeed;
+
         clocks = <&clk48m>, <&clkctrl CLK_SDXC>;
         clock-names = "source", "hclk";
 
diff --git a/arch/mips/dts/vocore_vocore2.dts
b/arch/mips/dts/vocore_vocore2.dts
new file mode 100644
index 0000000000..1d611abb73
--- /dev/null
+++ b/arch/mips/dts/vocore_vocore2.dts
@@ -0,0 +1,78 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2019 Mauro Condarelli <mc5686 at mclink.it>
+ */
+
+/dts-v1/;
+
+#include "mt7628a.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+    compatible = "vocore,vocore2", "ralink,mt7628a-soc";
+    model = "VoCore2";
+
+    aliases {
+        serial0 = &uart2;
+        spi0 = &spi0;
+    };
+
+    memory at 0 {
+        device_type = "memory";
+        reg = <0x0 0x08000000>;
+    };
+    leds {
+        compatible = "gpio-leds";
+
+        power {
+            label = "vocore:power";
+            gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
+            default-state = "off";
+        };
+    };
+
+    chosen {
+        bootargs = "console=ttyS2,115200";
+        stdout-path = &uart2;
+    };
+};
+
+&pinctrl {
+    state_default: pin_state {
+        p0led {
+            groups = "p0led_a";
+            function = "led";
+        };
+    };
+};
+
+&uart2 {
+    status = "okay";
+};
+
+&spi0 {
+    status = "okay";
+    nor0: spi-flash at 0 {
+        #address-cells = <1>;
+        #size-cells = <1>;
+        compatible = "jedec,spi-nor";
+        spi-max-frequency = <25000000>;
+        reg = <0>;
+    };
+};
+
+&eth {
+    status = "okay";
+
+    pinctrl-names = "default";
+    pinctrl-0 = <&ephy_iot_mode>;
+    mediatek,poll-link-phy = <0>;
+};
+
+&mmc {
+    status = "okay";
+
+    pinctrl-names = "default";
+    pinctrl-0 = <&sd_iot_mode>;
+    pinctrl-1 = <&sd_iot_mode>;
+};
diff --git a/arch/mips/mach-mtmips/Kconfig b/arch/mips/mach-mtmips/Kconfig
index bcd635f438..489e466daf 100644
--- a/arch/mips/mach-mtmips/Kconfig
+++ b/arch/mips/mach-mtmips/Kconfig
@@ -83,6 +83,13 @@  config BOARD_MT7628_RFB
       SPI-NOR flash, 1 built-in switch with 5 ports, 1 UART, 1 USB host,
       1 SDXC, 1 PCIe socket and JTAG pins.
 
+config BOARD_VOCORE2
+    bool "VoCore2"
+    depends on SOC_MT7628
+    help
+      VoCore VoCore2 board has a MT7628 SoC with 128 MiB of RAM
+      and 16 MiB of flash (SPI).
+
 endchoice
 
 config SPL_UART2_SPIS_PINMUX
@@ -96,5 +103,6 @@  config SPL_UART2_SPIS_PINMUX
 source "board/gardena/smart-gateway-mt7688/Kconfig"
 source "board/mediatek/mt7628/Kconfig"
 source "board/seeed/linkit-smart-7688/Kconfig"
+source "board/vocore/vocore2/Kconfig"
 
 endmenu
diff --git a/board/vocore/vocore2/Kconfig b/board/vocore/vocore2/Kconfig
new file mode 100644
index 0000000000..baeff31b69
--- /dev/null
+++ b/board/vocore/vocore2/Kconfig
@@ -0,0 +1,12 @@ 
+if BOARD_VOCORE2
+
+config SYS_BOARD
+    default "vocore2"
+
+config SYS_VENDOR
+    default "vocore"
+
+config SYS_CONFIG_NAME
+    default "vocore2"
+
+endif
diff --git a/board/vocore/vocore2/Makefile b/board/vocore/vocore2/Makefile
new file mode 100644
index 0000000000..70cd7a8e56
--- /dev/null
+++ b/board/vocore/vocore2/Makefile
@@ -0,0 +1,3 @@ 
+# SPDX-License-Identifier: GPL-2.0+
+
+obj-y += board.o
diff --git a/board/vocore/vocore2/board.c b/board/vocore/vocore2/board.c
new file mode 100644
index 0000000000..d387715d14
--- /dev/null
+++ b/board/vocore/vocore2/board.c
@@ -0,0 +1,33 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2019 Mauro Condarelli <mc5686 at mclink.it>
+ *
+ * Note: this is largely copied from:
+ *       board/seeed/linkit_smart_7688/board.c
+ *       Copyright (C) 2018 Stefan Roese <sr at denx.de>
+ */
+
+#include <common.h>
+#include <asm/io.h>
+
+#define MT76XX_GPIO1_MODE   0x10000060
+
+void board_debug_uart_init(void)
+{
+    void __iomem *gpio_mode;
+
+    /* Select UART2 mode instead of GPIO mode (default) */
+    gpio_mode = ioremap_nocache(MT76XX_GPIO1_MODE, 0x100);
+    clrbits_le32(gpio_mode, GENMASK(27, 26));
+}
+
+int board_early_init_f(void)
+{
+    /*
+     * The pin muxing of UART2 also needs to be done, if debug uart
+     * is not enabled. So we need to call this function here as well.
+     */
+    board_debug_uart_init();
+
+    return 0;
+}
diff --git a/configs/vocore2_defconfig b/configs/vocore2_defconfig
new file mode 100644
index 0000000000..d243c0f79b
--- /dev/null
+++ b/configs/vocore2_defconfig
@@ -0,0 +1,105 @@ 
+CONFIG_MIPS=y
+CONFIG_SPL_LIBCOMMON_SUPPORT=y
+CONFIG_SPL_LIBGENERIC_SUPPORT=y
+CONFIG_ENV_SIZE=0x1000
+CONFIG_ENV_SECT_SIZE=0x1000
+CONFIG_ENV_OFFSET=0x04e000
+CONFIG_SPL_SERIAL_SUPPORT=y
+CONFIG_SPL_SYS_MALLOC_F_LEN=0x20000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_SPL=y
+CONFIG_SYS_BOOTCOUNT_SINGLEWORD=y
+CONFIG_SYS_BOOTCOUNT_ADDR=0xb000006c
+CONFIG_ARCH_MTMIPS=y
+CONFIG_BOARD_VOCORE2=y
+CONFIG_SPL_UART2_SPIS_PINMUX=y
+CONFIG_RESTORE_EXCEPTION_VECTOR_BASE=y
+CONFIG_MIPS_BOOT_FDT=y
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_SYS_BOOT_GET_CMDLINE=y
+CONFIG_SYS_BOOT_GET_KBD=y
+CONFIG_FIT=y
+CONFIG_FIT_SIGNATURE=y
+CONFIG_LEGACY_IMAGE_FORMAT=y
+CONFIG_OF_STDOUT_VIA_ALIAS=y
+CONFIG_USE_BOOTARGS=y
+CONFIG_LOGLEVEL=8
+CONFIG_SYS_CONSOLE_INFO_QUIET=y
+CONFIG_VERSION_VARIABLE=y
+CONFIG_DISPLAY_BOARDINFO_LATE=y
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_SPL_SYS_MALLOC_SIMPLE=y
+CONFIG_SPL_NOR_SUPPORT=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_LICENSE=y
+# CONFIG_BOOTM_NETBSD is not set
+# CONFIG_BOOTM_PLAN9 is not set
+# CONFIG_BOOTM_RTEMS is not set
+# CONFIG_BOOTM_VXWORKS is not set
+# CONFIG_CMD_ELF is not set
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_CRC32 is not set
+CONFIG_CMD_MEMINFO=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_GPT_RENAME=y
+# CONFIG_CMD_LOADS is not set
+CONFIG_CMD_MMC=y
+CONFIG_CMD_MTD=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_SPI=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_WDT=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_BOOTCOUNT=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_CMD_MTDPARTS=y
+CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
+CONFIG_MTDPARTS_DEFAULT="spi0.0:312k(u-boot),4k(env),4k(factory),2368k(kernel),-(filesystem)"
+CONFIG_DEFAULT_DEVICE_TREE="vocore_vocore2"
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_SPL_DM=y
+# CONFIG_DM_DEVICE_REMOVE is not set
+CONFIG_BOOTCOUNT_LIMIT=y
+CONFIG_LED=y
+CONFIG_LED_BLINK=y
+CONFIG_LED_GPIO=y
+CONFIG_MMC=y
+CONFIG_DM_MMC=y
+# CONFIG_MMC_HW_PARTITIONING is not set
+CONFIG_MMC_MTK=y
+CONFIG_MTD=y
+CONFIG_SPI_FLASH_SFDP_SUPPORT=y
+CONFIG_SPI_FLASH_GIGADEVICE=y
+CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_WINBOND=y
+CONFIG_SPI_FLASH_MTD=y
+CONFIG_MT7628_ETH=y
+CONFIG_PHY=y
+CONFIG_MT76X8_USB_PHY=y
+# CONFIG_RAM_ROCKCHIP_DEBUG is not set
+CONFIG_SPECIFY_CONSOLE_INDEX=y
+CONFIG_CONS_INDEX=3
+CONFIG_SPI=y
+CONFIG_MT7621_SPI=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_GENERIC=y
+CONFIG_USB_STORAGE=y
+CONFIG_WDT=y
+CONFIG_WDT_MT7621=y
+CONFIG_FS_EXT4=y
+CONFIG_FAT_WRITE=y
+CONFIG_LZMA=y
+CONFIG_LZO=y
diff --git a/configs/vocore2_defconfig_ENV_IN_FAT
b/configs/vocore2_defconfig_ENV_IN_FAT
new file mode 100644
index 0000000000..02727859e4
--- /dev/null
+++ b/configs/vocore2_defconfig_ENV_IN_FAT
@@ -0,0 +1,104 @@ 
+CONFIG_MIPS=y
+CONFIG_SPL_LIBCOMMON_SUPPORT=y
+CONFIG_SPL_LIBGENERIC_SUPPORT=y
+CONFIG_ENV_SIZE=0x1000
+CONFIG_SPL_SERIAL_SUPPORT=y
+CONFIG_SPL_SYS_MALLOC_F_LEN=0x20000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_SPL=y
+CONFIG_SYS_BOOTCOUNT_SINGLEWORD=y
+CONFIG_SYS_BOOTCOUNT_ADDR=0xb000006c
+CONFIG_ARCH_MTMIPS=y
+CONFIG_BOARD_VOCORE2=y
+CONFIG_SPL_UART2_SPIS_PINMUX=y
+CONFIG_RESTORE_EXCEPTION_VECTOR_BASE=y
+CONFIG_MIPS_BOOT_FDT=y
+CONFIG_ENV_VARS_UBOOT_CONFIG=y
+CONFIG_SYS_BOOT_GET_CMDLINE=y
+CONFIG_SYS_BOOT_GET_KBD=y
+CONFIG_FIT=y
+CONFIG_FIT_SIGNATURE=y
+CONFIG_LEGACY_IMAGE_FORMAT=y
+CONFIG_OF_STDOUT_VIA_ALIAS=y
+CONFIG_USE_BOOTARGS=y
+CONFIG_LOGLEVEL=8
+CONFIG_SYS_CONSOLE_INFO_QUIET=y
+CONFIG_VERSION_VARIABLE=y
+CONFIG_DISPLAY_BOARDINFO_LATE=y
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_SPL_SYS_MALLOC_SIMPLE=y
+CONFIG_SPL_NOR_SUPPORT=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_LICENSE=y
+# CONFIG_BOOTM_NETBSD is not set
+# CONFIG_BOOTM_PLAN9 is not set
+# CONFIG_BOOTM_RTEMS is not set
+# CONFIG_BOOTM_VXWORKS is not set
+# CONFIG_CMD_ELF is not set
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_CRC32 is not set
+CONFIG_CMD_MEMINFO=y
+# CONFIG_CMD_FLASH is not set
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_GPT_RENAME=y
+# CONFIG_CMD_LOADS is not set
+CONFIG_CMD_MMC=y
+CONFIG_CMD_MTD=y
+CONFIG_CMD_PART=y
+CONFIG_CMD_SPI=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_WDT=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_BOOTCOUNT=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_CMD_MTDPARTS=y
+CONFIG_MTDIDS_DEFAULT="nor0=spi0.0"
+CONFIG_MTDPARTS_DEFAULT="spi0.0:312k(u-boot),4k(env),4k(factory),2368k(kernel),-(filesystem)"
+CONFIG_DEFAULT_DEVICE_TREE="vocore_vocore2"
+CONFIG_ENV_IS_IN_FAT=y
+CONFIG_ENV_FAT_INTERFACE="mmc"
+CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_SPL_DM=y
+# CONFIG_DM_DEVICE_REMOVE is not set
+CONFIG_BOOTCOUNT_LIMIT=y
+CONFIG_LED=y
+CONFIG_LED_BLINK=y
+CONFIG_LED_GPIO=y
+CONFIG_MMC=y
+CONFIG_DM_MMC=y
+# CONFIG_MMC_HW_PARTITIONING is not set
+CONFIG_MMC_MTK=y
+CONFIG_MTD=y
+CONFIG_SPI_FLASH_SFDP_SUPPORT=y
+CONFIG_SPI_FLASH_GIGADEVICE=y
+CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_SPI_FLASH_WINBOND=y
+CONFIG_SPI_FLASH_MTD=y
+CONFIG_MT7628_ETH=y
+CONFIG_PHY=y
+CONFIG_MT76X8_USB_PHY=y
+# CONFIG_RAM_ROCKCHIP_DEBUG is not set
+CONFIG_SPECIFY_CONSOLE_INDEX=y
+CONFIG_CONS_INDEX=3
+CONFIG_SPI=y
+CONFIG_MT7621_SPI=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_GENERIC=y
+CONFIG_USB_STORAGE=y
+CONFIG_WDT=y
+CONFIG_WDT_MT7621=y
+CONFIG_FS_EXT4=y
+CONFIG_LZMA=y
+CONFIG_LZO=y
diff --git a/include/configs/vocore2.h b/include/configs/vocore2.h
new file mode 100644
index 0000000000..0e8f063acf
--- /dev/null
+++ b/include/configs/vocore2.h
@@ -0,0 +1,76 @@ 
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2019 Mauro Condarelli <mc5686 at mclink.it>
+ */
+
+#ifndef __VOCORE2_CONFIG_H__
+#define __VOCORE2_CONFIG_H__
+
+/* CPU */
+#define CONFIG_SYS_MIPS_TIMER_FREQ    290000000
+
+/* RAM */
+#define CONFIG_SYS_SDRAM_BASE        0x80000000
+
+#define CONFIG_SYS_LOAD_ADDR    CONFIG_SYS_SDRAM_BASE + 0x100000
+
+#define CONFIG_SYS_INIT_SP_OFFSET    0x400000
+
+/* SPL */
+#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#endif
+
+#define CONFIG_SYS_UBOOT_START        CONFIG_SYS_TEXT_BASE
+#define CONFIG_SPL_BSS_START_ADDR    0x80010000
+#define CONFIG_SPL_BSS_MAX_SIZE        0x10000
+#define CONFIG_SPL_MAX_SIZE        0x10000
+
+/* Dummy value */
+#define CONFIG_SYS_UBOOT_BASE        0
+
+/* Serial SPL */
+#if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_SERIAL_SUPPORT)
+#define CONFIG_SYS_NS16550_MEM32
+#define CONFIG_SYS_NS16550_CLK        40000000
+#define CONFIG_SYS_NS16550_REG_SIZE    -4
+#define CONFIG_SYS_NS16550_COM3        0xb0000e00
+#define CONFIG_CONS_INDEX        3
+
+#endif
+
+/* UART */
+#define CONFIG_SYS_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200, \
+                    230400, 460800, 921600 }
+
+/* RAM */
+#define CONFIG_SYS_MEMTEST_START    0x80100000
+#define CONFIG_SYS_MEMTEST_END        0x80400000
+
+/* Memory usage */
+#define CONFIG_SYS_MAXARGS        64
+#define CONFIG_SYS_MALLOC_LEN        (1024 * 1024)
+#define CONFIG_SYS_BOOTPARAMS_LEN    (128 * 1024)
+#define CONFIG_SYS_CBSIZE        512
+
+/* U-Boot */
+#define CONFIG_SYS_MONITOR_BASE        CONFIG_SYS_TEXT_BASE
+
+/* Environment settings */
+#define CONFIG_BOOTCOMMAND \
+    "run fupdate; setenv bootargs ${default_bootargs}
mtdparts=${mtdparts} root=/dev/mtdblock5 && bootm 1c050000"
+//  "load mmc 0:1 85000000 recov.uImage && load mmc 0:1 86000000
recov.squashfs && setenv bootargs ${default_bootargs}
mtdparts=${mtdparts} rd_start=0x${fileaddr} rd_size=0x${filesize} &&
bootm 85000000;"
+#define CONFIG_EXTRA_ENV_SETTINGS \
+    "default_bootargs=earlyprintk rootwait console=ttyS2,115200\0"   
                                                                       
        \
+    "mtdids=nor0=spi0.0\0"                                           
                                                            \
+   
"mtdparts=spi0.0:312k(u-boot),4k(env),4k(factory),2368k(kernel),-(filesystem)\0"   
                                                                        \
+    "fupdate=mmc rescan && load mmc 0:1 84000000 uboot.scr && fatrm mmc