diff --git a/meta-digi-arm/conf/machine/include/imx-digi-base.inc b/meta-digi-arm/conf/machine/include/imx-digi-base.inc index 9c1c58f88..cb9e7e5aa 100644 --- a/meta-digi-arm/conf/machine/include/imx-digi-base.inc +++ b/meta-digi-arm/conf/machine/include/imx-digi-base.inc @@ -321,6 +321,7 @@ PREFERRED_VERSION_optee-test:mx8-nxp-bsp ??= "4.4.0.imx" PREFERRED_VERSION_optee-test:mx9-nxp-bsp ??= "4.4.0.imx" # Firmware from NXP's "lf-6.6.52-2.2.1" release +PREFERRED_VERSION_firmware-imx:imx-nxp-bsp ??= "8.26.1" PREFERRED_VERSION_imx-boot-firmware-files:imx-nxp-bsp ??= "8.26.1" # Optee runtime packages to install diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/firmware-imx/firmware-imx_8.26.1.bb b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/firmware-imx/firmware-imx_8.26.1.bb new file mode 100644 index 000000000..2f3df4bd6 --- /dev/null +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/firmware-imx/firmware-imx_8.26.1.bb @@ -0,0 +1,171 @@ +# Copyright (C) 2012-2016 Freescale Semiconductor +# Copyright 2017-2021,2024-2025 NXP +# Copyright (C) 2018 O.S. Systems Software LTDA. +SUMMARY = "Freescale i.MX firmware" +DESCRIPTION = "Freescale i.MX firmware such as for the VPU" + +require ${BP}.inc + +PE = "1" + +inherit allarch + +IMX_USE_LINUX_FIRMWARE_SDMA ?= "1" + +do_install() { + install -d ${D}${nonarch_base_libdir}/firmware/imx + + # SDMA Firmware section + install -d ${D}${nonarch_base_libdir}/firmware/imx/sdma + install -m 0644 ${S}/firmware/sdma/* ${D}${nonarch_base_libdir}/firmware/imx/sdma + # Define IMX_USE_LINUX_FIRMWARE_SDMA = "0" in layer.conf, machine.conf, local.conf + # or in .bbappend to use sdma-imx6q/7d.bin from here and not linux-firmware + if [ ${IMX_USE_LINUX_FIRMWARE_SDMA} -gt 0 ] + then + rm -f ${D}${nonarch_base_libdir}/firmware/imx/sdma/sdma-imx6q.bin + rm -f ${D}${nonarch_base_libdir}/firmware/imx/sdma/sdma-imx7d.bin + fi + + # EASRC Firmware section + install -d ${D}${nonarch_base_libdir}/firmware/imx/easrc + install -m 0644 ${S}/firmware/easrc/* ${D}${nonarch_base_libdir}/firmware/imx/easrc/ + + # XCVR Firmware section + install -d ${D}${nonarch_base_libdir}/firmware/imx/xcvr + install -m 0644 ${S}/firmware/xcvr/* ${D}${nonarch_base_libdir}/firmware/imx/xcvr/ + + # XUVI Firmware section + install -d ${D}${nonarch_base_libdir}/firmware/imx/xuvi + install -m 0644 ${S}/firmware/xuvi/* ${D}${nonarch_base_libdir}/firmware/imx/xuvi/ + + # EPDC Firmware section + # NOTE: + # epdc_ED060XH2C1.fw file has .nonrestricted suffix in the source archive, hence it should + # be installed with a different name + install -d ${D}${nonarch_base_libdir}/firmware/imx/epdc + install -m 0644 ${S}/firmware/epdc/*.fw ${D}${nonarch_base_libdir}/firmware/imx/epdc/ + install -m 0644 ${S}/firmware/epdc/epdc_ED060XH2C1.fw.nonrestricted ${D}${nonarch_base_libdir}/firmware/imx/epdc/epdc_ED060XH2C1.fw + + # HDMI Firmware section + # NOTE: + # Only install pre-defined list of firmware files, since the source archive contains + # also HDMI binary files for imx8m derivatives, which are taken care of by another recipe + install -m 0644 ${S}/firmware/hdmi/cadence/hdmitxfw.bin ${D}${nonarch_base_libdir}/firmware + install -m 0644 ${S}/firmware/hdmi/cadence/hdmirxfw.bin ${D}${nonarch_base_libdir}/firmware + install -m 0644 ${S}/firmware/hdmi/cadence/dpfw.bin ${D}${nonarch_base_libdir}/firmware + + # VPU Firmware section + # NOTE: + # Do the same thing as above for HDMI - only install a pre-defined list of firmware files, + # as some of other files are provided by packages from other recipes. + install -d ${D}${nonarch_base_libdir}/firmware/vpu + install -m 0644 ${S}/firmware/vpu/vpu_fw_imx*.bin ${D}${nonarch_base_libdir}/firmware/vpu + # Update i.MX8 vpu firmware path to align with kernel6.5+ + install -d ${D}${nonarch_base_libdir}/firmware/amphion/vpu/ + mv ${D}${nonarch_base_libdir}/firmware/vpu/vpu_fw_imx8* ${D}${nonarch_base_libdir}/firmware/amphion/vpu/ + # Install i.MX 95 VPU firmware + install -m 0644 ${S}/firmware/vpu/wave633c_codec_fw.bin ${D}${nonarch_base_libdir}/firmware +} + +# +# This prepend is here to produce separate packages containing firmware, +# which could be included separately based on the machine definition. +# +# It operates similar to the FILES mechanism by travesing through +# ${D} + folder supplied as a first parameter, matches the regexp supplied +# as second one, and for every file match - it creates a separate package, +# which contains only files that matches the pattern. +# +python populate_packages:prepend() { + # CODA driver tries to locate VPU firmwares directly in ${nonarch_base_libdir}/firmware, to + # avoid fallback loading which is usually 40-60 seconds later after system boots up, let's + # create symbolic links in ${nonarch_base_libdir}/firmware for VPU firmwares. + def coda_vpu_links(file, pkg, pattern, format, basename): + # Only CODA VPU firmwares need this procedure + if 'imx8' in basename: + return + + dir = os.path.dirname(file) + dir = os.path.abspath(os.path.join(dir, os.pardir)) + cwd = os.getcwd() + + os.chdir(dir) + + name = os.path.basename(file) + os.symlink(os.path.join("vpu", name), name) + + oldfiles = d.getVar('FILES:' + pkg) + newfile = os.path.join(d.getVar('nonarch_base_libdir'), "firmware", name) + d.setVar('FILES:' + pkg, oldfiles + " " + newfile) + + os.chdir(cwd) + + + easrcdir = bb.data.expand('${nonarch_base_libdir}/firmware/imx/easrc', d) + do_split_packages(d, easrcdir, '^easrc-([^_]*).*\.bin', + output_pattern='firmware-imx-easrc-%s', + description='Freescale IMX EASRC Firmware [%s]', + extra_depends='', + prepend=True) + + vpudir = bb.data.expand('${nonarch_base_libdir}/firmware/vpu', d) + do_split_packages(d, vpudir, '^vpu_fw_([^_]*).*\.bin', + output_pattern='firmware-imx-vpu-%s', + description='Freescale IMX VPU Firmware [%s]', + hook=coda_vpu_links, + extra_depends='', + prepend=True) + + sdmadir = bb.data.expand('${nonarch_base_libdir}/firmware/imx/sdma', d) + do_split_packages(d, sdmadir, '^sdma-([^-]*).*\.bin', + output_pattern='firmware-imx-sdma-%s', + description='Freescale IMX SDMA Firmware [%s]', + extra_depends='', + prepend=True) + + xcvrdir = bb.data.expand('${nonarch_base_libdir}/firmware/imx/xcvr', d) + do_split_packages(d, xcvrdir, '^xcvr-([^_]*).*\.bin', + output_pattern='firmware-imx-xcvr-%s', + description='Freescale IMX XCVR Firmware [%s]', + extra_depends='', + prepend=True) + + xuvidir = bb.data.expand('${nonarch_base_libdir}/firmware/imx/xuvi', d) + do_split_packages(d, xuvidir, '^vpu_fw_([^_]*).*\.bin', + output_pattern='firmware-imx-xuvi-%s', + description='Freescale IMX XUVI Firmware [%s]', + extra_depends='', + prepend=True) +} + +# Declare a contract that we would provide packages produced by prepend above +PACKAGES_DYNAMIC = "${PN}-vpu-* ${PN}-sdma-* ${PN}-easrc-* ${PN}-xcvr-* ${PN}-xuvi-*" + +# +# Deal with the rest of Firmware packages here +# +# Provide EPDC and HDMI Firmware in common packages as they tend to be special in +# terms of the content. +# +# NOTE: PACKAGES are defined explicitly here in order to remove the auto-generated +# complimentary packages (-dev and -dbg). +# This is done in order to be able to keep the main package empty and fail when +# somebody tries to install it in the image. +# If -dev package is present in that setup, and dev-pkgs is enabled in +# IMAGE_FEATURES - this leads to a failure during do_rootfs() while all -dev +# packages would be installed, and -dev package would fail because the main one +# is empty. +# Therefore, we opt-out from producing -dev package here, since also for firmware +# files it makes no sense. +PACKAGES = "${PN} ${PN}-epdc ${PN}-hdmi ${PN}-vpu-amphion ${PN}-vpu-wave" + +FILES:${PN}-epdc = "${nonarch_base_libdir}/firmware/imx/epdc/" +FILES:${PN}-hdmi = " \ + ${nonarch_base_libdir}/firmware/hdmitxfw.bin \ + ${nonarch_base_libdir}/firmware/hdmirxfw.bin \ + ${nonarch_base_libdir}/firmware/dpfw.bin \ +" +FILES:${PN}-vpu-amphion = "${nonarch_base_libdir}/firmware/amphion/vpu/*" +FILES:${PN}-vpu-wave = "${nonarch_base_libdir}/firmware/wave633c_codec_fw.bin" + +COMPATIBLE_MACHINE = "(imx-generic-bsp)" diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave-seco_git.bb b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave-seco_git.bb index bab785365..867d7d55e 100644 --- a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave-seco_git.bb +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave-seco_git.bb @@ -5,7 +5,9 @@ DESCRIPTION += "SECO" PLAT = "seco" -do_install:append() { +EXTRA_OEMAKE:append:mx8x-nxp-bsp = " COMPATIBLE_MACHINE=mx8dxl-nxp-bsp" + +do_install:append:mx95-nxp-bsp() { # Remove common content that is to be installed by imx-secure-enclave for i in common hsm nvm.h; do rm -rf ${D}${includedir}/$i @@ -14,4 +16,4 @@ do_install:append() { rm ${D}${bindir}/nvmd_conf_setup.sh } -COMPATIBLE_MACHINE = "(mx95-nxp-bsp)" +COMPATIBLE_MACHINE = "(mx8x-nxp-bsp|mx95-nxp-bsp)" diff --git a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave.inc b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave.inc index 42c02da62..01cc21ac6 100644 --- a/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave.inc +++ b/meta-digi-arm/dynamic-layers/freescale-layer/recipes-bsp/imx-secure-enclave/imx-secure-enclave.inc @@ -1,4 +1,4 @@ -# Copyright 2021-2024 NXP +# Copyright 2021-2025 NXP SUMMARY = "NXP i.MX SECURE ENCLAVE library" DESCRIPTION = "NXP IMX SECURE ENCLAVE library" @@ -10,8 +10,11 @@ DEPENDS = " mbedtls openssl" SRC_URI = "${SECURE_ENCLAVE_LIB_SRC};branch=${SRCBRANCH}" SECURE_ENCLAVE_LIB_SRC ?= "git://github.com/NXP/imx-secure-enclave.git;protocol=https" -SRCBRANCH = "lf-6.6.52_2.2.0" -SRCREV = "dffbb844e86f4a49058ffbb40548474059969c27" +SRCBRANCH = "lf-6.6.52_2.2.1" +SRCREV = "4f0340fb4cf6b16a64c7d65281b4880c5d1cd453" + +# Set package version to the release, so it overrides the recipe in meta-freescale +PV = "lf-6.6.52_2.2.1" S = "${WORKDIR}/git"