Skip to content

Commit 6aac26a

Browse files
committed
feat: add amd-debug tooling as a module and to base config
Signed-off-by: Fabian Wienand <fabian.wienand@9elements.com>
1 parent 8640af8 commit 6aac26a

3 files changed

Lines changed: 105 additions & 15 deletions

File tree

flake.nix

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,14 @@
2929
fileSystems."/boot/EFI" = {
3030
device = "/dev/disk/by-label/ESP";
3131
};
32-
firmwareci.base = {
33-
sshAccess = {
34-
user = "root";
35-
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKcSD9iHnCrJXkSt7aGSnfL0tVHUm+x6/EDr/FchmBfu";
32+
firmwareci = {
33+
base = {
34+
sshAccess = {
35+
user = "root";
36+
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKcSD9iHnCrJXkSt7aGSnfL0tVHUm+x6/EDr/FchmBfu";
37+
};
3638
};
39+
amdDebug.enable = true;
3740
};
3841
};
3942

@@ -49,6 +52,7 @@
4952
version = "6.12.36";
5053
sha256 = "sha256-ShaK7S3lqBqt2QuisVOGCpjZm/w0ZRk24X8Y5U8Buow==";
5154
};
55+
amdDebug.enable = true;
5256
};
5357
};
5458

modules/base.nix

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ with lib;
44

55
let
66
cfg = config.firmwareci.base;
7+
amdDebugCfg = config.firmwareci.amdDebug;
78

89
chipsecKernelVersion = "6.12.36";
910
kernelPackages = pkgs.linuxPackagesFor (pkgs.linux_6_12.override {
@@ -23,6 +24,8 @@ let
2324
withDriver = true;
2425
};
2526

27+
amd-debug-tools = pkgs.python3Packages.callPackage ../pkgs/amd-debug-tools/default.nix { };
28+
2629
in
2730
{
2831
options.firmwareci.base = {
@@ -68,7 +71,14 @@ in
6871
default = true;
6972
description = "Include the default tools package in the image.";
7073
};
74+
};
7175

76+
options.firmwareci.amdDebug = {
77+
enable = mkOption {
78+
type = types.bool;
79+
default = false;
80+
description = "Enable AMD debug tools (amd-s2idle, amd-bios, amd-pstate, amd-ttm) with ethtool and edid-decode.";
81+
};
7282
};
7383

7484
config = {
@@ -100,24 +110,34 @@ in
100110
powertop
101111
]
102112
++ lib.optional cfg.includeChipSec chipsec
103-
++ lib.optional cfg.includeDefaultTools (pkgs.callPackage ../pkgs/default-tools/default.nix { });
113+
++ lib.optional cfg.includeDefaultTools (pkgs.callPackage ../pkgs/default-tools/default.nix { })
114+
++ lib.optionals amdDebugCfg.enable [
115+
amd-debug-tools
116+
ethtool
117+
edid-decode
118+
];
104119

105120
hardware.enableAllFirmware = cfg.enableAllFirmware;
106121

107-
services.openssh = mkIf (cfg.sshAccess.user != "" && cfg.sshAccess.key != "") {
108-
enable = true;
109-
settings.PermitRootLogin = if cfg.sshAccess.user == "root" then "yes" else "no";
122+
services = {
123+
openssh = mkIf (cfg.sshAccess.user != "" && cfg.sshAccess.key != "") {
124+
enable = true;
125+
settings.PermitRootLogin = if cfg.sshAccess.user == "root" then "yes" else "no";
126+
};
127+
128+
fwupd = mkIf cfg.enableFwupd {
129+
enable = true;
130+
daemonSettings = lib.mkForce {
131+
EspLocation = "/boot/EFI";
132+
};
133+
};
134+
135+
# Enable D-Bus system daemon for AMD debug tools
136+
dbus.enable = mkIf amdDebugCfg.enable true;
110137
};
111138

112139
users.users.${cfg.sshAccess.user} = mkIf (cfg.sshAccess.user != "" && cfg.sshAccess.key != "") {
113140
openssh.authorizedKeys.keys = [ cfg.sshAccess.key ];
114141
};
115-
116-
services.fwupd = mkIf cfg.enableFwupd {
117-
enable = true;
118-
daemonSettings = lib.mkForce {
119-
EspLocation = "/boot/EFI";
120-
};
121-
};
122142
};
123143
}

pkgs/amd-debug-tools/default.nix

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{ lib
2+
, buildPythonPackage
3+
, fetchFromGitHub
4+
, setuptools
5+
, dbus-fast
6+
, dbus-python
7+
, pyudev
8+
, packaging
9+
, pandas
10+
, jinja2
11+
, tabulate
12+
, seaborn
13+
, matplotlib
14+
,
15+
}:
16+
17+
buildPythonPackage rec {
18+
pname = "amd-debug-tools";
19+
version = "0.2.9";
20+
format = "pyproject";
21+
22+
src = fetchFromGitHub {
23+
owner = "superm1";
24+
repo = "amd-debug-tools";
25+
rev = version;
26+
sha256 = "sha256-RrXo1045M+2D/xycO74ExeFhqBJL9mE6OPy0MSLmEFc=";
27+
};
28+
29+
build-system = [
30+
setuptools
31+
];
32+
33+
postPatch = ''
34+
# Replace dynamic versioning with static version
35+
substituteInPlace pyproject.toml \
36+
--replace-fail 'dynamic = ["version"]' 'version = "${version}"' \
37+
--replace-fail ', "setuptools-git-versioning>=2.0,<3"' ""
38+
39+
# Remove the git-versioning configuration section
40+
sed -i '/\[tool\.setuptools-git-versioning\]/,/^$/d' pyproject.toml
41+
'';
42+
43+
dependencies = [
44+
dbus-fast
45+
dbus-python
46+
pyudev
47+
packaging
48+
pandas
49+
jinja2
50+
tabulate
51+
seaborn
52+
matplotlib
53+
];
54+
55+
# Tests require additional setup
56+
doCheck = false;
57+
58+
# Skip runtime dependency check (cysystemd is optional)
59+
dontCheckRuntimeDeps = true;
60+
61+
meta = with lib; {
62+
description = "AMD debug tools for firmware development";
63+
homepage = "https://github.com/superm1/amd-debug-tools";
64+
license = licenses.mit;
65+
};
66+
}

0 commit comments

Comments
 (0)