156 lines
5.5 KiB
Plaintext
156 lines
5.5 KiB
Plaintext
#
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# Copyright (c) 2013-2025 Igor Pecovnik, [email protected]
|
|
#
|
|
# This file is a part of the Armbian Build Framework
|
|
# https://github.com/armbian/build/
|
|
#
|
|
|
|
#
|
|
# RV1106 family: includes Rockchip RV1103 and RV1106 SoCs.
|
|
# This family is optimized for low-memory (64-256MB).
|
|
#
|
|
enable_extension "rkbin-tools"
|
|
|
|
# BOOT_SOC has to be set in the board configuration file; if not set
|
|
# we resort to rv1106
|
|
BOOT_SOC=${BOOT_SOC:="rv1106"}
|
|
|
|
ARCH=armhf
|
|
BOOTDELAY=1
|
|
SERIALCON="ttyFIQ0"
|
|
RKBIN_DIR="$SRC/cache/sources/rkbin-tools"
|
|
SRC_EXTLINUX="yes"
|
|
# Bootargs:
|
|
# cma=0 -- disable CMA allocations (used by video / ipc) to save memory
|
|
# video=off -- disable video subsystem to save memory
|
|
# udev.children-max=1 -- limit number of udev child processes to save memory early in boot
|
|
# console=ttyFIQ0,115200n8 -- set console to FIQ0 serial port at 115200 baud
|
|
SRC_CMDLINE="cma=0 video=off udev.children-max=1 console=ttyFIQ0,115200n8"
|
|
OVERLAY_PREFIX="rv1106"
|
|
OFFSET=16
|
|
SPL_FIT_GENERATOR="arch/arm/mach-rockchip/make_fit_optee.sh"
|
|
UBOOT_TARGET_MAP="spl/u-boot-spl.bin u-boot.dtb u-boot-nodtb.bin;;download.bin idblock.img u-boot.itb"
|
|
BOOTSOURCE="https://github.com/radxa/u-boot.git"
|
|
BOOTBRANCH="branch:next-dev-buildroot"
|
|
BOOTPATCHDIR="legacy/u-boot-rockchip-buildroot"
|
|
BOOTDIR="u-boot-rockchip"
|
|
|
|
# Set defaults based on BOOT_SOC (overridable in board config)
|
|
if [[ "$BOOT_SOC" == "rv1103" ]]; then
|
|
DDR_BLOB="${DDR_BLOB:-"rv11/rv1103b_ddr_924MHz_v1.05.bin"}"
|
|
TEE_BLOB="${TEE_BLOB:-"rv11/rv1103b_tee_ta_v1.03.bin"}"
|
|
USBPLUG_BLOB="${USBPLUG_BLOB:-"rv11/rv1103b_usbplug_v1.00.bin"}"
|
|
elif [[ "$BOOT_SOC" == "rv1106" ]]; then
|
|
DDR_BLOB="${DDR_BLOB:-"rv11/rv1106_ddr_924MHz_v1.15.bin"}"
|
|
TEE_BLOB="${TEE_BLOB:-"rv11/rv1106_tee_ta_v1.13.bin"}"
|
|
USBPLUG_BLOB="${USBPLUG_BLOB:-"rv11/rv1106_usbplug_v1.09.bin"}"
|
|
else
|
|
display_alert "$BOARD" "Unknown BOOT_SOC: ${BOOT_SOC} in rockchip-rv1106 family" "error"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
case $BRANCH in
|
|
|
|
vendor)
|
|
|
|
declare -g KERNEL_MAJOR_MINOR="6.1" # Major and minor versions of this kernel.
|
|
KERNELSOURCE='https://github.com/armbian/linux-rockchip.git'
|
|
KERNELBRANCH='branch:rk-6.1-rkr5.1'
|
|
KERNELPATCHDIR='rv1106-vendor-6.1'
|
|
KERNEL_BTF="no"
|
|
;;
|
|
|
|
esac
|
|
|
|
function post_config_uboot_target__downgrade_gcc_errors_to_warnings() {
|
|
|
|
declare -i gcc_major_version=0
|
|
gcc_major_version=$(gcc -dumpversion | cut -d. -f1)
|
|
display_alert "$BOARD" "GCC major version: ${gcc_major_version}" "debug"
|
|
|
|
# Rockchip/Radxa U-Boot won't build with GCC 13 due to enum-int-mismatch
|
|
if [[ ${gcc_major_version} -ge 13 ]]; then
|
|
display_alert "$BOARD" "Adding extra CFLAGS to fix vendor U-Boot building with GCC 13+" "info"
|
|
uboot_cflags_array+=("-Wno-error=enum-int-mismatch")
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
function pre_config_uboot_target__copy_tee() {
|
|
|
|
# Makefiles expect 'tee.bin' in the uboot build directory
|
|
display_alert "Copy TEE blob" "info"
|
|
run_host_command_logged cp ${RKBIN_DIR}/${TEE_BLOB} tee.bin
|
|
|
|
return 0
|
|
}
|
|
|
|
uboot_custom_postprocess() {
|
|
|
|
display_alert "Generate u-boot.its" "info"
|
|
run_host_command_logged $SPL_FIT_GENERATOR -t 0x03d00000 -c lzma > u-boot.its
|
|
|
|
display_alert "Generate u-boot.itb" "info"
|
|
# Remove uboot-generated itb if exists
|
|
rm -f u-boot.itb
|
|
run_host_command_logged tools/mkimage -f u-boot.its -E u-boot.itb
|
|
|
|
display_alert "Generate idblock.img with u-boot SPL" "debug"
|
|
RKBOOT_INI_FILE=rv1106.ini
|
|
cp $RKBIN_DIR/rv11/RV1106MINIALL.ini $RKBOOT_INI_FILE
|
|
sed -i "s|Path1=.*rv1106_ddr.*$|Path1=${RKBIN_DIR}/${DDR_BLOB}|g" $RKBOOT_INI_FILE
|
|
sed -i "s|Path1=.*rv1106_usbplug.*$|Path1=${RKBIN_DIR}/${USBPLUG_BLOB}|g" $RKBOOT_INI_FILE
|
|
sed -i "s|FlashData=.*$|FlashData=${RKBIN_DIR}/${DDR_BLOB}|g" $RKBOOT_INI_FILE
|
|
sed -i "s|FlashBoot=.*$|FlashBoot=./spl/u-boot-spl.bin|g" $RKBOOT_INI_FILE
|
|
sed -i "s|PATH=.*$|PATH=download.bin|g" $RKBOOT_INI_FILE
|
|
sed -i "s|IDB_PATH=.*$|IDB_PATH=idblock.img|g" $RKBOOT_INI_FILE
|
|
run_host_x86_binary_logged $RKBIN_DIR/tools/boot_merger $RKBOOT_INI_FILE
|
|
rm -f $RKBOOT_INI_FILE
|
|
}
|
|
|
|
# Note that write_uboot_platform() is also used to install
|
|
# the bootloader in the proper place during live systems upgrade.
|
|
write_uboot_platform() {
|
|
# This is run board-side too, so account for the non-existance of run_host_command_logged
|
|
local logging_prelude=""
|
|
[[ $(type -t run_host_command_logged) == function ]] && logging_prelude="run_host_command_logged"
|
|
|
|
${logging_prelude} dd if=$1/idblock.img of=$2 bs=512 seek=$((0x40)) conv=notrunc status=none
|
|
${logging_prelude} dd if=$1/u-boot.itb of=$2 bs=512 seek=$((0x440)) conv=notrunc status=none
|
|
}
|
|
|
|
family_tweaks() {
|
|
|
|
# Create gpio and i2c groups on the build rootfs; they are matched against
|
|
# udev rules to allow non-root user access to these resources
|
|
chroot_sdcard addgroup --system --quiet --gid 900 gpio
|
|
chroot_sdcard addgroup --system --quiet --gid 901 i2c
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
family_tweaks_bsp() {
|
|
mkdir -p $destination/etc/udev/rules.d
|
|
mkdir -p $destination/usr/local/bin
|
|
|
|
# Peripheral access for specific groups
|
|
cp $SRC/packages/bsp/rockchip/70-gpio.rules $destination/etc/udev/rules.d
|
|
cp $SRC/packages/bsp/rockchip/71-i2c.rules $destination/etc/udev/rules.d
|
|
|
|
# Sound
|
|
cp $SRC/packages/bsp/rockchip/asound.conf $destination/etc/
|
|
|
|
# AP6330 (BCM4330) firmware initramfs hook for in-kernel btbcm driver
|
|
if [[ "$INSTALL_ARMBIAN_FIRMWARE" == "yes" ]]; then
|
|
mkdir -p $destination/etc/initramfs-tools/hooks
|
|
install -m 550 $SRC/packages/bsp/rockchip/ap6330-initramfs-firmware $destination/etc/initramfs-tools/hooks
|
|
fi
|
|
|
|
return 0 # exit with success
|
|
}
|