Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions maintainers/maintainer-list.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
30 changes: 30 additions & 0 deletions pkgs/misc/meson64-tools/default.nix
Original file line number Diff line number Diff line change
@@ -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 ];
};
}
81 changes: 57 additions & 24 deletions pkgs/misc/uboot/default.nix
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
{ stdenv
, lib
, fetchurl
, fetchpatch
, fetchFromGitHub
, bc
, bison
, dtc
, flex
, openssl
, swig
, meson-tools
, armTrustedFirmwareAllwinner
, armTrustedFirmwareRK3328
, armTrustedFirmwareRK3399
, armTrustedFirmwareS905
, firmwareOdroidC2
, firmwareOdroidC4
, buildPackages
}:

Expand Down Expand Up @@ -206,27 +206,15 @@ in {
filesToInstall = ["u-boot-dtb.img" "SPL"];
};

# Flashing instructions:
# dd if=bl1.bin.hardkernel of=<device> conv=fsync bs=1 count=442
# dd if=bl1.bin.hardkernel of=<device> conv=fsync bs=512 skip=1 seek=1
# dd if=u-boot.gxbb of=<device> 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"];

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
Expand All @@ -239,17 +227,62 @@ 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 = 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 {
Expand Down
148 changes: 148 additions & 0 deletions pkgs/misc/uboot/hardkernel-firmware.nix
Original file line number Diff line number Diff line change
@@ -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" ];
};
}
9 changes: 9 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2753,6 +2753,8 @@ in

meson-tools = callPackage ../misc/meson-tools { };

meson64-tools = callPackage ../misc/meson64-tools { };

metabase = callPackage ../servers/metabase { };

midicsv = callPackage ../tools/audio/midicsv { };
Expand Down Expand Up @@ -20725,6 +20727,7 @@ in
ubootNanoPCT4
ubootNovena
ubootOdroidC2
ubootOdroidC4
ubootOdroidXU3
ubootOrangePiPc
ubootOrangePiZeroPlus2H5
Expand Down Expand Up @@ -20753,6 +20756,12 @@ in
ubootWandboard
;

# Hardkernel Odroid devices firmware:
inherit (callPackage ../misc/uboot/hardkernel-firmware.nix {})
firmwareOdroidC2
firmwareOdroidC4
;

# Upstream Barebox:
inherit (callPackage ../misc/barebox {})
buildBarebox
Expand Down