From 11ea8b847772a94e335d7a17137d5fcf592f682e Mon Sep 17 00:00:00 2001 From: Govind Singh Date: Thu, 30 Oct 2025 16:08:04 +0400 Subject: [PATCH] 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 fea07f7..d08a2c8 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 feedeba..30087b2 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 18f3aa7..84a81f3 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 d7b8868..4656283 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 e698990..b75c43b 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 bf6806a..3b37746 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 2628f15..d28ccde 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 68434e5..0d545cc 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=";