uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead

https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948
this can do it nicely.

Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
Anton Arapov 2021-04-03 12:58:10 +02:00 committed by Alan Daniels
commit 56de2bcd43
30691 changed files with 3076956 additions and 0 deletions

View file

@ -0,0 +1,45 @@
From 3d0ce353cf62efea11aa88f814aa23bf8c04acc9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Milan=20P=C3=A4ssler?= <milan@petabyte.dev>
Date: Mon, 11 Jan 2021 15:13:10 +0100
Subject: [PATCH] configs/rpi: allow for bigger kernels
---
include/configs/rpi.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/include/configs/rpi.h b/include/configs/rpi.h
index 834f1cd..10ab1e7 100644
--- a/include/configs/rpi.h
+++ b/include/configs/rpi.h
@@ -153,20 +153,20 @@
* more than ~700M away from the start of the kernel image but this number can
* be larger OR smaller depending on e.g. the 'vmalloc=xxxM' command line
* parameter given to the kernel. So reserving memory from low to high
- * satisfies this constraint again. Reserving 1M at 0x02600000-0x02700000 for
- * the DTB leaves rest of the free RAM to the initrd starting at 0x02700000.
+ * satisfies this constraint again. Reserving 1M at 0x04700000-0x04800000 for
+ * the DTB leaves rest of the free RAM to the initrd starting at 0x04800000.
* Even with the smallest possible CPU-GPU memory split of the CPU getting
- * only 64M, the remaining 25M starting at 0x02700000 should allow quite
- * large initrds before they start colliding with U-Boot.
+ * only 64M, the remaining 8M starting at 0x04800000 should allow reasonably
+ * sized initrds before they start colliding with U-Boot.
*/
#define ENV_MEM_LAYOUT_SETTINGS \
"fdt_high=" FDT_HIGH "\0" \
"initrd_high=" INITRD_HIGH "\0" \
"kernel_addr_r=0x00080000\0" \
- "scriptaddr=0x02400000\0" \
- "pxefile_addr_r=0x02500000\0" \
- "fdt_addr_r=0x02600000\0" \
- "ramdisk_addr_r=0x02700000\0"
+ "scriptaddr=0x04500000\0" \
+ "pxefile_addr_r=0x04600000\0" \
+ "fdt_addr_r=0x04700000\0" \
+ "ramdisk_addr_r=0x04800000\0"
#if CONFIG_IS_ENABLED(CMD_MMC)
#define BOOT_TARGET_MMC(func) \
--
2.29.2

View file

