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 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=";