From 9de6df31fa18225f26e6523824490d6a38164740 Mon Sep 17 00:00:00 2001 From: Brent Roman Date: Wed, 20 Nov 2024 23:08:13 -0800 Subject: [PATCH] Add Rockchip u-boot "binman" BOOT_SCENARIO Alter rock-s0 and rockpi-s to use the new "binman" BOOT_SCENARIO --- config/boards/rock-s0.conf | 38 ++- config/boards/rockpi-s.conf | 79 ++---- .../families/include/rockchip64_common.inc | 229 +++++++++--------- packages/blobs/rockchip/rk3308_bl31_v2.26.elf | Bin 0 -> 148176 bytes .../rk3308_ddr_589MHz_uart0_m0_v2.07.bin | Bin 0 -> 16940 bytes .../1120-mmcBootOnRockS0v1-1.patch | 42 ++++ 6 files changed, 212 insertions(+), 176 deletions(-) create mode 100644 packages/blobs/rockchip/rk3308_bl31_v2.26.elf create mode 100644 packages/blobs/rockchip/rk3308_ddr_589MHz_uart0_m0_v2.07.bin create mode 100644 patch/u-boot/v2024.10/board_rock-s0/1120-mmcBootOnRockS0v1-1.patch diff --git a/config/boards/rock-s0.conf b/config/boards/rock-s0.conf index 4ee215579b43..ac67707001f1 100644 --- a/config/boards/rock-s0.conf +++ b/config/boards/rock-s0.conf @@ -1,13 +1,33 @@ # Rockchip RK3308 quad core 512MB SoC WiFi # https://radxa.com/products/rocks/s0 -# This board is very similar to the older RockPi-S model -source "${SRC}/config/boards/rockpi-s.conf" - BOARD_NAME="Rock S0" -BOARD_MAINTAINER="brentr" -BOARDFAMILY="rockchip64" -BOOTCONFIG="rock-s0-rk3308_defconfig" -BOOT_FDT_FILE="rockchip/rk3308-rock-s0.dtb" -KERNEL_TARGET="current,edge" -KERNEL_TEST_TARGET="current" +BOARDFAMILY=rockchip64 +BOARD_MAINTAINER=brentr + +BOOTCONFIG=rock-s0-rk3308_defconfig +BOOT_FDT_FILE=rockchip/rk3308-rock-s0.dtb + +KERNEL_TARGET=current,edge +KERNEL_TEST_TARGET=current + +DEFAULT_CONSOLE=serial +SERIALCON=ttyS0 +MODULES_BLACKLIST="rockchipdrm analogix_dp dw_mipi_dsi dw_hdmi gpu_sched lima hantro_vpu panfrost" +HAS_VIDEO_OUTPUT=no + +BOOTBRANCH_BOARD=tag:v2024.10 +BOOTPATCHDIR=v2024.10 +BOOT_SCENARIO=binman +RKBIN_DIR=${SRC}/packages/blobs/rockchip +DDR_BLOB=rk3308_ddr_589MHz_uart0_m0_v2.07.bin +BL31_BLOB=rk3308_bl31_v2.26.elf + +OVERLAY_PREFIX=rk3308 + +function post_family_config__rocks0() { + declare -g BOOTDIR="u-boot-${BOARD}" + declare -g BOOTSCRIPT=boot-rockchip64-ttyS0.cmd:boot.cmd + + unset family_tweaks_bsp # disable from rockchip64_common +} diff --git a/config/boards/rockpi-s.conf b/config/boards/rockpi-s.conf index 12917c32aba1..dce1b4f37f12 100644 --- a/config/boards/rockpi-s.conf +++ b/config/boards/rockpi-s.conf @@ -1,66 +1,36 @@ # Rockchip RK3308 quad core 256-512MB SoC WiFi -# https://radaxa.com/products/rockpi/pis -BOARD_NAME="Rockpi S" -BOARDFAMILY="rockchip64" -BOARD_MAINTAINER="brentr" -BOOTCONFIG="rock-pi-s-rk3308_defconfig" -BOOT_FDT_FILE="rockchip/rk3308-rock-pi-s.dtb" - -DEFAULT_CONSOLE="serial" -SERIALCON="ttyS0" -KERNEL_TARGET="current,edge" -KERNEL_TEST_TARGET="current" -MODULES_BLACKLIST="rockchipdrm analogix_dp dw_mipi_dsi dw_hdmi gpu_sched lima hantro_vpu panfrost" -HAS_VIDEO_OUTPUT="no" -BOOTBRANCH_BOARD="tag:v2022.04" -BOOTPATCHDIR="u-boot-rockchip64-v2022.04" - -OVERLAY_PREFIX='rk3308' - -#comment out line below for an image that will NOT boot from the built-in SDNAND -IDBLOADER_BLOB=$SRC/packages/blobs/rockchip/rk3308_idbloader_ddr589MHz_uart0_m0_v2.06.136sd.bin - -#The SDNAND capabilty IDBLOADER_BLOB requires the U-Boot and Linux serial console on UART0 -#Linux will hang on reboot if the console remains on UART2 +# https://radxa.com/products/rockpi/pis -#Note: IDBLOADER_BLOB is derived from -# https://dl.radxa.com/rockpis/images/loader/rk3308_loader_ddr589MHz_uart0_m0_v2.06.136sd.bin -#by using the rkdeveloptool to "upgrade" the previous DDR_BLOB loader on the SDNAND -#To recreate it, build the image with IDBLOADER_BLOB unset and boot Rock PI-S in MASKROM mode -#On your host (connected to the RockPi-S's USB-C port): -# rdeveloptool db rk3308_loader_ddr589MHz_uart0_m0_v2.06.136sd.bin -# rdeveloptool wl 0 newly_built_image.img -# rdeveloptool ul rk3308_loader_ddr589MHz_uart0_m0_v2.06.136sd.bin #this writes 280 sectors +BOARD_NAME="Rockpi S" +BOARDFAMILY=rockchip64 +BOARD_MAINTAINER=brentr -#Then, reset the RockPi-S to boot from SDNAND. Using that running image: -# dd if=/dev/mmcblk0 of=rk3308_idbloader_ddr589MHz_uart0_m0_v2.06.136sd.bin skip=64 count=280 +BOOTCONFIG=rock-pi-s-rk3308_defconfig +BOOT_FDT_FILE=rockchip/rk3308-rock-pi-s.dtb -function post_family_config___uboot_config() { +KERNEL_TARGET=current,edge +KERNEL_TEST_TARGET=current - display_alert "$BOARD" "u-boot ${BOOTBRANCH_BOARD} overrides" "info" - unset uboot_custom_postprocess family_tweaks_bsp # disable stuff from rockchip64_common +DEFAULT_CONSOLE=serial +SERIALCON=ttyS0 +MODULES_BLACKLIST="rockchipdrm analogix_dp dw_mipi_dsi dw_hdmi gpu_sched lima hantro_vpu panfrost" +HAS_VIDEO_OUTPUT=no - BOOTSCRIPT=boot-rockchip64-ttyS0.cmd:boot.cmd +BOOTBRANCH_BOARD=tag:v2024.10 +BOOTPATCHDIR=v2024.10 +BOOT_SCENARIO=binman +RKBIN_DIR=${SRC}/packages/blobs/rockchip +DDR_BLOB=rk3308_ddr_589MHz_uart0_m0_v2.07.bin +BL31_BLOB=rk3308_bl31_v2.26.elf - uboot_custom_postprocess() { +OVERLAY_PREFIX=rk3308 - # TODO: remove this diversion from common caused by different loaderimage params - run_host_x86_binary_logged $RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x600000 --size 1024 1 && - if [ -r "$IDBLOADER_BLOB" ]; then - echo "Installing $IDBLOADER_BLOB" - echo "Capable of booting from built-in SDNAND" - cp $IDBLOADER_BLOB idbloader.bin - else - [ "$IDBLOADER_BLOB" ] && echo "Missing $IDBLOADER_BLOB" - echo "WARNING: This image will not boot from built-in SDNAND" - tools/mkimage -n rk3308 -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin && - cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin - fi && - run_host_x86_binary_logged $RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini - } - - family_tweaks_bsp() { #Install udev script that derives fixed, unique MAC addresses for net interfaces +function post_family_config__rockpis() { + declare -g BOOTDIR="u-boot-${BOARD}" + declare -g BOOTSCRIPT=boot-rockchip64-ttyS0.cmd:boot.cmd + family_tweaks_bsp() { #overrides rockchip64_common.inc + #Install udev script that derives fixed, unique MAC addresses for net interfaces #that are assigned random ones -- like RockPI-S's WiFi network interfaces bsp=$SRC/packages/bsp/rockpis rules=etc/udev/rules.d @@ -68,7 +38,6 @@ function post_family_config___uboot_config() { install -m 755 $bsp/lib/udev/fixEtherAddr $destination/lib/udev && install -m 644 $bsp/$rules/05-fixMACaddress.rules $destination/$rules } - } function pre_install_kernel_debs__enforce_cma() { diff --git a/config/sources/families/include/rockchip64_common.inc b/config/sources/families/include/rockchip64_common.inc index 494302ec4f83..688444e56d58 100644 --- a/config/sources/families/include/rockchip64_common.inc +++ b/config/sources/families/include/rockchip64_common.inc @@ -1,7 +1,7 @@ # # SPDX-License-Identifier: GPL-2.0 # -# Copyright (c) 2013-2023 Igor Pecovnik, igor@armbian.com +# Copyright (c) 2013-2024 Igor Pecovnik, igor@armbian.com # # This file is a part of the Armbian Build Framework # https://github.com/armbian/build/ @@ -15,14 +15,17 @@ UBOOT_TARGET_MAP=";;idbloader.bin uboot.img trust.bin" BOOTDELAY=0 OVERLAY_PREFIX="${OVERLAY_PREFIX:-"rockchip"}" # default to 'rockchip' if not set by board OVERLAY_DIR="/boot/dtb/rockchip/overlay" -# SERIALCON is handled/defaulted in hook post_family_config__900_late_default_serial_console_by_branch at end of this file +# SERIALCON is handled/defaulted in hook +# post_family_config__900_late_default_serial_console_by_branch at end of this file GOVERNOR="ondemand" ATFPATCHDIR='atf-rockchip64' BOOTPATCHDIR="${BOOTPATCHDIR:-"u-boot-rockchip64"}" PACKAGE_LIST_FAMILY="ethtool" -RKBIN_DIR="$SRC/cache/sources/rkbin-tools" +RKBIN_DIR="${RKBIN_DIR:-$SRC/cache/sources/rkbin-tools}" -# Important, we don't set LINUXFAMILY and LINUXCONFIG -- unless it is current or edge. Specifically, we don't do it for legacy branches, which are used by BOARDFAMILY's other than rockchip64. +# Important, we don't set LINUXFAMILY and LINUXCONFIG -- unless it is current or edge. +# Specifically, we don't do it for legacy branches, which are used by BOARDFAMILY's +# other than rockchip64. case $BRANCH in @@ -56,6 +59,8 @@ esac # - tpl-spl-blob: uses mainline u-boot TPL and SPL with proprietary rockchip ATF blob # - tpl-blob-atf-mainline: proprietary rockchip ddrbin + mainline u-boot SPL + mainline ATF # - blobless: mainline u-boot TPL + mainline u-boot SPL + mainline ATF +# - binman: u-boot builds full boot image from information in device tree. See: +# https://docs.u-boot.org/en/latest/develop/package/binman.html #BOOT_SOC=`expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*'` BOOT_SOC=${BOOT_SOC:=$(expr $BOOTCONFIG : '.*\(rk[[:digit:]]\+.*\)_.*' || true)} @@ -80,12 +85,6 @@ case "$BOOT_SOC" in DDR_BLOB="${DDR_BLOB:-"rk33/rk3308_ddr_589MHz_uart2_m1_v1.30.bin"}" MINILOADER_BLOB="${MINILOADER_BLOB:-"rk33/rk3308_miniloader_v1.22.bin"}" BL31_BLOB="${BL31_BLOB:-"rk33/rk3308_bl31_v2.22.elf"}" - - if [[ ${BRANCH} == legacy ]]; then - DDR_BLOB="${DDR_BLOB:-"rk33/rk3308_ddr_589MHz_uart2_m0_v1.26.bin"}" - MINILOADER_BLOB="${MINILOADER_BLOB:-"rk33/rk3308_miniloader_sd_nand_v1.13.bin"}" - BL31_BLOB="${BL31_BLOB:-"rk33/rk3308_bl31_v2.10.elf"}" - fi ;; rk3328) @@ -157,94 +156,98 @@ case "$BOOT_SOC" in esac prepare_boot_configuration() { - case "$BOOT_SCENARIO" in - blobless | tpl-blob-atf-mainline) - UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb" - ATFSOURCE='https://github.com/ARM-software/arm-trusted-firmware' - ATF_COMPILER='aarch64-linux-gnu-' - ATFDIR='arm-trusted-firmware' - ATFBRANCH='tag:lts-v2.8.8' - ATF_USE_GCC='> 6.3' - ATF_TARGET_MAP="M0_CROSS_COMPILE=arm-linux-gnueabi- PLAT=$BOOT_SOC bl31;;build/$BOOT_SOC/release/bl31/bl31.elf:bl31.elf" - ATF_TOOLCHAIN2="arm-linux-gnueabi-:< 10.0" - - [[ $BOOT_SCENARIO == tpl-blob-atf-mainline ]] && - UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb" - ;; - - tpl-spl-blob) - UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB idbloader.img u-boot.itb;;idbloader.img u-boot.itb" - ATFSOURCE='' - ATF_COMPILE='no' - ;; - spl-blobs) - UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB spl/u-boot-spl.bin u-boot.dtb u-boot.itb;;idbloader.img u-boot.itb" - ATFSOURCE='' - ATF_COMPILE='no' - ;; - - only-blobs) - UBOOT_TARGET_MAP="u-boot-dtb.bin;;idbloader.bin uboot.img trust.bin" - ATFSOURCE='' - ATF_COMPILE='no' - ;; - esac - - if [[ ! -z $BL32_BLOB ]]; then - UBOOT_TARGET_MAP="BL32=$RKBIN_DIR/$BL32_BLOB ${UBOOT_TARGET_MAP}" - fi - - if [[ $BOOT_SUPPORT_SPI == yes ]]; then - - if [[ "${BOOT_SPI_RKSPI_LOADER:-"no"}" != "yes" ]]; then - UBOOT_TARGET_MAP="${UBOOT_TARGET_MAP} tpl/u-boot-tpl.bin spl/u-boot-spl.bin u-boot.itb rkspi_loader.img" - else - UBOOT_TARGET_MAP="${UBOOT_TARGET_MAP} rkspi_loader.img" - fi - - fi + ATFSOURCE='' + ATF_COMPILE='no' + case "$BOOT_SCENARIO" in + blobless | tpl-blob-atf-mainline) + UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb" + ATF_COMPILE=yes + ATFSOURCE='https://github.com/ARM-software/arm-trusted-firmware' + ATF_COMPILER='aarch64-linux-gnu-' + ATFDIR='arm-trusted-firmware' + ATFBRANCH='tag:lts-v2.8.8' + ATF_USE_GCC='> 6.3' + ATF_TARGET_MAP="M0_CROSS_COMPILE=arm-linux-gnueabi- PLAT=$BOOT_SOC bl31;;build/$BOOT_SOC/release/bl31/bl31.elf:bl31.elf" + ATF_TOOLCHAIN2="arm-linux-gnueabi-:< 10.0" + + [[ $BOOT_SCENARIO == tpl-blob-atf-mainline ]] && + UBOOT_TARGET_MAP="BL31=bl31.elf idbloader.img u-boot.itb;;idbloader.img u-boot.itb" + ;; + tpl-spl-blob) + UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB idbloader.img u-boot.itb;;idbloader.img u-boot.itb" + ;; + spl-blobs) + UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB spl/u-boot-spl.bin u-boot.dtb u-boot.itb;;idbloader.img u-boot.itb" + ;; + only-blobs) + UBOOT_TARGET_MAP="u-boot-dtb.bin;;idbloader.bin uboot.img trust.bin" + ;; + binman) + UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB ROCKCHIP_TPL=$RKBIN_DIR/$DDR_BLOB;;u-boot-rockchip.bin" + ;; + esac + + if [[ ! -z $BL32_BLOB ]]; then + UBOOT_TARGET_MAP="BL32=$RKBIN_DIR/$BL32_BLOB ${UBOOT_TARGET_MAP}" + fi + + if [[ $BOOT_SUPPORT_SPI == yes ]]; then + + if [[ "${BOOT_SPI_RKSPI_LOADER:-"no"}" != "yes" ]]; then + UBOOT_TARGET_MAP="${UBOOT_TARGET_MAP} tpl/u-boot-tpl.bin spl/u-boot-spl.bin u-boot.itb rkspi_loader.img" + else + UBOOT_TARGET_MAP="${UBOOT_TARGET_MAP} rkspi_loader.img" + fi + + fi } uboot_custom_postprocess() { - [[ -z ${BOOT_SOC} ]] && exit_with_error "BOOT_SOC not defined for scenario '${BOOT_SCENARIO}' for BOARD'=${BOARD}' and BOOTCONFIG='${BOOTCONFIG}'" - - if [[ $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-spl-blob" ]]; then - : - elif [[ $BOOT_SCENARIO == "spl-blobs" || $BOOT_SCENARIO == "tpl-blob-atf-mainline" ]]; then - # Bomb if DDR_BLOB not defined or does not exist - declare SPL_BIN_PATH="${RKBIN_DIR}/${DDR_BLOB}" - [[ -z ${SPL_BIN_PATH} ]] && exit_with_error "DDR_BLOB not defined for scenario ${BOOT_SCENARIO}" - [[ ! -f "${SPL_BIN_PATH}" ]] && exit_with_error "DDR_BLOB ${SPL_BIN_PATH} does not exist for scenario ${BOOT_SCENARIO}" - - if [[ $BOOT_SOC == "rk3576" ]]; then - display_alert "boot_merger for '${BOOT_SOC}' for scenario ${BOOT_SCENARIO}" "SPL_BIN_PATH: ${SPL_BIN_PATH}" "debug" - RKBOOT_INI_FILE=rk3576.ini - cp $RKBIN_DIR/rk35/RK3576MINIALL.ini $RKBOOT_INI_FILE - sed -i "s|FlashBoost=.*$|FlashBoost=${RKBIN_DIR}/rk35/rk3576_boost_v1.02.bin|g" $RKBOOT_INI_FILE - sed -i "s|Path1=.*rk3576_ddr.*$|Path1=${SPL_BIN_PATH}|g" $RKBOOT_INI_FILE - sed -i "s|Path1=.*rk3576_usbplug.*$|Path1=${RKBIN_DIR}/rk35/rk3576_usbplug_v1.03.bin|g" $RKBOOT_INI_FILE - sed -i "s|FlashData=.*$|FlashData=${SPL_BIN_PATH}|g" $RKBOOT_INI_FILE - sed -i "s|FlashBoot=.*$|FlashBoot=./spl/u-boot-spl.bin|g" $RKBOOT_INI_FILE - sed -i "s|IDB_PATH=.*$|IDB_PATH=idbloader.img|g" $RKBOOT_INI_FILE - run_host_x86_binary_logged $RKBIN_DIR/tools/boot_merger $RKBOOT_INI_FILE - rm -f $RKBOOT_INI_FILE - else - display_alert "mkimage for '${BOOT_SOC}' for scenario ${BOOT_SCENARIO}" "SPL_BIN_PATH: ${SPL_BIN_PATH}" "debug" - run_host_command_logged tools/mkimage -n "${BOOT_SOC_MKIMAGE}" -T rksd -d "${SPL_BIN_PATH}:spl/u-boot-spl.bin" idbloader.img - fi - - elif [[ $BOOT_SCENARIO == "only-blobs" ]]; then - - local tempfile - tempfile=$(mktemp) - run_host_command_logged tools/mkimage -n "${BOOT_SOC_MKIMAGE}" -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin - cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin - run_host_x86_binary_logged $RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000 - run_host_x86_binary_logged $RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini + [[ -z ${BOOT_SOC} ]] && + exit_with_error "BOOT_SOC not defined for scenario '${BOOT_SCENARIO}' for BOARD'=${BOARD}' and BOOTCONFIG='${BOOTCONFIG}'" + display_alert "${BOARD}" "boots with ${BOOT_SCENARIO} scenario" "info" - else - exit_with_error "Unsupported u-boot processing configuration!" - fi + case "$BOOT_SCENARIO" in + blobless | tpl-spl-blob | binman) + : + ;; + + spl-blobs | tpl-blob-atf-mainline) + # Bomb if DDR_BLOB not defined or does not exist + declare SPL_BIN_PATH="${RKBIN_DIR}/${DDR_BLOB}" + [[ -z ${SPL_BIN_PATH} ]] && exit_with_error "DDR_BLOB not defined for scenario ${BOOT_SCENARIO}" + [[ ! -f "${SPL_BIN_PATH}" ]] && exit_with_error "DDR_BLOB ${SPL_BIN_PATH} does not exist for scenario ${BOOT_SCENARIO}" + + if [[ "$BOOT_SOC" == "rk3576" ]]; then + display_alert "boot_merger for '${BOOT_SOC}' for scenario ${BOOT_SCENARIO}" "SPL_BIN_PATH: ${SPL_BIN_PATH}" "debug" + RKBOOT_INI_FILE=rk3576.ini + cp $RKBIN_DIR/rk35/RK3576MINIALL.ini $RKBOOT_INI_FILE + sed -i "s|FlashBoost=.*$|FlashBoost=${RKBIN_DIR}/rk35/rk3576_boost_v1.02.bin|g" $RKBOOT_INI_FILE + sed -i "s|Path1=.*rk3576_ddr.*$|Path1=${SPL_BIN_PATH}|g" $RKBOOT_INI_FILE + sed -i "s|Path1=.*rk3576_usbplug.*$|Path1=${RKBIN_DIR}/rk35/rk3576_usbplug_v1.03.bin|g" $RKBOOT_INI_FILE + sed -i "s|FlashData=.*$|FlashData=${SPL_BIN_PATH}|g" $RKBOOT_INI_FILE + sed -i "s|FlashBoot=.*$|FlashBoot=./spl/u-boot-spl.bin|g" $RKBOOT_INI_FILE + sed -i "s|IDB_PATH=.*$|IDB_PATH=idbloader.img|g" $RKBOOT_INI_FILE + run_host_x86_binary_logged $RKBIN_DIR/tools/boot_merger $RKBOOT_INI_FILE + rm -f $RKBOOT_INI_FILE + else + display_alert "mkimage for '${BOOT_SOC}' for scenario ${BOOT_SCENARIO}" "SPL_BIN_PATH: ${SPL_BIN_PATH}" "debug" + run_host_command_logged tools/mkimage -n "${BOOT_SOC_MKIMAGE}" -T rksd -d "${SPL_BIN_PATH}:spl/u-boot-spl.bin" idbloader.img + fi + ;; + + only-blobs) + local tempfile + tempfile=$(mktemp) + run_host_command_logged tools/mkimage -n "${BOOT_SOC_MKIMAGE}" -T rksd -d $RKBIN_DIR/$DDR_BLOB idbloader.bin + cat $RKBIN_DIR/$MINILOADER_BLOB >> idbloader.bin + run_host_x86_binary_logged $RKBIN_DIR/tools/loaderimage --pack --uboot ./u-boot-dtb.bin uboot.img 0x200000 + run_host_x86_binary_logged $RKBIN_DIR/tools/trust_merger --replace bl31.elf $RKBIN_DIR/$BL31_BLOB trust.ini + ;; + + *) + exit_with_error "\"$BOOT_SCENARIO\" is an Unsupported Boot Scenario!" + esac if [[ $BOOT_SUPPORT_SPI == yes ]]; then if [[ "${BOOT_SPI_RKSPI_LOADER:-"no"}" == "yes" ]]; then @@ -273,18 +276,20 @@ write_uboot_platform() { local logging_prelude="" [[ $(type -t run_host_command_logged) == function ]] && logging_prelude="run_host_command_logged" - if [[ -f $1/rksd_loader.img ]]; then # legacy rk3399 loader - ${logging_prelude} dd if=$1/rksd_loader.img of=$2 seek=64 conv=notrunc status=none - elif [[ -f $1/u-boot.itb ]]; then # $BOOT_SCENARIO == "blobless" || $BOOT_SCENARIO == "tpl-spl-blob" - ${logging_prelude} dd if=$1/idbloader.img of=$2 seek=64 conv=notrunc status=none - ${logging_prelude} dd if=$1/u-boot.itb of=$2 seek=16384 conv=notrunc status=none + if [ -f $1/u-boot-rockchip.bin ]; then #"$BOOT_SCENARIO" == binman + ${logging_prelude} dd if=$1/u-boot-rockchip.bin of=$2 bs=32k seek=1 conv=notrunc status=none + elif [ -f $1/rksd_loader.img ]; then # legacy rk3399 loader + ${logging_prelude} dd if=$1/rksd_loader.img of=$2 seek=64 conv=notrunc status=none + elif [[ -f $1/u-boot.itb ]]; then # $BOOT_SCENARIO "blobless" or "tpl-spl-blob" + ${logging_prelude} dd if=$1/idbloader.img of=$2 seek=64 conv=notrunc status=none + ${logging_prelude} dd if=$1/u-boot.itb of=$2 seek=16384 conv=notrunc status=none elif [[ -f $1/uboot.img ]]; then # $BOOT_SCENARIO == "only-blobs" - ${logging_prelude} dd if=$1/idbloader.bin of=$2 seek=64 conv=notrunc status=none - ${logging_prelude} dd if=$1/uboot.img of=$2 seek=16384 conv=notrunc status=none - ${logging_prelude} dd if=$1/trust.bin of=$2 seek=24576 conv=notrunc status=none + ${logging_prelude} dd if=$1/idbloader.bin of=$2 seek=64 conv=notrunc status=none + ${logging_prelude} dd if=$1/uboot.img of=$2 seek=16384 conv=notrunc status=none + ${logging_prelude} dd if=$1/trust.bin of=$2 seek=24576 conv=notrunc status=none else - echo "Unsupported u-boot processing configuration!" - exit 1 + echo "Unsupported u-boot processing configuration!" + exit 1 fi } @@ -367,14 +372,14 @@ function post_family_config__900_late_default_serial_console_by_branch() { fi case $BRANCH in - legacy | vendor) - display_alert "rockchip64_common: defaulting SERIALCON" "Setting SERIALCON to ttyFIQ0 for BRANCH='${BRANCH}'" "info" - SERIALCON="ttyFIQ0" - ;; - *) - display_alert "rockchip64_common: defaulting SERIALCON" "Setting SERIALCON to ttyS2 for BRANCH='${BRANCH}'" "info" - SERIALCON="ttyS2" - ;; + legacy | vendor) + display_alert "rockchip64_common: defaulting SERIALCON" "Setting SERIALCON to ttyFIQ0 for BRANCH='${BRANCH}'" "info" + SERIALCON="ttyFIQ0" + ;; + *) + display_alert "rockchip64_common: defaulting SERIALCON" "Setting SERIALCON to ttyS2 for BRANCH='${BRANCH}'" "info" + SERIALCON="ttyS2" + ;; esac display_alert "rockchip64_common: defaulting SERIALCON" "final SERIALCON: '${SERIALCON}' for BRANCH='${BRANCH}'" "debug" diff --git a/packages/blobs/rockchip/rk3308_bl31_v2.26.elf b/packages/blobs/rockchip/rk3308_bl31_v2.26.elf new file mode 100644 index 0000000000000000000000000000000000000000..7f6f628a62278cc2ca4b470fd3d5a1bf8aa8026e GIT binary patch literal 148176 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 IsHT|z4W3qPLI3~& literal 0 HcmV?d00001 diff --git a/packages/blobs/rockchip/rk3308_ddr_589MHz_uart0_m0_v2.07.bin b/packages/blobs/rockchip/rk3308_ddr_589MHz_uart0_m0_v2.07.bin new file mode 100644 index 0000000000000000000000000000000000000000..b0cce34b85d604cf1296eebcd01ffffa804c9065 GIT binary patch literal 16940 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 aWf}HHiR2iFe~gEUv@Lg82KyXChW|Is4n^Vs literal 0 HcmV?d00001 diff --git a/patch/u-boot/v2024.10/board_rock-s0/1120-mmcBootOnRockS0v1-1.patch b/patch/u-boot/v2024.10/board_rock-s0/1120-mmcBootOnRockS0v1-1.patch new file mode 100644 index 000000000000..67c35b0bd7a9 --- /dev/null +++ b/patch/u-boot/v2024.10/board_rock-s0/1120-mmcBootOnRockS0v1-1.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Brent Roman +Date: Sat, 16 Nov 2024 20:50:41 -0800 +Subject: Ensure Rock S0 v1.1 boards u-boot SPL can access MMC card + +Signed-off-by: Brent Roman +--- + arch/arm/dts/rk3308-rock-s0-u-boot.dtsi | 15 ++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/arch/arm/dts/rk3308-rock-s0-u-boot.dtsi b/arch/arm/dts/rk3308-rock-s0-u-boot.dtsi +index 84ca2ee0d5..c0d7f7b651 100644 +--- a/arch/arm/dts/rk3308-rock-s0-u-boot.dtsi ++++ b/arch/arm/dts/rk3308-rock-s0-u-boot.dtsi +@@ -5,10 +5,25 @@ + &emmc_pwren { + bootph-pre-ram; + bootph-some-ram; + }; + ++&pcfg_pull_down { ++ bootph-pre-ram; ++ bootph-some-ram; ++}; ++ ++&sdmmc { ++ pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_det &sdmmc_pwren &sdmmc_bus4>; ++}; ++ ++&sdmmc_pwren { ++ bootph-pre-ram; ++ bootph-some-ram; ++ rockchip,pins = <4 RK_PD6 0 &pcfg_pull_down>; ++}; ++ + &uart0 { + bootph-all; + clock-frequency = <24000000>; + }; + +-- +Created with Armbian build tools https://github.com/armbian/build