arm-trusted-firmware: init

ARM trusted firmware is required as part of the boot process on some ARMv8-A
boards. Currently, only the RK3328 is supported in nixpkgs.

This makes the Rock64 u-boot image bootable.

authored by Ben Wolsieffer and committed by Tuomas Tynkkynen 0ab76c5a 0264c9bb

+70 -2
+63
pkgs/misc/arm-trusted-firmware/default.nix
··· 1 + { stdenv, fetchFromGitHub, buildPackages }: 2 + 3 + let 4 + buildArmTrustedFirmware = { targetPlatforms 5 + , filesToInstall 6 + , installDir ? "$out" 7 + , platform 8 + , extraMakeFlags ? [] 9 + , extraMeta ? {} 10 + , ... } @ args: 11 + stdenv.mkDerivation (rec { 12 + 13 + name = "arm-trusted-firmware-${platform}-${version}"; 14 + version = "1.4"; 15 + 16 + src = fetchFromGitHub { 17 + owner = "ARM-software"; 18 + repo = "arm-trusted-firmware"; 19 + rev = "b762fc7481c66b64eb98b6ff694d569e66253973"; 20 + sha256 = "15m10dfgqkgw6rmzgfg1xzp1si9d5jwzyrcb7cp3y9ckj6mvp3i3"; 21 + }; 22 + 23 + depsBuildBuild = [ buildPackages.stdenv.cc ]; 24 + 25 + makeFlags = [ 26 + "CROSS_COMPILE=${stdenv.cc.targetPrefix}" 27 + "PLAT=${platform}" 28 + ] ++ extraMakeFlags; 29 + 30 + installPhase = '' 31 + runHook preInstall 32 + 33 + mkdir -p ${installDir} 34 + cp ${stdenv.lib.concatStringsSep " " filesToInstall} ${installDir} 35 + 36 + runHook postInstall 37 + ''; 38 + 39 + hardeningDisable = [ "all" ]; 40 + dontStrip = true; 41 + 42 + enableParallelBuilding = true; 43 + 44 + meta = with stdenv.lib; { 45 + homepage = https://github.com/ARM-software/arm-trusted-firmware; 46 + description = "A reference implementation of secure world software for ARMv8-A"; 47 + license = licenses.bsd3; 48 + maintainers = [ maintainers.lopsided98 ]; 49 + # TODO: Fix when #34444 is merged 50 + # platforms = targetPlatforms; 51 + } // extraMeta; 52 + } // builtins.removeAttrs args [ "extraMeta" ]); 53 + 54 + in rec { 55 + inherit buildArmTrustedFirmware; 56 + 57 + armTrustedFirmwareRK3328 = buildArmTrustedFirmware rec { 58 + extraMakeFlags = [ "bl31" ]; 59 + platform = "rk3328"; 60 + targetPlatforms = ["aarch64-linux"]; 61 + filesToInstall = [ "build/${platform}/release/bl31/bl31.elf"]; 62 + }; 63 + }
+2 -2
pkgs/misc/uboot/rock64.nix
··· 1 - { buildUBoot, fetchFromGitHub }: buildUBoot rec { 1 + { lib, buildUBoot, fetchFromGitHub, armTrustedFirmwareRK3328 }: buildUBoot rec { 2 2 name = "uboot-${defconfig}-${version}"; 3 3 version = "2018.01"; 4 4 ··· 9 9 sha256 = "1vmv7q9yafsc0zivd0qdfmf930dvhzkf4a3j6apxxgx9g10wgwrg"; 10 10 }; 11 11 12 - extraMakeFlags = [ "u-boot.itb" "all" ]; 12 + extraMakeFlags = [ "BL31=${armTrustedFirmwareRK3328}/bl31.elf" "u-boot.itb" "all" ]; 13 13 postBuild = '' 14 14 ./tools/mkimage -n rk3328 -T rksd -d tpl/u-boot-tpl.bin idbloader.img 15 15 cat spl/u-boot-spl.bin >> idbloader.img
+5
pkgs/top-level/all-packages.nix
··· 12874 12874 alsaOss = callPackage ../os-specific/linux/alsa-oss { }; 12875 12875 alsaTools = callPackage ../os-specific/linux/alsa-tools { }; 12876 12876 12877 + inherit (callPackage ../misc/arm-trusted-firmware {}) 12878 + buildArmTrustedFirmware 12879 + armTrustedFirmwareRK3328 12880 + ; 12881 + 12877 12882 microcodeAmd = callPackage ../os-specific/linux/microcode/amd.nix { }; 12878 12883 12879 12884 microcodeIntel = callPackage ../os-specific/linux/microcode/intel.nix { };