[PATCH 4/4] mediatek: mt7622: add snand support for bananapi bpi-r64

Daniel Golle daniel at makrotopia.org
Mon Apr 5 20:43:26 BST 2021


Hi Oskari,

Thank you for submitting this patch series.
Generally it looks very good, please see some minor comments inline:

On Mon, Apr 05, 2021 at 08:53:17PM +0300, Oskari Lemmela wrote:
> Signed-off-by: Oskari Lemmela <oskari at lemmela.net>
> ---
>  package/boot/uboot-mediatek/Makefile          |  12 +
>  .../403-add-bananapi_bpi-r64_defconfigs.patch | 275 ++++++++++++++++--
>  .../404-add-bananapi-bpi-r64-snand.patch      |  34 +++
>  target/linux/mediatek/image/mt7622.mk         |   6 +-
>  .../115-dts-bpi64-add-snand-support.patch     |  57 ++++
>  .../115-dts-bpi64-add-snand-support.patch     |  57 ++++
>  6 files changed, 421 insertions(+), 20 deletions(-)
>  create mode 100644 package/boot/uboot-mediatek/patches/404-add-bananapi-bpi-r64-snand.patch
>  create mode 100644 target/linux/mediatek/patches-5.10/115-dts-bpi64-add-snand-support.patch
>  create mode 100644 target/linux/mediatek/patches-5.4/115-dts-bpi64-add-snand-support.patch
> 
> diff --git a/package/boot/uboot-mediatek/Makefile b/package/boot/uboot-mediatek/Makefile
> index 1fb67321ed..329555ad70 100644
> --- a/package/boot/uboot-mediatek/Makefile
> +++ b/package/boot/uboot-mediatek/Makefile
> @@ -54,6 +54,17 @@ define U-Boot/mt7622_bananapi_bpi-r64-sdmmc
>    DEPENDS:=+trusted-firmware-a-mt7622-sdmmc-2ddr
>  endef
>  
> +define U-Boot/mt7622_bananapi_bpi-r64-snand
> +  NAME:=BananaPi R64 (SNAND)
> +  UBOOT_CONFIG:=mt7622_bananapi_bpi-r64-snand
> +  BUILD_DEVICES:=bananapi_bpi-r64
> +  BUILD_SUBTARGET:=mt7622
> +  UBOOT_IMAGE:=u-boot.fip
> +  BL2_BOOTDEV:=snand
> +  BL2_DDRBLOB:=2
> +  DEPENDS:=+trusted-firmware-a-mt7622-snand-2ddr
> +endef
> +
>  define U-Boot/mt7623a_unielec_u7623
>    NAME:=UniElec U7623 (mt7623)
>    BUILD_DEVICES:=unielec_u7623-emmc unielec_u7623-02-emmc-512m-legacy
> @@ -79,6 +90,7 @@ endef
>  UBOOT_TARGETS := \
>  	mt7622_bananapi_bpi-r64-emmc \
>  	mt7622_bananapi_bpi-r64-sdmmc \
> +	mt7622_bananapi_bpi-r64-snand \
>  	mt7622_linksys_e8450 \
>  	mt7622_rfb1 \
>  	mt7623n_bpir2 \
> diff --git a/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64_defconfigs.patch b/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64_defconfigs.patch
> index 0421392305..5ed77c8c5d 100644
> --- a/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64_defconfigs.patch
> +++ b/package/boot/uboot-mediatek/patches/403-add-bananapi_bpi-r64_defconfigs.patch
> @@ -1,6 +1,6 @@
>  --- /dev/null
>  +++ b/configs/mt7622_bananapi_bpi-r64-sdmmc_defconfig
> -@@ -0,0 +1,144 @@
> +@@ -0,0 +1,157 @@
>  +CONFIG_ARM=y
>  +CONFIG_POSITION_INDEPENDENT=y
>  +CONFIG_ARCH_MEDIATEK=y
> @@ -34,7 +34,7 @@
>  +CONFIG_LED_GPIO=y
>  +CONFIG_LOGLEVEL=7
>  +CONFIG_LOG=y
> -+CONFIG_DEFAULT_FDT_FILE="mt7622-bananapi-bpi-r64"
> ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7622-bananapi-bpi-r64.dtb"
>  +CONFIG_SYS_PROMPT="MT7622> "
>  +CONFIG_CMD_BOOTMENU=y
>  +CONFIG_CMD_BOOTP=y
> @@ -42,6 +42,7 @@
>  +CONFIG_CMD_CACHE=y
>  +CONFIG_CMD_CDP=y
>  +CONFIG_CMD_DHCP=y
> ++CONFIG_CMD_DM=y
>  +CONFIG_CMD_DNS=y
>  +CONFIG_CMD_ECHO=y
>  +CONFIG_CMD_ENV_READMEM=y
> @@ -59,6 +60,7 @@
>  +CONFIG_CMD_LINK_LOCAL=y
>  +# CONFIG_CMD_MBR is not set
>  +CONFIG_CMD_MMC=y
> ++CONFIG_CMD_MTD=y
>  +CONFIG_CMD_PCI=y
>  +CONFIG_CMD_SF_TEST=y
>  +CONFIG_CMD_PING=y
> @@ -67,6 +69,9 @@
>  +CONFIG_CMD_SMC=y
>  +CONFIG_CMD_TFTPBOOT=y
>  +CONFIG_CMD_TFTPSRV=y
> ++CONFIG_CMD_UBI=y
> ++CONFIG_CMD_UBI_RENAME=y
> ++CONFIG_CMD_UBIFS=y
>  +CONFIG_CMD_ASKENV=y
>  +CONFIG_CMD_PART=y
>  +# CONFIG_CMD_PSTORE is not set
> @@ -80,6 +85,7 @@
>  +CONFIG_CMD_UUID=y
>  +CONFIG_DISPLAY_CPUINFO=y
>  +CONFIG_DM_MMC=y
> ++CONFIG_DM_MTD=y
>  +CONFIG_DM_REGULATOR=y
>  +CONFIG_DM_REGULATOR_FIXED=y
>  +CONFIG_DM_REGULATOR_GPIO=y
> @@ -115,6 +121,9 @@
>  +CONFIG_DM_ETH=y
>  +CONFIG_MEDIATEK_ETH=y
>  +CONFIG_PCI=y
> ++CONFIG_MTD=y
> ++CONFIG_MTD_UBI_FASTMAP=y
> ++CONFIG_MTDPARTS_DEFAULT="mtdparts=spi-nand0:512k(bl2),2048k(fip),-(ubi)"
>  +CONFIG_DM_PCI=y
>  +CONFIG_PCIE_MEDIATEK=y
>  +CONFIG_PINCTRL=y
> @@ -133,6 +142,10 @@
>  +CONFIG_MMC_MTK=y
>  +CONFIG_MMC_SUPPORTS_TUNING=y
>  +CONFIG_SUPPORT_EMMC_BOOT=y
> ++CONFIG_SPI=y
> ++CONFIG_DM_SPI=y
> ++CONFIG_MTK_SPI_NAND=y
> ++CONFIG_MTK_SPI_NAND_MTD=y
>  +CONFIG_SYSRESET_WATCHDOG=y
>  +CONFIG_WDT_MTK=y
>  +CONFIG_LZO=y
> @@ -147,12 +160,12 @@
>  +CONFIG_USB_STORAGE=y
>  --- /dev/null
>  +++ b/bananapi_bpi-r64-sdmmc_env
> -@@ -0,0 +1,60 @@
> +@@ -0,0 +1,82 @@
>  +ipaddr=192.168.1.1
>  +serverip=192.168.1.254
>  +loadaddr=0x4007ff28
> -+bootcmd=run boot_sdmmc
>  +bootargs=root=/dev/mmcblk1p65
> ++bootcmd=run boot_sdmmc
>  +bootconf=config-mt7622-bananapi-bpi-r64-pcie1
>  +bootconf_pcie=config-mt7622-bananapi-bpi-r64-pcie1
>  +bootconf_sata=config-mt7622-bananapi-bpi-r64-sata
> @@ -172,9 +185,10 @@
>  +bootmenu_3=Boot recovery system from SD card.=run boot_recovery ; run bootmenu_confirm_return
>  +bootmenu_4=Load production system via TFTP then write to SD card.=setenv noboot 1 ; run boot_tftp_production ; setenv noboot ; run bootmenu_confirm_return
>  +bootmenu_5=Load recovery system via TFTP then write to SD card.=setenv noboot 1 ; run boot_tftp_recovery ; setenv noboot ; run bootmenu_confirm_return
> -+bootmenu_6=Install bootloader and recovery to eMMC.=run emmc_init ; run bootmenu_confirm_return
> -+bootmenu_7=Reboot.=reset
> -+bootmenu_8=Reset all settings to factory defaults.=run reset_factory ; reset
> ++bootmenu_6=Install bootloader, recovery and production to eMMC.=run emmc_init ; run bootmenu_confirm_return
> ++bootmenu_7=Install bootloader, recovery and production to NAND.=run ubi_init ; run bootmenu_confirm_return
> ++bootmenu_8=Reboot.=reset
> ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
>  +boot_default=run bootcmd ; run boot_recovery ; run boot_tftp_forever
>  +boot_first=if button reset ; then run boot_tftp_forever ; fi ; bootmenu
>  +boot_production=led bpi-r64:pio:green on ; run sdmmc_read_production && bootm $loadaddr#$bootconf
> @@ -184,26 +198,47 @@
>  +boot_tftp_production=tftpboot $loadaddr $bootfile_upg && run sdmmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
>  +boot_tftp_recovery=tftpboot $loadaddr $bootfile && iminfo $loadaddr && run sdmmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
>  +boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr
> ++boot_ubi=ubi part ubi && setenv bootargs && run boot_ubi_production ; run check_recovery
> ++boot_ubi_production=led bpi-r64:pio:green on ; run ubi_read_production && bootm $loadaddr
> ++boot_ubi_recovery=led bpi-r64:pio:green off ; run check_recovery
> ++check_recovery=run ubi_read_recovery ; if iminfo $loadaddr ; then bootm $loadaddr ; else ubi remove recovery ; fi
> ++check_ubi=ubi part ubi || run ubi_format
> ++emmc_init=run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv
> ++emmc_init_bl=run sdmmc_read_emmc_bl2 && run emmc_write_bl2 && run sdmmc_read_emmc_hdr && run emmc_write_hdr && run sdmmc_read_emmc_bl3 && run emmc_write_bl3
> ++emmc_init_openwrt=run sdmmc_read_recovery && run emmc_write_recovery ; run sdmmc_read_production && run emmc_write_production
>  +emmc_write_bl2=mmc dev 0 1 && mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $loadaddr 0x0 0x100 ; mmc partconf 0 1 1 0
> -+emmc_write_hdr=mmc dev 0 0 && mmc erase 0x0 0x40 && mmc write $loadaddr 0x0 0x40
>  +emmc_write_bl3=mmc dev 0 0 && mmc erase 0x1000 0x1000 && mmc write $loadaddr 0x1000 0x1000
> ++emmc_write_hdr=mmc dev 0 0 && mmc erase 0x0 0x40 && mmc write $loadaddr 0x0 0x40
>  +emmc_write_production=iminfo $loadaddr && mmc dev 0 && part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol
>  +emmc_write_recovery=iminfo $loadaddr && mmc dev 0 && part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol
> -+emmc_init_bl=run sdmmc_read_emmc_bl2 && run emmc_write_bl2 && run sdmmc_read_emmc_hdr && run emmc_write_hdr && run sdmmc_read_emmc_bl3 && run emmc_write_bl3
> -+emmc_init_openwrt=run sdmmc_read_recovery && run emmc_write_recovery ; run sdmmc_read_production && run emmc_write_production
> -+emmc_init=run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv
> -+sdmmc_write_production=iminfo $fileaddr && mmc dev 1 && part start mmc 1 $part_default part_addr && part size mmc 1 $part_default part_size && run mmc_write_vol
> -+sdmmc_write_recovery=iminfo $fileaddr && mmc dev 1 && part start mmc 1 $part_recovery part_addr && part size mmc 1 $part_recovery part_size && run mmc_write_vol
> -+sdmmc_read_production=mmc dev 1 && part start mmc 1 $part_default part_addr && part size mmc 1 $part_default part_size && run mmc_read_vol
> -+sdmmc_read_recovery=mmc dev 1 && part start mmc 1 $part_recovery part_addr && part size mmc 1 $part_recovery part_size && run mmc_read_vol
> -+sdmmc_read_emmc_hdr=mmc dev 1 && part start mmc 1 install part_addr && mmc read $loadaddr $part_addr 0x40
> -+sdmmc_read_emmc_bl2=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x400 && mmc read $loadaddr $offset 0x400
> -+sdmmc_read_emmc_bl3=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x1000 && mmc read $loadaddr $offset 0x1000
>  +mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$part_size && mmc write $loadaddr 0x$part_addr 0x$image_size
> -+mmc_read_vol=mmc read $loadaddr $part_addr 0x8 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size
> ++mmc_read_vol=mmc read $loadaddr $part_addr 0x8 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200
>  +part_default=production
>  +part_recovery=recovery
>  +reset_factory=eraseenv && reset
> ++rootfs_data_max=0x2000000

