1
0
mirror of https://git.yoctoproject.org/meta-ti synced 2026-01-12 01:20:20 +00:00

ti-linux-fw: Split firmware in to machine packages

Firmware, like kernel modules, may be only relevant to a small subset of
hardware. Shipping all firmware for all hardware can waste space. For
this reason modules are split out into packages, and the same should
be done for firmware.

What we do currently is change the content of the package itself based
on what device we are building for. Having a package change content for
each machine means we cannot generate one image that supports multiple
machines, nor host a common machine agnostic package repo.

Instead we can generate different packages for the different firmwares
and only include the firmware packages needed for each machine.

Signed-off-by: Andrew Davis <afd@ti.com>
Signed-off-by: Ryan Eatmon <reatmon@ti.com>
This commit is contained in:
Andrew Davis
2025-05-02 16:25:07 -05:00
committed by Ryan Eatmon
parent b42e4dd5f4
commit a09453eef7
5 changed files with 44 additions and 36 deletions

View File

@@ -18,4 +18,4 @@ TFA_BOARD = "j784s4"
OPTEEMACHINE = "k3-j784s4"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "cadence-mhdp-fw cnm-wave-fw ti-eth-fw"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "cadence-mhdp-fw cnm-wave-fw ti-eth-fw-j784s4"

View File

@@ -26,4 +26,4 @@ TFA_BOARD = "generic"
OPTEEMACHINE = "k3-j721e"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "ti-eth-fw"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "ti-eth-fw-j7200"

View File

@@ -40,4 +40,4 @@ TI_VXE_VXD_DRIVER = "ti-vxe-vxd-driver"
TI_VXE_VXD_DRIVER:bsp-ti-6_6 = ""
TI_VXE_VXD_DRIVER:bsp-ti-6_1 = ""
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "cadence-mhdp-fw vxd-dec-fw ti-eth-fw ${TI_VXE_VXD_DRIVER}"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "cadence-mhdp-fw vxd-dec-fw ti-eth-fw-j721e ${TI_VXE_VXD_DRIVER}"

View File

@@ -21,4 +21,4 @@ TFA_BOARD = "j784s4"
OPTEEMACHINE = "k3-j784s4"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "cadence-mhdp-fw cnm-wave-fw ti-eth-fw"
MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS += "cadence-mhdp-fw cnm-wave-fw ti-eth-fw-j784s4"

View File

