{
  pkgs ,
  targetBoard,
}:

let

  imxurl = "https://www.nxp.com/lgfiles/NMG/MAD/YOCTO";

  fwHdmiVersion = "8.16";
  fwScVersion = "1.13.0";
  fwSecoVersion = "3.8.6";

  firmwareHdmi = pkgs.fetchurl rec {
    url = "${imxurl}/firmware-imx-${fwHdmiVersion}.bin";
    sha256 = "Bun+uxE5z7zvxnlRwI0vjowKFqY4CgKyiGjbZuilER0=";
    executable = true;
  };

  firmwareSc = pkgs.fetchurl rec {
    url = "${imxurl}/imx-sc-firmware-${fwScVersion}.bin";
    sha256 = "YUaBIVCeOOTvifhiEIbKgyGsLZYufv5rs2isdSrw4dc=";
    executable = true;
  };

  firmwareSeco = pkgs.fetchurl rec {
    url = "${imxurl}/imx-seco-${fwSecoVersion}.bin";
    sha256 = "eoG19xn283fsP2jP49hD4dIBRwEQqFQ9k3yVWOM8uKQ=";
    executable = true;
  };

in
pkgs.stdenv.mkDerivation rec {

  pname = "imx-firmware";
  version = "5.15.X_1.0.0-Yocto";

  dontPatch = true;
  dontConfigure = true;
  dontBuild = true;

  sourceRoot = ".";

  unpackPhase = ''
    ${firmwareHdmi} --auto-accept --force
    ${firmwareSc} --auto-accept --force
    ${firmwareSeco} --auto-accept --force
  '';

  filesToInstall = [
    "firmware-imx-${fwHdmiVersion}/firmware/hdmi/cadence/dpfw.bin"
    "firmware-imx-${fwHdmiVersion}/firmware/hdmi/cadence/hdmi?xfw.bin"
  ] ++ pkgs.lib.optional ( targetBoard == "imx8qm" )
    ("imx-sc-firmware-${fwScVersion}/mx8qm-mek-scfw-tcm.bin" + " " +
    "imx-seco-${fwSecoVersion}/firmware/seco/mx8qmb0-ahab-container.img")
    ++ pkgs.lib.optional ( targetBoard == "imx8qxp" )
    ("imx-sc-firmware-${fwScVersion}/mx8qx-mek-scfw-tcm.bin" + " " +
    "imx-seco-${fwSecoVersion}/firmware/seco/mx8qxc0-ahab-container.img");

  installPhase = ''
    mkdir -p $out
    cp ${pkgs.lib.concatStringsSep " " filesToInstall} $out
  '';

  meta = with pkgs.lib; {
    license = licenses.unfree;
  };
}