Please do not set rootfs_data_max by default.
Imho it should be left to the user to decide to use that feature.

> ++sdmmc_read_emmc_hdr=mmc dev 1 && part start mmc 1 install part_addr && mmc read $loadaddr $part_addr 0x40
> ++sdmmc_read_emmc_bl2=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x400 && mmc read $loadaddr $offset 0x400
> ++sdmmc_read_emmc_bl3=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x1000 && mmc read $loadaddr $offset 0x1000
> ++sdmmc_read_production=mmc dev 1 && part start mmc 1 $part_default part_addr && part size mmc 1 $part_default part_size && run mmc_read_vol
> ++sdmmc_read_recovery=mmc dev 1 && part start mmc 1 $part_recovery part_addr && part size mmc 1 $part_recovery part_size && run mmc_read_vol
> ++sdmmc_read_snand_bl2=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x2000 && mmc read $loadaddr $offset 0x400
> ++sdmmc_read_snand_fip=mmc dev 1 && part start mmc 1 install part_addr && setexpr offset $part_addr + 0x2400 && mmc read $loadaddr $offset 0x1000
> ++sdmmc_write_production=iminfo $fileaddr && mmc dev 1 && part start mmc 1 $part_default part_addr && part size mmc 1 $part_default part_size && run mmc_write_vol
> ++sdmmc_write_recovery=iminfo $fileaddr && mmc dev 1 && part start mmc 1 $part_recovery part_addr && part size mmc 1 $part_recovery part_size && run mmc_write_vol
> ++snand_write_fip=mtd erase fip && mtd write fip $loadaddr
> ++snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr
> ++ubi_create_env=ubi create ubootenv 0x100000 dynamic ; ubi create ubootenv2 0x100000 dynamic
> ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset
> ++ubi_init=run ubi_init_bl && ubi detach && mtd erase ubi && ubi part ubi && run ubi_create_env && run ubi_init_openwrt
> ++ubi_init_openwrt=run sdmmc_read_recovery && run ubi_write_recovery ; run sdmmc_read_production && run ubi_write_production
> ++ubi_init_bl=run sdmmc_read_snand_bl2 && run snand_write_bl2 && run sdmmc_read_snand_fip && run snand_write_fip
> ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi
> ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs
> ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery
> ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data
> ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize
> ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize
>  +_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv
>  +_firstboot=setenv _firstboot ; led bpi-r64:pio:blue on ; run _switch_to_menu ; run _init_env ; run boot_first
>  +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
> @@ -404,3 +439,205 @@
>  +_firstboot=setenv _firstboot ; led bpi-r64:pio:blue on ; run _switch_to_menu ; run _init_env ; run boot_first
>  +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title
>  +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title       $ver"
> +--- /dev/null
> ++++ b/configs/mt7622_bananapi_bpi-r64-snand_defconfig
> +@@ -0,0 +1,138 @@
> ++CONFIG_ARM=y
> ++CONFIG_POSITION_INDEPENDENT=y
> ++CONFIG_ARCH_MEDIATEK=y
> ++CONFIG_SYS_TEXT_BASE=0x41e00000
> ++CONFIG_SYS_MALLOC_F_LEN=0x4000
> ++CONFIG_USE_DEFAULT_ENV_FILE=y
> ++CONFIG_BOARD_LATE_INIT=y
> ++CONFIG_BOOTP_SEND_HOSTNAME=y
> ++CONFIG_NR_DRAM_BANKS=1
> ++CONFIG_DEBUG_UART_BASE=0x11002000
> ++CONFIG_DEBUG_UART_CLOCK=25000000
> ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-bananapi-bpi-r64"
> ++CONFIG_OF_LIBFDT_OVERLAY=y
> ++CONFIG_DEBUG_UART=y
> ++CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r64-snand_env"
> ++CONFIG_DISTRO_DEFAULTS=y
> ++CONFIG_NET_RANDOM_ETHADDR=y
> ++CONFIG_SMBIOS_PRODUCT_NAME=""
> ++CONFIG_AUTOBOOT_KEYED=y
> ++CONFIG_BOOTDELAY=30
> ++CONFIG_AUTOBOOT_MENU_SHOW=y
> ++CONFIG_CFB_CONSOLE_ANSI=y
> ++CONFIG_BUTTON=y
> ++CONFIG_BUTTON_GPIO=y
> ++CONFIG_CMD_ENV_FLAGS=y
> ++CONFIG_FIT=y
> ++CONFIG_FIT_ENABLE_SHA256_SUPPORT=y
> ++CONFIG_LED=y
> ++CONFIG_LED_BLINK=y
> ++CONFIG_LED_GPIO=y
> ++CONFIG_LOGLEVEL=7
> ++CONFIG_LOG=y
> ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7622-bananapi-bpi-r64.dtb"
> ++CONFIG_SYS_PROMPT="MT7622> "
> ++CONFIG_CMD_BOOTMENU=y
> ++CONFIG_CMD_BOOTP=y
> ++CONFIG_CMD_BUTTON=y
> ++CONFIG_CMD_CDP=y
> ++CONFIG_CMD_DHCP=y
> ++CONFIG_CMD_DM=y
> ++CONFIG_CMD_DNS=y
> ++CONFIG_CMD_ECHO=y
> ++CONFIG_CMD_EFIDEBUG=y
> ++CONFIG_CMD_ENV_READMEM=y
> ++CONFIG_CMD_ERASEENV=y
> ++CONFIG_CMD_EXT4=y
> ++CONFIG_CMD_FAT=y
> ++CONFIG_CMD_FS_GENERIC=y
> ++CONFIG_CMD_FS_UUID=y
> ++CONFIG_CMD_GPIO=y
> ++CONFIG_CMD_GPT=y
> ++CONFIG_CMD_HASH=y
> ++CONFIG_CMD_ITEST=y
> ++CONFIG_CMD_LED=y
> ++CONFIG_CMD_LICENSE=y
> ++CONFIG_CMD_LINK_LOCAL=y
> ++# CONFIG_CMD_MBR is not set
> ++CONFIG_CMD_MMC=y
> ++CONFIG_CMD_MTD=y
> ++CONFIG_CMD_PCI=y
> ++CONFIG_CMD_PING=y
> ++CONFIG_CMD_PXE=y
> ++CONFIG_CMD_SMC=y
> ++CONFIG_CMD_TFTPBOOT=y
> ++CONFIG_CMD_TFTPSRV=y
> ++CONFIG_CMD_UBI=y
> ++CONFIG_CMD_UBI_RENAME=y
> ++CONFIG_CMD_UBIFS=y
> ++CONFIG_CMD_ASKENV=y
> ++CONFIG_CMD_PART=y
> ++# CONFIG_CMD_PSTORE is not set
> ++CONFIG_CMD_RARP=y
> ++CONFIG_CMD_SETEXPR=y
> ++CONFIG_CMD_SLEEP=y
> ++CONFIG_CMD_SNTP=y
> ++CONFIG_CMD_SOURCE=y
> ++CONFIG_CMD_USB=y
> ++CONFIG_CMD_UUID=y
> ++CONFIG_DISPLAY_CPUINFO=y
> ++CONFIG_DM_MMC=y
> ++CONFIG_DM_MTD=y
> ++CONFIG_DM_REGULATOR=y
> ++CONFIG_DM_REGULATOR_FIXED=y
> ++CONFIG_DM_REGULATOR_GPIO=y
> ++CONFIG_DM_USB=y
> ++CONFIG_HUSH_PARSER=y
> ++CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
> ++CONFIG_SYS_RELOC_GD_ENV_ADDR=y
> ++CONFIG_ENV_IS_IN_UBI=y
> ++CONFIG_ENV_UBI_PART="ubi"
> ++CONFIG_ENV_UBI_VOLUME="ubootenv"
> ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2"
> ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
> ++CONFIG_VERSION_VARIABLE=y
> ++CONFIG_PARTITION_UUIDS=y
> ++CONFIG_NETCONSOLE=y
> ++CONFIG_REGMAP=y
> ++CONFIG_SYSCON=y
> ++CONFIG_CLK=y
> ++CONFIG_PHY_FIXED=y
> ++CONFIG_DM_ETH=y
> ++CONFIG_MEDIATEK_ETH=y
> ++CONFIG_PCI=y
> ++CONFIG_MTD=y
> ++CONFIG_MTD_UBI_FASTMAP=y
> ++CONFIG_MTDPARTS_DEFAULT="mtdparts=spi-nand0:512k(bl2),2048k(fip),-(ubi)"
> ++CONFIG_DM_PCI=y
> ++CONFIG_PCIE_MEDIATEK=y
> ++CONFIG_PINCTRL=y
> ++CONFIG_PINCONF=y
> ++CONFIG_PINCTRL_MT7622=y
> ++CONFIG_POWER_DOMAIN=y
> ++CONFIG_PRE_CONSOLE_BUFFER=y
> ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00
> ++CONFIG_MTK_POWER_DOMAIN=y
> ++CONFIG_RAM=y
> ++CONFIG_DM_SERIAL=y
> ++CONFIG_MTK_SERIAL=y
> ++CONFIG_MMC=y
> ++CONFIG_MMC_DEFAULT_DEV=1
> ++CONFIG_MMC_MTK=y
> ++CONFIG_SUPPORT_EMMC_BOOT=y
> ++CONFIG_SPI=y
> ++CONFIG_DM_SPI=y
> ++CONFIG_MTK_SPI_NAND=y
> ++CONFIG_MTK_SPI_NAND_MTD=y
> ++CONFIG_SYSRESET_WATCHDOG=y
> ++CONFIG_WDT_MTK=y
> ++CONFIG_LZO=y
> ++CONFIG_ZSTD=y
> ++CONFIG_HEXDUMP=y
> ++CONFIG_RANDOM_UUID=y
> ++CONFIG_REGEX=y
> ++CONFIG_USB=y
> ++CONFIG_USB_HOST=y
> ++CONFIG_USB_XHCI_HCD=y
> ++CONFIG_USB_XHCI_MTK=y
> ++CONFIG_USB_STORAGE=y
> +--- /dev/null
> ++++ b/bananapi_bpi-r64-snand_env
> +@@ -0,0 +1,58 @@
> ++ipaddr=192.168.1.1
> ++serverip=192.168.1.254
> ++loadaddr=0x4007ff28
> ++bootargs=root=/dev/ubiblock0_3p1
               ^^^^^^^^^^^^^^^^^^^^^^^
