diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 969d6ab338e29..43c8e72d10a0a 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"; 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/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 6c59c13d12e2a..2701addf5393d 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -1,7 +1,6 @@ { stdenv , lib , fetchurl -, fetchpatch , fetchFromGitHub , bc , bison @@ -9,11 +8,12 @@ , flex , openssl , swig -, meson-tools , armTrustedFirmwareAllwinner , armTrustedFirmwareRK3328 , armTrustedFirmwareRK3399 , armTrustedFirmwareS905 +, firmwareOdroidC2 +, firmwareOdroidC4 , buildPackages }: @@ -206,27 +206,15 @@ 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"]; + 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 +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 { diff --git a/pkgs/misc/uboot/hardkernel-firmware.nix b/pkgs/misc/uboot/hardkernel-firmware.nix new file mode 100644 index 0000000000000..d007f56d4a623 --- /dev/null +++ b/pkgs/misc/uboot/hardkernel-firmware.nix @@ -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" ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 020cb17a25a5c..62292c79854be 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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 { }; @@ -20725,6 +20727,7 @@ in ubootNanoPCT4 ubootNovena ubootOdroidC2 + ubootOdroidC4 ubootOdroidXU3 ubootOrangePiPc ubootOrangePiZeroPlus2H5 @@ -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