@@ -5,8 +5,6 @@ LIC_FILES_CHKSUM = "file://${THISDIR}/../../licenses/TI-TFL;md5=a1b59cb7ba626b9d
COMPATIBLE_MACHINE = "j721e|j7200|j784s4"
PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit update-alternatives
require recipes-bsp/ti-linux-fw/ti-linux-fw.inc
@@ -17,50 +15,60 @@ PR = "${INC_PR}.0"
# Secure Build
inherit ti-secdev
PLAT_SFX = ""
PLAT_SFX:j721e = "j721e"
PLAT_SFX:j7200 = "j7200"
PLAT_SFX:j784s4 = "j784s4"
PACKAGES += " \
${PN}-j721e \
${PN}-j7200 \
${PN}-j784s4 \
"
# Disable arch checking as firmware is likely to be a different arch from the Yocto build
INSANE_SKIP:${PN}-j721e += "arch"
INSANE_SKIP:${PN}-j7200 += "arch"
INSANE_SKIP:${PN}-j784s4 += "arch"
ETH_FW_DIR = "ti-eth/${PLAT_SFX}"
RDEPENDS:${PN} += " \
${PN}-j721e \
${PN}-j7200 \
${PN}-j784s4 \
"
INSTALL_ETH_FW_DIR = "${nonarch_base_libdir}/firmware/${ETH_FW_DIR}"
PLATS = "\
j721e \
j7200 \
j784s4 \
"
ETH_FW = "app_remoteswitchcfg_server_strip.xer5f"
ETH_FW_LIST = ""
ETH_FW_LIST:j721e = "${ETH_FW}"
ETH_FW_LIST:j7200 = "${ETH_FW}"
ETH_FW_LIST:j784s4 = "${ETH_FW}"
do_install() {
# ETH firmware
for FW_NAME in ${ETH_FW_LIST}
for PLAT in ${PLATS}
do
${TI_SECURE_DEV_PKG}/scripts/secure-binary-image.sh ${S}/${ETH_FW_DIR}/${FW_NAME} ${S}/${ETH_FW_DIR}/${FW_NAME}.signed
done
# Sign ETH firmware
${TI_SECURE_DEV_PKG}/scripts/secure-binary-image.sh ${S}/ti-eth/${PLAT}/${ETH_FW} ${S}/ti-eth/${PLAT}/${ETH_FW}.signed
# ETH firmware
install -d ${D}${INSTALL_ETH_FW_DIR}
for FW_NAME in ${ETH_FW_LIST}
do
install -m 0644 ${S}/${ETH_FW_DIR}/${FW_NAME} ${D}${INSTALL_ETH_FW_DIR}
install -m 0644 ${S}/${ETH_FW_DIR}/${FW_NAME}.signed ${D}${INSTALL_ETH_FW_DIR}
# Install ETH firmware
install -d ${D}${nonarch_base_libdir}/firmware/ti-eth/${PLAT}
install -m 0644 ${S}/ti-eth/${PLAT}/${ETH_FW} ${D}${nonarch_base_libdir}/firmware/ti-eth/${PLAT}
install -m 0644 ${S}/ti-eth/${PLAT}/${ETH_FW}.signed ${D}${nonarch_base_libdir}/firmware/ti-eth/${PLAT}
done
}
FILES:${PN} = ""
FILES:${PN}-j721e = "${nonarch_base_libdir}/firmware/ti-eth/j721e"
FILES:${PN}-j7200 = "${nonarch_base_libdir}/firmware/ti-eth/j7200"
FILES:${PN}-j784s4 = "${nonarch_base_libdir}/firmware/ti-eth/j784s4"
# Set up names for the firmwares
ALTERNATIVE:${PN}:j721e = "\
ALTERNATIVE:${PN}-j721e = "\
j7-main-r5f0_0-fw \
j7-main-r5f0_0-fw-sec \
"
ALTERNATIVE:${PN}:j7200 = "\
ALTERNATIVE:${PN}-j7200 = "\
j7200-main-r5f0_0-fw \
j7200-main-r5f0_0-fw-sec \
"
ALTERNATIVE:${PN}:j784s4 = "\
ALTERNATIVE:${PN}-j784s4 = "\
j784s4-main-r5f0_0-fw \
j784s4-main-r5f0_0-fw-sec \
"
@@ -76,13 +84,13 @@ ALTERNATIVE_LINK_NAME[j784s4-main-r5f0_0-fw] = "${nonarch_base_libdir}/firmw
ALTERNATIVE_LINK_NAME[j784s4-main-r5f0_0-fw-sec] = "${nonarch_base_libdir}/firmware/j784s4-main-r5f0_0-fw-sec"
# Create the firmware alternatives
ALTERNATIVE_TARGET[j7-main-r5f0_0-fw] = "${INSTALL_ETH_FW_DIR}/${ETH_FW}"
ALTERNATIVE_TARGET[j7-main-r5f0_0-fw-sec] = "${INSTALL_ETH_FW_DIR}/${ETH_FW}.signed"
ALTERNATIVE_TARGET[j7-main-r5f0_0-fw] = "${nonarch_base_libdir}/firmware/ti-eth/j721e/${ETH_FW}"
ALTERNATIVE_TARGET[j7-main-r5f0_0-fw-sec] = "${nonarch_base_libdir}/firmware/ti-eth/j721e/${ETH_FW}.signed"
ALTERNATIVE_TARGET[j7200-main-r5f0_0-fw] = "${INSTALL_ETH_FW_DIR}/${ETH_FW}"
ALTERNATIVE_TARGET[j7200-main-r5f0_0-fw-sec] = "${INSTALL_ETH_FW_DIR}/${ETH_FW}.signed"
ALTERNATIVE_TARGET[j7200-main-r5f0_0-fw] = "${nonarch_base_libdir}/firmware/ti-eth/j7200/${ETH_FW}"
ALTERNATIVE_TARGET[j7200-main-r5f0_0-fw-sec] = "${nonarch_base_libdir}/firmware/ti-eth/j7200/${ETH_FW}.signed"
ALTERNATIVE_TARGET[j784s4-main-r5f0_0-fw] = "${INSTALL_ETH_FW_DIR}/${ETH_FW}"
ALTERNATIVE_TARGET[j784s4-main-r5f0_0-fw-sec] = "${INSTALL_ETH_FW_DIR}/${ETH_FW}.signed"
ALTERNATIVE_TARGET[j784s4-main-r5f0_0-fw] = "${nonarch_base_libdir}/firmware/ti-eth/j784s4/${ETH_FW}"
ALTERNATIVE_TARGET[j784s4-main-r5f0_0-fw-sec] = "${nonarch_base_libdir}/firmware/ti-eth/j784s4/${ETH_FW}.signed"
ALTERNATIVE_PRIORITY = "5"