From fe21eda733108aaf2e12c7a37203b86f53350a3d Mon Sep 17 00:00:00 2001 From: Govind Singh Date: Thu, 23 Oct 2025 09:28:48 +0400 Subject: [PATCH 01/10] Add support for UCM-iMX95 Evaluation Kit platform The CompuLab UCM-iMX95 Evaluation Kit provides a platform for comprehensive evaluation of the NXP i.MX95 application processor. This change adds support in NixOS hardware to provide a template for customized i.MX95-based platforms. UCM-iMX95: https://www.compulab.com/products/som-evaluation-kits/ucm-imx95-evaluation-kit/ Signed-off-by: Govind Singh --- compulab/ucm-imx95/bsp/ucm-imx95-atf.nix | 57 ++++++++++++ compulab/ucm-imx95/bsp/ucm-imx95-boot.nix | 87 +++++++++++++++++ compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix | 24 +++++ compulab/ucm-imx95/bsp/ucm-imx95-linux.nix | 62 +++++++++++++ compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix | 63 +++++++++++++ compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix | 63 +++++++++++++ compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix | 75 +++++++++++++++ compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix | 79 ++++++++++++++++ compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix | 93 +++++++++++++++++++ compulab/ucm-imx95/default.nix | 19 ++++ compulab/ucm-imx95/modules.nix | 17 ++++ compulab/ucm-imx95/overlay.nix | 3 + flake.nix | 1 + 13 files changed, 643 insertions(+) create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-atf.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-boot.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-linux.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix create mode 100644 compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix create mode 100644 compulab/ucm-imx95/default.nix create mode 100644 compulab/ucm-imx95/modules.nix create mode 100644 compulab/ucm-imx95/overlay.nix diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix b/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix new file mode 100644 index 00000000..fea07f79 --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix @@ -0,0 +1,57 @@ +{ + lib, + fetchgit, + stdenv, + buildPackages, + pkgsCross, + openssl, +}: + +let + target-board = "imx95"; +in +stdenv.mkDerivation rec { + pname = "imx95-atf"; + version = "2.13.0"; + platform = target-board; + enableParallelBuilding = true; + + src = fetchgit { + url = "https://github.com/nxp-imx/imx-atf.git"; + rev = "28affcae957cb8194917b5246276630f9e6343e1"; + sha256 = "sha256-a8F+Lf8pwML+tCwawS0N/mrSXWPmFhlUeOg0MCRK3VE="; + }; + + # Compiler dependencies + depsBuildBuild = [ buildPackages.stdenv.cc ]; + nativeBuildInputs = [ pkgsCross.aarch64-embedded.stdenv.cc ]; + + buildInputs = [ openssl ]; + + makeFlags = [ + "HOSTCC=$(CC_FOR_BUILD)" + "CROSS_COMPILE=${pkgsCross.aarch64-embedded.stdenv.cc.targetPrefix}" + "PLAT=${platform}" + "SPD=opteed" + "bl31" + "LDFLAGS=-no-warn-rwx-segments" + ]; + + installPhase = '' + runHook preInstall + mkdir -p $out + cp build/${target-board}/release/bl31.bin $out + runHook postInstall + ''; + + hardeningDisable = [ "all" ]; + dontStrip = true; + + meta = with lib; { + homepage = "https://github.com/nxp-imx/imx-atf"; + description = "Reference implementation of secure world software for ARMv8-A"; + license = [ licenses.bsd3 ]; + maintainers = with maintainers; [ govindsi ]; + platforms = [ "aarch64-linux" ]; + }; +} diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix new file mode 100644 index 00000000..feedebaf --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix @@ -0,0 +1,87 @@ +{ + pkgs, +}: +with pkgs; +let + + imx95-atf = pkgs.callPackage ./ucm-imx95-atf.nix { }; + imx95-firmware = pkgs.callPackage ./ucm-imx95-firmware.nix { }; + imx95-uboot = pkgs.callPackage ./ucm-imx95-uboot.nix { }; + imx95-optee-os = pkgs.callPackage ./ucm-imx95-optee-os.nix { }; + imx95-sm-fw = pkgs.callPackage ./ucm-imx95-sm-fw.nix { }; + imx95-oei-ddr = pkgs.callPackage ./ucm-imx95-oei-ddr.nix { }; + imx95-oei-tcm = pkgs.callPackage ./ucm-imx95-oei-tcm.nix { }; + src = pkgs.fetchgit { + url = "https://github.com/nxp-imx/imx-mkimage.git"; + #tag: lf-6.6.36 + rev = "4622115cbc037f79039c4522faeced4aabea986b"; + sha256 = "sha256-2gz0GxlB3jwy8PC6+cP3+MpyUzqE1vDTw8nuxK6vo3g="; + }; + shortRev = builtins.substring 0 8 src.rev; +in +{ + imx95-boot = pkgs.stdenv.mkDerivation rec { + inherit src; + name = "imx95-mkimage"; + version = "lf-6.6.36"; + + postPatch = '' + substituteInPlace Makefile \ + --replace 'git rev-parse --short=8 HEAD' 'echo ${shortRev}' + substituteInPlace Makefile \ + --replace 'CC = gcc' 'CC = clang' + substituteInPlace iMX95/soc.mak \ + --replace 'xxd' "${pkgs.vim.xxd}/bin/xxd" + substituteInPlace scripts/fspi_fcb_gen.sh \ + --replace 'xxd' "${pkgs.vim.xxd}/bin/xxd" + substituteInPlace scripts/fspi_packer.sh \ + --replace 'xxd' "${pkgs.vim.xxd}/bin/xxd" + patchShebangs scripts + ''; + + nativeBuildInputs = [ + clang + git + dtc + ]; + + buildInputs = [ + git + glibc.static + zlib + zlib.static + ]; + + buildPhase = '' + runHook preBuild + + if [ -f ${imx95-uboot}/u-boot.bin ]; then + install -m 0644 ${imx95-uboot}/u-boot.bin ./iMX95/u-boot.bin + else + cat ${imx95-uboot}/u-boot-nodtb.bin ${imx95-uboot}/ucm-imx95.dtb > ./iMX95/u-boot.bin + fi + install -m 0644 ${imx95-uboot}/u-boot-spl.bin ./iMX95/u-boot-spl.bin + install -m 0644 ${imx95-uboot}/u-boot-nodtb.bin ./iMX95/u-boot-nodtb.bin + install -m 0644 ${imx95-uboot}/ucm-imx95.dtb ./iMX95/ucm-imx95.dtb + install -m 0644 ${imx95-optee-os}/tee.bin ./iMX95/tee.bin + install -m 0644 ${imx95-atf}/bl31.bin ./iMX95/bl31.bin + install -m 0644 ${imx95-sm-fw}/m33_image.bin ./iMX95/m33_image.bin + install -m 0644 ${imx95-oei-ddr}/oei-m33-ddr.bin ./iMX95/oei-m33-ddr.bin + install -m 0644 ${imx95-oei-tcm}/oei-m33-tcm.bin ./iMX95/oei-m33-tcm.bin + install -m 0644 ${imx95-firmware}/ucm-imx95/lpddr5* ./iMX95/ + install -m 0644 ${imx95-firmware}/ucm-imx95/mx95a0-ahab-container.img ./iMX95/ + install -m 0644 ${imx95-firmware}/ucm-imx95/m7_image.bin ./iMX95/ + + make SOC=iMX95 REV=A0 OEI=YES LPDDR_TYPE=lpddr5 flash_all + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/image + install -m 0644 ./iMX95/flash.bin $out/image + runHook postInstall + ''; + }; +} diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix new file mode 100644 index 00000000..18f3aa7c --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +with pkgs; +stdenv.mkDerivation rec { + pname = "comms-sbc-firmware"; + version = "v0_6.36"; + + src = builtins.fetchGit { + url = "git@github.com:tiiuae/comms-sbc-firmware.git"; + rev = "06394d6d983955734257fdc7f719e454a3ce07f4"; + }; + + nativeBuildInputs = [ + pkgs.rsync + pkgs.coreutils + ]; + dontUnpack = true; + dontStrip = true; + + installPhase = '' + mkdir -p $out + # copy everything except .git + rsync -a --exclude='.git' $src/ $out/ + ''; +} diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix b/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix new file mode 100644 index 00000000..8aa94c22 --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix @@ -0,0 +1,62 @@ +{ lib, pkgs, ... }@args: +with pkgs; +buildLinux ( + args + // rec { + version = "6.6.36"; + name = "imx95-linux"; + + # modDirVersion needs to be x.y.z, will automatically add .0 if needed + modDirVersion = version; + + defconfig = "compulab-mx95_defconfig"; + + # https://github.com/NixOS/nixpkgs/pull/366004 + # introduced a breaking change that if a module is declared but it is not being used it will faill. + ignoreConfigErrors = true; + + kernelPatches = [ + ]; + + autoModules = false; + + extraConfig = '' + CRYPTO_TLS m + TLS y + MD_RAID0 m + MD_RAID1 m + MD_RAID10 m + MD_RAID456 m + DM_VERITY m + LOGO y + FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER n + FB_EFI n + EFI_STUB y + EFI y + VIRTIO y + VIRTIO_PCI y + VIRTIO_BLK y + DRM_VIRTIO_GPU y + EXT4_FS y + USBIP_CORE m + USBIP_VHCI_HCD m + USBIP_HOST m + USBIP_VUDC m + ''; + + src = fetchFromGitHub { + owner = "compulab-yokneam"; + repo = "linux-compulab"; + # tag: linux-compulab_6.6.36 + rev = "b93daaad0807fb15d4f3f1a6e5be843ac7532ef7"; + sha256 = "sha256-wCeuGXBTz3H6OFWBA1M1/t/9WgxBVjQ8FU/wvAUVW2w="; + }; + meta = with lib; { + homepage = "https://github.com/compulab-yokneam/linux-compulab"; + license = [ licenses.gpl2Only ]; + maintainers = with maintainers; [ govindsi ]; + platforms = [ "aarch64-linux" ]; + }; + } + // (args.argsOverride or { }) +) diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix new file mode 100644 index 00000000..d7b8868a --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix @@ -0,0 +1,63 @@ +{ + lib, + pkgs, +}: +pkgs.stdenv.mkDerivation rec { + pname = "imx95-imx-oei"; + version = "lf-6.6.36-2.1.0"; + + nativeBuildInputs = [ + pkgs.buildPackages.python3 + pkgs.gcc-arm-embedded + ]; + + src = pkgs.fetchgit { + url = "https://github.com/nxp-imx/imx-oei.git"; + rev = "5fca9f47544d03c52ca371eadfffbfd2454e6925"; + sha256 = "sha256-Sb6u1NlhJpDCOKBu3HqUb4BLEy0F8LYVnJE0tRSvzWc="; + }; + + patches = [ + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; + sha256 = "sha256-6ZpBOXw2aIhD2i9Wx368xfHq6NvdZghWHU9u8+gRTj8="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; + sha256 = "sha256-WZ/vYaTC2iKIC+jnHtnPriCxK9gjRsOv2Uy13Ye4698="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; + sha256 = "sha256-yyierv2USZlM8Cuxf4FDj4+UtILvJQH9BJSj+fmayL8="; + }) + ]; + + postPatch = '' + substituteInPlace oei/makefiles/build_info.mak \ + --replace "/bin/echo" "echo" + substituteInPlace Makefile \ + --replace "/bin/echo" "echo" + ''; + + makeFlags = [ + "board=mx95lp5" + "CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "OEI_CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "ARCH=arm" + "DDR_CONFIG=lpddr5_timing" + "oei=ddr" + ]; + + installPhase = '' + mkdir -p $out + cp build/mx95lp5/ddr/oei-m33-ddr.bin $out/ + ''; + + meta = with lib; { + homepage = "https://github.com/nxp-imx/imx-oei"; + description = "Optional Executable Image assembler for i.MX95 processors"; + license = [ licenses.bsd3 ]; + maintainers = with maintainers; [ govindsi ]; + platforms = [ "aarch64-linux" ]; + }; +} diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix new file mode 100644 index 00000000..e698990a --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix @@ -0,0 +1,63 @@ +{ + lib, + pkgs, +}: +pkgs.stdenv.mkDerivation rec { + pname = "imx95-imx-oei-tcm"; + version = "lf-6.6.36-2.1.0"; + + nativeBuildInputs = [ + pkgs.buildPackages.python3 + pkgs.gcc-arm-embedded + ]; + + src = pkgs.fetchgit { + url = "https://github.com/nxp-imx/imx-oei.git"; + rev = "5fca9f47544d03c52ca371eadfffbfd2454e6925"; + sha256 = "sha256-Sb6u1NlhJpDCOKBu3HqUb4BLEy0F8LYVnJE0tRSvzWc="; + }; + + patches = [ + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; + sha256 = "sha256-6ZpBOXw2aIhD2i9Wx368xfHq6NvdZghWHU9u8+gRTj8="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; + sha256 = "sha256-WZ/vYaTC2iKIC+jnHtnPriCxK9gjRsOv2Uy13Ye4698="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; + sha256 = "sha256-yyierv2USZlM8Cuxf4FDj4+UtILvJQH9BJSj+fmayL8="; + }) + ]; + + postPatch = '' + substituteInPlace oei/makefiles/build_info.mak \ + --replace "/bin/echo" "echo" + substituteInPlace Makefile \ + --replace "/bin/echo" "echo" + ''; + + makeFlags = [ + "board=mx95lp5" + "CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "OEI_CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "ARCH=arm" + "DDR_CONFIG=lpddr5_timing" + "oei=tcm" + ]; + + installPhase = '' + mkdir -p $out + cp build/mx95lp5/tcm/oei-m33-tcm.bin $out/ + ''; + + meta = with lib; { + homepage = "https://github.com/nxp-imx/imx-oei"; + description = "Optional Executable Image assembler for i.MX95 processors"; + license = [ licenses.bsd3 ]; + maintainers = with maintainers; [ govindsi ]; + platforms = [ "aarch64-linux" ]; + }; +} diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix new file mode 100644 index 00000000..bf6806a4 --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix @@ -0,0 +1,75 @@ +{ + lib, + pkgs, +}: +let + inherit (pkgs.buildPackages) python3; + toolchain = pkgs.gccStdenv.cc; + binutils = pkgs.gccStdenv.cc.bintools.bintools_bin; + cpp = pkgs.gcc; +in +pkgs.stdenv.mkDerivation rec { + pname = "imx95-optee-os"; + version = "lf-6.6.36_2.1.0"; + + nativeBuildInputs = [ + python3 + ]; + + enableParallelBuilding = true; + + propagatedBuildInputs = with python3.pkgs; [ + pycryptodomex + pyelftools + cryptography + ]; + + src = pkgs.fetchgit { + url = "https://github.com/nxp-imx/imx-optee-os.git"; + rev = "612bc5a642a4608d282abeee2349d86de996d7ee"; + sha256 = "sha256-A7p3KPijwipivs9Qw9Mr62RWwaMBGTz7J8WP5JYoSOs="; + }; + meta = with lib; { + homepage = "https://github.com/nxp-imx/imx-optee-os"; + license = [ licenses.bsd2 ]; + maintainers = with maintainers; [ govindsi ]; + platforms = [ "aarch64-linux" ]; + }; + + postPatch = '' + substituteInPlace scripts/arm32_sysreg.py \ + --replace '/usr/bin/env python3' '${python3}/bin/python' + substituteInPlace scripts/gen_tee_bin.py \ + --replace '/usr/bin/env python3' '${python3}/bin/python' + substituteInPlace scripts/pem_to_pub_c.py \ + --replace '/usr/bin/env python3' '${python3}/bin/python' + substituteInPlace ta/pkcs11/scripts/verify-helpers.sh \ + --replace '/bin/bash' '${pkgs.bash}/bin/bash' + substituteInPlace mk/gcc.mk \ + --replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy + substituteInPlace mk/gcc.mk \ + --replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump + substituteInPlace mk/gcc.mk \ + --replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm + substituteInPlace mk/gcc.mk \ + --replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf + substituteInPlace mk/gcc.mk \ + --replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar + substituteInPlace mk/gcc.mk \ + --replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp + ''; + + makeFlags = [ + "PLATFORM=imx-mx95evk" + "CFG_ARM64_core=y" + "CFG_TEE_TA_LOG_LEVEL=0" + "CFG_TEE_CORE_LOG_LEVEL=0" + "CROSS_COMPILE=${toolchain}/bin/${toolchain.targetPrefix}" + "CROSS_COMPILE64=${toolchain}/bin/${toolchain.targetPrefix}" + ]; + + installPhase = '' + mkdir -p $out + cp ./out/arm-plat-imx/core/tee-raw.bin $out/tee.bin + ''; +} diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix new file mode 100644 index 00000000..2628f151 --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix @@ -0,0 +1,79 @@ +{ + lib, + pkgs, +}: +pkgs.stdenv.mkDerivation rec { + pname = "imx95-sm-fw"; + version = "lf-6.6.36-2.1.0"; + + nativeBuildInputs = [ + pkgs.buildPackages.python3 + pkgs.gcc-arm-embedded + ]; + + propagatedBuildInputs = with pkgs.buildPackages.python3.pkgs; [ + pycryptodomex + pyelftools + cryptography + ]; + + src = pkgs.fetchgit { + url = "https://github.com/nxp-imx/imx-sm.git"; + rev = "709deccd9338399eb39b5cf99a60eab4fa60d539"; + sha256 = "sha256-02Cl+XhWGSFswspdBJ/4B/mBm4XTs/qKotx0BXMQpJk="; + }; + + patches = [ + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0001-Add-mcimx95cust-board.patch"; + sha256 = "sha256-zvZ4bNew+yRPmaZQMrAH087KpCLRqz6zdElfe72Dtuc="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0002-Fix-null-pionter-except.patch"; + sha256 = "sha256-q72VEvJqm2CmOxdWMqGibgXS5lY08mC4srEcy00QdrE="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0001-update-for-yocto-6.6.36-compatibility.patch"; + sha256 = "sha256-JzHqDiD/ZOu6VQQI0JxY17RQ3bA2t1aP3O1sjLPguWs="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0003-sm-Disable-GPIO1-10-interrupt.patch"; + sha256 = "sha256-dhcDv7Uq856+MBonczMPznk+tuqUFxTcHiKLX+myCVA="; + }) + (pkgs.fetchpatch { + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0004-configs-mx95cust-change-LPTPM1-ownership.patch"; + sha256 = "sha256-NcLu6+zXpiSz1bHKW14Zuf6F/4pzKsekb+zaRtKjSTY="; + }) + ]; + + postPatch = '' + substituteInPlace sm/makefiles/gcc_cross.mak \ + --replace "\$(SM_CROSS_COMPILE)objcopy" ${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-objcopy + substituteInPlace sm/makefiles/build_info.mak \ + --replace "/bin/echo" "echo" + substituteInPlace sm/makefiles/gcc_cross.mak \ + --replace 'SM_CROSS_COMPILE ?= $(TOOLS)/arm-gnu-toolchain-*-none-eabi/bin/arm-none-eabi-' \ + 'SM_CROSS_COMPILE ?= $(CROSS_COMPILE)' + ''; + + makeFlags = [ + "config=mx95cust" + "M=2" + "CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "CROSS_COMPILE64=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "ARCH=arm" + ]; + + installPhase = '' + mkdir -p $out + cp build/mx95cust/m33_image.bin $out/ + ''; + + meta = with lib; { + homepage = "https://github.com/nxp-imx/imx-sm"; + description = "System Manager firmware for i.MX processors"; + license = [ licenses.bsd3 ]; + maintainers = with maintainers; [ govindsi ]; + platforms = [ "aarch64-linux" ]; + }; +} diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix new file mode 100644 index 00000000..68434e57 --- /dev/null +++ b/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix @@ -0,0 +1,93 @@ +{ + stdenv, + lib, + bison, + dtc, + fetchgit, + flex, + gnutls, + libuuid, + ncurses, + openssl, + which, + perl, + buildPackages, + efitools, +}: +let + ubsrc = fetchgit { + url = "https://github.com/compulab-yokneam/u-boot-compulab.git"; + # tag: lf_v2024.04 + rev = "824401fe487d7d3cbcf251bd60270bd7fe8d21d0"; + sha256 = "sha256-m+YW7+XF/jcNKfyb5533LXGyOWvStqY+MCczAdcNGZI="; + }; +in +stdenv.mkDerivation { + pname = "imx95-uboot"; + version = "2024.04"; + src = ubsrc; + + postPatch = '' + patchShebangs tools + patchShebangs scripts + ''; + + nativeBuildInputs = [ + bison + flex + openssl + which + ncurses + libuuid + gnutls + openssl + perl + efitools + ]; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + hardeningDisable = [ "all" ]; + enableParallelBuilding = true; + + makeFlags = [ + "DTC=${lib.getExe buildPackages.dtc}" + "CROSS_COMPILE=${stdenv.cc.targetPrefix}" + ]; + + extraConfig = '' + CONFIG_USE_BOOTCOMMAND=y + CONFIG_BOOTCOMMAND="setenv ramdisk_addr_r 0x97000000; setenv fdt_addr_r 0x96000000; run distro_bootcmd; " + CONFIG_CMD_BOOTEFI_SELFTEST=y + CONFIG_CMD_BOOTEFI=y + CONFIG_EFI_LOADER=y + CONFIG_BLK=y + CONFIG_PARTITIONS=y + CONFIG_DM_DEVICE_REMOVE=n + CONFIG_CMD_CACHE=y + ''; + + passAsFile = [ "extraConfig" ]; + + configurePhase = '' + runHook preConfigure + + make ucm-imx95_defconfig + cat $extraConfigPath >> .config + + runHook postConfigure + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out + cp ./u-boot-nodtb.bin $out + cp ./spl/u-boot-spl.bin $out + cp ./arch/arm/dts/ucm-imx95.dtb $out + cp .config $out + + runHook postInstall + ''; + + dontStrip = true; +} diff --git a/compulab/ucm-imx95/default.nix b/compulab/ucm-imx95/default.nix new file mode 100644 index 00000000..81fcb392 --- /dev/null +++ b/compulab/ucm-imx95/default.nix @@ -0,0 +1,19 @@ +{ pkgs, ... }: +{ + nixpkgs.overlays = [ + (import ./overlay.nix) + ]; + + imports = [ + ./modules.nix + ]; + + boot.loader.grub.extraFiles = { + "ucm-imx95.dtb" = "${pkgs.callPackage ./bsp/ucm-imx95-linux.nix { }}/dtbs/compulab/ucm-imx95.dtb"; + }; + + hardware.deviceTree = { + filter = "ucm-imx95.dtb"; + name = "ucm-imx95.dtb"; + }; +} diff --git a/compulab/ucm-imx95/modules.nix b/compulab/ucm-imx95/modules.nix new file mode 100644 index 00000000..c0e8f266 --- /dev/null +++ b/compulab/ucm-imx95/modules.nix @@ -0,0 +1,17 @@ +{ + pkgs, + lib, + ... +}: +{ + nixpkgs.hostPlatform = "aarch64-linux"; + + boot = { + kernelPackages = pkgs.linuxPackagesFor (pkgs.callPackage ./bsp/ucm-imx95-linux.nix { }); + initrd.includeDefaultModules = lib.mkForce false; + }; + + disabledModules = [ "profiles/all-hardware.nix" ]; + + hardware.deviceTree.enable = true; +} diff --git a/compulab/ucm-imx95/overlay.nix b/compulab/ucm-imx95/overlay.nix new file mode 100644 index 00000000..942a3711 --- /dev/null +++ b/compulab/ucm-imx95/overlay.nix @@ -0,0 +1,3 @@ +final: _prev: { + inherit (final.callPackage ./bsp/ucm-imx95-boot.nix { pkgs = final; }) imx95-boot; +} diff --git a/flake.nix b/flake.nix index ce7425b9..8f32fbbf 100644 --- a/flake.nix +++ b/flake.nix @@ -364,6 +364,7 @@ nxp-imx8mq-evk = import ./nxp/imx8mq-evk; nxp-imx8qm-mek = import ./nxp/imx8qm-mek; nxp-imx93-evk = import ./nxp/imx93-evk; + ucm-imx95 = import ./compulab/ucm-imx95; hardkernel-odroid-hc4 = import ./hardkernel/odroid-hc4; hardkernel-odroid-h3 = import ./hardkernel/odroid-h3; hardkernel-odroid-h4 = import ./hardkernel/odroid-h4; From a3576f0f3c7c77799c7d99b1dd30a8b3a00ef56d Mon Sep 17 00:00:00 2001 From: Govind Singh Date: Wed, 29 Oct 2025 22:58:31 +0400 Subject: [PATCH 02/10] chore: Add README for UCM-iMX95 SOM support Added README.md for UCM-iMX95 SOM support. --- compulab/README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 compulab/README.md diff --git a/compulab/README.md b/compulab/README.md new file mode 100644 index 00000000..69e79e1e --- /dev/null +++ b/compulab/README.md @@ -0,0 +1,29 @@ +# UCM-iMX95 SOM support + +## Supported devices +- [UCM-iMX95 System-on-Module](https://www.compulab.com/products/som-evaluation-kits/ucm-imx95-evaluation-kit/) (**ucm-imx95**) – based on the NXP i.MX95 SoC (A0 silicon), with device-specific boot components(OEI, SM, ATF), U-Boot, and Linux kernel support, including a NixOS configuration example. + +## How to use +This overlay provides configuration and hardware support for the **CompuLab UCM-iMX95** platform, based on the **NXP i.MX95 A0 silicon**. It enables generating NixOS images suitable for booting via U-Boot, using the CompuLab UCM-iMX95 Evaluation Kit carrier board. + +### Boot flow +The boot flow for the UCM-iMX95 platform follows the standard NXP i.MX95 sequence: + +Boot ROM → OEI (initially in TCM, then DDR) → System Manager (SM) → ARM Trusted Firmware (ATF) → U-Boot → Linux kernel → NixOS userspace + +Boot ROM initializes the SoC and loads OEI, which runs in TCM to perform early setup, then configures DDR and loads the System Manager (SM). SM completes SoC initialization and passes control to ATF, which handles secure world setup and then transfers execution to U-Boot, eventually booting the Linux kernel and NixOS root filesystem. + +### Example NixOS configuration +```nix +{ nixos-hardware, }: { + system = "aarch64-linux"; + modules = [ + nixos-hardware.nixosModules.ucm-imx95 + ]; +} +``` + +### Notes +- The configuration includes device-tree, kernel, and bootloader components are optimized for the UCM-iMX95 SoM and evk. +- The generated NixOS image supports booting from SD card or eMMC, depending on the hardware configuration. +- The boot components (OEI in TCM/DDR, SM, ATF, U-Boot) follow the standard NXP release layout for i.MX95 platforms. From 11ea8b847772a94e335d7a17137d5fcf592f682e Mon Sep 17 00:00:00 2001 From: Govind Singh Date: Thu, 30 Oct 2025 16:08:04 +0400 Subject: [PATCH 03/10] ucm-imx95: firmware: fetch firmware files from NXP release Fetch AHAB container, M7 firmware, and DDR PHY firmware binaries from the NXP release packages. The derivation extracts the correct LPDDR5 PHY images and selects the appropriate AHAB container for A0 or B0 silicon revisions. Signed-off-by: Govind Singh --- compulab/ucm-imx95/bsp/ucm-imx95-atf.nix | 7 ++- compulab/ucm-imx95/bsp/ucm-imx95-boot.nix | 11 ++-- compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix | 59 +++++++++++++++---- compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix | 5 +- compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix | 5 +- compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix | 7 ++- compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix | 5 +- compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix | 7 ++- 8 files changed, 76 insertions(+), 30 deletions(-) diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix b/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix index fea07f79..d08a2c8e 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix @@ -1,6 +1,6 @@ { lib, - fetchgit, + fetchFromGitHub, stdenv, buildPackages, pkgsCross, @@ -16,8 +16,9 @@ stdenv.mkDerivation rec { platform = target-board; enableParallelBuilding = true; - src = fetchgit { - url = "https://github.com/nxp-imx/imx-atf.git"; + src = fetchFromGitHub { + owner = "nxp-imx"; + repo = "imx-atf"; rev = "28affcae957cb8194917b5246276630f9e6343e1"; sha256 = "sha256-a8F+Lf8pwML+tCwawS0N/mrSXWPmFhlUeOg0MCRK3VE="; }; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix index feedebaf..30087b21 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix @@ -11,8 +11,9 @@ let imx95-sm-fw = pkgs.callPackage ./ucm-imx95-sm-fw.nix { }; imx95-oei-ddr = pkgs.callPackage ./ucm-imx95-oei-ddr.nix { }; imx95-oei-tcm = pkgs.callPackage ./ucm-imx95-oei-tcm.nix { }; - src = pkgs.fetchgit { - url = "https://github.com/nxp-imx/imx-mkimage.git"; + src = pkgs.fetchFromGitHub { + owner = "nxp-imx"; + repo = "imx-mkimage"; #tag: lf-6.6.36 rev = "4622115cbc037f79039c4522faeced4aabea986b"; sha256 = "sha256-2gz0GxlB3jwy8PC6+cP3+MpyUzqE1vDTw8nuxK6vo3g="; @@ -68,9 +69,9 @@ in install -m 0644 ${imx95-sm-fw}/m33_image.bin ./iMX95/m33_image.bin install -m 0644 ${imx95-oei-ddr}/oei-m33-ddr.bin ./iMX95/oei-m33-ddr.bin install -m 0644 ${imx95-oei-tcm}/oei-m33-tcm.bin ./iMX95/oei-m33-tcm.bin - install -m 0644 ${imx95-firmware}/ucm-imx95/lpddr5* ./iMX95/ - install -m 0644 ${imx95-firmware}/ucm-imx95/mx95a0-ahab-container.img ./iMX95/ - install -m 0644 ${imx95-firmware}/ucm-imx95/m7_image.bin ./iMX95/ + install -m 0644 ${imx95-firmware}/ddr/lpddr5* ./iMX95/ + install -m 0644 ${imx95-firmware}/ahab/mx95a0-ahab-container.img ./iMX95/ + install -m 0644 ${imx95-firmware}/m7_image.bin ./iMX95/ make SOC=iMX95 REV=A0 OEI=YES LPDDR_TYPE=lpddr5 flash_all diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix index 18f3aa7c..84a81f34 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix @@ -1,24 +1,63 @@ -{ pkgs, ... }: +{ + pkgs, + silicon ? "A0", + ... +}: + with pkgs; stdenv.mkDerivation rec { - pname = "comms-sbc-firmware"; - version = "v0_6.36"; + pname = "nxp-firmware-imx95"; + version = "nxp-firmware-8.28-994fa14"; - src = builtins.fetchGit { - url = "git@github.com:tiiuae/comms-sbc-firmware.git"; - rev = "06394d6d983955734257fdc7f719e454a3ce07f4"; + m7Firmware = fetchurl { + url = "https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx95-m7-demo-25.09.00.bin"; + sha256 = "sha256-3nA6uka6WPtXH5aZhaaKHKRM0tJ0pxHQdPEupNic1Ks="; + }; + + ddrFirmware = fetchurl { + url = "https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.28-994fa14.bin"; + sha256 = "sha256-VZlvNA6HglaFoAzTCZARiQZuyVRe5gdzT5QsPN5Nadw="; + }; + + ahabFirmware = fetchurl { + url = "https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-ele-imx-2.0.2-89161a8.bin"; + sha256 = "sha256-LSnwpN42YroV9qfZBpcC1OrtQV2WoX8p1bEn8sb91jQ="; }; nativeBuildInputs = [ - pkgs.rsync - pkgs.coreutils + coreutils + bash ]; + dontUnpack = true; dontStrip = true; installPhase = '' mkdir -p $out - # copy everything except .git - rsync -a --exclude='.git' $src/ $out/ + export SILICON=${silicon} + + # M7 firmware + echo "Copying M7 firmware..." + cp ${m7Firmware} $out/m7_image.bin + + # DDR firmware + cp ${ddrFirmware} ./firmware-imx-8.28-994fa14.bin + chmod +x firmware-imx-8.28-994fa14.bin + ./firmware-imx-8.28-994fa14.bin --auto-accept + + mkdir -p $out/ddr + cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr5*v202409.bin $out/ddr/ + + # AHAB container + cp ${ahabFirmware} ./firmware-ele-imx-2.0.2-89161a8.bin + chmod +x firmware-ele-imx-2.0.2-89161a8.bin + ./firmware-ele-imx-2.0.2-89161a8.bin --auto-accept + + mkdir -p $out/ahab + if [ "$SILICON" = "A0" ]; then + cp firmware-ele-imx-2.0.2-89161a8/mx95a0-ahab-container.img $out/ahab/ + else + cp firmware-ele-imx-2.0.2-89161a8/mx95b0-ahab-container.img $out/ahab/ + fi ''; } diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix index d7b8868a..46562832 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix @@ -11,8 +11,9 @@ pkgs.stdenv.mkDerivation rec { pkgs.gcc-arm-embedded ]; - src = pkgs.fetchgit { - url = "https://github.com/nxp-imx/imx-oei.git"; + src = pkgs.fetchFromGitHub { + owner = "nxp-imx"; + repo = "imx-oei"; rev = "5fca9f47544d03c52ca371eadfffbfd2454e6925"; sha256 = "sha256-Sb6u1NlhJpDCOKBu3HqUb4BLEy0F8LYVnJE0tRSvzWc="; }; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix index e698990a..b75c43be 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix @@ -11,8 +11,9 @@ pkgs.stdenv.mkDerivation rec { pkgs.gcc-arm-embedded ]; - src = pkgs.fetchgit { - url = "https://github.com/nxp-imx/imx-oei.git"; + src = pkgs.fetchFromGitHub { + owner = "nxp-imx"; + repo = "imx-oei"; rev = "5fca9f47544d03c52ca371eadfffbfd2454e6925"; sha256 = "sha256-Sb6u1NlhJpDCOKBu3HqUb4BLEy0F8LYVnJE0tRSvzWc="; }; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix index bf6806a4..3b377464 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix @@ -24,10 +24,11 @@ pkgs.stdenv.mkDerivation rec { cryptography ]; - src = pkgs.fetchgit { - url = "https://github.com/nxp-imx/imx-optee-os.git"; + src = pkgs.fetchFromGitHub { + owner = "nxp-imx"; + repo = "imx-optee-os"; rev = "612bc5a642a4608d282abeee2349d86de996d7ee"; - sha256 = "sha256-A7p3KPijwipivs9Qw9Mr62RWwaMBGTz7J8WP5JYoSOs="; + sha256 = "sha256-l8GKkrlBs5kgw6jrzGLT9WAeTSDqo8XWZDFT2+Fisv4="; }; meta = with lib; { homepage = "https://github.com/nxp-imx/imx-optee-os"; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix index 2628f151..d28ccde1 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix @@ -17,8 +17,9 @@ pkgs.stdenv.mkDerivation rec { cryptography ]; - src = pkgs.fetchgit { - url = "https://github.com/nxp-imx/imx-sm.git"; + src = pkgs.fetchFromGitHub { + owner = "nxp-imx"; + repo = "imx-sm"; rev = "709deccd9338399eb39b5cf99a60eab4fa60d539"; sha256 = "sha256-02Cl+XhWGSFswspdBJ/4B/mBm4XTs/qKotx0BXMQpJk="; }; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix index 68434e57..0d545cc4 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix @@ -3,7 +3,7 @@ lib, bison, dtc, - fetchgit, + fetchFromGitHub, flex, gnutls, libuuid, @@ -15,8 +15,9 @@ efitools, }: let - ubsrc = fetchgit { - url = "https://github.com/compulab-yokneam/u-boot-compulab.git"; + ubsrc = fetchFromGitHub { + owner = "compulab-yokneam"; + repo = "u-boot-compulab"; # tag: lf_v2024.04 rev = "824401fe487d7d3cbcf251bd60270bd7fe8d21d0"; sha256 = "sha256-m+YW7+XF/jcNKfyb5533LXGyOWvStqY+MCczAdcNGZI="; From 8650454db6c8250a39c0bcfe00d65a1d8201bfb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Thu, 30 Oct 2025 14:48:42 +0100 Subject: [PATCH 04/10] ucm-imx95: fix firmware parameter collision and update imx-mkimage Fixed parameter name collision in ucm-imx95-firmware.nix where the 'silicon' parameter conflicted with the nixpkgs silicon package, causing the wrong AHAB container to be selected. Renamed to 'siliconRev'. Updated imx-mkimage from lf-6.6.36 to lf-6.6.52-2.2.1 to match the firmware version expectations (v202409 instead of v202311). --- compulab/ucm-imx95/bsp/ucm-imx95-boot.nix | 6 +++--- compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix index 30087b21..4f30ae55 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix @@ -14,9 +14,9 @@ let src = pkgs.fetchFromGitHub { owner = "nxp-imx"; repo = "imx-mkimage"; - #tag: lf-6.6.36 - rev = "4622115cbc037f79039c4522faeced4aabea986b"; - sha256 = "sha256-2gz0GxlB3jwy8PC6+cP3+MpyUzqE1vDTw8nuxK6vo3g="; + #tag: lf-6.6.52-2.2.1 + rev = "f620fb8ef7a04c8dbed8119880f5eeffe3e69746"; + sha256 = "sha256-JZlX122uZntCIISI1H3Hw+tnk+N/gBJpFFDaZoY8W3c="; }; shortRev = builtins.substring 0 8 src.rev; in diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix index 84a81f34..f5dd7b51 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix @@ -1,6 +1,6 @@ { pkgs, - silicon ? "A0", + siliconRev ? "A0", ... }: @@ -34,7 +34,7 @@ stdenv.mkDerivation rec { installPhase = '' mkdir -p $out - export SILICON=${silicon} + export SILICON=${siliconRev} # M7 firmware echo "Copying M7 firmware..." From 86d9291cc3fad8b47b51cd2b55b37f14369c70ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Thu, 30 Oct 2025 14:52:19 +0100 Subject: [PATCH 05/10] ucm-imx95: use --replace-fail for substituteInPlace --- compulab/ucm-imx95/bsp/ucm-imx95-boot.nix | 10 +++++----- compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix | 4 ++-- compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix | 4 ++-- compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix | 20 +++++++++---------- compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix | 6 +++--- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix index 4f30ae55..46c23a8c 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix @@ -28,15 +28,15 @@ in postPatch = '' substituteInPlace Makefile \ - --replace 'git rev-parse --short=8 HEAD' 'echo ${shortRev}' + --replace-fail 'git rev-parse --short=8 HEAD' 'echo ${shortRev}' substituteInPlace Makefile \ - --replace 'CC = gcc' 'CC = clang' + --replace-fail 'CC = gcc' 'CC = clang' substituteInPlace iMX95/soc.mak \ - --replace 'xxd' "${pkgs.vim.xxd}/bin/xxd" + --replace-fail 'xxd' "${pkgs.vim.xxd}/bin/xxd" substituteInPlace scripts/fspi_fcb_gen.sh \ - --replace 'xxd' "${pkgs.vim.xxd}/bin/xxd" + --replace-fail 'xxd' "${pkgs.vim.xxd}/bin/xxd" substituteInPlace scripts/fspi_packer.sh \ - --replace 'xxd' "${pkgs.vim.xxd}/bin/xxd" + --replace-fail 'xxd' "${pkgs.vim.xxd}/bin/xxd" patchShebangs scripts ''; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix index 46562832..82019f21 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix @@ -35,9 +35,9 @@ pkgs.stdenv.mkDerivation rec { postPatch = '' substituteInPlace oei/makefiles/build_info.mak \ - --replace "/bin/echo" "echo" + --replace-fail "/bin/echo" "echo" substituteInPlace Makefile \ - --replace "/bin/echo" "echo" + --replace-fail "/bin/echo" "echo" ''; makeFlags = [ diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix index b75c43be..331f1ae8 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix @@ -35,9 +35,9 @@ pkgs.stdenv.mkDerivation rec { postPatch = '' substituteInPlace oei/makefiles/build_info.mak \ - --replace "/bin/echo" "echo" + --replace-fail "/bin/echo" "echo" substituteInPlace Makefile \ - --replace "/bin/echo" "echo" + --replace-fail "/bin/echo" "echo" ''; makeFlags = [ diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix index 3b377464..7532a4f1 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix @@ -39,25 +39,25 @@ pkgs.stdenv.mkDerivation rec { postPatch = '' substituteInPlace scripts/arm32_sysreg.py \ - --replace '/usr/bin/env python3' '${python3}/bin/python' + --replace-fail '/usr/bin/env python3' '${python3}/bin/python' substituteInPlace scripts/gen_tee_bin.py \ - --replace '/usr/bin/env python3' '${python3}/bin/python' + --replace-fail '/usr/bin/env python3' '${python3}/bin/python' substituteInPlace scripts/pem_to_pub_c.py \ - --replace '/usr/bin/env python3' '${python3}/bin/python' + --replace-fail '/usr/bin/env python3' '${python3}/bin/python' substituteInPlace ta/pkcs11/scripts/verify-helpers.sh \ - --replace '/bin/bash' '${pkgs.bash}/bin/bash' + --replace-fail '/bin/bash' '${pkgs.bash}/bin/bash' substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy + --replace-fail "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump + --replace-fail "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm + --replace-fail "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf + --replace-fail "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar + --replace-fail "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp + --replace-fail "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp ''; makeFlags = [ diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix index d28ccde1..79dbe604 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix @@ -49,11 +49,11 @@ pkgs.stdenv.mkDerivation rec { postPatch = '' substituteInPlace sm/makefiles/gcc_cross.mak \ - --replace "\$(SM_CROSS_COMPILE)objcopy" ${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-objcopy + --replace-fail "\$(SM_CROSS_COMPILE)objcopy" ${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-objcopy substituteInPlace sm/makefiles/build_info.mak \ - --replace "/bin/echo" "echo" + --replace-fail "/bin/echo" "echo" substituteInPlace sm/makefiles/gcc_cross.mak \ - --replace 'SM_CROSS_COMPILE ?= $(TOOLS)/arm-gnu-toolchain-*-none-eabi/bin/arm-none-eabi-' \ + --replace-fail 'SM_CROSS_COMPILE ?= $(TOOLS)/arm-gnu-toolchain-*-none-eabi/bin/arm-none-eabi-' \ 'SM_CROSS_COMPILE ?= $(CROSS_COMPILE)' ''; From a2bc09823a3d6c9c2934d1dbd807ce8039a7d5d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Thu, 30 Oct 2025 15:17:53 +0100 Subject: [PATCH 06/10] ucm-imx95: various changes - Move openssl to nativeBuildInputs in ATF build for proper cross-compilation - Add explicit SILICON validation with clear error messages in firmware build - Fix fragile wildcard patterns in firmware DDR file copying - Replace mutable branch URLs with pinned commit hashes for patch stability - Add U-Boot config merge step (make olddefconfig) after extra config - Fix cross-compilation toolchain coherence (cpp in optee-os) - Standardize license format (single value instead of single-element list) - Update maintainer references with inline name/email format - Fix typos and grammar in documentation and comments --- compulab/README.md | 2 +- compulab/ucm-imx95/bsp/ucm-imx95-atf.nix | 16 +++++++++----- compulab/ucm-imx95/bsp/ucm-imx95-boot.nix | 3 +-- compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix | 13 +++++++++-- compulab/ucm-imx95/bsp/ucm-imx95-linux.nix | 11 +++++++--- compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix | 18 ++++++++++----- compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix | 18 ++++++++++----- compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix | 11 +++++++--- compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix | 22 +++++++++++++------ compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix | 1 + 10 files changed, 82 insertions(+), 33 deletions(-) diff --git a/compulab/README.md b/compulab/README.md index 69e79e1e..aa3c253a 100644 --- a/compulab/README.md +++ b/compulab/README.md @@ -24,6 +24,6 @@ Boot ROM initializes the SoC and loads OEI, which runs in TCM to perform early s ``` ### Notes -- The configuration includes device-tree, kernel, and bootloader components are optimized for the UCM-iMX95 SoM and evk. +- The configuration, including device-tree, kernel, and bootloader components, is optimized for the UCM-iMX95 SoM and EVK. - The generated NixOS image supports booting from SD card or eMMC, depending on the hardware configuration. - The boot components (OEI in TCM/DDR, SM, ATF, U-Boot) follow the standard NXP release layout for i.MX95 platforms. diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix b/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix index d08a2c8e..cc853c83 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-atf.nix @@ -25,9 +25,10 @@ stdenv.mkDerivation rec { # Compiler dependencies depsBuildBuild = [ buildPackages.stdenv.cc ]; - nativeBuildInputs = [ pkgsCross.aarch64-embedded.stdenv.cc ]; - - buildInputs = [ openssl ]; + nativeBuildInputs = [ + pkgsCross.aarch64-embedded.stdenv.cc + openssl + ]; makeFlags = [ "HOSTCC=$(CC_FOR_BUILD)" @@ -51,8 +52,13 @@ stdenv.mkDerivation rec { meta = with lib; { homepage = "https://github.com/nxp-imx/imx-atf"; description = "Reference implementation of secure world software for ARMv8-A"; - license = [ licenses.bsd3 ]; - maintainers = with maintainers; [ govindsi ]; + license = licenses.bsd3; + maintainers = [ + { + name = "Govind Singh"; + email = "govind.singh@tii.ae"; + } + ]; platforms = [ "aarch64-linux" ]; }; } diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix index 46c23a8c..3554b73b 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix @@ -24,7 +24,7 @@ in imx95-boot = pkgs.stdenv.mkDerivation rec { inherit src; name = "imx95-mkimage"; - version = "lf-6.6.36"; + version = "lf-6.6.52-2.2.1"; postPatch = '' substituteInPlace Makefile \ @@ -47,7 +47,6 @@ in ]; buildInputs = [ - git glibc.static zlib zlib.static diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix index f5dd7b51..3de82670 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix @@ -46,7 +46,13 @@ stdenv.mkDerivation rec { ./firmware-imx-8.28-994fa14.bin --auto-accept mkdir -p $out/ddr - cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr5*v202409.bin $out/ddr/ + # Resolve wildcard and verify at least one file matches + lpddr5_files=(firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr5*v202409.bin) + if [ ''${#lpddr5_files[@]} -eq 0 ]; then + echo "ERROR: No lpddr5*v202409.bin file found in firmware/ddr/synopsys/" >&2 + exit 1 + fi + cp "''${lpddr5_files[@]}" $out/ddr/ # AHAB container cp ${ahabFirmware} ./firmware-ele-imx-2.0.2-89161a8.bin @@ -56,8 +62,11 @@ stdenv.mkDerivation rec { mkdir -p $out/ahab if [ "$SILICON" = "A0" ]; then cp firmware-ele-imx-2.0.2-89161a8/mx95a0-ahab-container.img $out/ahab/ - else + elif [ "$SILICON" = "B0" ]; then cp firmware-ele-imx-2.0.2-89161a8/mx95b0-ahab-container.img $out/ahab/ + else + echo "ERROR: Invalid SILICON value '$SILICON'. Must be 'A0' or 'B0'." >&2 + exit 1 fi ''; } diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix b/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix index 8aa94c22..76520a8c 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix @@ -12,7 +12,7 @@ buildLinux ( defconfig = "compulab-mx95_defconfig"; # https://github.com/NixOS/nixpkgs/pull/366004 - # introduced a breaking change that if a module is declared but it is not being used it will faill. + # introduced a breaking change that if a module is declared but it is not being used it will fail. ignoreConfigErrors = true; kernelPatches = [ @@ -53,8 +53,13 @@ buildLinux ( }; meta = with lib; { homepage = "https://github.com/compulab-yokneam/linux-compulab"; - license = [ licenses.gpl2Only ]; - maintainers = with maintainers; [ govindsi ]; + license = licenses.gpl2Only; + maintainers = [ + { + name = "Govind Singh"; + email = "govind.singh@tii.ae"; + } + ]; platforms = [ "aarch64-linux" ]; }; } diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix index 82019f21..612d0169 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix @@ -2,6 +2,9 @@ lib, pkgs, }: +let + metaBspImx95Rev = "5f4c7b5db846fa3a75055054e32215089d15a7b7"; # scarthgap +in pkgs.stdenv.mkDerivation rec { pname = "imx95-imx-oei"; version = "lf-6.6.36-2.1.0"; @@ -20,15 +23,15 @@ pkgs.stdenv.mkDerivation rec { patches = [ (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; sha256 = "sha256-6ZpBOXw2aIhD2i9Wx368xfHq6NvdZghWHU9u8+gRTj8="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; sha256 = "sha256-WZ/vYaTC2iKIC+jnHtnPriCxK9gjRsOv2Uy13Ye4698="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; sha256 = "sha256-yyierv2USZlM8Cuxf4FDj4+UtILvJQH9BJSj+fmayL8="; }) ]; @@ -57,8 +60,13 @@ pkgs.stdenv.mkDerivation rec { meta = with lib; { homepage = "https://github.com/nxp-imx/imx-oei"; description = "Optional Executable Image assembler for i.MX95 processors"; - license = [ licenses.bsd3 ]; - maintainers = with maintainers; [ govindsi ]; + license = licenses.bsd3; + maintainers = [ + { + name = "Govind Singh"; + email = "govind.singh@tii.ae"; + } + ]; platforms = [ "aarch64-linux" ]; }; } diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix index 331f1ae8..9960cd50 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix @@ -2,6 +2,9 @@ lib, pkgs, }: +let + metaBspImx95Rev = "5f4c7b5db846fa3a75055054e32215089d15a7b7"; # scarthgap +in pkgs.stdenv.mkDerivation rec { pname = "imx95-imx-oei-tcm"; version = "lf-6.6.36-2.1.0"; @@ -20,15 +23,15 @@ pkgs.stdenv.mkDerivation rec { patches = [ (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; sha256 = "sha256-6ZpBOXw2aIhD2i9Wx368xfHq6NvdZghWHU9u8+gRTj8="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; sha256 = "sha256-WZ/vYaTC2iKIC+jnHtnPriCxK9gjRsOv2Uy13Ye4698="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; sha256 = "sha256-yyierv2USZlM8Cuxf4FDj4+UtILvJQH9BJSj+fmayL8="; }) ]; @@ -57,8 +60,13 @@ pkgs.stdenv.mkDerivation rec { meta = with lib; { homepage = "https://github.com/nxp-imx/imx-oei"; description = "Optional Executable Image assembler for i.MX95 processors"; - license = [ licenses.bsd3 ]; - maintainers = with maintainers; [ govindsi ]; + license = licenses.bsd3; + maintainers = [ + { + name = "Govind Singh"; + email = "govind.singh@tii.ae"; + } + ]; platforms = [ "aarch64-linux" ]; }; } diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix index 7532a4f1..60ce490b 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix @@ -6,7 +6,7 @@ let inherit (pkgs.buildPackages) python3; toolchain = pkgs.gccStdenv.cc; binutils = pkgs.gccStdenv.cc.bintools.bintools_bin; - cpp = pkgs.gcc; + cpp = pkgs.gccStdenv.cc; in pkgs.stdenv.mkDerivation rec { pname = "imx95-optee-os"; @@ -32,8 +32,13 @@ pkgs.stdenv.mkDerivation rec { }; meta = with lib; { homepage = "https://github.com/nxp-imx/imx-optee-os"; - license = [ licenses.bsd2 ]; - maintainers = with maintainers; [ govindsi ]; + license = licenses.bsd2; + maintainers = [ + { + name = "Govind Singh"; + email = "govind.singh@tii.ae"; + } + ]; platforms = [ "aarch64-linux" ]; }; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix index 79dbe604..c4f44831 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix @@ -2,6 +2,9 @@ lib, pkgs, }: +let + metaBspImx95Rev = "224eed17cddc573061150e9d2ce6f9acb39ea50e"; # scarthgap-6.6.36-EVAL-UCM-iMX95-1.0 +in pkgs.stdenv.mkDerivation rec { pname = "imx95-sm-fw"; version = "lf-6.6.36-2.1.0"; @@ -26,23 +29,23 @@ pkgs.stdenv.mkDerivation rec { patches = [ (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0001-Add-mcimx95cust-board.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0001-Add-mcimx95cust-board.patch"; sha256 = "sha256-zvZ4bNew+yRPmaZQMrAH087KpCLRqz6zdElfe72Dtuc="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0002-Fix-null-pionter-except.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0002-Fix-null-pionter-except.patch"; sha256 = "sha256-q72VEvJqm2CmOxdWMqGibgXS5lY08mC4srEcy00QdrE="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0001-update-for-yocto-6.6.36-compatibility.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0001-update-for-yocto-6.6.36-compatibility.patch"; sha256 = "sha256-JzHqDiD/ZOu6VQQI0JxY17RQ3bA2t1aP3O1sjLPguWs="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0003-sm-Disable-GPIO1-10-interrupt.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0003-sm-Disable-GPIO1-10-interrupt.patch"; sha256 = "sha256-dhcDv7Uq856+MBonczMPznk+tuqUFxTcHiKLX+myCVA="; }) (pkgs.fetchpatch { - url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/scarthgap-6.6.36-EVAL-UCM-iMX95-1.0/recipes-bsp/imx-system-manager/imx-system-manager/0004-configs-mx95cust-change-LPTPM1-ownership.patch"; + url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0004-configs-mx95cust-change-LPTPM1-ownership.patch"; sha256 = "sha256-NcLu6+zXpiSz1bHKW14Zuf6F/4pzKsekb+zaRtKjSTY="; }) ]; @@ -73,8 +76,13 @@ pkgs.stdenv.mkDerivation rec { meta = with lib; { homepage = "https://github.com/nxp-imx/imx-sm"; description = "System Manager firmware for i.MX processors"; - license = [ licenses.bsd3 ]; - maintainers = with maintainers; [ govindsi ]; + license = licenses.bsd3; + maintainers = [ + { + name = "Govind Singh"; + email = "govind.singh@tii.ae"; + } + ]; platforms = [ "aarch64-linux" ]; }; } diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix index 0d545cc4..81f2c1fc 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-uboot.nix @@ -74,6 +74,7 @@ stdenv.mkDerivation { make ucm-imx95_defconfig cat $extraConfigPath >> .config + make olddefconfig runHook postConfigure ''; From e598a4ca2ff00ee199bbf277da380bc4459687a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 4 Nov 2025 12:28:52 +0100 Subject: [PATCH 07/10] nxp: patch toolchain more consistent between different targets --- compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix | 4 ++-- nxp/common/bsp/imx-optee-builder.nix | 14 ++++++------ nxp/common/bsp/imx-optee-os.nix | 22 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix index 60ce490b..81b56edb 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix @@ -8,7 +8,7 @@ let binutils = pkgs.gccStdenv.cc.bintools.bintools_bin; cpp = pkgs.gccStdenv.cc; in -pkgs.stdenv.mkDerivation rec { +pkgs.stdenv.mkDerivation { pname = "imx95-optee-os"; version = "lf-6.6.36_2.1.0"; @@ -62,7 +62,7 @@ pkgs.stdenv.mkDerivation rec { substituteInPlace mk/gcc.mk \ --replace-fail "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar substituteInPlace mk/gcc.mk \ - --replace-fail "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp + --replace-fail "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/${toolchain.targetPrefix}cpp ''; makeFlags = [ diff --git a/nxp/common/bsp/imx-optee-builder.nix b/nxp/common/bsp/imx-optee-builder.nix index 7d506fbe..6b6c229c 100644 --- a/nxp/common/bsp/imx-optee-builder.nix +++ b/nxp/common/bsp/imx-optee-builder.nix @@ -15,7 +15,7 @@ let inherit (pkgs.buildPackages) python3; toolchain = pkgs.gccStdenv.cc; binutils = pkgs.gccStdenv.cc.bintools.bintools_bin; - cpp = pkgs.gcc; + cpp = pkgs.gccStdenv.gcc; # Determine PLATFORM and PLATFORM_FLAVOR from platformFlavor # Format can be either "imx-mx93evk" (full platform string) or "mx8mpevk" (just flavor, platform is "imx") @@ -48,17 +48,17 @@ pkgs.stdenv.mkDerivation { # Patch toolchain paths in mk/gcc.mk substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy + --replace-fail "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump + --replace-fail "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm + --replace-fail "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf + --replace-fail "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar + --replace-fail "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp + --replace-fail "\$(CROSS_COMPILE_\$(sm))cpp"${cpp}/bin/${toolchain.targetPrefix}cpp ''; makeFlags = [ diff --git a/nxp/common/bsp/imx-optee-os.nix b/nxp/common/bsp/imx-optee-os.nix index 839d3dcd..f920e1d7 100644 --- a/nxp/common/bsp/imx-optee-os.nix +++ b/nxp/common/bsp/imx-optee-os.nix @@ -17,7 +17,7 @@ let cpp = pkgs.buildPackages.gcc; in -pkgs.stdenv.mkDerivation rec { +pkgs.stdenv.mkDerivation { pname = "imx-optee-os"; version = "5.15.32_2.0.0"; @@ -41,25 +41,25 @@ pkgs.stdenv.mkDerivation rec { postPatch = '' substituteInPlace scripts/arm32_sysreg.py \ - --replace '/usr/bin/env python3' '${python3}/bin/python' + --replace-fail '/usr/bin/env python3' '${python3}/bin/python' substituteInPlace scripts/gen_tee_bin.py \ - --replace '/usr/bin/env python3' '${python3}/bin/python' + --replace-fail '/usr/bin/env python3' '${python3}/bin/python' substituteInPlace scripts/pem_to_pub_c.py \ - --replace '/usr/bin/env python3' '${python3}/bin/python' + --replace-fail '/usr/bin/env python3' '${python3}/bin/python' substituteInPlace ta/pkcs11/scripts/verify-helpers.sh \ - --replace '/bin/bash' '${pkgs.bash}/bin/bash' + --replace-fail '/bin/bash' '${pkgs.bash}/bin/bash' substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy + --replace-fail "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump + --replace-fail "\$(CROSS_COMPILE_\$(sm))objdump" ${binutils}/bin/${toolchain.targetPrefix}objdump substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm + --replace-fail "\$(CROSS_COMPILE_\$(sm))nm" ${binutils}/bin/${toolchain.targetPrefix}nm substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf + --replace-fail "\$(CROSS_COMPILE_\$(sm))readelf" ${binutils}/bin/${toolchain.targetPrefix}readelf substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar + --replace-fail "\$(CROSS_COMPILE_\$(sm))ar" ${binutils}/bin/${toolchain.targetPrefix}ar substituteInPlace mk/gcc.mk \ - --replace "\$(CROSS_COMPILE_\$(sm))cpp" ${cpp}/bin/cpp + --replace-fail "\$(CROSS_COMPILE_\$(sm))cpp" "${cpp}/bin/${toolchain.targetPrefix}cpp" ''; makeFlags = [ From f2e49f279c3f7e95a64cae6397b14ed9254874e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 4 Nov 2025 12:34:11 +0100 Subject: [PATCH 08/10] optee-builder: use stdenv as opposed to gccStdenv should be the same in our use case, but stdenv is more standard. --- compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix | 6 +++--- nxp/common/bsp/imx-optee-builder.nix | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix index 81b56edb..6b66cf6c 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix @@ -4,9 +4,9 @@ }: let inherit (pkgs.buildPackages) python3; - toolchain = pkgs.gccStdenv.cc; - binutils = pkgs.gccStdenv.cc.bintools.bintools_bin; - cpp = pkgs.gccStdenv.cc; + toolchain = pkgs.stdenv.cc; + binutils = pkgs.stdenv.cc.bintools.bintools_bin; + cpp = pkgs.stdenv.cc; in pkgs.stdenv.mkDerivation { pname = "imx95-optee-os"; diff --git a/nxp/common/bsp/imx-optee-builder.nix b/nxp/common/bsp/imx-optee-builder.nix index 6b6c229c..ffd1e787 100644 --- a/nxp/common/bsp/imx-optee-builder.nix +++ b/nxp/common/bsp/imx-optee-builder.nix @@ -13,9 +13,9 @@ }: let inherit (pkgs.buildPackages) python3; - toolchain = pkgs.gccStdenv.cc; - binutils = pkgs.gccStdenv.cc.bintools.bintools_bin; - cpp = pkgs.gccStdenv.gcc; + toolchain = pkgs.stdenv.cc; + binutils = pkgs.stdenv.cc.bintools.bintools_bin; + cpp = pkgs.stdenv.gcc; # Determine PLATFORM and PLATFORM_FLAVOR from platformFlavor # Format can be either "imx-mx93evk" (full platform string) or "mx8mpevk" (just flavor, platform is "imx") From fad92f5f575cd056d4b1558d0e3c5da9098e8a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 4 Nov 2025 12:48:26 +0100 Subject: [PATCH 09/10] ucm-imx95: expand pkgs in callPackage for overrides --- compulab/ucm-imx95/bsp/ucm-imx95-boot.nix | 35 +++++++++++-------- compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix | 6 ++-- compulab/ucm-imx95/bsp/ucm-imx95-linux.nix | 8 +++-- compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix | 24 +++++++------ compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix | 24 +++++++------ compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix | 19 +++++----- compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix | 32 +++++++++-------- compulab/ucm-imx95/overlay.nix | 2 +- 8 files changed, 89 insertions(+), 61 deletions(-) diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix index 3554b73b..e49ff90e 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-boot.nix @@ -1,17 +1,24 @@ { - pkgs, + callPackage, + fetchFromGitHub, + stdenv, + clang, + git, + dtc, + glibc, + zlib, + vim, }: -with pkgs; let - imx95-atf = pkgs.callPackage ./ucm-imx95-atf.nix { }; - imx95-firmware = pkgs.callPackage ./ucm-imx95-firmware.nix { }; - imx95-uboot = pkgs.callPackage ./ucm-imx95-uboot.nix { }; - imx95-optee-os = pkgs.callPackage ./ucm-imx95-optee-os.nix { }; - imx95-sm-fw = pkgs.callPackage ./ucm-imx95-sm-fw.nix { }; - imx95-oei-ddr = pkgs.callPackage ./ucm-imx95-oei-ddr.nix { }; - imx95-oei-tcm = pkgs.callPackage ./ucm-imx95-oei-tcm.nix { }; - src = pkgs.fetchFromGitHub { + imx95-atf = callPackage ./ucm-imx95-atf.nix { }; + imx95-firmware = callPackage ./ucm-imx95-firmware.nix { }; + imx95-uboot = callPackage ./ucm-imx95-uboot.nix { }; + imx95-optee-os = callPackage ./ucm-imx95-optee-os.nix { }; + imx95-sm-fw = callPackage ./ucm-imx95-sm-fw.nix { }; + imx95-oei-ddr = callPackage ./ucm-imx95-oei-ddr.nix { }; + imx95-oei-tcm = callPackage ./ucm-imx95-oei-tcm.nix { }; + src = fetchFromGitHub { owner = "nxp-imx"; repo = "imx-mkimage"; #tag: lf-6.6.52-2.2.1 @@ -21,7 +28,7 @@ let shortRev = builtins.substring 0 8 src.rev; in { - imx95-boot = pkgs.stdenv.mkDerivation rec { + imx95-boot = stdenv.mkDerivation rec { inherit src; name = "imx95-mkimage"; version = "lf-6.6.52-2.2.1"; @@ -32,11 +39,11 @@ in substituteInPlace Makefile \ --replace-fail 'CC = gcc' 'CC = clang' substituteInPlace iMX95/soc.mak \ - --replace-fail 'xxd' "${pkgs.vim.xxd}/bin/xxd" + --replace-fail 'xxd' "${vim.xxd}/bin/xxd" substituteInPlace scripts/fspi_fcb_gen.sh \ - --replace-fail 'xxd' "${pkgs.vim.xxd}/bin/xxd" + --replace-fail 'xxd' "${vim.xxd}/bin/xxd" substituteInPlace scripts/fspi_packer.sh \ - --replace-fail 'xxd' "${pkgs.vim.xxd}/bin/xxd" + --replace-fail 'xxd' "${vim.xxd}/bin/xxd" patchShebangs scripts ''; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix index 3de82670..e0fd5705 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-firmware.nix @@ -1,10 +1,12 @@ { - pkgs, + stdenv, + fetchurl, + coreutils, + bash, siliconRev ? "A0", ... }: -with pkgs; stdenv.mkDerivation rec { pname = "nxp-firmware-imx95"; version = "nxp-firmware-8.28-994fa14"; diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix b/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix index 76520a8c..db613d36 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-linux.nix @@ -1,5 +1,9 @@ -{ lib, pkgs, ... }@args: -with pkgs; +{ + lib, + buildLinux, + fetchFromGitHub, + ... +}@args: buildLinux ( args // rec { diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix index 612d0169..e295f1bf 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-ddr.nix @@ -1,20 +1,24 @@ { lib, - pkgs, + stdenv, + buildPackages, + gcc-arm-embedded, + fetchFromGitHub, + fetchpatch, }: let metaBspImx95Rev = "5f4c7b5db846fa3a75055054e32215089d15a7b7"; # scarthgap in -pkgs.stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "imx95-imx-oei"; version = "lf-6.6.36-2.1.0"; nativeBuildInputs = [ - pkgs.buildPackages.python3 - pkgs.gcc-arm-embedded + buildPackages.python3 + gcc-arm-embedded ]; - src = pkgs.fetchFromGitHub { + src = fetchFromGitHub { owner = "nxp-imx"; repo = "imx-oei"; rev = "5fca9f47544d03c52ca371eadfffbfd2454e6925"; @@ -22,15 +26,15 @@ pkgs.stdenv.mkDerivation rec { }; patches = [ - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; sha256 = "sha256-6ZpBOXw2aIhD2i9Wx368xfHq6NvdZghWHU9u8+gRTj8="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; sha256 = "sha256-WZ/vYaTC2iKIC+jnHtnPriCxK9gjRsOv2Uy13Ye4698="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; sha256 = "sha256-yyierv2USZlM8Cuxf4FDj4+UtILvJQH9BJSj+fmayL8="; }) @@ -45,8 +49,8 @@ pkgs.stdenv.mkDerivation rec { makeFlags = [ "board=mx95lp5" - "CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" - "OEI_CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "CROSS_COMPILE=${gcc-arm-embedded}/bin/arm-none-eabi-" + "OEI_CROSS_COMPILE=${gcc-arm-embedded}/bin/arm-none-eabi-" "ARCH=arm" "DDR_CONFIG=lpddr5_timing" "oei=ddr" diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix index 9960cd50..a5d67da4 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-oei-tcm.nix @@ -1,20 +1,24 @@ { lib, - pkgs, + stdenv, + buildPackages, + gcc-arm-embedded, + fetchFromGitHub, + fetchpatch, }: let metaBspImx95Rev = "5f4c7b5db846fa3a75055054e32215089d15a7b7"; # scarthgap in -pkgs.stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "imx95-imx-oei-tcm"; version = "lf-6.6.36-2.1.0"; nativeBuildInputs = [ - pkgs.buildPackages.python3 - pkgs.gcc-arm-embedded + buildPackages.python3 + gcc-arm-embedded ]; - src = pkgs.fetchFromGitHub { + src = fetchFromGitHub { owner = "nxp-imx"; repo = "imx-oei"; rev = "5fca9f47544d03c52ca371eadfffbfd2454e6925"; @@ -22,15 +26,15 @@ pkgs.stdenv.mkDerivation rec { }; patches = [ - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0001-Add-CompuLab-lpddr5_timing.c.patch"; sha256 = "sha256-6ZpBOXw2aIhD2i9Wx368xfHq6NvdZghWHU9u8+gRTj8="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0002-board-mx95lp5-Fix-default-DDR_CONFIG-timing-name.patch"; sha256 = "sha256-WZ/vYaTC2iKIC+jnHtnPriCxK9gjRsOv2Uy13Ye4698="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-oei/imx-oei/0003-Add-CompuLab-lpddr5_timing_4g.c.patch"; sha256 = "sha256-yyierv2USZlM8Cuxf4FDj4+UtILvJQH9BJSj+fmayL8="; }) @@ -45,8 +49,8 @@ pkgs.stdenv.mkDerivation rec { makeFlags = [ "board=mx95lp5" - "CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" - "OEI_CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "CROSS_COMPILE=${gcc-arm-embedded}/bin/arm-none-eabi-" + "OEI_CROSS_COMPILE=${gcc-arm-embedded}/bin/arm-none-eabi-" "ARCH=arm" "DDR_CONFIG=lpddr5_timing" "oei=tcm" diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix index 6b66cf6c..9471e365 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-optee-os.nix @@ -1,14 +1,17 @@ { lib, - pkgs, + stdenv, + fetchFromGitHub, + buildPackages, + bash, }: let - inherit (pkgs.buildPackages) python3; - toolchain = pkgs.stdenv.cc; - binutils = pkgs.stdenv.cc.bintools.bintools_bin; - cpp = pkgs.stdenv.cc; + inherit (buildPackages) python3; + toolchain = stdenv.cc; + binutils = stdenv.cc.bintools.bintools_bin; + cpp = stdenv.cc; in -pkgs.stdenv.mkDerivation { +stdenv.mkDerivation { pname = "imx95-optee-os"; version = "lf-6.6.36_2.1.0"; @@ -24,7 +27,7 @@ pkgs.stdenv.mkDerivation { cryptography ]; - src = pkgs.fetchFromGitHub { + src = fetchFromGitHub { owner = "nxp-imx"; repo = "imx-optee-os"; rev = "612bc5a642a4608d282abeee2349d86de996d7ee"; @@ -50,7 +53,7 @@ pkgs.stdenv.mkDerivation { substituteInPlace scripts/pem_to_pub_c.py \ --replace-fail '/usr/bin/env python3' '${python3}/bin/python' substituteInPlace ta/pkcs11/scripts/verify-helpers.sh \ - --replace-fail '/bin/bash' '${pkgs.bash}/bin/bash' + --replace-fail '/bin/bash' '${bash}/bin/bash' substituteInPlace mk/gcc.mk \ --replace-fail "\$(CROSS_COMPILE_\$(sm))objcopy" ${binutils}/bin/${toolchain.targetPrefix}objcopy substituteInPlace mk/gcc.mk \ diff --git a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix index c4f44831..8baf5a43 100644 --- a/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix +++ b/compulab/ucm-imx95/bsp/ucm-imx95-sm-fw.nix @@ -1,26 +1,30 @@ { lib, - pkgs, + stdenv, + buildPackages, + gcc-arm-embedded, + fetchFromGitHub, + fetchpatch, }: let metaBspImx95Rev = "224eed17cddc573061150e9d2ce6f9acb39ea50e"; # scarthgap-6.6.36-EVAL-UCM-iMX95-1.0 in -pkgs.stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "imx95-sm-fw"; version = "lf-6.6.36-2.1.0"; nativeBuildInputs = [ - pkgs.buildPackages.python3 - pkgs.gcc-arm-embedded + buildPackages.python3 + gcc-arm-embedded ]; - propagatedBuildInputs = with pkgs.buildPackages.python3.pkgs; [ + propagatedBuildInputs = with buildPackages.python3.pkgs; [ pycryptodomex pyelftools cryptography ]; - src = pkgs.fetchFromGitHub { + src = fetchFromGitHub { owner = "nxp-imx"; repo = "imx-sm"; rev = "709deccd9338399eb39b5cf99a60eab4fa60d539"; @@ -28,23 +32,23 @@ pkgs.stdenv.mkDerivation rec { }; patches = [ - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0001-Add-mcimx95cust-board.patch"; sha256 = "sha256-zvZ4bNew+yRPmaZQMrAH087KpCLRqz6zdElfe72Dtuc="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0002-Fix-null-pionter-except.patch"; sha256 = "sha256-q72VEvJqm2CmOxdWMqGibgXS5lY08mC4srEcy00QdrE="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0001-update-for-yocto-6.6.36-compatibility.patch"; sha256 = "sha256-JzHqDiD/ZOu6VQQI0JxY17RQ3bA2t1aP3O1sjLPguWs="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0003-sm-Disable-GPIO1-10-interrupt.patch"; sha256 = "sha256-dhcDv7Uq856+MBonczMPznk+tuqUFxTcHiKLX+myCVA="; }) - (pkgs.fetchpatch { + (fetchpatch { url = "https://raw.githubusercontent.com/compulab-yokneam/meta-bsp-imx95/${metaBspImx95Rev}/recipes-bsp/imx-system-manager/imx-system-manager/0004-configs-mx95cust-change-LPTPM1-ownership.patch"; sha256 = "sha256-NcLu6+zXpiSz1bHKW14Zuf6F/4pzKsekb+zaRtKjSTY="; }) @@ -52,7 +56,7 @@ pkgs.stdenv.mkDerivation rec { postPatch = '' substituteInPlace sm/makefiles/gcc_cross.mak \ - --replace-fail "\$(SM_CROSS_COMPILE)objcopy" ${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-objcopy + --replace-fail "\$(SM_CROSS_COMPILE)objcopy" ${gcc-arm-embedded}/bin/arm-none-eabi-objcopy substituteInPlace sm/makefiles/build_info.mak \ --replace-fail "/bin/echo" "echo" substituteInPlace sm/makefiles/gcc_cross.mak \ @@ -63,8 +67,8 @@ pkgs.stdenv.mkDerivation rec { makeFlags = [ "config=mx95cust" "M=2" - "CROSS_COMPILE=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" - "CROSS_COMPILE64=${pkgs.gcc-arm-embedded}/bin/arm-none-eabi-" + "CROSS_COMPILE=${gcc-arm-embedded}/bin/arm-none-eabi-" + "CROSS_COMPILE64=${gcc-arm-embedded}/bin/arm-none-eabi-" "ARCH=arm" ]; diff --git a/compulab/ucm-imx95/overlay.nix b/compulab/ucm-imx95/overlay.nix index 942a3711..516f9e79 100644 --- a/compulab/ucm-imx95/overlay.nix +++ b/compulab/ucm-imx95/overlay.nix @@ -1,3 +1,3 @@ final: _prev: { - inherit (final.callPackage ./bsp/ucm-imx95-boot.nix { pkgs = final; }) imx95-boot; + inherit (final.callPackage ./bsp/ucm-imx95-boot.nix { }) imx95-boot; } From 5ad68c5dffcee747d960b227570e7b365054d18e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 4 Nov 2025 12:48:34 +0100 Subject: [PATCH 10/10] tests: add all aarch64 NXP boards to aarch64Systems list --- tests/nixos-tests.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/nixos-tests.nix b/tests/nixos-tests.nix index 0fcf6ed9..f4c2b423 100644 --- a/tests/nixos-tests.nix +++ b/tests/nixos-tests.nix @@ -21,6 +21,11 @@ let "raspberry-pi-3" "raspberry-pi-4" "raspberry-pi-5" + "nxp-imx8mp-evk" + "nxp-imx8mq-evk" + "nxp-imx8qm-mek" + "nxp-imx93-evk" + "ucm-imx95" ]; matchArch =