If you are hard-coding the UBI volume ID (3) for the production volume,
you should also enforce that when the volume is created further down
and as well for sysupgrade (which is going to be a bit more tricky).

> ++bootcmd=run boot_ubi
> ++bootconf=config-mt7622-bananapi-bpi-r64-pcie1
> ++bootconf_pcie=config-mt7622-bananapi-bpi-r64-pcie1
> ++bootconf_sata=config-mt7622-bananapi-bpi-r64-sata
> ++bootdelay=0
> ++bootfile=openwrt-mediatek-mt7622-bananapi_bpi-r64-initramfs-recovery.itb
> ++bootfile_upg=openwrt-mediatek-mt7622-bananapi_bpi-r64-squashfs-sysupgrade.itb
> ++bootfile_fip=openwrt-mediatek-mt7622-bananapi_bpi-r64-boot-snand.img
> ++bootfile_bl2=openwrt-mediatek-mt7622-bananapi_bpi-r64-bl2-snand.bin
> ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60
> ++bootmenu_default=0
> ++bootmenu_delay=0
> ++bootmenu_title=      ( ( ( OpenWrt ) ) )  [NAND]
> ++bootmenu_0=Initialize environment.=run _firstboot
> ++bootmenu_0d=Run default boot command.=run boot_default
> ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return
> ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return
> ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return
> ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; run boot_tftp_production ; setenv noboot ; run bootmenu_confirm_return
> ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; run boot_tftp_recovery ; setenv noboot ; run bootmenu_confirm_return
> ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return
> ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return
> ++bootmenu_8=Reboot.=reset
> ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset
> ++boot_default=run bootcmd ; run boot_recovery ; run boot_tftp_forever
> ++boot_first=if button reset ; then run boot_tftp_forever ; fi ; bootmenu
> ++boot_production=led bpi-r64:pio:green on ; run ubi_read_production && bootm $loadaddr#$bootconf
> ++boot_recovery=led bpi-r64:pio:green off ; run check_recovery
> ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf
> ++boot_tftp_forever=led bpi-r64:pio:blue on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done
> ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
> ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi
> ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run boot_write_bl2
> ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip
> ++boot_ubi=ubi part ubi && run boot_production ; run boot_recovery
> ++boot_write_fip=mtd erase fip && mtd write fip $loadaddr
> ++boot_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr
> ++check_recovery=run ubi_read_recovery ; if iminfo $loadaddr ; then bootm $loadaddr#$bootconf; else ubi remove recovery ; fi
> ++check_ubi=ubi part ubi || run ubi_format
> ++part_default=production
> ++part_recovery=recovery
> ++reset_factory=ubi part ubi ; ubi write 0x0 ubootenv 0x0 ; ubi write 0x0 ubootenv2 0x0 ; ubi remove rootfs_data
> ++rootfs_data_max=0x2000000
> ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset
> ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi
> ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs
> ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery
> ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data
> ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize
                                                                                                                  ^^^
                                                                                                                   3

> ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize
> ++_create_env=ubi create ubootenv 0x100000 dynamic ; ubi create ubootenv2 0x100000 dynamic
> ++_init_env=setenv _init_env ; if ubi check ubootenv && ubi check ubootenv2 ; then else run _create_env ; fi ; setenv _create_env ; saveenv || run ubi_format ; saveenv || run ubi_format
> ++_firstboot=setenv _firstboot ; led bpi-r64:pio:blue on ; run _switch_to_menu ; run check_ubi ; run _init_env ; run boot_first
> ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d
> diff --git a/package/boot/uboot-mediatek/patches/404-add-bananapi-bpi-r64-snand.patch b/package/boot/uboot-mediatek/patches/404-add-bananapi-bpi-r64-snand.patch
> new file mode 100644
> index 0000000000..fc8775723b
> --- /dev/null
> +++ b/package/boot/uboot-mediatek/patches/404-add-bananapi-bpi-r64-snand.patch
> @@ -0,0 +1,34 @@
> +--- a/arch/arm/dts/mt7622-bananapi-bpi-r64.dts	2021-03-12 10:00:48.248746068 +0200
> ++++ b/arch/arm/dts/mt7622-bananapi-bpi-r64.dts	2021-03-12 10:02:26.993953897 +0200
> +@@ -19,7 +19,7 @@
> + 	};
> + 
> + 	aliases {
> +-		spi0 = &snfi;
> ++		spi0 = &snand;
> + 		ethernet0 = ð
> + 	};
> + 
> +@@ -205,17 +205,11 @@
> + 	};
> + };
> + 
> +-&snfi {
> +-	pinctrl-names = "default", "snfi";
> +-	pinctrl-0 = <&snor_pins>;
> +-	pinctrl-1 = <&snfi_pins>;
> +-	status = "okay";
> +-
> +-	spi-flash at 0{
> +-		compatible = "jedec,spi-nor";
> +-		reg = <0>;
> +-		u-boot,dm-pre-reloc;
> +-	};
> ++&snand {
> ++       pinctrl-names = "default";
> ++       pinctrl-0 = <&snfi_pins>;
> ++       status = "okay";
> ++       quad-spi;
> + };

Please use tabs for indentation like in the rest of the file.

> + 
> + &uart0 {
> diff --git a/target/linux/mediatek/image/mt7622.mk b/target/linux/mediatek/image/mt7622.mk
> index 176abed581..2934ecb5a3 100644
> --- a/target/linux/mediatek/image/mt7622.mk
> +++ b/target/linux/mediatek/image/mt7622.mk
> @@ -76,9 +76,11 @@ define Device/bananapi_bpi-r64
>    DEVICE_DTS := mt7622-bananapi-bpi-r64
>    DEVICE_DTS_OVERLAY := mt7622-bananapi-bpi-r64-pcie1 mt7622-bananapi-bpi-r64-sata
>    DEVICE_PACKAGES := kmod-ata-ahci-mtk kmod-btmtkuart kmod-usb3 e2fsprogs mkf2fs f2fsck
> -  ARTIFACTS := sdcard.img.gz
> +  ARTIFACTS := sdcard.img.gz bl2-snand.bin boot-snand.img

Please keep the naming consistent with linksys-e8450-ubi, ie. use
'snand-preloader.bin' and 'snand-bl31-uboot.fip' as artifact names.

 
>    IMAGES := sysupgrade.itb
>    KERNEL_INITRAMFS_SUFFIX := -recovery.itb
> +  ARTIFACT/bl2-snand.bin	:= bl2 snand-2ddr
> +  ARTIFACT/boot-snand.img	:= bl31-uboot bananapi_bpi-r64-snand
>    ARTIFACT/sdcard.img.gz	:= mt7622-gpt sdmmc |\
>  				   pad-to 512k | bl2 sdmmc-2ddr |\
>  				   pad-to 2048k | bl31-uboot bananapi_bpi-r64-sdmmc |\
> @@ -86,6 +88,8 @@ define Device/bananapi_bpi-r64
>  				   pad-to 38912k | mt7622-gpt emmc |\
>  				   pad-to 39424k | bl2 emmc-2ddr |\
>  				   pad-to 40960k | bl31-uboot bananapi_bpi-r64-emmc |\
> +				   pad-to 43008k | bl2 snand-2ddr |\
> +				   pad-to 43520k | bl31-uboot bananapi_bpi-r64-snand |\
>  				   pad-to 46080k | append-image squashfs-sysupgrade.itb | gzip
>    KERNEL			:= kernel-bin | gzip
>    KERNEL_INITRAMFS		:= kernel-bin | lzma | fit lzma $$(DTS_DIR)/$$(DEVICE_DTS).dtb with-initrd | pad-to 128k
> diff --git a/target/linux/mediatek/patches-5.10/115-dts-bpi64-add-snand-support.patch b/target/linux/mediatek/patches-5.10/115-dts-bpi64-add-snand-support.patch
> new file mode 100644
> index 0000000000..aa0e347115
> --- /dev/null
> +++ b/target/linux/mediatek/patches-5.10/115-dts-bpi64-add-snand-support.patch
> @@ -0,0 +1,57 @@
> +--- a/arch/arm64/boot/dts/mediatek/mt7622-bananapi-bpi-r64.dts	2021-03-13 13:46:37.057936814 +0200
> ++++ b/arch/arm64/boot/dts/mediatek/mt7622-bananapi-bpi-r64.dts	2021-03-13 13:49:26.957481217 +0200
> +@@ -114,7 +114,7 @@
> + };
> + 
> + &bch {
> +-	status = "disabled";
> ++	status = "okay";
> + };
> + 
> + &btif {
> +@@ -259,14 +259,40 @@
> + 	status = "disabled";
> + };
> + 
> +-&nor_flash {
> ++&snfi {
> + 	pinctrl-names = "default";
> +-	pinctrl-0 = <&spi_nor_pins>;
> +-	status = "disabled";
> ++	pinctrl-0 = <&serial_nand_pins>;
> ++	status = "okay";
> + 
> +-	flash at 0 {
> +-		compatible = "jedec,spi-nor";
> ++	snand: spi_nand at 0 {
> ++		#address-cells = <1>;
> ++		#size-cells = <1>;
> ++		compatible = "spi-nand";
> ++		spi-max-frequency = <104000000>;
> + 		reg = <0>;
> ++
> ++		partitions {
> ++			compatible = "fixed-partitions";
> ++			#address-cells = <1>;
> ++			#size-cells = <1>;
> ++
> ++			partition at 0 {
> ++				label = "bl2";
> ++				reg = <0x0 0x80000>;
> ++				read-only;
> ++			};
> ++
> ++			partition at 80000 {
> ++				label = "fip";
> ++				reg = <0x80000 0x200000>;
> ++				read-only;
> ++			};
> ++
> ++			partition at 280000 {
> ++				label = "ubi";
> ++				reg = <0x280000 0x7d80000>;
> ++			};
> ++		};
> + 	};
> + };
> + 
> diff --git a/target/linux/mediatek/patches-5.4/115-dts-bpi64-add-snand-support.patch b/target/linux/mediatek/patches-5.4/115-dts-bpi64-add-snand-support.patch
> new file mode 100644
> index 0000000000..aa0e347115
> --- /dev/null
> +++ b/target/linux/mediatek/patches-5.4/115-dts-bpi64-add-snand-support.patch
> @@ -0,0 +1,57 @@
> +--- a/arch/arm64/boot/dts/mediatek/mt7622-bananapi-bpi-r64.dts	2021-03-13 13:46:37.057936814 +0200
> ++++ b/arch/arm64/boot/dts/mediatek/mt7622-bananapi-bpi-r64.dts	2021-03-13 13:49:26.957481217 +0200
> +@@ -114,7 +114,7 @@
> + };
> + 
> + &bch {
> +-	status = "disabled";
> ++	status = "okay";
> + };
> + 
> + &btif {
> +@@ -259,14 +259,40 @@
> + 	status = "disabled";
> + };
> + 
> +-&nor_flash {
> ++&snfi {
> + 	pinctrl-names = "default";
> +-	pinctrl-0 = <&spi_nor_pins>;
> +-	status = "disabled";
> ++	pinctrl-0 = <&serial_nand_pins>;
> ++	status = "okay";
> + 
> +-	flash at 0 {
> +-		compatible = "jedec,spi-nor";
> ++	snand: spi_nand at 0 {
> ++		#address-cells = <1>;
> ++		#size-cells = <1>;
> ++		compatible = "spi-nand";
> ++		spi-max-frequency = <104000000>;
> + 		reg = <0>;
> ++
> ++		partitions {
> ++			compatible = "fixed-partitions";
> ++			#address-cells = <1>;
> ++			#size-cells = <1>;
> ++
> ++			partition at 0 {
> ++				label = "bl2";
> ++				reg = <0x0 0x80000>;
> ++				read-only;
> ++			};
> ++
> ++			partition at 80000 {
> ++				label = "fip";
> ++				reg = <0x80000 0x200000>;
> ++				read-only;
> ++			};
> ++
> ++			partition at 280000 {
> ++				label = "ubi";
> ++				reg = <0x280000 0x7d80000>;
> ++			};
> ++		};
> + 	};
> + };
> + 
> -- 
> 2.25.1
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list