Skip to content

Commit a2afd40

Browse files
committed
Refactor optee packages
This splits out optee-related packages into multiple derivations to allow for easier overriding of individual components. This will eventually allow for the removal of nixos options that override these components, as overlays are now easier to use.
1 parent 90510a7 commit a2afd40

10 files changed

+290
-256
lines changed

device-pkgs/flash-script.nix

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
cp ${uefiFirmware}/dtbs/*.dtbo kernel/dtb/
5656
''}
5757
${lib.optionalString (tosImage != null) ''
58-
cp ${tosImage}/tos.img bootloader/tos-optee_${socType}.img
58+
cp ${tosImage} bootloader/tos-optee_${socType}.img
5959
''}
6060
${lib.optionalString (eksFile != null) ''
6161
cp ${eksFile} bootloader/eks_${socType}.img

overlay-with-config.nix

+15-13
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ final: prev: (
1111

1212
inherit (final) lib;
1313

14-
tosArgs = {
15-
inherit (final.nvidia-jetpack) socType;
16-
inherit (cfg.firmware.optee) taPublicKeyFile;
17-
opteePatches = cfg.firmware.optee.patches;
18-
extraMakeFlags = cfg.firmware.optee.extraMakeFlags;
19-
};
20-
2114
flashTools = cfg.flasherPkgs.callPackages (import ./device-pkgs { inherit config; pkgs = final; }) { };
2215
in
2316
{
@@ -53,14 +46,18 @@ final: prev: (
5346
patches = (old.patches or [ ]) ++ cfg.firmware.uefi.edk2UefiPatches;
5447
});
5548

56-
flash-tools = prevJetpack.flash-tools.overrideAttrs ({ patches ? [ ], postPatch ? "", ... }: {
57-
patches = patches ++ cfg.flashScriptOverrides.patches;
58-
postPatch = postPatch + cfg.flashScriptOverrides.postPatch;
49+
opteeOS = prevJetpack.opteeOS.overrideAttrs (old: {
50+
patches = (old.patches or [ ]) ++ cfg.firmware.optee.patches;
51+
makeFlags = (old.makeFlags or [ ]) ++ cfg.firmware.optee.extraMakeFlags;
52+
});
53+
54+
opteeTaDevKit = prevJetpack.opteeTaDevKit.overrideAttrs (old: {
55+
patches = (old.patches or [ ]) ++ cfg.firmware.optee.patches;
56+
makeFlags = (old.makeFlags or [ ]) ++ cfg.firmware.optee.extraMakeFlags;
5957
});
6058

61-
tosImage = finalJetpack.buildTOS tosArgs;
62-
taDevKit = finalJetpack.buildOpteeTaDevKit tosArgs;
63-
inherit (finalJetpack.tosImage) nvLuksSrv hwKeyAgent;
59+
armTrustedFirmware = finalJetpack.callPackage ./pkgs/optee/arm-trusted-firmware.nix { };
60+
tosImage = finalJetpack.callPackage ./pkgs/optee/tos-image.nix { };
6461

6562
flashInitrd =
6663
let
@@ -197,6 +194,11 @@ final: prev: (
197194
cfg.firmware.variants;
198195
});
199196

197+
flash-tools = prevJetpack.flash-tools.overrideAttrs (old: {
198+
patches = (old.patches or [ ]) ++ cfg.flashScriptOverrides.patches;
199+
postPatch = (old.postPatch or "") + cfg.flashScriptOverrides.postPatch;
200+
});
201+
200202
# Use the flash-tools produced by mkFlashScript, we need whatever changes
201203
# the script made, as well as the flashcmd.txt from it
202204
flash-tools-flashcmd = finalJetpack.callPackage ./device-pkgs/flash-tools-flashcmd.nix {

overlay.nix

+20-7
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,26 @@ in
6363
jetsonEdk2Uefi = self.callPackage ./pkgs/uefi-firmware/jetson-edk2-uefi.nix { };
6464
uefiFirmware = self.callPackage ./pkgs/uefi-firmware/default.nix { };
6565

66-
inherit (prev.callPackages ./pkgs/optee {
67-
# Nvidia's recommended toolchain is gcc9:
68-
# https://nv-tegra.nvidia.com/r/gitweb?p=tegra/optee-src/nv-optee.git;a=blob;f=optee/atf_and_optee_README.txt;h=591edda3d4ec96997e054ebd21fc8326983d3464;hb=5ac2ab218ba9116f1df4a0bb5092b1f6d810e8f7#l33
69-
stdenv = prev.gcc9Stdenv;
70-
inherit (self) bspSrc gitRepos l4tVersion;
71-
}) buildTOS buildOpteeTaDevKit opteeClient;
72-
genEkb = self.callPackage ./pkgs/optee/gen-ekb.nix { };
66+
# Nvidia's recommended toolchain for optee is gcc9:
67+
# https://nv-tegra.nvidia.com/r/gitweb?p=tegra/optee-src/nv-optee.git;a=blob;f=optee/atf_and_optee_README.txt;h=591edda3d4ec96997e054ebd21fc8326983d3464;hb=5ac2ab218ba9116f1df4a0bb5092b1f6d810e8f7#l33
68+
opteeStdenv = prev.gcc9Stdenv;
69+
70+
opteeClient = self.callPackage ./pkgs/optee/client.nix { };
71+
72+
opteeTaDevKit = (self.callPackage ./pkgs/optee/os.nix { }).overrideAttrs (old: {
73+
pname = "optee-ta-dev-kit";
74+
makeFlags = (old.makeFlags or [ ]) ++ [ "ta_dev_kit" ];
75+
});
76+
77+
nvLuksSrv = self.callPackage ./pkgs/optee/nv-luks-srv.nix { };
78+
hwKeyAgent = self.callPackage ./pkgs/optee/hw-key-agent.nix { };
79+
80+
opteeOS = self.callPackage ./pkgs/optee/os.nix {
81+
earlyTaPaths = [
82+
"${self.nvLuksSrv}/${self.nvLuksSrv.uuid}.stripped.elf"
83+
"${self.hwKeyAgent}/${self.hwKeyAgent.uuid}.stripped.elf"
84+
];
85+
};
7386

7487
flash-tools = self.callPackage ./pkgs/flash-tools { };
7588

pkgs/optee/arm-trusted-firmware.nix

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{ gitRepos
2+
, l4tVersion
3+
, opteeStdenv
4+
, socType
5+
}:
6+
7+
opteeStdenv.mkDerivation {
8+
pname = "arm-trusted-firmware";
9+
version = l4tVersion;
10+
src = gitRepos."tegra/optee-src/atf";
11+
makeFlags = [
12+
"-C arm-trusted-firmware"
13+
"BUILD_BASE=$(PWD)/build"
14+
"CROSS_COMPILE=${opteeStdenv.cc.targetPrefix}"
15+
"DEBUG=0"
16+
"LOG_LEVEL=20"
17+
"PLAT=tegra"
18+
"SPD=opteed"
19+
"TARGET_SOC=${socType}"
20+
"V=0"
21+
# binutils 2.39 regression
22+
# `warning: /build/source/build/rk3399/release/bl31/bl31.elf has a LOAD segment with RWX permissions`
23+
# See also: https://developer.trustedfirmware.org/T996
24+
"LDFLAGS=-no-warn-rwx-segments"
25+
];
26+
27+
enableParallelBuilding = true;
28+
29+
installPhase = ''
30+
runHook preInstall
31+
32+
mkdir -p $out
33+
cp ./build/tegra/${socType}/release/bl31.bin $out/bl31.bin
34+
35+
runHook postInstall
36+
'';
37+
38+
meta.platforms = [ "aarch64-linux" ];
39+
}

pkgs/optee/client.nix

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{ opteeStdenv, fetchpatch, gitRepos, l4tVersion, pkg-config, libuuid }:
2+
3+
opteeStdenv.mkDerivation {
4+
pname = "optee_client";
5+
version = l4tVersion;
6+
src = gitRepos."tegra/optee-src/nv-optee";
7+
patches = [
8+
./0001-Don-t-prepend-foo-bar-baz-to-TEEC_LOAD_PATH.patch
9+
(fetchpatch {
10+
name = "tee-supplicant-Allow-for-TA-load-path-to-be-specified-at-runtime.patch";
11+
url = "https://github.com/OP-TEE/optee_client/commit/f3845d8bee3645eedfcc494be4db034c3c69e9ab.patch";
12+
stripLen = 1;
13+
extraPrefix = "optee/optee_client/";
14+
hash = "sha256-XjFpMbyXy74sqnc8l+EgTaPXqwwHcvni1Z68ShokTGc=";
15+
})
16+
];
17+
nativeBuildInputs = [ pkg-config ];
18+
buildInputs = [ libuuid ];
19+
enableParallelBuilding = true;
20+
makeFlags = [
21+
"-C optee/optee_client"
22+
"DESTDIR=$(out)"
23+
"SBINDIR=/sbin"
24+
"LIBDIR=/lib"
25+
"INCLUDEDIR=/include"
26+
];
27+
meta.platforms = [ "aarch64-linux" ];
28+
}

pkgs/optee/default.nix

-235
This file was deleted.

0 commit comments

Comments
 (0)