@ -0,0 +1,92 @@
From 65d90cd17ad7cd3f9aeeb805a08be780fc5bae1a Mon Sep 17 00:00:00 2001
From: Sjoerd Simons <sjoerd@collabora.com>
Date: Sun, 22 Aug 2021 16:36:55 +0200
Subject: [PATCH] rpi: Copy properties from firmware dtb to the loaded dtb
The RPI firmware adjusts several property values in the dtb it passes
to u-boot depending on the board/SoC revision. Inherit some of these
when u-boot loads a dtb itself. Specificaly copy:
* /model: The firmware provides a more specific string
* /memreserve: The firmware defines a reserved range, better keep it
* emmc2bus and pcie0 dma-ranges: The C0T revision of the bcm2711 Soc (as
present on rpi 400 and some rpi 4B boards) has different values for
these then the B0T revision. So these need to be adjusted to boot on
these boards
* blconfig: The firmware defines the memory area where the blconfig
stored. Copy those over so it can be enabled.
* /chosen/kaslr-seed: The firmware generates a kaslr seed, take advantage
of that.
Signed-off-by: Sjoerd Simons <sjoerd@collabora.com>
Origin: https://patchwork.ozlabs.org/project/uboot/patch/20210822143656.289891-1-sjoerd@collabora.com/
---
board/raspberrypi/rpi/rpi.c | 48 +++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index 372b26b6f2..64b8684b68 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -495,10 +495,58 @@ void *board_fdt_blob_setup(void)
return (void *)fw_dtb_pointer;
}
+int copy_property(void *dst, void *src, char *path, char *property)
+{
+ int dst_offset, src_offset;
+ const fdt32_t *prop;
+ int len;
+
+ src_offset = fdt_path_offset(src, path);
+ dst_offset = fdt_path_offset(dst, path);
+
+ if (src_offset < 0 || dst_offset < 0)
+ return -1;
+
+ prop = fdt_getprop(src, src_offset, property, &len);
+ if (!prop)
+ return -1;
+
+ return fdt_setprop(dst, dst_offset, property, prop, len);
+}
+
+/* Copy tweaks from the firmware dtb to the loaded dtb */
+void update_fdt_from_fw(void *fdt, void *fw_fdt)
+{
+ /* Using dtb from firmware directly; leave it alone */
+ if (fdt == fw_fdt)
+ return;
+
+ /* The firmware provides a more precie model; so copy that */
+ copy_property(fdt, fw_fdt, "/", "model");
+
+ /* memory reserve as suggested by the firmware */
+ copy_property(fdt, fw_fdt, "/", "memreserve");
+
+ /* Adjust dma-ranges for the SD card and PCI bus as they can depend on
+ * the SoC revision
+ */
+ copy_property(fdt, fw_fdt, "emmc2bus", "dma-ranges");
+ copy_property(fdt, fw_fdt, "pcie0", "dma-ranges");
+
+ /* Bootloader configuration template exposes as nvmem */
+ if (copy_property(fdt, fw_fdt, "blconfig", "reg") == 0)
+ copy_property(fdt, fw_fdt, "blconfig", "status");
+
+ /* kernel address randomisation seed as provided by the firmware */
+ copy_property(fdt, fw_fdt, "/chosen", "kaslr-seed");
+}
+
int ft_board_setup(void *blob, struct bd_info *bd)
{
int node;
+ update_fdt_from_fw(blob, (void *)fw_dtb_pointer);
+
node = fdt_node_offset_by_compatible(blob, -1, "simple-framebuffer");
if (node < 0)
lcd_dt_simplefb_add_node(blob);
--
2.32.0

553
pkgs/misc/uboot/default.nix Normal file
View file

@ -0,0 +1,553 @@
{ stdenv
, lib
, fetchurl
, fetchpatch
, fetchFromGitHub
, bc
, bison
, dtc
, flex
, openssl
, swig
, meson-tools
, which
, armTrustedFirmwareAllwinner
, armTrustedFirmwareAllwinnerH616
, armTrustedFirmwareRK3328
, armTrustedFirmwareRK3399
, armTrustedFirmwareS905
, firmwareOdroidC2
, firmwareOdroidC4
, buildPackages
}:
let
defaultVersion = "2022.01";
defaultSrc = fetchurl {
url = "ftp://ftp.denx.de/pub/u-boot/u-boot-${defaultVersion}.tar.bz2";
hash = "sha256-gbRUMifbIowD+KG/XdvIE7C7j2VVzkYGTvchpvxoBBM=";
};
buildUBoot = {
version ? null
, src ? null
, filesToInstall
, installDir ? "$out"
, defconfig
, extraConfig ? ""
, extraPatches ? []
, extraMakeFlags ? []
, extraMeta ? {}
, ... } @ args: stdenv.mkDerivation ({
pname = "uboot-${defconfig}";
version = if src == null then defaultVersion else version;
src = if src == null then defaultSrc else src;
patches = [
./0001-configs-rpi-allow-for-bigger-kernels.patch
# Make U-Boot forward some important settings from the firmware-provided FDT. Fixes booting on BCM2711C0 boards.
# See also: https://github.com/NixOS/nixpkgs/issues/135828
# Source: https://patchwork.ozlabs.org/project/uboot/patch/20210822143656.289891-1-sjoerd@collabora.com/
./0001-rpi-Copy-properties-from-firmware-dtb-to-the-loaded-.patch
] ++ extraPatches;
postPatch = ''
patchShebangs tools
patchShebangs arch/arm/mach-rockchip
'';
nativeBuildInputs = [
bc
bison
dtc
flex
openssl
(buildPackages.python3.withPackages (p: [
p.libfdt
p.setuptools # for pkg_resources
]))
swig
which # for scripts/dtc-version.sh
];
depsBuildBuild = [ buildPackages.stdenv.cc ];
hardeningDisable = [ "all" ];
enableParallelBuilding = true;
makeFlags = [
"DTC=dtc"
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
] ++ extraMakeFlags;
passAsFile = [ "extraConfig" ];
configurePhase = ''
runHook preConfigure
make ${defconfig}
cat $extraConfigPath >> .config
runHook postConfigure
'';
installPhase = ''
runHook preInstall
mkdir -p ${installDir}
cp ${lib.concatStringsSep " " filesToInstall} ${installDir}
mkdir -p "$out/nix-support"
${lib.concatMapStrings (file: ''
echo "file binary-dist ${installDir}/${builtins.baseNameOf file}" >> "$out/nix-support/hydra-build-products"
'') filesToInstall}
runHook postInstall
'';
dontStrip = true;
meta = with lib; {
homepage = "http://www.denx.de/wiki/U-Boot/";
description = "Boot loader for embedded systems";
license = licenses.gpl2;
maintainers = with maintainers; [ bartsch dezgeg samueldr lopsided98 ];
} // extraMeta;
} // removeAttrs args [ "extraMeta" ]);
in {
inherit buildUBoot;
ubootTools = buildUBoot {
defconfig = "tools-only_defconfig";
installDir = "$out/bin";
hardeningDisable = [];
dontStrip = false;
extraMeta.platforms = lib.platforms.linux;
extraMakeFlags = [ "HOST_TOOLS_ALL=y" "CROSS_BUILD_TOOLS=1" "NO_SDL=1" "tools" ];
filesToInstall = [
"tools/dumpimage"
"tools/fdtgrep"
"tools/kwboot"
"tools/mkenvimage"
"tools/mkimage"
];
};
ubootA20OlinuxinoLime = buildUBoot {
defconfig = "A20-OLinuXino-Lime_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootA20OlinuxinoLime2EMMC = buildUBoot {
defconfig = "A20-OLinuXino-Lime2-eMMC_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootAmx335xEVM = buildUBoot {
defconfig = "am335x_evm_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["MLO" "u-boot.img"];
};
ubootBananaPi = buildUBoot {
defconfig = "Bananapi_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootBananaPim3 = buildUBoot {
defconfig = "Sinovoip_BPI_M3_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootBananaPim64 = buildUBoot {
defconfig = "bananapi_m64_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinner}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
# http://git.denx.de/?p=u-boot.git;a=blob;f=board/solidrun/clearfog/README;hb=refs/heads/master
ubootClearfog = buildUBoot {
defconfig = "clearfog_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-spl.kwb"];
};
ubootCubieboard2 = buildUBoot {
defconfig = "Cubieboard2_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootGuruplug = buildUBoot {
defconfig = "guruplug_defconfig";
extraMeta.platforms = ["armv5tel-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootJetsonTK1 = buildUBoot {
defconfig = "jetson-tk1_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot" "u-boot.dtb" "u-boot-dtb-tegra.bin" "u-boot-nodtb-tegra.bin"];
# tegra-uboot-flasher expects this exact directory layout, sigh...
postInstall = ''
mkdir -p $out/spl
cp spl/u-boot-spl $out/spl/
'';
};
ubootNanoPCT4 = buildUBoot rec {
rkbin = fetchFromGitHub {
owner = "armbian";
repo = "rkbin";
rev = "3bd0321cae5ef881a6005fb470009ad5a5d1462d";
sha256 = "09r4dzxsbs3pff4sh70qnyp30s3rc7pkc46v1m3152s7jqjasp31";
};
defconfig = "nanopc-t4-rk3399_defconfig";
extraMeta = {
platforms = ["aarch64-linux"];
license = lib.licenses.unfreeRedistributableFirmware;
};
BL31="${armTrustedFirmwareRK3399}/bl31.elf";
filesToInstall = ["u-boot.itb" "idbloader.img"];
postBuild = ''
./tools/mkimage -n rk3399 -T rksd -d ${rkbin}/rk33/rk3399_ddr_800MHz_v1.24.bin idbloader.img
cat ${rkbin}/rk33/rk3399_miniloader_v1.19.bin >> idbloader.img
'';
};
ubootNovena = buildUBoot {
defconfig = "novena_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-dtb.img" "SPL"];
};
ubootOdroidC2 = buildUBoot {
defconfig = "odroid-c2_defconfig";
postBuild = ''
# BL301 image needs at least 64 bytes of padding after it to place
# signing headers (with amlbootsig)
truncate -s 64 bl301.padding.bin
cat ${firmwareOdroidC2}/bl301.bin bl301.padding.bin > bl301.padded.bin
# The downstream fip_create tool adds a custom TOC entry with UUID
# AABBCCDD-ABCD-EFEF-ABCD-12345678ABCD for the BL301 image. It turns out
# that the firmware blob does not actually care about UUIDs, only the
# order the images appear in the file. Because fiptool does not know
# about the BL301 UUID, we would have to use the --blob option, which adds
# the image to the end of the file, causing the boot to fail. Instead, we
# take advantage of the fact that UUIDs are ignored and just put the
# images in the right order with the wrong UUIDs. In the command below,
# --tb-fw is really --scp-fw and --scp-fw is the BL301 image.
#
# See https://github.com/afaerber/meson-tools/issues/3 for more
# information.
${buildPackages.armTrustedFirmwareTools}/bin/fiptool create \
--align 0x4000 \
--tb-fw ${firmwareOdroidC2}/bl30.bin \
--scp-fw bl301.padded.bin \
--soc-fw ${armTrustedFirmwareS905}/bl31.bin \
--nt-fw u-boot.bin \
fip.bin
cat ${firmwareOdroidC2}/bl2.package fip.bin > boot_new.bin
${buildPackages.meson-tools}/bin/amlbootsig boot_new.bin u-boot.img
dd if=u-boot.img of=u-boot.bin bs=512 skip=96
'';
filesToInstall = [
"u-boot.bin"
"${firmwareOdroidC2}/sd_fusing.sh" "${firmwareOdroidC2}/bl1.bin.hardkernel"
];
extraMeta.platforms = ["aarch64-linux"];
};
ubootOdroidC4 = buildUBoot {
defconfig = "odroid-c4_defconfig";
postBuild = ''
${buildPackages.meson64-tools}/bin/pkg --type bl30 --output bl30_new.bin \
${firmwareOdroidC4}/bl30.bin ${firmwareOdroidC4}/bl301.bin
${buildPackages.meson64-tools}/bin/pkg --type bl2 --output bl2_new.bin \
${firmwareOdroidC4}/bl2.bin ${firmwareOdroidC4}/acs.bin
${buildPackages.meson64-tools}/bin/bl30sig --input bl30_new.bin \
--output bl30_new.bin.g12a.enc --level v3
${buildPackages.meson64-tools}/bin/bl3sig --input bl30_new.bin.g12a.enc \
--output bl30_new.bin.enc --level v3 --type bl30
${buildPackages.meson64-tools}/bin/bl3sig --input ${firmwareOdroidC4}/bl31.img \
--output bl31.img.enc --level v3 --type bl31
${buildPackages.meson64-tools}/bin/bl3sig --input u-boot.bin --compress lz4 \
--output bl33.bin.enc --level v3 --type bl33 --compress lz4
${buildPackages.meson64-tools}/bin/bl2sig --input bl2_new.bin \
--output bl2.n.bin.sig
${buildPackages.meson64-tools}/bin/bootmk --output u-boot.bin \
--bl2 bl2.n.bin.sig --bl30 bl30_new.bin.enc --bl31 bl31.img.enc --bl33 bl33.bin.enc \
--ddrfw1 ${firmwareOdroidC4}/ddr4_1d.fw \
--ddrfw2 ${firmwareOdroidC4}/ddr4_2d.fw \
--ddrfw3 ${firmwareOdroidC4}/ddr3_1d.fw \
--ddrfw4 ${firmwareOdroidC4}/piei.fw \
--ddrfw5 ${firmwareOdroidC4}/lpddr4_1d.fw \
--ddrfw6 ${firmwareOdroidC4}/lpddr4_2d.fw \
--ddrfw7 ${firmwareOdroidC4}/diag_lpddr4.fw \
--ddrfw8 ${firmwareOdroidC4}/aml_ddr.fw \
--ddrfw9 ${firmwareOdroidC4}/lpddr3_1d.fw \
--level v3
'';
filesToInstall = [ "u-boot.bin" "${firmwareOdroidC4}/sd_fusing.sh"];
extraMeta.platforms = ["aarch64-linux"];
};
ubootOdroidXU3 = buildUBoot {
defconfig = "odroid-xu3_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-dtb.bin"];
};
ubootOlimexA64Olinuxino = buildUBoot {
defconfig = "a64-olinuxino-emmc_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinner}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootOrangePiPc = buildUBoot {
defconfig = "orangepi_pc_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootOrangePiZeroPlus2H5 = buildUBoot {
defconfig = "orangepi_zero_plus2_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinner}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootOrangePiZero = buildUBoot {
defconfig = "orangepi_zero_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootOrangePiZero2 = buildUBoot {
defconfig = "orangepi_zero2_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinnerH616}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootPcduino3Nano = buildUBoot {
defconfig = "Linksprite_pcDuino3_Nano_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootPine64 = buildUBoot {
defconfig = "pine64_plus_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinner}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootPine64LTS = buildUBoot {
defconfig = "pine64-lts_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinner}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootPinebook = buildUBoot {
defconfig = "pinebook_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinner}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootPinebookPro = buildUBoot {
defconfig = "pinebook-pro-rk3399_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareRK3399}/bl31.elf";
filesToInstall = [ "u-boot.itb" "idbloader.img"];
};
ubootQemuAarch64 = buildUBoot {
defconfig = "qemu_arm64_defconfig";
extraMeta.platforms = ["aarch64-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootQemuArm = buildUBoot {
defconfig = "qemu_arm_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootQemuRiscv64Smode = buildUBoot {
defconfig = "qemu-riscv64_smode_defconfig";
extraPatches = [
# https://patchwork.ozlabs.org/project/uboot/patch/20220128134713.2322800-1-alexandre.ghiti@canonical.com/
(fetchpatch {
url = "https://patchwork.ozlabs.org/series/283391/mbox/";
sha256 = "sha256-V0jDpx6O4bFzuaOQejdrRnLiWb5LBTx47T0TZqNtMXk=";
})
];
extraMeta.platforms = ["riscv64-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootQemuX86 = buildUBoot {
defconfig = "qemu-x86_defconfig";
extraConfig = ''
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_GENERIC=y
CONFIG_USB_XHCI_HCD=y
'';
extraMeta.platforms = [ "i686-linux" "x86_64-linux" ];
filesToInstall = [ "u-boot.rom" ];
};
ubootRaspberryPi = buildUBoot {
defconfig = "rpi_defconfig";
extraMeta.platforms = ["armv6l-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootRaspberryPi2 = buildUBoot {
defconfig = "rpi_2_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootRaspberryPi3_32bit = buildUBoot {
defconfig = "rpi_3_32b_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootRaspberryPi3_64bit = buildUBoot {
defconfig = "rpi_3_defconfig";
extraMeta.platforms = ["aarch64-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootRaspberryPi4_32bit = buildUBoot {
defconfig = "rpi_4_32b_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootRaspberryPi4_64bit = buildUBoot {
defconfig = "rpi_4_defconfig";
extraMeta.platforms = ["aarch64-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootRaspberryPiZero = buildUBoot {
defconfig = "rpi_0_w_defconfig";
extraMeta.platforms = ["armv6l-linux"];
filesToInstall = ["u-boot.bin"];
};
ubootRock64 = let
rkbin = fetchFromGitHub {
owner = "ayufan-rock64";
repo = "rkbin";
rev = "f79a708978232a2b6b06c2e4173c5314559e0d3a";
sha256 = "0h7xm4ck3p3380c6bqm5ixrkxwcx6z5vysqdwvfa7gcqx5d6x5zz";
};
in buildUBoot {
extraMakeFlags = [ "all" "u-boot.itb" ];
defconfig = "rock64-rk3328_defconfig";
extraMeta = {
platforms = [ "aarch64-linux" ];
license = lib.licenses.unfreeRedistributableFirmware;
};
BL31="${armTrustedFirmwareRK3328}/bl31.elf";
filesToInstall = [ "u-boot.itb" "idbloader.img"];
# Derive MAC address from cpuid
# Submitted upstream: https://patchwork.ozlabs.org/patch/1203686/
extraConfig = ''
CONFIG_MISC_INIT_R=y
'';
# Close to being blob free, but the U-Boot TPL causes random memory
# corruption
postBuild = ''
./tools/mkimage -n rk3328 -T rksd -d ${rkbin}/rk33/rk3328_ddr_786MHz_v1.13.bin idbloader.img
cat spl/u-boot-spl.bin >> idbloader.img
'';
};
ubootRockPro64 = buildUBoot {
extraMakeFlags = [ "all" "u-boot.itb" ];
extraPatches = [
# https://patchwork.ozlabs.org/project/uboot/list/?series=237654&archive=both&state=*
(fetchpatch {
url = "https://patchwork.ozlabs.org/series/237654/mbox/";
sha256 = "0aiw9zk8w4msd3v8nndhkspjify0yq6a5f0zdy6mhzs0ilq896c3";
})
];
defconfig = "rockpro64-rk3399_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31="${armTrustedFirmwareRK3399}/bl31.elf";
filesToInstall = [ "u-boot.itb" "idbloader.img"];
};
ubootROCPCRK3399 = buildUBoot {
defconfig = "roc-pc-rk3399_defconfig";
extraMeta.platforms = ["aarch64-linux"];
filesToInstall = [ "spl/u-boot-spl.bin" "u-boot.itb" "idbloader.img"];
BL31 = "${armTrustedFirmwareRK3399}/bl31.elf";
};
ubootSheevaplug = buildUBoot {
defconfig = "sheevaplug_defconfig";
extraMeta.platforms = ["armv5tel-linux"];
filesToInstall = ["u-boot.kwb"];
};
ubootSopine = buildUBoot {
defconfig = "sopine_baseboard_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareAllwinner}/bl31.bin";
filesToInstall = ["u-boot-sunxi-with-spl.bin"];
};
ubootUtilite = buildUBoot {
defconfig = "cm_fx6_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot-with-nand-spl.imx"];
buildFlags = [ "u-boot-with-nand-spl.imx" ];
extraConfig = ''
CONFIG_CMD_SETEXPR=y
'';
# sata init; load sata 0 $loadaddr u-boot-with-nand-spl.imx
# sf probe; sf update $loadaddr 0 80000
};
ubootWandboard = buildUBoot {
defconfig = "wandboard_defconfig";
extraMeta.platforms = ["armv7l-linux"];
filesToInstall = ["u-boot.img" "SPL"];
};
ubootRockPi4 = buildUBoot {
defconfig = "rock-pi-4-rk3399_defconfig";
extraMeta.platforms = ["aarch64-linux"];
BL31 = "${armTrustedFirmwareRK3399}/bl31.elf";
filesToInstall = [ "u-boot.itb" "idbloader.img"];
};
}

View file

@ -0,0 +1,148 @@
{ stdenv
, lib
, fetchpatch
, fetchFromGitHub
, buildPackages
, pkgsCross
}:
let
buildHardkernelFirmware = {
version ? null
, src ? null
, name ? ""
, filesToInstall
, installDir ? "$out"
, defconfig
, extraMeta ? {}
, ... } @ args: stdenv.mkDerivation ({
pname = "uboot-hardkernel-firmware-${name}";
nativeBuildInputs = [
buildPackages.git
buildPackages.hostname
pkgsCross.arm-embedded.stdenv.cc
];
depsBuildBuild = [
buildPackages.gcc49
] ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) buildPackages.stdenv.cc
++ lib.optional (!stdenv.isAarch64) pkgsCross.aarch64-multiplatform.buildPackages.gcc49;
makeFlags = [
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
"CROSS_COMPILE_32=${pkgsCross.arm-embedded.stdenv.cc.targetPrefix}"
"${defconfig}" "bl301.bin"
]
++ lib.optional (!stdenv.isAarch64) "CROSS_COMPILE=${pkgsCross.aarch64-multiplatform.stdenv.cc.targetPrefix}";
installPhase = ''
mkdir -p ${installDir}
cp ${lib.concatStringsSep " " filesToInstall} ${installDir}
'';
meta = with lib; {
homepage = "https://www.hardkernel.com/";
description = "Das U-Boot from Hardkernel with Odroid embedded devices firmware and support";
license = licenses.unfreeRedistributableFirmware;
maintainers = with maintainers; [ aarapov ];
} // extraMeta;
} // removeAttrs args [ "extraMeta" ]);
preBuild = ''
substituteInPlace Makefile --replace "/bin/pwd" "pwd"
'';
in {
inherit buildHardkernelFirmware preBuild;
firmwareOdroidC2 = buildHardkernelFirmware {
defconfig = "odroidc2_config";
name = "firmware-odroid-c2";
version = "2015.01";
src = fetchFromGitHub {
owner = "hardkernel";
repo = "u-boot";
rev = "fac4d2da0a1b61dfdeaca0034a45151ff5983fb8";
sha256 = "09s0y69ilrwnvqi1g11axsnhylq8kfljwqxdfjifa227mi0kzq37";
};
patches = [ # https://wiki.odroid.com/odroid-c2/software/building_u-boot
(fetchpatch {
url = "https://github.com/hardkernel/u-boot_firmware/commit/5ce504067bb83de03d17173d5585e849df5d5a33.patch";
sha256 = "0m9slsv7lwm2cf2akmx1x6mqzmfckrvw1r0nls91w6g40982qwly";
})
(fetchpatch {
url = "https://github.com/hardkernel/u-boot_firmware/commit/0002fa877ca919e808e5fb7675194f17abde5d8d.patch";
sha256 = "0hr6037xl69v9clch8i3vr80vgfn453wcvza630mzifkkn2d1fh8";
})
(fetchpatch {
url = "https://github.com/hardkernel/u-boot_firmware/commit/b129006d2bdd0aee3bc78593f9401b0873e6baf9.patch";
sha256 = "1bj7mb6h8njpvimjbjgv801ay97gwdgg9cd1hlv39fwqvv1nzfir";
})
(fetchpatch {
url = "https://github.com/hardkernel/u-boot_firmware/commit/d3642b8329a605f641046cf25aeba935fa2f06dc.patch";
sha256 = "0iw06zvw8407s3r3n6v89z6jj8r6lwy0qm1izhf815qi3wxh55pq";
})
(fetchpatch {
url = "https://github.com/hardkernel/u-boot_firmware/commit/911ab14f86b7c820aa3fe310b7eb7be0398292b1.patch";
sha256 = "1sq4mynw6iivx2xm0hp55x7r58bvfgav62d169q5mwgi9imbv6kg";
})
(fetchpatch {
url = "https://github.com/hardkernel/u-boot_firmware/commit/b7b90c1099b057d35ebae886b7846b5d9bfb4143.patch";
sha256 = "17x5fc2rphgz6jybya7yk35j4h9iq0b7cnq2qhkq3lpw2060ldlg";
})
];
preBuild = ''
substituteInPlace ./arch/arm/cpu/armv8/gxb/firmware/scp_task/Makefile \
--replace "CROSS_COMPILE" "CROSS_COMPILE_32"
'' + preBuild;
filesToInstall = [
"build/scp_task/bl301.bin"
"fip/gxb/bl2.package"
"fip/gxb/bl30.bin"
"sd_fuse/bl1.bin.hardkernel"
"sd_fuse/sd_fusing.sh"
];
extraMeta.platforms = [ "aarch64-linux" ];
};
# https://wiki.odroid.com/odroid-c4/software/building_u-boot
firmwareOdroidC4 = buildHardkernelFirmware {
name = "firmware-odroid-c4";
defconfig = "odroidc4_defconfig";
version = "2015.01";
src = fetchFromGitHub {
owner = "hardkernel";
repo = "u-boot";
rev = "90ebb7015c1bfbbf120b2b94273977f558a5da46";
sha256 = "0kv9hpsgpbikp370wknbyj6r6cyhp7hng3ng6xzzqaw13yy4qiz9";
};
preBuild = ''
substituteInPlace ./arch/arm/cpu/armv8/g12a/firmware/scp_task/Makefile \
--replace "CROSS_COMPILE" "CROSS_COMPILE_32"
'' + preBuild;
filesToInstall = [
"build/board/hardkernel/odroidc4/firmware/acs.bin"
"build/scp_task/bl301.bin"
"fip/g12a/aml_ddr.fw"
"fip/g12a/bl2.bin"
"fip/g12a/bl30.bin"
"fip/g12a/bl31.img"
"fip/g12a/ddr3_1d.fw"
"fip/g12a/ddr4_1d.fw"
"fip/g12a/ddr4_2d.fw"
"fip/g12a/diag_lpddr4.fw"
"fip/g12a/lpddr3_1d.fw"
"fip/g12a/lpddr4_1d.fw"
"fip/g12a/lpddr4_2d.fw"
"fip/g12a/piei.fw"
"sd_fuse/sd_fusing.sh"
];
extraMeta.platforms = [ "aarch64-linux" ];
};
}