From 8273466d44fb2b05ffa36f3eacd3b5e3fbc3f315 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Wed, 21 Oct 2020 16:58:47 +0200 Subject: [PATCH 01/27] maintainers: add aarapov ssia Signed-off-by: Anton Arapov --- maintainers/maintainer-list.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 9b311f81be4f2..3a1df13e39858 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -106,6 +106,12 @@ githubId = 7755101; name = "Aaron Andersen"; }; + aarapov = { + email = "anton@deadbeef.mx"; + github = "arapov"; + githubId = 1823164; + name = "Anton Arapov"; + }; aaronjanse = { email = "aaron@ajanse.me"; github = "aaronjanse"; From 7d9e330de9d7b2f4a65670c0b0fedc6616fa35c1 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Tue, 20 Oct 2020 16:25:40 +0200 Subject: [PATCH 02/27] uboot: init (firmwareOdroidC2/C4) hardkernel's Odroid C2/C4 fw blobs This patch brings Hardkernel Odroid C2 and Odroid C4 firmware. - https://wiki.odroid.com/odroid-c2/software/building_u-boot - https://wiki.odroid.com/odroid-c4/software/building_u-boot Signed-off-by: Anton Arapov --- pkgs/misc/uboot/hardkernel-firmware.nix | 129 ++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 6 ++ 2 files changed, 135 insertions(+) create mode 100644 pkgs/misc/uboot/hardkernel-firmware.nix diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix new file mode 100644 index 0000000000000..8841677c54099 --- /dev/null +++ b/pkgs/misc/uboot/hardkernel-firmware.nix @@ -0,0 +1,129 @@ +{ stdenv +, lib +, fetchgit +, 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; + + postPatch = '' + substituteInPlace Makefile --replace "/bin/pwd" "pwd" + ''; + + 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" ]); +in { + inherit buildHardkernelFirmware; + + # https://wiki.odroid.com/odroid-c2/software/building_u-boot + firmwareOdroidC2 = let + name = "odroidc2"; + odroidc2-bl301 = fetchgit { + url = "https://github.com/hardkernel/u-boot_firmware.git"; + rev = "b7b90c1099b057d35ebae886b7846b5d9bfb4143"; # "odroidc2-bl301" + sha256 = "0kdb1mg5zd7qyabfpbh98cs07icfzpkywvva13ybf4mf5g50g0n3"; + deepClone = true; + }; + in buildHardkernelFirmware { + defconfig = "odroidc2_config"; + name = "firmware-odroid-c2"; + version = "2015.01"; + src = fetchgit { + url = "https://github.com/hardkernel/u-boot.git"; + rev = "fac4d2da0a1b61dfdeaca0034a45151ff5983fb8"; # "odroidc2-v2015.01" + sha256 = "0jrpd7vww659nazyrv5af6n165akhz0h9hnxajq7gz906igc5raz"; + leaveDotGit = true; + }; + + prePatch = '' + git remote add u-boot_firmware ${odroidc2-bl301}/ + git fetch u-boot_firmware + git cherry-pick --no-commit \ + 5ce504067bb83de03d17173d5585e849df5d5a33^..${odroidc2-bl301.rev} + + substituteInPlace ./arch/arm/cpu/armv8/gxb/firmware/scp_task/Makefile \ + --replace "CROSS_COMPILE" "CROSS_COMPILE_32" + ''; + + filesToInstall = [ + "build/scp_task/bl301.bin" "fip/gxb/bl30.bin" "fip/gxb/bl2.package" + "sd_fuse/sd_fusing.sh" "sd_fuse/bl1.bin.hardkernel" + ]; + + 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 = fetchgit { + url = "https://github.com/hardkernel/u-boot.git"; + rev = "90ebb7015c1bfbbf120b2b94273977f558a5da46"; # "odroidg12-v2015.01" + sha256 = "1v8z5m0k6a9iw0qbkn6qcwh02rsdsfax29l2ilshr39a3nj40i96"; + leaveDotGit = true; + }; + + prePatch = '' + substituteInPlace ./arch/arm/cpu/armv8/g12a/firmware/scp_task/Makefile \ + --replace "CROSS_COMPILE" "CROSS_COMPILE_32" + ''; + + filesToInstall = [ + "build/board/hardkernel/odroidc4/firmware/acs.bin" "build/scp_task/bl301.bin" + "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/lpddr3_1d.fw" "fip/g12a/lpddr4_1d.fw" "fip/g12a/lpddr4_2d.fw" + "fip/g12a/diag_lpddr4.fw" "fip/g12a/piei.fw" "fip/g12a/aml_ddr.fw" + "fip/g12a/aml_encrypt_g12a" "sd_fuse/sd_fusing.sh" + ]; + + # Even though Odroid C4 firmware blobs are buildable on aarch64, we can not + # use it to produce U-Boot loader binary on aarch64 machines. This is + # because we do not have "aml_encrypt_g12a" binary compiled for aarch64. + # So that "x86_64-linux" makes more sense here, though we have to keep + # "aarch64-linux" in order to make this derivative consumable by ubootOdroidC4 + # derivative. + extraMeta.platforms = [ "aarch64-linux" "x86_64-linux" ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5b99669220f62..d4eeeb05c78b6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20741,6 +20741,12 @@ in ubootWandboard ; + # Hardkernel Odroid devices firmware: + inherit (callPackage ../misc/uboot/hardkernel-firmware.nix {}) + firmwareOdroidC2 + firmwareOdroidC4 + ; + # Upstream Barebox: inherit (callPackage ../misc/barebox {}) buildBarebox From 191909ab8f620fa8a47315c8d63832bed33e0bcb Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Tue, 20 Oct 2020 16:44:27 +0200 Subject: [PATCH 03/27] uboot: init (ubootOdroidC4) Hardkernel's Odroid C4 board support Odroid C4: Cortex-A55 CPU, Mali-G31 GPU. More data: https://wiki.odroid.com/odroid-c4/ Signed-off-by: Anton Arapov --- pkgs/misc/uboot/default.nix | 90 ++++++++++++++++++++++++++++++++- pkgs/top-level/all-packages.nix | 1 + 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 6c59c13d12e2a..50abf91e1567a 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -1,7 +1,6 @@ { stdenv , lib , fetchurl -, fetchpatch , fetchFromGitHub , bc , bison @@ -15,6 +14,7 @@ , armTrustedFirmwareRK3399 , armTrustedFirmwareS905 , buildPackages +, firmwareOdroidC4 }: let @@ -252,6 +252,94 @@ in { ''; }; + ubootOdroidC4 = let in + assert + (lib.assertMsg (stdenv.buildPlatform.isx86_64) + "U-Boot for Odroid C4 must be cross-compiled on x86_64-linux system. Once built, U-Boot image must be signed by 'aml_encrypt_g12a' tool, which is available for x86_64-linux platform only."); + buildUBoot { + defconfig = "odroid-c4_defconfig"; + + # Fix eMMC/SD read issues on meson-sm1/meson-gx boards. + # Patches are queued for U-Boot 2021.01 release + patches = [ + (fetchurl { #0001-mmc-meson-gx-move-arch-header-to-local-header.patch + url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/77863d43eb2b40319619bbb4f781270d8f027189.patch"; + sha256 = "10nf0klspqmy15a8bb8ybhl53x11v1cqvh20i6bxyqm10zwlqbhl"; + }) + (fetchurl { #0002-mmc-meson-gx-change-clock-phase-value-on-SM1-SoCs.patch + url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/0dbb54eb3257c243c7968f967a6b183b1edb56c8.patch"; + sha256 = "1xwj67h50gc32y7lrj7mh56s0zhwrd1vvxrpvhb2yhf1y17jf7rc"; + }) + (fetchurl { #0003-ARM-dts-meson-sm1-add-u-boot-specific-MMC-controller.patch + url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/c87eab81616d671a6004ffc95847bad21b7eb005.patch"; + sha256 = "11l19vx8q2a8j95liv1nwkn9cjryxk9qgmj68ya4lr4j0c5qzh7c"; + }) + ]; + + postBuild = '' + # blx_fix() resembles function from: + # - https://github.com/hardkernel/u-boot/blob/e0725c1dce0c3dbbae47478c13d968c41014fac8/fip/Makefile#L44 + blx_fix() { + case $7 in + "bl30") + declare blx_bin_limit=40960 + declare blx01_bin_limit=13312 + ;; + "bl2") + declare blx_bin_limit=57344 + declare blx01_bin_limit=4096 + ;; + esac + + declare -i blx_size=`du -b $1 | awk '{print int($1)}'` + declare -i zero_size=$blx_bin_limit-$blx_size + dd if=/dev/zero of=$2 bs=1 count=$zero_size + cat $1 $2 > $3 + + declare -i blx01_size=`du -b $4 | awk '{print int($1)}'` + declare -i zero_size_01=$blx01_bin_limit-$blx01_size + dd if=/dev/zero of=$2 bs=1 count=$zero_size_01 + cat $4 $2 > $5 + + cat $3 $5 > $6 + } + + blx_fix ${firmwareOdroidC4}/bl30.bin zero_tmp bl30_zero.bin \ + ${firmwareOdroidC4}/bl301.bin bl301_zero.bin \ + bl30_new.bin bl30 + blx_fix ${firmwareOdroidC4}/bl2.bin zero_tmp bl2_zero.bin \ + ${firmwareOdroidC4}/acs.bin bl21_zero.bin \ + bl2_new.bin bl2 + + ${firmwareOdroidC4}/aml_encrypt_g12a --bl30sig --input bl30_new.bin \ + --output bl30_new.bin.g12a.enc --level v3 + ${firmwareOdroidC4}/aml_encrypt_g12a --bl3sig --input bl30_new.bin.g12a.enc \ + --output bl30_new.bin.enc --level v3 --type bl30 + ${firmwareOdroidC4}/aml_encrypt_g12a --bl3sig --input ${firmwareOdroidC4}/bl31.img \ + --output bl31.img.enc --level v3 --type bl31 + ${firmwareOdroidC4}/aml_encrypt_g12a --bl3sig --input u-boot.bin --compress lz4 \ + --output bl33.bin.enc --level v3 --type bl33 --compress lz4 + ${firmwareOdroidC4}/aml_encrypt_g12a --bl2sig --input bl2_new.bin \ + --output bl2.n.bin.sig + + ${firmwareOdroidC4}/aml_encrypt_g12a --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"]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d4eeeb05c78b6..740512dd22a7c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20713,6 +20713,7 @@ in ubootNanoPCT4 ubootNovena ubootOdroidC2 + ubootOdroidC4 ubootOdroidXU3 ubootOrangePiPc ubootOrangePiZeroPlus2H5 From bb8a6c110121130049f091e9540c7fd9628bbb31 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Tue, 15 Dec 2020 19:53:39 +0100 Subject: [PATCH 04/27] uboot: (ubootOdroidC2) retire Armbian dependency Retire dependency on Armbian provided board blobs. Use official hardkernel's ones instead. Signed-off-by: Anton Arapov --- pkgs/misc/uboot/default.nix | 51 ++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 50abf91e1567a..e586c0dad2ae8 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -13,8 +13,9 @@ , armTrustedFirmwareRK3328 , armTrustedFirmwareRK3399 , armTrustedFirmwareS905 -, buildPackages +, firmwareOdroidC2 , firmwareOdroidC4 +, buildPackages }: let @@ -206,27 +207,24 @@ in { filesToInstall = ["u-boot-dtb.img" "SPL"]; }; - # Flashing instructions: - # dd if=bl1.bin.hardkernel of= conv=fsync bs=1 count=442 - # dd if=bl1.bin.hardkernel of= conv=fsync bs=512 skip=1 seek=1 - # dd if=u-boot.gxbb of= conv=fsync bs=512 seek=97 - ubootOdroidC2 = let - firmwareBlobs = fetchFromGitHub { - owner = "armbian"; - repo = "odroidc2-blobs"; - rev = "47c5aac4bcac6f067cebe76e41fb9924d45b429c"; - sha256 = "1ns0a130yxnxysia8c3q2fgyjp9k0nkr689dxk88qh2vnibgchnp"; - meta.license = lib.licenses.unfreeRedistributableFirmware; - }; - in buildUBoot { + ubootOdroidC2 = buildUBoot { defconfig = "odroid-c2_defconfig"; - extraMeta.platforms = ["aarch64-linux"]; - filesToInstall = ["u-boot.bin" "u-boot.gxbb" "${firmwareBlobs}/bl1.bin.hardkernel"]; + + # Fix eMMC boot issue on meson-gxbb boards + # Patches are queued for U-Boot 2021.01 release + patches = [ + (fetchurl { #0001-pinctrl-meson-fix-bit-manipulation-of-pin-bias-confi.patch + url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/5ccd5d2cc98224108ae9fb09593a862c9caa5e80.patch"; + sha256 = "19jvfqm1gkcmgd07wyv2srpg88a42zz2x46i7kxxybvi1vx8qkyl"; + }) + ]; + 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 '${firmwareBlobs}/gxb/bl301.bin' bl301.padding.bin > bl301.padded.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 @@ -239,17 +237,24 @@ in { # # See https://github.com/afaerber/meson-tools/issues/3 for more # information. - '${buildPackages.armTrustedFirmwareTools}/bin/fiptool' create \ + ${buildPackages.armTrustedFirmwareTools}/bin/fiptool create \ --align 0x4000 \ - --tb-fw '${firmwareBlobs}/gxb/bl30.bin' \ + --tb-fw ${firmwareOdroidC2}/bl30.bin \ --scp-fw bl301.padded.bin \ - --soc-fw '${armTrustedFirmwareS905}/bl31.bin' \ + --soc-fw ${armTrustedFirmwareS905}/bl31.bin \ --nt-fw u-boot.bin \ fip.bin - cat '${firmwareBlobs}/gxb/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.gxbb bs=512 skip=96 + 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 = let in From 21119190e2f95076353f8aff3a78d9fb6629c4c0 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Fri, 5 Feb 2021 13:21:36 +0100 Subject: [PATCH 05/27] uboot: (firmwareOdroidC2/C4) drop patches for 2021.01 u-boot 2021.01 was released, required patches to run hardkernel's boards are no longer needed as they made the release. Signed-off-by: Anton Arapov --- pkgs/misc/uboot/default.nix | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index e586c0dad2ae8..8a06dd1e651d2 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -210,15 +210,6 @@ in { ubootOdroidC2 = buildUBoot { defconfig = "odroid-c2_defconfig"; - # Fix eMMC boot issue on meson-gxbb boards - # Patches are queued for U-Boot 2021.01 release - patches = [ - (fetchurl { #0001-pinctrl-meson-fix-bit-manipulation-of-pin-bias-confi.patch - url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/5ccd5d2cc98224108ae9fb09593a862c9caa5e80.patch"; - sha256 = "19jvfqm1gkcmgd07wyv2srpg88a42zz2x46i7kxxybvi1vx8qkyl"; - }) - ]; - postBuild = '' # BL301 image needs at least 64 bytes of padding after it to place # signing headers (with amlbootsig) @@ -264,23 +255,6 @@ in { buildUBoot { defconfig = "odroid-c4_defconfig"; - # Fix eMMC/SD read issues on meson-sm1/meson-gx boards. - # Patches are queued for U-Boot 2021.01 release - patches = [ - (fetchurl { #0001-mmc-meson-gx-move-arch-header-to-local-header.patch - url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/77863d43eb2b40319619bbb4f781270d8f027189.patch"; - sha256 = "10nf0klspqmy15a8bb8ybhl53x11v1cqvh20i6bxyqm10zwlqbhl"; - }) - (fetchurl { #0002-mmc-meson-gx-change-clock-phase-value-on-SM1-SoCs.patch - url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/0dbb54eb3257c243c7968f967a6b183b1edb56c8.patch"; - sha256 = "1xwj67h50gc32y7lrj7mh56s0zhwrd1vvxrpvhb2yhf1y17jf7rc"; - }) - (fetchurl { #0003-ARM-dts-meson-sm1-add-u-boot-specific-MMC-controller.patch - url = "https://gitlab.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/c87eab81616d671a6004ffc95847bad21b7eb005.patch"; - sha256 = "11l19vx8q2a8j95liv1nwkn9cjryxk9qgmj68ya4lr4j0c5qzh7c"; - }) - ]; - postBuild = '' # blx_fix() resembles function from: # - https://github.com/hardkernel/u-boot/blob/e0725c1dce0c3dbbae47478c13d968c41014fac8/fip/Makefile#L44 From 7a651293d2e03cc5eb3d6225bd1f7b3f96307854 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Fri, 5 Feb 2021 13:48:32 +0100 Subject: [PATCH 06/27] uboot: (firmwareOdroidC2/C4) switch fetchgit to fetchFromGitHub This solves repo pinpointing to particular commit number, thus prevents failing builds when the repos are updated. Signed-off-by: Anton Arapov --- pkgs/misc/uboot/hardkernel-firmware.nix | 63 +++++++++++++++---------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix index 8841677c54099..66f09f857d370 100644 --- a/pkgs/misc/uboot/hardkernel-firmware.nix +++ b/pkgs/misc/uboot/hardkernel-firmware.nix @@ -1,6 +1,7 @@ { stdenv , lib -, fetchgit +, fetchpatch +, fetchFromGitHub , buildPackages , pkgsCross }: @@ -54,31 +55,43 @@ let in { inherit buildHardkernelFirmware; - # https://wiki.odroid.com/odroid-c2/software/building_u-boot - firmwareOdroidC2 = let - name = "odroidc2"; - odroidc2-bl301 = fetchgit { - url = "https://github.com/hardkernel/u-boot_firmware.git"; - rev = "b7b90c1099b057d35ebae886b7846b5d9bfb4143"; # "odroidc2-bl301" - sha256 = "0kdb1mg5zd7qyabfpbh98cs07icfzpkywvva13ybf4mf5g50g0n3"; - deepClone = true; - }; - in buildHardkernelFirmware { + firmwareOdroidC2 = buildHardkernelFirmware { defconfig = "odroidc2_config"; name = "firmware-odroid-c2"; version = "2015.01"; - src = fetchgit { - url = "https://github.com/hardkernel/u-boot.git"; - rev = "fac4d2da0a1b61dfdeaca0034a45151ff5983fb8"; # "odroidc2-v2015.01" - sha256 = "0jrpd7vww659nazyrv5af6n165akhz0h9hnxajq7gz906igc5raz"; - leaveDotGit = true; + src = fetchFromGitHub { + owner = "hardkernel"; + repo = "u-boot"; + rev = "fac4d2da0a1b61dfdeaca0034a45151ff5983fb8"; + sha256 = "09s0y69ilrwnvqi1g11axsnhylq8kfljwqxdfjifa227mi0kzq37"; }; + # https://wiki.odroid.com/odroid-c2/software/building_u-boot prePatch = '' - git remote add u-boot_firmware ${odroidc2-bl301}/ - git fetch u-boot_firmware - git cherry-pick --no-commit \ - 5ce504067bb83de03d17173d5585e849df5d5a33^..${odroidc2-bl301.rev} + patch -p1 < ${fetchpatch { + url = "https://github.com/hardkernel/u-boot_firmware/commit/5ce504067bb83de03d17173d5585e849df5d5a33.patch"; + sha256 = "0m9slsv7lwm2cf2akmx1x6mqzmfckrvw1r0nls91w6g40982qwly"; + }} + patch -p1 < ${fetchpatch { + url = "https://github.com/hardkernel/u-boot_firmware/commit/0002fa877ca919e808e5fb7675194f17abde5d8d.patch"; + sha256 = "0hr6037xl69v9clch8i3vr80vgfn453wcvza630mzifkkn2d1fh8"; + }} + patch -p1 < ${fetchpatch { + url = "https://github.com/hardkernel/u-boot_firmware/commit/b129006d2bdd0aee3bc78593f9401b0873e6baf9.patch"; + sha256 = "1bj7mb6h8njpvimjbjgv801ay97gwdgg9cd1hlv39fwqvv1nzfir"; + }} + patch -p1 < ${fetchpatch { + url = "https://github.com/hardkernel/u-boot_firmware/commit/d3642b8329a605f641046cf25aeba935fa2f06dc.patch"; + sha256 = "0iw06zvw8407s3r3n6v89z6jj8r6lwy0qm1izhf815qi3wxh55pq"; + }} + patch -p1 < ${fetchpatch { + url = "https://github.com/hardkernel/u-boot_firmware/commit/911ab14f86b7c820aa3fe310b7eb7be0398292b1.patch"; + sha256 = "1sq4mynw6iivx2xm0hp55x7r58bvfgav62d169q5mwgi9imbv6kg"; + }} + patch -p1 < ${fetchpatch { + url = "https://github.com/hardkernel/u-boot_firmware/commit/b7b90c1099b057d35ebae886b7846b5d9bfb4143.patch"; + sha256 = "17x5fc2rphgz6jybya7yk35j4h9iq0b7cnq2qhkq3lpw2060ldlg"; + }} substituteInPlace ./arch/arm/cpu/armv8/gxb/firmware/scp_task/Makefile \ --replace "CROSS_COMPILE" "CROSS_COMPILE_32" @@ -97,11 +110,11 @@ in { name = "firmware-odroid-c4"; defconfig = "odroidc4_defconfig"; version = "2015.01"; - src = fetchgit { - url = "https://github.com/hardkernel/u-boot.git"; - rev = "90ebb7015c1bfbbf120b2b94273977f558a5da46"; # "odroidg12-v2015.01" - sha256 = "1v8z5m0k6a9iw0qbkn6qcwh02rsdsfax29l2ilshr39a3nj40i96"; - leaveDotGit = true; + src = fetchFromGitHub { + owner = "hardkernel"; + repo = "u-boot"; + rev = "90ebb7015c1bfbbf120b2b94273977f558a5da46"; + sha256 = "0kv9hpsgpbikp370wknbyj6r6cyhp7hng3ng6xzzqaw13yy4qiz9"; }; prePatch = '' From efcafebb99559812f3d6022d05f840f248af6170 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Fri, 19 Mar 2021 17:33:12 +0100 Subject: [PATCH 07/27] meson64-tools: init an open alternative to aml_encrypt_g12a and aml_encrypt_g12b. Proprietary tool is not available for aarch64 architecture, which is a show stopper for building u-boot images for the boards like Odroid C4. Signed-off-by: Anton Arapov --- pkgs/misc/meson64-tools/default.nix | 30 +++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 32 insertions(+) create mode 100644 pkgs/misc/meson64-tools/default.nix diff --git a/pkgs/misc/meson64-tools/default.nix b/pkgs/misc/meson64-tools/default.nix new file mode 100644 index 0000000000000..505e6dbebb216 --- /dev/null +++ b/pkgs/misc/meson64-tools/default.nix @@ -0,0 +1,30 @@ +{ lib, stdenv, fetchFromGitHub, buildPackages }: + +stdenv.mkDerivation rec { + pname = "meson64-tools"; + version = "unstable-2020-08-03"; + + src = fetchFromGitHub { + owner = "angerman"; + repo = pname; + rev = "a2d57d11fd8b4242b903c10dca9d25f7f99d8ff0"; + sha256 = "1487cr7sv34yry8f0chaj6s2g3736dzq0aqw239ahdy30yg7hb2v"; + }; + + buildInputs = with buildPackages; [ openssl bison yacc flex bc python3 ]; + + preBuild = '' + patchShebangs . + substituteInPlace mbedtls/programs/fuzz/Makefile --replace "python2" "python" + substituteInPlace mbedtls/tests/Makefile --replace "python2" "python" + ''; + + makeFlags = [ "PREFIX=$(out)/bin" ]; + + meta = with lib; { + homepage = "https://github.com/angerman/meson64-tools"; + description = "Tools for Amlogic Meson ARM64 platforms"; + license = licenses.unfree; # https://github.com/angerman/meson64-tools/issues/2 + maintainers = with maintainers; [ aarapov ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 740512dd22a7c..935033a34d70a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2749,6 +2749,8 @@ in meson-tools = callPackage ../misc/meson-tools { }; + meson64-tools = callPackage ../misc/meson64-tools { }; + metabase = callPackage ../servers/metabase { }; midicsv = callPackage ../tools/audio/midicsv { }; From e08a8030259bb887b0aa08f5369013fef70323b4 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Fri, 19 Mar 2021 17:37:15 +0100 Subject: [PATCH 08/27] uboot: (ubootOdroidC4) use meson64-tools instead of aml_encrypt_g12a This makes aarch64 builds possible. Signed-off-by: Anton Arapov --- pkgs/misc/uboot/default.nix | 58 +++++-------------------- pkgs/misc/uboot/hardkernel-firmware.nix | 10 +---- 2 files changed, 14 insertions(+), 54 deletions(-) diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 8a06dd1e651d2..2701addf5393d 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -8,7 +8,6 @@ , flex , openssl , swig -, meson-tools , armTrustedFirmwareAllwinner , armTrustedFirmwareRK3328 , armTrustedFirmwareRK3399 @@ -248,60 +247,27 @@ in { extraMeta.platforms = ["aarch64-linux"]; }; - ubootOdroidC4 = let in - assert - (lib.assertMsg (stdenv.buildPlatform.isx86_64) - "U-Boot for Odroid C4 must be cross-compiled on x86_64-linux system. Once built, U-Boot image must be signed by 'aml_encrypt_g12a' tool, which is available for x86_64-linux platform only."); - buildUBoot { + ubootOdroidC4 = buildUBoot { defconfig = "odroid-c4_defconfig"; postBuild = '' - # blx_fix() resembles function from: - # - https://github.com/hardkernel/u-boot/blob/e0725c1dce0c3dbbae47478c13d968c41014fac8/fip/Makefile#L44 - blx_fix() { - case $7 in - "bl30") - declare blx_bin_limit=40960 - declare blx01_bin_limit=13312 - ;; - "bl2") - declare blx_bin_limit=57344 - declare blx01_bin_limit=4096 - ;; - esac - - declare -i blx_size=`du -b $1 | awk '{print int($1)}'` - declare -i zero_size=$blx_bin_limit-$blx_size - dd if=/dev/zero of=$2 bs=1 count=$zero_size - cat $1 $2 > $3 - - declare -i blx01_size=`du -b $4 | awk '{print int($1)}'` - declare -i zero_size_01=$blx01_bin_limit-$blx01_size - dd if=/dev/zero of=$2 bs=1 count=$zero_size_01 - cat $4 $2 > $5 - - cat $3 $5 > $6 - } - - blx_fix ${firmwareOdroidC4}/bl30.bin zero_tmp bl30_zero.bin \ - ${firmwareOdroidC4}/bl301.bin bl301_zero.bin \ - bl30_new.bin bl30 - blx_fix ${firmwareOdroidC4}/bl2.bin zero_tmp bl2_zero.bin \ - ${firmwareOdroidC4}/acs.bin bl21_zero.bin \ - bl2_new.bin bl2 - - ${firmwareOdroidC4}/aml_encrypt_g12a --bl30sig --input bl30_new.bin \ + ${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 - ${firmwareOdroidC4}/aml_encrypt_g12a --bl3sig --input bl30_new.bin.g12a.enc \ + ${buildPackages.meson64-tools}/bin/bl3sig --input bl30_new.bin.g12a.enc \ --output bl30_new.bin.enc --level v3 --type bl30 - ${firmwareOdroidC4}/aml_encrypt_g12a --bl3sig --input ${firmwareOdroidC4}/bl31.img \ + ${buildPackages.meson64-tools}/bin/bl3sig --input ${firmwareOdroidC4}/bl31.img \ --output bl31.img.enc --level v3 --type bl31 - ${firmwareOdroidC4}/aml_encrypt_g12a --bl3sig --input u-boot.bin --compress lz4 \ + ${buildPackages.meson64-tools}/bin/bl3sig --input u-boot.bin --compress lz4 \ --output bl33.bin.enc --level v3 --type bl33 --compress lz4 - ${firmwareOdroidC4}/aml_encrypt_g12a --bl2sig --input bl2_new.bin \ + ${buildPackages.meson64-tools}/bin/bl2sig --input bl2_new.bin \ --output bl2.n.bin.sig - ${firmwareOdroidC4}/aml_encrypt_g12a --bootmk --output u-boot.bin \ + ${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 \ diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix index 66f09f857d370..78787a65c0b40 100644 --- a/pkgs/misc/uboot/hardkernel-firmware.nix +++ b/pkgs/misc/uboot/hardkernel-firmware.nix @@ -128,15 +128,9 @@ in { "fip/g12a/ddr3_1d.fw" "fip/g12a/ddr4_1d.fw" "fip/g12a/ddr4_2d.fw" "fip/g12a/lpddr3_1d.fw" "fip/g12a/lpddr4_1d.fw" "fip/g12a/lpddr4_2d.fw" "fip/g12a/diag_lpddr4.fw" "fip/g12a/piei.fw" "fip/g12a/aml_ddr.fw" - "fip/g12a/aml_encrypt_g12a" "sd_fuse/sd_fusing.sh" + "sd_fuse/sd_fusing.sh" ]; - # Even though Odroid C4 firmware blobs are buildable on aarch64, we can not - # use it to produce U-Boot loader binary on aarch64 machines. This is - # because we do not have "aml_encrypt_g12a" binary compiled for aarch64. - # So that "x86_64-linux" makes more sense here, though we have to keep - # "aarch64-linux" in order to make this derivative consumable by ubootOdroidC4 - # derivative. - extraMeta.platforms = [ "aarch64-linux" "x86_64-linux" ]; + extraMeta.platforms = [ "aarch64-linux" ]; }; } From e4f5837131f2d3189d2c20f77fdff30400b8ffd5 Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Sat, 3 Apr 2021 12:14:40 +0200 Subject: [PATCH 09/27] uboot: (firmwareOdroidC2/C4) oneline and sort list of files to install as per review request Signed-off-by: Anton Arapov --- pkgs/misc/uboot/hardkernel-firmware.nix | 26 ++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix index 78787a65c0b40..dece30fca0456 100644 --- a/pkgs/misc/uboot/hardkernel-firmware.nix +++ b/pkgs/misc/uboot/hardkernel-firmware.nix @@ -98,8 +98,11 @@ in { ''; filesToInstall = [ - "build/scp_task/bl301.bin" "fip/gxb/bl30.bin" "fip/gxb/bl2.package" - "sd_fuse/sd_fusing.sh" "sd_fuse/bl1.bin.hardkernel" + "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" ]; @@ -123,11 +126,20 @@ in { ''; filesToInstall = [ - "build/board/hardkernel/odroidc4/firmware/acs.bin" "build/scp_task/bl301.bin" - "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/lpddr3_1d.fw" "fip/g12a/lpddr4_1d.fw" "fip/g12a/lpddr4_2d.fw" - "fip/g12a/diag_lpddr4.fw" "fip/g12a/piei.fw" "fip/g12a/aml_ddr.fw" + "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" ]; From 92d0ff19495feaa39e5ce3357574771605c2aaae Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Sat, 3 Apr 2021 12:45:26 +0200 Subject: [PATCH 10/27] uboot: (firmwareOdroidC2/C4) use postPatch instead of prePatch postPatch should be used because prePatch breaks patches put in patches. Signed-off-by: Anton Arapov --- pkgs/misc/uboot/hardkernel-firmware.nix | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix index dece30fca0456..1a0630bf15a7c 100644 --- a/pkgs/misc/uboot/hardkernel-firmware.nix +++ b/pkgs/misc/uboot/hardkernel-firmware.nix @@ -29,10 +29,6 @@ let ] ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) buildPackages.stdenv.cc ++ lib.optional (!stdenv.isAarch64) pkgsCross.aarch64-multiplatform.buildPackages.gcc49; - postPatch = '' - substituteInPlace Makefile --replace "/bin/pwd" "pwd" - ''; - makeFlags = [ "CROSS_COMPILE=${stdenv.cc.targetPrefix}" "CROSS_COMPILE_32=${pkgsCross.arm-embedded.stdenv.cc.targetPrefix}" @@ -52,8 +48,11 @@ let maintainers = with maintainers; [ aarapov ]; } // extraMeta; } // removeAttrs args [ "extraMeta" ]); + postPatch = '' + substituteInPlace Makefile --replace "/bin/pwd" "pwd" + ''; in { - inherit buildHardkernelFirmware; + inherit buildHardkernelFirmware postPatch; firmwareOdroidC2 = buildHardkernelFirmware { defconfig = "odroidc2_config"; @@ -67,7 +66,7 @@ in { }; # https://wiki.odroid.com/odroid-c2/software/building_u-boot - prePatch = '' + postPatch = '' patch -p1 < ${fetchpatch { url = "https://github.com/hardkernel/u-boot_firmware/commit/5ce504067bb83de03d17173d5585e849df5d5a33.patch"; sha256 = "0m9slsv7lwm2cf2akmx1x6mqzmfckrvw1r0nls91w6g40982qwly"; @@ -95,7 +94,7 @@ in { substituteInPlace ./arch/arm/cpu/armv8/gxb/firmware/scp_task/Makefile \ --replace "CROSS_COMPILE" "CROSS_COMPILE_32" - ''; + '' + postPatch; filesToInstall = [ "build/scp_task/bl301.bin" @@ -120,10 +119,10 @@ in { sha256 = "0kv9hpsgpbikp370wknbyj6r6cyhp7hng3ng6xzzqaw13yy4qiz9"; }; - prePatch = '' + postPatch = '' substituteInPlace ./arch/arm/cpu/armv8/g12a/firmware/scp_task/Makefile \ --replace "CROSS_COMPILE" "CROSS_COMPILE_32" - ''; + '' + postPatch; filesToInstall = [ "build/board/hardkernel/odroidc4/firmware/acs.bin" From c5f3d464df0b133a7861e6cb79ceef89deb3714a Mon Sep 17 00:00:00 2001 From: Anton Arapov Date: Sat, 3 Apr 2021 12:58:10 +0200 Subject: [PATCH 11/27] 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 --- pkgs/misc/uboot/hardkernel-firmware.nix | 39 +++++++++++++------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix index 1a0630bf15a7c..d007f56d4a623 100644 --- a/pkgs/misc/uboot/hardkernel-firmware.nix +++ b/pkgs/misc/uboot/hardkernel-firmware.nix @@ -48,11 +48,11 @@ let maintainers = with maintainers; [ aarapov ]; } // extraMeta; } // removeAttrs args [ "extraMeta" ]); - postPatch = '' + preBuild = '' substituteInPlace Makefile --replace "/bin/pwd" "pwd" ''; in { - inherit buildHardkernelFirmware postPatch; + inherit buildHardkernelFirmware preBuild; firmwareOdroidC2 = buildHardkernelFirmware { defconfig = "odroidc2_config"; @@ -65,36 +65,37 @@ in { sha256 = "09s0y69ilrwnvqi1g11axsnhylq8kfljwqxdfjifa227mi0kzq37"; }; - # https://wiki.odroid.com/odroid-c2/software/building_u-boot - postPatch = '' - patch -p1 < ${fetchpatch { + 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"; - }} - patch -p1 < ${fetchpatch { + }) + (fetchpatch { url = "https://github.com/hardkernel/u-boot_firmware/commit/0002fa877ca919e808e5fb7675194f17abde5d8d.patch"; sha256 = "0hr6037xl69v9clch8i3vr80vgfn453wcvza630mzifkkn2d1fh8"; - }} - patch -p1 < ${fetchpatch { + }) + (fetchpatch { url = "https://github.com/hardkernel/u-boot_firmware/commit/b129006d2bdd0aee3bc78593f9401b0873e6baf9.patch"; sha256 = "1bj7mb6h8njpvimjbjgv801ay97gwdgg9cd1hlv39fwqvv1nzfir"; - }} - patch -p1 < ${fetchpatch { + }) + (fetchpatch { url = "https://github.com/hardkernel/u-boot_firmware/commit/d3642b8329a605f641046cf25aeba935fa2f06dc.patch"; sha256 = "0iw06zvw8407s3r3n6v89z6jj8r6lwy0qm1izhf815qi3wxh55pq"; - }} - patch -p1 < ${fetchpatch { + }) + (fetchpatch { url = "https://github.com/hardkernel/u-boot_firmware/commit/911ab14f86b7c820aa3fe310b7eb7be0398292b1.patch"; sha256 = "1sq4mynw6iivx2xm0hp55x7r58bvfgav62d169q5mwgi9imbv6kg"; - }} - patch -p1 < ${fetchpatch { + }) + (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" - '' + postPatch; + '' + preBuild; filesToInstall = [ "build/scp_task/bl301.bin" @@ -119,10 +120,10 @@ in { sha256 = "0kv9hpsgpbikp370wknbyj6r6cyhp7hng3ng6xzzqaw13yy4qiz9"; }; - postPatch = '' + preBuild = '' substituteInPlace ./arch/arm/cpu/armv8/g12a/firmware/scp_task/Makefile \ --replace "CROSS_COMPILE" "CROSS_COMPILE_32" - '' + postPatch; + '' + preBuild; filesToInstall = [ "build/board/hardkernel/odroidc4/firmware/acs.bin" From cc0077d25e0720048115b7eb1757916378eff88c Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 14:22:10 -0400 Subject: [PATCH 12/27] === WIP on top of PR101454 === From 172ccbf08da170c6b0662c65d9db4ffa3ad67097 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 14:32:09 -0400 Subject: [PATCH 13/27] uboot: Move Amlogic builds into their own file --- pkgs/misc/uboot/amlogic.nix | 93 +++++++++++++++++++++++++++++++++ pkgs/misc/uboot/default.nix | 83 +---------------------------- pkgs/top-level/all-packages.nix | 8 ++- 3 files changed, 100 insertions(+), 84 deletions(-) create mode 100644 pkgs/misc/uboot/amlogic.nix diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix new file mode 100644 index 0000000000000..3b41170b4c877 --- /dev/null +++ b/pkgs/misc/uboot/amlogic.nix @@ -0,0 +1,93 @@ +{ buildUBoot +, armTrustedFirmwareS905 +, firmwareOdroidC2 +, firmwareOdroidC4 +, buildPackages +}: + +# The Amlogic builds of U-Boot are more involved than the usual other simpler +# upstream U-Boot builds. +# +# Amlogic uses a set of signed binary firmware files as an initial boot stage, +# and there is no Free Libre or Open source replacement available. + +{ + 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"]; + }; +} diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 2701addf5393d..6b9414e3d53b0 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -11,12 +11,10 @@ , armTrustedFirmwareAllwinner , armTrustedFirmwareRK3328 , armTrustedFirmwareRK3399 -, armTrustedFirmwareS905 -, firmwareOdroidC2 -, firmwareOdroidC4 , buildPackages }: +# For Amlogic U-Boot builds, look at the `amlogic.nix` expression. let defaultVersion = "2021.01"; defaultSrc = fetchurl { @@ -206,85 +204,6 @@ in { 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"]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 935033a34d70a..ca649b580bd77 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20714,8 +20714,6 @@ in ubootJetsonTK1 ubootNanoPCT4 ubootNovena - ubootOdroidC2 - ubootOdroidC4 ubootOdroidXU3 ubootOrangePiPc ubootOrangePiZeroPlus2H5 @@ -20744,6 +20742,12 @@ in ubootWandboard ; + # Upstream U-Boot, for Amlogic + inherit (callPackage ../misc/uboot/amlogic.nix {}) + ubootOdroidC2 + ubootOdroidC4 + ; + # Hardkernel Odroid devices firmware: inherit (callPackage ../misc/uboot/hardkernel-firmware.nix {}) firmwareOdroidC2 From 18a8fc1dc7a60241fe0b6c3bf457b29921e44588 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 16:40:52 -0400 Subject: [PATCH 14/27] uboot: Allow providing additional native build inputs --- pkgs/misc/uboot/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 6b9414e3d53b0..bca904218536c 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -31,6 +31,7 @@ let , extraPatches ? [] , extraMakeFlags ? [] , extraMeta ? {} + , nativeBuildInputs ? [] , ... } @ args: stdenv.mkDerivation ({ pname = "uboot-${defconfig}"; @@ -58,7 +59,7 @@ let p.setuptools # for pkg_resources ])) swig - ]; + ] ++ nativeBuildInputs; depsBuildBuild = [ buildPackages.stdenv.cc ]; hardeningDisable = [ "all" ]; @@ -100,7 +101,7 @@ let license = licenses.gpl2; maintainers = with maintainers; [ dezgeg samueldr lopsided98 ]; } // extraMeta; - } // removeAttrs args [ "extraMeta" ]); + } // removeAttrs args [ "extraMeta" "nativeBuildInputs" ]); in { inherit buildUBoot; From 8afdc4a21a8a6a9878fa2b3626492cf801c395bf Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 17:39:32 -0400 Subject: [PATCH 15/27] ubootOdroidC2: Review build to produce a single image file This is somwhat closer to what other U-Boot builds produce. The end-user will need to flash the first 442 bytes in the MBR, but that's what "sd_fusing.sh" did... mostly... This removes the "sd_fusing.sh" script, but it wasn't good anyway, as it only worked when CWD was the directory it was in, and forced sudo usage. This was verified to produce the same exact binaries in these conditions: Before this change: ``` $ cd result/ $ ./sd_fusing.sh .../test.img ``` After this change: ``` dd if=result/bl1.bin.hardkernel of=test.img conv=fsync,notrunc bs=1 count=442 dd if=result/u-boot.img of=test.img conv=fsync,notrunc bs=512 seek=1 ``` So it is assumed this change is 1:1 compatible in the end. --- pkgs/misc/uboot/amlogic.nix | 50 ++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index 3b41170b4c877..fed0f1837ba74 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -1,8 +1,10 @@ { buildUBoot +, buildPackages , armTrustedFirmwareS905 +, armTrustedFirmwareTools , firmwareOdroidC2 , firmwareOdroidC4 -, buildPackages +, meson-tools }: # The Amlogic builds of U-Boot are more involved than the usual other simpler @@ -15,11 +17,19 @@ ubootOdroidC2 = buildUBoot { defconfig = "odroid-c2_defconfig"; + nativeBuildInputs = [ + armTrustedFirmwareTools + meson-tools + ]; + + FIPDIR = firmwareOdroidC2; + BL31 = "${armTrustedFirmwareS905}/bl31.bin"; + 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 + cat $FIPDIR/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 @@ -33,22 +43,44 @@ # # See https://github.com/afaerber/meson-tools/issues/3 for more # information. - ${buildPackages.armTrustedFirmwareTools}/bin/fiptool create \ + fiptool create \ --align 0x4000 \ - --tb-fw ${firmwareOdroidC2}/bl30.bin \ + --tb-fw $FIPDIR/bl30.bin \ --scp-fw bl301.padded.bin \ - --soc-fw ${armTrustedFirmwareS905}/bl31.bin \ + --soc-fw $BL31 \ --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 + cat $FIPDIR/bl2.package fip.bin > boot_new.bin + amlbootsig boot_new.bin u-boot.img + # Extract u-boot from the image dd if=u-boot.img of=u-boot.bin bs=512 skip=96 + + # Ensure we're not accidentally re-using this transient u-boot image + rm u-boot.img + + # Pick bl1.bin.hardkernel from FIPDIR so it can be installed in filesToInstall. + cp $FIPDIR/bl1.bin.hardkernel ./ + + # Create the .img file to flash from sector 0x01 (bs=512 seek=1) + # It contains the remainder of bl1.bin.hardkernel and u-boot + dd if=bl1.bin.hardkernel of=u-boot.img conv=notrunc bs=512 skip=1 seek=0 + dd if=u-boot.bin of=u-boot.img conv=notrunc bs=512 seek=96 + + # Help out the user a little. + cat > README.md < Date: Mon, 12 Apr 2021 17:58:36 -0400 Subject: [PATCH 16/27] firmwareAmlogic: Init at 2021-01-29 This is intended to provide a common source for boot firmware for U-Boot builds for Amlogic boards. --- pkgs/misc/uboot/amlogic-firmware.nix | 34 ++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 pkgs/misc/uboot/amlogic-firmware.nix diff --git a/pkgs/misc/uboot/amlogic-firmware.nix b/pkgs/misc/uboot/amlogic-firmware.nix new file mode 100644 index 0000000000000..fe44467d960da --- /dev/null +++ b/pkgs/misc/uboot/amlogic-firmware.nix @@ -0,0 +1,34 @@ +{ stdenv +, lib +, fetchpatch +, fetchFromGitHub +}: + +stdenv.mkDerivation { + pname = "amlogic-firmware"; + version = "2021-01-29"; + + src = fetchFromGitHub { + owner = "LibreELEC"; + repo = "amlogic-boot-fip"; + rev = "ac20772f44b2b74c8f55331b5c91a277d0bfbc37"; + sha256 = "1z739644655w1wbfi3456qg9k1izrmn2xci6vjh4sb55cxydja15"; + }; + + installPhase = '' + # We're lazy... this will allow us to *just* copy everything in $out + rm -v LICENSE README.md + # Remove unneeded files; we're not re-using the downstream build infra. + rm -v */aml_encrypt* */fip_create + mkdir -p $out + mv -t $out/ * + ''; + + dontFixup = true; + + meta = with lib; { + description = "Firmware Image Package (FIP) sources used to sign Amlogic U-Boot binaries"; + license = licenses.unfreeRedistributableFirmware; + maintainers = with maintainers; [ samueldr ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ca649b580bd77..0148e6d868dcd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20754,6 +20754,8 @@ in firmwareOdroidC4 ; + firmwareAmlogic = callPackage ../misc/uboot/amlogic-firmware.nix {}; + # Upstream Barebox: inherit (callPackage ../misc/barebox {}) buildBarebox From 4ffbc060e9837c800de82207db2196cf28167805 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 18:00:11 -0400 Subject: [PATCH 17/27] ubootOdroidC2: Change used boot firmware to firmwareAmlogic The intent here is to reduce the sprawl of different mismatched sources of truth with Amlogic board packaging. Note that **this produces a different output** compared to before. Though I cannot test, the output looks right. --- pkgs/misc/uboot/amlogic.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index fed0f1837ba74..13de78afc6dff 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -2,7 +2,7 @@ , buildPackages , armTrustedFirmwareS905 , armTrustedFirmwareTools -, firmwareOdroidC2 +, firmwareAmlogic , firmwareOdroidC4 , meson-tools }: @@ -22,7 +22,7 @@ meson-tools ]; - FIPDIR = firmwareOdroidC2; + FIPDIR = "${firmwareAmlogic}/odroid-c2"; BL31 = "${armTrustedFirmwareS905}/bl31.bin"; postBuild = '' From 2bbb5b625151bf5fd38efbdd380ad024c72f37ab Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 18:25:51 -0400 Subject: [PATCH 18/27] ubootOdroidC4: Review build - Make more deterministic with libfaketime - Remove reliance on buildPackages (by using nativeBuildInputs) - Provide firmware blobs via an attribute This is the first step into making the build more generic. This produces *generally* identical builds. The build differs only in the same way that the previous build differed using `--check` on its already non-deterministic output. --- pkgs/misc/uboot/amlogic.nix | 57 +++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index 13de78afc6dff..ef8a7464b5dfb 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -1,10 +1,11 @@ { buildUBoot -, buildPackages , armTrustedFirmwareS905 , armTrustedFirmwareTools , firmwareAmlogic , firmwareOdroidC4 +, libfaketime , meson-tools +, meson64-tools }: # The Amlogic builds of U-Boot are more involved than the usual other simpler @@ -88,38 +89,52 @@ ubootOdroidC4 = buildUBoot { defconfig = "odroid-c4_defconfig"; + FIPDIR = "${firmwareOdroidC4}"; + + nativeBuildInputs = [ + libfaketime + meson64-tools + ]; + 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 + pkg --type bl30 --output bl30_new.bin \ + $FIPDIR/bl30.bin $FIPDIR/bl301.bin + + pkg --type bl2 --output bl2_new.bin \ + $FIPDIR/bl2.bin $FIPDIR/acs.bin - ${buildPackages.meson64-tools}/bin/bl30sig --input bl30_new.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 \ + + 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 \ + + bl3sig --input $FIPDIR/bl31.img \ --output bl31.img.enc --level v3 --type bl31 - ${buildPackages.meson64-tools}/bin/bl3sig --input u-boot.bin --compress lz4 \ + + # The lz4 compression here introduces a timestamp in the build. + faketime -f "1970-01-01 00:00:01" \ + 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 \ + + bl2sig --input bl2_new.bin \ --output bl2.n.bin.sig - ${buildPackages.meson64-tools}/bin/bootmk --output u-boot.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 \ + --ddrfw1 $FIPDIR/ddr4_1d.fw \ + --ddrfw2 $FIPDIR/ddr4_2d.fw \ + --ddrfw3 $FIPDIR/ddr3_1d.fw \ + --ddrfw4 $FIPDIR/piei.fw \ + --ddrfw5 $FIPDIR/lpddr4_1d.fw \ + --ddrfw6 $FIPDIR/lpddr4_2d.fw \ + --ddrfw7 $FIPDIR/diag_lpddr4.fw \ + --ddrfw8 $FIPDIR/aml_ddr.fw \ + --ddrfw9 $FIPDIR/lpddr3_1d.fw \ --level v3 ''; - filesToInstall = [ "u-boot.bin" "${firmwareOdroidC4}/sd_fusing.sh"]; + filesToInstall = [ "u-boot.bin" ]; extraMeta.platforms = ["aarch64-linux"]; }; } From 27af137d7f87f4250775ad4d4457aa51ac05646b Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 18:33:39 -0400 Subject: [PATCH 19/27] meson64-tools: Also prefix binary names with `meson-64` Otherwise I fear the generic names may be shadowed by something else in the environment. --- pkgs/misc/meson64-tools/default.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkgs/misc/meson64-tools/default.nix b/pkgs/misc/meson64-tools/default.nix index 505e6dbebb216..5aa5224efa5e5 100644 --- a/pkgs/misc/meson64-tools/default.nix +++ b/pkgs/misc/meson64-tools/default.nix @@ -19,6 +19,16 @@ stdenv.mkDerivation rec { substituteInPlace mbedtls/tests/Makefile --replace "python2" "python" ''; + # Also prefix tool names since some names are really generic (e.g. `pkg`). + # Otherwise something could shadow those generic names in other builds. + postInstall = '' + (cd $out/bin + for bin in *; do + ln -s $bin meson64-$bin + done + ) + ''; + makeFlags = [ "PREFIX=$(out)/bin" ]; meta = with lib; { From 781556cad8a50c443273ee97f400ff76b2ec58a9 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 18:36:49 -0400 Subject: [PATCH 20/27] ubootOdroidC4: Use prefixed meson64-tools --- pkgs/misc/uboot/amlogic.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index ef8a7464b5dfb..022d857e795ae 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -97,30 +97,30 @@ ]; postBuild = '' - pkg --type bl30 --output bl30_new.bin \ + meson64-pkg --type bl30 --output bl30_new.bin \ $FIPDIR/bl30.bin $FIPDIR/bl301.bin - pkg --type bl2 --output bl2_new.bin \ + meson64-pkg --type bl2 --output bl2_new.bin \ $FIPDIR/bl2.bin $FIPDIR/acs.bin - bl30sig --input bl30_new.bin \ + meson64-bl30sig --input bl30_new.bin \ --output bl30_new.bin.g12a.enc --level v3 - bl3sig --input bl30_new.bin.g12a.enc \ + meson64-bl3sig --input bl30_new.bin.g12a.enc \ --output bl30_new.bin.enc --level v3 --type bl30 - bl3sig --input $FIPDIR/bl31.img \ + meson64-bl3sig --input $FIPDIR/bl31.img \ --output bl31.img.enc --level v3 --type bl31 # The lz4 compression here introduces a timestamp in the build. faketime -f "1970-01-01 00:00:01" \ - bl3sig --input u-boot.bin --compress lz4 \ + meson64-bl3sig --input u-boot.bin --compress lz4 \ --output bl33.bin.enc --level v3 --type bl33 --compress lz4 - bl2sig --input bl2_new.bin \ + meson64-bl2sig --input bl2_new.bin \ --output bl2.n.bin.sig - bootmk --output u-boot.bin \ + meson64-bootmk --output u-boot.bin \ --bl2 bl2.n.bin.sig --bl30 bl30_new.bin.enc --bl31 bl31.img.enc --bl33 bl33.bin.enc \ --ddrfw1 $FIPDIR/ddr4_1d.fw \ --ddrfw2 $FIPDIR/ddr4_2d.fw \ From be33eb1e72db8fa577e64190ae0b081604dc3551 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 18:49:49 -0400 Subject: [PATCH 21/27] buildUBootMesonG12A: Init common builder for some Amlogic boards --- pkgs/misc/uboot/amlogic.nix | 140 +++++++++++++++++++++----------- pkgs/top-level/all-packages.nix | 1 + 2 files changed, 93 insertions(+), 48 deletions(-) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index 022d857e795ae..1bfa1998ea486 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -14,8 +14,98 @@ # Amlogic uses a set of signed binary firmware files as an initial boot stage, # and there is no Free Libre or Open source replacement available. +# Identifying the SoC family +# +# The "linux-meson" development community wiki will tell you which family the +# SoC for your board is using. +# +# - https://linux-meson.com/doku.php#target_hardware +# +# Additionally, the build instructions generally hint at it through the binary +# tools names, e.g. `aml_encrypt_gxl` is for `GXL`. + +let + # Recognizable by the use of `aml_encrypt_g12a` or `aml_encrypt_g12b` + buildUBootMesonG12A = { FIPDIR, ... } @ args: buildUBoot ({ + nativeBuildInputs = [ + libfaketime + meson64-tools + ]; + + postBuild = '' + meson64-pkg --type bl30 --output bl30_new.bin \ + $FIPDIR/bl30.bin $FIPDIR/bl301.bin + + meson64-pkg --type bl2 --output bl2_new.bin \ + $FIPDIR/bl2.bin $FIPDIR/acs.bin + + meson64-bl30sig --input bl30_new.bin \ + --output bl30_new.bin.g12a.enc --level v3 + + meson64-bl3sig --input bl30_new.bin.g12a.enc \ + --output bl30_new.bin.enc --level v3 --type bl30 + + meson64-bl3sig --input $FIPDIR/bl31.img \ + --output bl31.img.enc --level v3 --type bl31 + + # The lz4 compression here introduces a timestamp in the build. + faketime -f "1970-01-01 00:00:01" \ + meson64-bl3sig --input u-boot.bin --compress lz4 \ + --output bl33.bin.enc --level v3 --type bl33 --compress lz4 + + meson64-bl2sig --input bl2_new.bin \ + --output bl2.n.bin.sig + + bootmk_args=( + --bl2 bl2.n.bin.sig + --bl30 bl30_new.bin.enc + --bl31 bl31.img.enc + --bl33 bl33.bin.enc + + --ddrfw1 $FIPDIR/ddr4_1d.fw + --ddrfw2 $FIPDIR/ddr4_2d.fw + --ddrfw3 $FIPDIR/ddr3_1d.fw + --ddrfw4 $FIPDIR/piei.fw + --ddrfw5 $FIPDIR/lpddr4_1d.fw + --ddrfw6 $FIPDIR/lpddr4_2d.fw + --ddrfw7 $FIPDIR/diag_lpddr4.fw + ) + + # ddrfw 8 through 9, according to U-Boot documentation, are not always + # present. + + if test -e $FIPDIR/aml_ddr.fw; then + bootmk_args+=( --ddrfw8 $FIPDIR/aml_ddr.fw ) + fi + + if test -e $FIPDIR/lpddr3_1d.fw; then + bootmk_args+=( --ddrfw9 $FIPDIR/lpddr3_1d.fw ) + fi + + bootmk_args+=( --level v3 ) + + meson64-bootmk --output u-boot.bin \ + "''${bootmk_args[@]}" + + # Help out the user a little. + cat > README.md < Date: Mon, 12 Apr 2021 18:50:31 -0400 Subject: [PATCH 22/27] ubootOdroidC4: Change used boot firmware to firmwareAmlogic The intent here is to reduce the sprawl of different mismatched sources of truth with Amlogic board packaging. Note that **this produces a different output** compared to before. Though I cannot test, the output looks right. --- pkgs/misc/uboot/amlogic.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index 1bfa1998ea486..926f1e5127881 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -2,7 +2,6 @@ , armTrustedFirmwareS905 , armTrustedFirmwareTools , firmwareAmlogic -, firmwareOdroidC4 , libfaketime , meson-tools , meson64-tools @@ -179,6 +178,6 @@ in ubootOdroidC4 = buildUBootMesonG12A { # Amlogic S905X3 / SM1, G12A compatible build defconfig = "odroid-c4_defconfig"; - FIPDIR = "${firmwareOdroidC4}"; + FIPDIR = "${firmwareAmlogic}/odroid-c4"; }; } From 4c71030f9bf2683e45222c24603c413de64a8f4e Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Mon, 12 Apr 2021 18:54:05 -0400 Subject: [PATCH 23/27] firmwareOdroidC2/C4: Remove --- pkgs/misc/uboot/hardkernel-firmware.nix | 148 ------------------------ pkgs/top-level/all-packages.nix | 6 - 2 files changed, 154 deletions(-) delete mode 100644 pkgs/misc/uboot/hardkernel-firmware.nix diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix deleted file mode 100644 index d007f56d4a623..0000000000000 --- a/pkgs/misc/uboot/hardkernel-firmware.nix +++ /dev/null @@ -1,148 +0,0 @@ -{ 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" ]; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3fd30beee2b09..177632e667387 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20749,12 +20749,6 @@ in ubootOdroidC4 ; - # Hardkernel Odroid devices firmware: - inherit (callPackage ../misc/uboot/hardkernel-firmware.nix {}) - firmwareOdroidC2 - firmwareOdroidC4 - ; - firmwareAmlogic = callPackage ../misc/uboot/amlogic-firmware.nix {}; # Upstream Barebox: From a6a831f16de0dbac9bc3ddc651ba908fb26586cd Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Tue, 13 Apr 2021 17:38:16 -0400 Subject: [PATCH 24/27] === S805X support === From bec6d2df28b3750ca00e85eccbb24c5ce3088779 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Tue, 13 Apr 2021 17:25:07 -0400 Subject: [PATCH 25/27] gxlimg: Init at 2020-10-30 --- pkgs/misc/gxlimg/default.nix | 29 +++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 31 insertions(+) create mode 100644 pkgs/misc/gxlimg/default.nix diff --git a/pkgs/misc/gxlimg/default.nix b/pkgs/misc/gxlimg/default.nix new file mode 100644 index 0000000000000..004b915d26dc2 --- /dev/null +++ b/pkgs/misc/gxlimg/default.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, fetchFromGitHub, openssl }: + +stdenv.mkDerivation rec { + pname = "gxlimg"; + version = "unstable-2020-10-30"; + + src = fetchFromGitHub { + owner = "repk"; + repo = pname; + rev = "c545568fdd6a0470da4265a3532f5e652646707f"; + sha256 = "05799f3gdxjqcv0s7bba724n8pxr0hldcj0p5n9ab92vgasgnpcq"; + }; + + buildInputs = [ + openssl + ]; + + installPhase = '' + mkdir -p "$out/bin" + mv gxlimg "$out/bin" + ''; + + meta = with lib; { + homepage = "https://github.com/repk/gxlimg"; + description = "Boot Image creation tool for amlogic s905x (GXL)"; + license = licenses.bsd2; + maintainers = with maintainers; [ samueldr ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 177632e667387..62466fd332056 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2597,6 +2597,8 @@ in gti = callPackage ../tools/misc/gti { }; + gxlimg = callPackage ../misc/gxlimg { }; + hdate = callPackage ../applications/misc/hdate { }; heatseeker = callPackage ../tools/misc/heatseeker { }; From 6c51f543eba535bb6d503c1d830771fe18603010 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Tue, 13 Apr 2021 16:48:16 -0400 Subject: [PATCH 26/27] buildUBootMesonGXL: Init common builder for some Amlogic boards --- pkgs/misc/uboot/amlogic.nix | 69 +++++++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 70 insertions(+) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index 926f1e5127881..8c1c5062d34a8 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -2,6 +2,7 @@ , armTrustedFirmwareS905 , armTrustedFirmwareTools , firmwareAmlogic +, gxlimg , libfaketime , meson-tools , meson64-tools @@ -97,6 +98,74 @@ let filesToInstall = [ "u-boot.bin" "README.md" ]; extraMeta.platforms = ["aarch64-linux"]; } // args); + + # Recognizable by the use of `aml_encrypt_gxl` + buildUBootMesonGXL = + { FIPDIR, ... } @ args: buildUBoot ({ + nativeBuildInputs = [ + gxlimg + ]; + + postBuild = '' + # Sign BL2 + python3 $FIPDIR/acs_tool.py $FIPDIR/bl2.bin ./bl2_acs.bin $FIPDIR/acs.bin 0 + sh $FIPDIR/blx_fix.sh \ + ./bl2_acs.bin \ + ./tmp.zero \ + ./tmp.bl2.zero.bin \ + $FIPDIR/bl21.bin \ + ./tmp.bl21.zero.bin \ + ./bl2_new.bin \ + bl2 + gxlimg -t bl2 -s bl2_new.bin bl2.bin.enc + + # Sign Bl3* + sh $FIPDIR/blx_fix.sh \ + $FIPDIR/bl30.bin \ + ./tmp.zero \ + ./tmp.bl30.zero.bin \ + $FIPDIR/bl301.bin \ + ./tmp.bl301.zero.bin \ + ./bl30_new.bin \ + bl30 + gxlimg -t bl3x -c bl30_new.bin bl30.bin.enc + gxlimg -t bl3x -c $FIPDIR/bl31.img bl31.img.enc + + # Encrypt U-Boot + gxlimg -t bl3x -c u-boot.bin u-boot.bin.enc + gxlimg -t fip \ + --bl2 ./bl2.bin.enc \ + --bl30 ./bl30.bin.enc \ + --bl31 ./bl31.img.enc \ + --bl33 ./u-boot.bin.enc \ + ./gxl-boot.bin + mv -v gxl-boot.bin u-boot.bin + + # Prepare USB boot files + dd if=u-boot.bin of=u-boot.bin.usb.bl2 bs=49152 count=1 + dd if=u-boot.bin of=u-boot.bin.usb.tpl skip=49152 bs=1 + + # Help out the user a little. + cat > README.md < Date: Tue, 13 Apr 2021 16:48:41 -0400 Subject: [PATCH 27/27] ubootLibretechAC: init --- pkgs/misc/uboot/amlogic.nix | 6 ++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 7 insertions(+) diff --git a/pkgs/misc/uboot/amlogic.nix b/pkgs/misc/uboot/amlogic.nix index 8c1c5062d34a8..c4b3c1e1124c4 100644 --- a/pkgs/misc/uboot/amlogic.nix +++ b/pkgs/misc/uboot/amlogic.nix @@ -170,6 +170,12 @@ in { inherit buildUBootMesonG12A; + ubootLibretechAC = buildUBootMesonGXL { + # Amlogic S805X + defconfig = "libretech-ac_defconfig"; + FIPDIR = "${firmwareAmlogic}/lafrite"; + }; + ubootOdroidC2 = buildUBoot { # Amlogic S905 / GXBB # This uses a bespoke build because while it's GXBB, the binaries from the diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7c774b19a1099..46dfb0d160f3c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20748,6 +20748,7 @@ in inherit (callPackage ../misc/uboot/amlogic.nix {}) buildUBootMesonG12A buildUBootMesonGXL + ubootLibretechAC ubootOdroidC2 ubootOdroidC4 ;