Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Rockchip u-boot "binman" BOOT_SCENARIO #7505

Merged
merged 2 commits into from
Nov 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 28 additions & 9 deletions config/boards/rock-s0.conf
Original file line number Diff line number Diff line change
@@ -1,13 +1,32 @@
# 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
DDR_BLOB=rk33/rk3308_ddr_589MHz_uart0_m0_v2.07.bin
BL31_BLOB=rk33/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
}
82 changes: 25 additions & 57 deletions config/boards/rockpi-s.conf
Original file line number Diff line number Diff line change
@@ -1,74 +1,42 @@
# 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
DDR_BLOB=rk33/rk3308_ddr_589MHz_uart0_m0_v2.07.bin
BL31_BLOB=rk33/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

install -m 755 $bsp/lib/udev/fixEtherAddr $destination/lib/udev &&
install -m 644 $bsp/$rules/05-fixMACaddress.rules $destination/$rules
install -m 644 $bsp/$rules/05-fixMACaddress.rules $destination/$rules
}

}

function pre_install_kernel_debs__enforce_cma() {
Expand All @@ -77,5 +45,5 @@ function pre_install_kernel_debs__enforce_cma() {
display_alert "$BOARD" "set CMA size to 16MB due to small DRAM size"
run_host_command_logged echo "extraargs=cma=16M" ">>" "${SDCARD}"/boot/armbianEnv.txt

return 0
return 0
}
111 changes: 55 additions & 56 deletions config/sources/families/include/rockchip64_common.inc
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ 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)}
Expand All @@ -80,12 +81,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)
Expand Down Expand Up @@ -157,9 +152,12 @@ case "$BOOT_SOC" in
esac

prepare_boot_configuration() {
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'
Expand All @@ -171,22 +169,17 @@ prepare_boot_configuration() {
[[ $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'
;;
binman)
UBOOT_TARGET_MAP="BL31=$RKBIN_DIR/$BL31_BLOB ROCKCHIP_TPL=$RKBIN_DIR/$DDR_BLOB;;u-boot-rockchip.bin"
;;
esac

Expand All @@ -206,45 +199,52 @@ prepare_boot_configuration() {
}

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
[[ -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"

elif [[ $BOOT_SCENARIO == "only-blobs" ]]; then
case "$BOOT_SCENARIO" in
blobless | tpl-spl-blob | binman)
:
;;

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
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
;;

else
exit_with_error "Unsupported u-boot processing configuration!"
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
Expand Down Expand Up @@ -273,9 +273,11 @@ 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
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" || $BOOT_SCENARIO == "tpl-spl-blob"
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"
Expand All @@ -288,16 +290,13 @@ write_uboot_platform() {
fi
}

# @TODO: this is not ready for BOOT_SCENARIO=binman yet
write_uboot_platform_mtd() {
if [[ -f $1/rkspi_loader.img ]]; then

dd if=$1/rkspi_loader.img of=$2 conv=notrunc status=none > /dev/null 2>&1

else

echo "SPI u-boot image not found!"
exit 1

fi
}

Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Brent Roman <genosenosor@gmail.com>
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 <genosenosor@gmail.com>
---
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
Loading