diff --git a/README.md b/README.md index c1c5d7978..d578494ae 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,13 @@ OS versions: Software for the following hardware platforms is in production support: +## ConnectCore 95 +* ConnectCore 95 System-on-Module (SOM) + * [CC-WMX-B30F-B1](https://www.digi.com/products/models/cc-wmx-b30f-b1) + * [CC-MX-B30F-B1](https://www.digi.com/products/models/cc-mx-b30f-b1) +* ConnectCore 95 Development Kit (DVK) + * [CC-WMX95-KIT](https://www.digi.com/products/models/cc-wmx95-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/5.0/cc95/yocto-gs_index)) + ## ConnectCore MP25 * ConnectCore MP25 System-on-Module (SOM) * [CC-WST-J17D-NK](https://www.digi.com/products/models/cc-wst-j17d-nk) @@ -101,6 +108,32 @@ Software for the following hardware platforms is in production support: * [CC-SBP-WMX-JN58](https://www.digi.com/products/models/cc-sbp-wmx-jn58) * [CC-SBP-WMX-JN7A](https://www.digi.com/products/models/cc-sbp-wmx-jn7a) +## ConnectCore 6 Plus +* ConnectCore 6 Plus System-on-Module (SOM) + * [CC-WMX-KK8D-TN](https://www.digi.com/products/models/cc-wmx-kk8d-tn) +* ConnectCore 6 Plus professional development kit + * [CC-WMX6P-KIT](https://www.digi.com/products/models/cc-wmx6p-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc6plus/yocto-gs_index)) + +## ConnectCore 6 +* ConnectCore 6 System-on-Module (SOM) + * [CC-WMX-J97C-TN](https://www.digi.com/products/models/cc-wmx-j97c-tn) + * [CC-WMX-L96C-TE](https://www.digi.com/products/models/cc-wmx-l96c-te) + * [CC-WMX-L87C-TE](https://www.digi.com/products/models/cc-wmx-l87c-te) + * [CC-MX-L76C-Z1](https://www.digi.com/products/models/cc-mx-l76c-z1) + * [CC-MX-L86C-Z1](https://www.digi.com/products/models/cc-mx-l86c-z1) + * [CC-MX-L96C-Z1](https://www.digi.com/products/models/cc-mx-l96c-z1) + * [CC-WMX-L76C-TE](https://www.digi.com/products/models/cc-wmx-l76c-te) + * CC-WMX-K87C-FJA + * CC-WMX-K77C-TE + * CC-WMX-L97D-TN + * CC-WMX-J98C-FJA + * CC-WMX-J98C-FJA-1 +* ConnectCore 6 Jumpstart Development Kit (SBC with Connectore 6 module) + * [CC-WMX6-KIT](https://www.digi.com/products/models/cc-wmx6-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc6/yocto-gs_index)) + * [CC-SB-WMX-J97C-1](https://www.digi.com/products/models/cc-sb-wmx-j97c-1) + * [CC-SB-WMX-L87C-1](https://www.digi.com/products/models/cc-sb-wmx-l87c-1) + * [CC-SB-WMX-L76C-1](https://www.digi.com/products/models/cc-sb-wmx-l76c-1) + # Installation Digi Embedded Yocto is composed of a set of different Yocto layers that work in @@ -121,7 +154,28 @@ Documentation is available online at https://www.digi.com/resources/documentatio ## 5.0-r3 -TODO +* ST-based platforms + * Updated BSP + * Trusted Firmware ARM v2.10 (based on tag 'v2.10-stm32mp-r2' by ST) + * OP-TEE v4.0.0 (based on tag '4.0.0-stm32mp-r2' by ST) + * U-Boot v2023.10 (based on tag 'v2023.10-stm32mp-r2' by ST) + * Linux kernel v6.6.78 (based on tag 'v6.6-stm32mp-r2' by ST) + * Updated X-LINUX-AI software package (based on tag 'v6.1.1' by ST) + * Complete TrustFence support for ConnectCore MP25 + * Added support to sign/encrypt RPROC firmware for ConnectCore MP25 + * Added VREFBUF internal voltage reference for ADC on ConnectCore MP25 +* NXP-based platforms + * Added support for ConnectCore 6/6N and ConnectCore 6 Plus + * Added support for ConnectCore 95 (beta) + * Updated BSP + * Trusted Firmware ARM v2.10 (based on tag 'lf-6.6.52-2.2.1' by NXP) + * OP-TEE v4.4.0 (based on tag 'lf-6.6.52-2.2.1' by NXP) + * OEI v1.0 (based on tag 'lf-6.6.52-2.2.1' by NXP) + * System Manager 2025q2 (based on tag 'lf-6.6.52-2.2.1' by NXP) + * U-Boot v2024.04 (based on tag 'lf-6.6.52-2.2.1' by NXP) + * Linux kernel v6.6.52 (based on tag 'lf-6.6.52-2.2.1' by NXP) + * Added 'dey-image-chromium' image recipe for ConnectCore 95 + * Added WIC templates for sdcard image generation ## 5.0-r2 diff --git a/meta-digi-arm/conf/machine/ccimx95-dvk.conf b/meta-digi-arm/conf/machine/ccimx95-dvk.conf index c7af2421b..e1196cd19 100644 --- a/meta-digi-arm/conf/machine/ccimx95-dvk.conf +++ b/meta-digi-arm/conf/machine/ccimx95-dvk.conf @@ -52,6 +52,9 @@ KERNEL_DEVICETREE ?= " \ " FIT_CONF_DEFAULT_DTB = "ccimx95-dvk.dtb" +# Default image for install scripts +DEFAULT_IMAGE_NAME ?= "dey-image-chromium" + # Boot artifacts to be copied from the deploy dir to the installer ZIP BOOTABLE_ARTIFACTS = " \ imx-boot##SIGNED##-ccimx95-dvk.bin \ diff --git a/meta-digi-arm/conf/machine/ccmp25-dvk.conf b/meta-digi-arm/conf/machine/ccmp25-dvk.conf index 8bdf6f5f1..c3aa561af 100644 --- a/meta-digi-arm/conf/machine/ccmp25-dvk.conf +++ b/meta-digi-arm/conf/machine/ccmp25-dvk.conf @@ -134,14 +134,23 @@ ST_USERFS = "0" # Boot artifacts to be copied from the deploy dir to the installer ZIP BOOTABLE_ARTIFACTS = " \ ${@oe.utils.ifelse(d.getVar('TRUSTFENCE_SIGN') == '1', \ - oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'tf-a-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.stm32', \ - 'tf-a-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.stm32'), \ - 'tf-a-ccmp25-dvk-optee-emmc.stm32')} \ + oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'tf-a-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.stm32 ' \ + 'tf-a-ccmp25-dvk-optee-usb${SIGN_SUFFIX}.stm32 ', \ + 'tf-a-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.stm32 ' \ + 'tf-a-ccmp25-dvk-optee-usb${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.stm32 '), \ + 'tf-a-ccmp25-dvk-optee-emmc.stm32 ' \ + 'tf-a-ccmp25-dvk-optee-usb.stm32 ')} \ metadata-ccmp25-dvk.bin \ ${@oe.utils.ifelse(d.getVar('TRUSTFENCE_SIGN') == '1', \ - oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'fip-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.bin', \ - 'fip-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin'), \ - 'fip-ccmp25-dvk-optee-emmc.bin')} \ + oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT') == '0', 'fip-ccmp25-dvk-optee-emmc${SIGN_SUFFIX}.bin ' \ + 'fip-ccmp25-dvk-optee-usb${SIGN_SUFFIX}.bin ' \ + 'fip-ccmp25-dvk-ddr-optee-usb${SIGN_SUFFIX}.bin ', \ + 'fip-ccmp25-dvk-optee-emmc${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin ' \ + 'fip-ccmp25-dvk-optee-usb${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin ' \ + 'fip-ccmp25-dvk-ddr-optee-usb${ENCRYPT_SUFFIX}${SIGN_SUFFIX}.bin '), \ + 'fip-ccmp25-dvk-optee-emmc.bin ' \ + 'fip-ccmp25-dvk-optee-usb.bin ' \ + 'fip-ccmp25-dvk-ddr-optee-usb.bin ')} \ " # Per-machine DISTRO_FEATURES customization diff --git a/meta-digi-arm/conf/machine/include/ccmp1.inc b/meta-digi-arm/conf/machine/include/ccmp1.inc index 05c75ca49..36f673a81 100644 --- a/meta-digi-arm/conf/machine/include/ccmp1.inc +++ b/meta-digi-arm/conf/machine/include/ccmp1.inc @@ -8,9 +8,6 @@ include conf/machine/include/digi-defaults.inc DIGI_FAMILY = "ccmp1" -# Platform T-FA settings -TFA_SIGN_SUFFIX ?= "${@bb.utils.contains('TRUSTFENCE_SIGN', '1', '_signed', '', d)}" - # ========================================================================= # U-Boot # ========================================================================= diff --git a/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-security/optee/optee-os-stm32mp_4.0.0.bbappend b/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-security/optee/optee-os-stm32mp_4.0.0.bbappend index bec2e0251..c34c3ea44 100644 --- a/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-security/optee/optee-os-stm32mp_4.0.0.bbappend +++ b/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-security/optee/optee-os-stm32mp_4.0.0.bbappend @@ -21,8 +21,8 @@ SRC_URI = " \ " SRC_URI:append:ccmp25 = " \ - ${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \ + ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \ " # Enable remoteproc OTP public key verification for signed firmware support -EXTRA_OEMAKE:append:ccmp25 = " ${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1', 'CFG_REMOTEPROC_PUB_KEY_VERIFY=y', '', d)}" +EXTRA_OEMAKE:append:ccmp25 = " ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1', 'CFG_REMOTEPROC_PUB_KEY_VERIFY=y', '', d)}" diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2023.10.bb b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2023.10.bb index adc47c11f..9cba5c45c 100644 --- a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2023.10.bb +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey_2023.10.bb @@ -14,7 +14,7 @@ SRC_URI += " \ " SRC_URI:append:ccmp25 = " \ - ${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \ + ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM-dts-ccmp25-add-signed-firmware-support-for-RPROC.patch', '', d)} \ " install_helper_files() { diff --git a/meta-digi-arm/recipes-kernel/linux/linux-dey/ccimx95/0001-CC95-early-prototypes-enable-wireless-interfaces.patch b/meta-digi-arm/recipes-kernel/linux/linux-dey/ccimx95/0001-CC95-early-prototypes-enable-wireless-interfaces.patch new file mode 100644 index 000000000..07658e875 --- /dev/null +++ b/meta-digi-arm/recipes-kernel/linux/linux-dey/ccimx95/0001-CC95-early-prototypes-enable-wireless-interfaces.patch @@ -0,0 +1,48 @@ +From: Isaac Hermida +Date: Fri, 21 Nov 2025 10:12:53 +0100 +Subject: [PATCH] CC95: early prototypes: enable wireless interfaces + +As the HWID is not completed yet, is needed to fill that info manually. +This is just temporal for the initial prototypes. +Additionally, in U-Boot, is needed to set the overlays as: + setenv overlays ccimx9_wifi.dtbo,ccimx9_bt.dtbo + +Signed-off-by: Isaac Hermida +--- + arch/arm64/boot/dts/digi/ccimx9_bt.dtso | 1 + + arch/arm64/boot/dts/digi/ccimx9_wifi.dtso | 3 +++ + 2 files changed, 4 insertions(+) + +diff --git a/arch/arm64/boot/dts/digi/ccimx9_bt.dtso b/arch/arm64/boot/dts/digi/ccimx9_bt.dtso +index 6b4ca6229706..e073fe328dea 100644 +--- a/arch/arm64/boot/dts/digi/ccimx9_bt.dtso ++++ b/arch/arm64/boot/dts/digi/ccimx9_bt.dtso +@@ -23,6 +23,7 @@ __overlay__ { + overlay-description = "SOM: Bluetooth"; + bluetooth { + /* U-Boot will fill in the MAC address here */ ++ mac-address = [00 04 f3 ff ff fc]; + }; + }; + }; +diff --git a/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso b/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso +index 7d73c4c7764d..80d766215ee0 100644 +--- a/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso ++++ b/arch/arm64/boot/dts/digi/ccimx9_wifi.dtso +@@ -25,6 +25,7 @@ __overlay__ { + overlay-description = "SOM: Wi-Fi"; + wireless { + /* U-Boot will fill in the MAC address here */ ++ mac-address = [00 04 f3 ff ff fb]; + }; + }; + }; +@@ -42,6 +43,8 @@ __overlay__ { + bus-width = <4>; + non-removable; + wakeup-source; ++ // Workaround: limit max freq to 100MHz ++ max-frequency = <100000000>; + status = "okay"; + }; + }; diff --git a/meta-digi-arm/recipes-kernel/linux/linux-dey_6.6.bb b/meta-digi-arm/recipes-kernel/linux/linux-dey_6.6.bb index 6bff560e6..9a82fda00 100644 --- a/meta-digi-arm/recipes-kernel/linux/linux-dey_6.6.bb +++ b/meta-digi-arm/recipes-kernel/linux/linux-dey_6.6.bb @@ -23,7 +23,11 @@ SRC_URI:append = " \ " SRC_URI:append:ccmp25 = " \ - ${@oe.utils.conditional('TRUSTFENCE_ENABLED', '1' , 'file://0001-ARM64-dts-ccmp25-add-signed-firmware-support-for-RPR.patch', '', d)} \ + ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM64-dts-ccmp25-add-signed-firmware-support-for-RPR.patch', '', d)} \ +" + +SRC_URI:append:ccimx95 = " \ + file://0001-CC95-early-prototypes-enable-wireless-interfaces.patch \ " # Define RT config fragments per machine diff --git a/meta-digi-dey/classes/ccss.bbclass b/meta-digi-dey/classes/ccss.bbclass new file mode 100644 index 000000000..01f786688 --- /dev/null +++ b/meta-digi-dey/classes/ccss.bbclass @@ -0,0 +1,76 @@ +########################################################### +# +# classes/ccss.bbclass - ConnectCore Security Services +# +# Generates an SBOM for the CCSS CVE analysis tool +# +# Copyright (C) 2025 Digi International +# +# +# This source is released under the MIT License. +# +########################################################### + +inherit vigiles + +CCSS_API_VERSION = "0.1" +CCSS_IMAGE_TYPE ?= "dev" +CCSS_ENABLE ?= "1" + +python do_ccss_generate_sbom() { + import json + import os + import shutil + import tempfile + + # Temporary dir to store all files in the SBOM + ccss_tmp_dir = tempfile.mkdtemp(dir=d.getVar('TOPDIR')) + + try: + manifest_file = os.path.join(d.getVar('VIGILES_DIR'), d.getVar('VIGILES_MANIFEST_NAME') + d.getVar('VIGILES_MANIFEST_SUFFIX')) + ccss_kconfig = os.path.join(d.getVar('VIGILES_DIR'),'.'.join([_get_kernel_pf(d), 'config'])) + ccss_uconfig = os.path.join(d.getVar('VIGILES_DIR'),'.'.join([_get_uboot_pf(d), 'config'])) + + # Copy Vigiles manifest and kernel/uboot configs if they're available + if os.path.exists(manifest_file): + shutil.copy(manifest_file, os.path.join(ccss_tmp_dir, 'manifest.json'), follow_symlinks=True) + if os.path.exists(ccss_kconfig): + shutil.copy(ccss_kconfig, os.path.join(ccss_tmp_dir, 'kernel.config'), follow_symlinks=True) + if os.path.exists(ccss_uconfig): + shutil.copy(ccss_uconfig, os.path.join(ccss_tmp_dir, 'uboot.config'), follow_symlinks=True) + + dict_out = dict( + api_version = d.getVar('CCSS_API_VERSION'), + date = d.getVar('DATETIME'), + has_ccss_patches = bb.utils.contains('BBFILE_COLLECTIONS', 'digi-security', 'y', 'n', d), + image_type = d.getVar('CCSS_IMAGE_TYPE'), + som = d.getVar('DIGI_SOM'), + yocto_codename = d.getVar('DISTRO_CODENAME') + ) + + with open(os.path.join(ccss_tmp_dir, 'config.json'), 'w') as f_out: + s = json.dumps(dict_out, indent=2, sort_keys=True) + f_out.write(s) + + # Create .zip file + shutil.make_archive(os.path.join(d.getVar('TOPDIR'), 'CCSS_' + d.getVar('IMAGE_BASENAME') + '-' + d.getVar('DATETIME')), 'zip', ccss_tmp_dir) + finally: + # Remove temporary dir + bb.utils.remove(ccss_tmp_dir, recurse=True) +} + +# Don't execute do_ccss_generate_sbom() unless explicitly enabled for a given +# image +python __anonymous() { + if d.getVar('CCSS_ENABLE') != '1': + d.setVarFlag('do_ccss_generate_sbom', 'noexec', '1') +} + +addtask do_ccss_generate_sbom after do_image before do_image_complete + +# Since do_ccss_generate_sbom() uses the DATETIME variable to create the +# metadata JSON, said variable will expand to different values when the +# function is parsed in different stages of the build (first by the bitbake +# cooker, and then by a worker). This causes metadata/hash mismatch errors due +# to non-deterministic content, so exclude DATETIME from the hash calculation. +do_ccss_generate_sbom[vardepsexclude]="DATETIME" diff --git a/meta-digi-dey/classes/dey-swupdate-common.bbclass b/meta-digi-dey/classes/dey-swupdate-common.bbclass index 32b7531f3..9d7627cb2 100644 --- a/meta-digi-dey/classes/dey-swupdate-common.bbclass +++ b/meta-digi-dey/classes/dey-swupdate-common.bbclass @@ -111,14 +111,15 @@ SWUPDATE_UBOOT_PREFIX_TFA ?= "tf-a" SWUPDATE_UBOOT_EXT ?= ".${UBOOT_SUFFIX}" SWUPDATE_UBOOT_EXT_TFA ?= ".stm32" +SWUPDATE_UBOOT_MEM_VARIANT ?= "-512MB" SWUPDATE_UBOOT_NAME ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}${SWUPDATE_UBOOT_EXT}" SWUPDATE_UBOOT_NAME:ccimx6sbc ?= "${SWUPDATE_UBOOT_PREFIX}-ccimx6qsbc${SWUPDATE_UBOOT_EXT}" -SWUPDATE_UBOOT_NAME:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-nand${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}" -SWUPDATE_UBOOT_NAME:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-optee-emmc${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}" +SWUPDATE_UBOOT_NAME:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}${SWUPDATE_UBOOT_MEM_VARIANT}-optee-nand${FIP_ENCRYPT_SUFFIX}${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}" +SWUPDATE_UBOOT_NAME:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-optee-emmc${FIP_ENCRYPT_SUFFIX}${FIP_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT}" SWUPDATE_UBOOT_NAME_TFA ?= "" -SWUPDATE_UBOOT_NAME_TFA:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-nand${SWUPDATE_UBOOT_EXT_TFA}${TFA_SIGN_SUFFIX}" -SWUPDATE_UBOOT_NAME_TFA:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-optee-emmc${SWUPDATE_UBOOT_EXT_TFA}" +SWUPDATE_UBOOT_NAME_TFA:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}${SWUPDATE_UBOOT_MEM_VARIANT}-optee-nand${TF_A_ENCRYPT_SUFFIX}${TF_A_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT_TFA}" +SWUPDATE_UBOOT_NAME_TFA:ccmp25 ?= "${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-optee-emmc${TF_A_ENCRYPT_SUFFIX}${TF_A_SIGN_SUFFIX}${SWUPDATE_UBOOT_EXT_TFA}" SWUPDATE_UBOOT_OFFSET ?= "${BOOTLOADER_SEEK_BOOTPART}" diff --git a/meta-digi-dey/classes/trustfence.bbclass b/meta-digi-dey/classes/trustfence.bbclass index a86228ac3..cc8ccd2f5 100644 --- a/meta-digi-dey/classes/trustfence.bbclass +++ b/meta-digi-dey/classes/trustfence.bbclass @@ -45,6 +45,9 @@ TRUSTFENCE_ENCRYPT_ROOTFS:ccmp1 ?= "0" TRUSTFENCE_ENCRYPT_ROOTFS:ccmp2 ?= "0" TRUSTFENCE_FILE_BASED_ENCRYPT ?= "${TF_FILE_BASED_ENCRYPT}" +# Co-processor settings +TRUSTFENCE_COPRO_ENABLED ?= "1" + # Read-only rootfs TRUSTFENCE_READ_ONLY_ROOTFS ?= "${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "1", "0", d)}" @@ -288,7 +291,7 @@ python () { # Set the key password. d.setVar("SWUPDATE_PASSWORD_FILE", keys_path + "/keys/key_pass.txt") elif (d.getVar("DEY_SOC_VENDOR") == "STM"): - d.setVar("SWUPDATE_PRIVATE_KEY_TEMPLATE", d.getVar("FIP_SIGN_KEY")) + d.setVar("SWUPDATE_PRIVATE_KEY_TEMPLATE", d.getVar("SIGN_KEY")) # Set the key password. if (d.getVar("DIGI_SOM") == "ccmp15"): d.setVar("SWUPDATE_PASSWORD_FILE", keys_path + "/keys/key_pass.txt") diff --git a/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccimx9/bluetooth-init b/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccimx9/bluetooth-init index e2ea10d99..1834dd70d 100644 --- a/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccimx9/bluetooth-init +++ b/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccimx9/bluetooth-init @@ -33,7 +33,9 @@ power() { set_btaddr() { hciconfig ${HCI_IFACE} up sleep 0.2 - bt_addr=$(echo "$(fw_printenv -n btaddr)" | awk -F ":" '{ for(i=NF;i>=1;i--) printf "0x%s ", $i }') + bt_addr=$(hexdump -v -e '1/1 "%02X "' /proc/device-tree/bluetooth/mac-address \ + | awk '{ for(i=NF; i>0; i--) printf "0x%s ", $i }' \ + | sed 's/ $//') hcitool -i ${HCI_IFACE} cmd 0x3f 0x0022 0xfe 0x06 ${bt_addr} hciconfig ${HCI_IFACE} down sleep 0.2 diff --git a/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp1/bluetooth-init b/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp1/bluetooth-init index 2f9c940e4..cb197c4ed 100644 --- a/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp1/bluetooth-init +++ b/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp1/bluetooth-init @@ -43,7 +43,9 @@ bt_power() { set_btaddr() { hciconfig hci0 up sleep 0.2 - bt_addr=$(echo "$(fw_printenv -n btaddr)" | awk -F ":" '{ for(i=NF;i>=1;i--) printf "0x%s ", $i }') + bt_addr=$(hexdump -v -e '1/1 "%02X "' /proc/device-tree/bluetooth/mac-address \ + | awk '{ for(i=NF; i>0; i--) printf "0x%s ", $i }' \ + | sed 's/ $//') hcitool -i hci0 cmd 0x3f 0x0001 ${bt_addr} hciconfig hci0 down sleep 0.2 diff --git a/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp2/bluetooth-init b/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp2/bluetooth-init index 0a9eaeefa..f1fbbb907 100644 --- a/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp2/bluetooth-init +++ b/meta-digi-dey/recipes-connectivity/bluez/bluez5-init/ccmp2/bluetooth-init @@ -32,7 +32,9 @@ bt_power() { set_btaddr() { hciconfig hci0 up sleep 0.2 - bt_addr=$(echo "$(fw_printenv -n btaddr)" | awk -F ":" '{ for(i=NF;i>=1;i--) printf "0x%s ", $i }') + bt_addr=$(hexdump -v -e '1/1 "%02X "' /proc/device-tree/bluetooth/mac-address \ + | awk '{ for(i=NF; i>0; i--) printf "0x%s ", $i }' \ + | sed 's/ $//') hcitool -i hci0 cmd 0x3f 0x0001 ${bt_addr} hciconfig hci0 down sleep 0.2 diff --git a/meta-digi-dey/recipes-digi/cccs/cccs_git.bb b/meta-digi-dey/recipes-digi/cccs/cccs_git.bb index 100ada29d..747e5a914 100644 --- a/meta-digi-dey/recipes-digi/cccs/cccs_git.bb +++ b/meta-digi-dey/recipes-digi/cccs/cccs_git.bb @@ -87,6 +87,12 @@ do_install() { fi } +do_install:append:ccimx6ul() { + if [ -z "${CCCS_CONF_PATH}" ]; then + sed -i "/url = \"edp12.devicecloud.com\"/c\url = \"remotemanager.digi.com\"" ${D}${sysconfdir}/cccs.conf + fi +} + pkg_postinst_ontarget:${PN}-daemon() { # If dualboot is enabled, change the CCCSD download path and set on the fly to yes on the first boot if [ "$(fw_printenv -n dualboot 2>/dev/null)" = "yes" ]; then diff --git a/meta-digi-dey/recipes-digi/libdigiapix/libdigiapix-git/ccimx95/libdigiapix.conf b/meta-digi-dey/recipes-digi/libdigiapix/libdigiapix-git/ccimx95/libdigiapix.conf index 85a568c15..1998d6809 100644 --- a/meta-digi-dey/recipes-digi/libdigiapix/libdigiapix-git/ccimx95/libdigiapix.conf +++ b/meta-digi-dey/recipes-digi/libdigiapix/libdigiapix-git/ccimx95/libdigiapix.conf @@ -19,20 +19,20 @@ USER_BUTTON2 = 43840000.gpio,23 [I2C] -# I2C-3 on MikroBus connector. +# I2C-3 on MikroBus connector J39. DEFAULT_I2C_BUS = 2 [SPI] -# LPSPI-8 on MikroBus connector J39. +# LPSPI-8 on MikroBus connector J38. DEFAULT_SPI = 0,0 [PWM] -# PWM0 channel 1 - LVDS backlight. -DEFAULT_PWM = 0,1 +# TPM3 channel 3 on MikroBus connector J39.1. +DEFAULT_PWM = 0,3 [ADC] -# ADC channel 0 - Pin J48-1. +# ADC channel 0 - Pin J44.3. DEFAULT_ADC = 0,0 diff --git a/meta-digi-dey/recipes-digi/swu-images/files/swupdate_uboot_mmc.sh b/meta-digi-dey/recipes-digi/swu-images/files/swupdate_uboot_mmc.sh index 032922afc..91b1155f6 100755 --- a/meta-digi-dey/recipes-digi/swu-images/files/swupdate_uboot_mmc.sh +++ b/meta-digi-dey/recipes-digi/swu-images/files/swupdate_uboot_mmc.sh @@ -1,7 +1,7 @@ #!/bin/sh #=============================================================================== # -# Copyright (C) 2022-2024 by Digi International Inc. +# Copyright (C) 2022-2025 by Digi International Inc. # All rights reserved. # # This program is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ UBOOT_BLOCK_REDUNDANT="mmcblk0boot1" UBOOT_MMC_DEV_MAIN="/dev/${UBOOT_BLOCK_MAIN}" UBOOT_MMC_DUMP="/tmp/u-boot-dump.hex" UBOOT_ENCRYPTED_DEK="/tmp/u-boot-encrypted-with-dek.imx" +UBOOT_PARTNAME="U-Boot" DEK_FILE="/tmp/dek.bin" DEK_KEY_SIZE="32" @@ -241,42 +242,52 @@ write_artifact_emmc () { local BLOCK_TO_WRITE="$1" local FILE_TO_WRITE="$2" + local PARTNAME_TO_WRITE="$3" + local FORCE_RO_PATH="/sys/block/${BLOCK_TO_WRITE}/force_ro" # Enable write access in the partition. - echo 0 > "/sys/block/${BLOCK_TO_WRITE}/force_ro" + if [ -e "${FORCE_RO_PATH}" ]; then + echo 0 > "${FORCE_RO_PATH}" + fi + # Write the file into the eMMC. dd if="${FILE_TO_WRITE}" of="/dev/${BLOCK_TO_WRITE}" seek="${UBOOT_SEEK_KB}" bs=1K 2>/dev/null local rc=$? + # Disable write access in partition. - echo 1 > "/sys/block/${BLOCK_TO_WRITE}/force_ro" + if [ -e "${FORCE_RO_PATH}" ]; then + echo 1 > "${FORCE_RO_PATH}" + fi + # Check update operation result. if [ "${rc}" -ne 0 ]; then exit_error "## ERROR: failed to write file ${FILE_TO_WRITE} to /dev/${BLOCK_TO_WRITE}" "${rc}" fi - echo "U-Boot successfully writen to /dev/${BLOCK_TO_WRITE}" + echo "${PARTNAME_TO_WRITE} successfully writen to /dev/${BLOCK_TO_WRITE}" } # If U-Boot is encrypted, the DEK key blob needs to be extracted from existing U-Boot -# and appended to the new U-Boot before writing it. -if [ "${UBOOT_ENC}" = "enc" ]; then +# and appended to the new U-Boot before writing it for NXP platforms. +if [ "${UBOOT_ENC}" = "enc" ] && [[ "${PLATFORM}" != ccmp2* ]]; then append_dek fi # Write TFA. if expr "${PLATFORM}" : "ccmp2.*" >/dev/null; then # Write TFA artifact into eMMC BOOT1 and BOOT2 partitions. - write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_TFA_FILE} + write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_TFA_FILE} "TF-A" if [ "${UBOOT_REDUNDANT}" = "redundant" ]; then - write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_TFA_FILE} + write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_TFA_FILE} "TF-A" fi # Redefine block devices to write FIP artifact into 'fip-a' and 'fip-b' partitions. UBOOT_BLOCK_MAIN="mmcblk0p3" UBOOT_BLOCK_REDUNDANT="mmcblk0p4" + UBOOT_PARTNAME="FIP" fi # Write U-Boot -write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_FILE} +write_artifact_emmc ${UBOOT_BLOCK_MAIN} ${UBOOT_FILE} ${UBOOT_PARTNAME} # Check if redundant U-Boot update is requested. if [ "${UBOOT_REDUNDANT}" = "redundant" ]; then - write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_FILE} + write_artifact_emmc ${UBOOT_BLOCK_REDUNDANT} ${UBOOT_FILE} ${UBOOT_PARTNAME} fi # Clean intermediate artifacts. clean_artifacts diff --git a/meta-digi-dey/recipes-graphics/lvgl/files/lvgl-demo-init b/meta-digi-dey/recipes-graphics/lvgl/files/lvgl-demo-init index e1ac75dd8..063ea537a 100644 --- a/meta-digi-dey/recipes-graphics/lvgl/files/lvgl-demo-init +++ b/meta-digi-dey/recipes-graphics/lvgl/files/lvgl-demo-init @@ -16,8 +16,6 @@ readonly DEMO_NAME="lvgl-demo" readonly DEMO_PATH="/usr/bin/${DEMO_NAME}" readonly DEMO_TITLE="LVGL Demo Application" -readonly DEMO_DISPLAY="##LVGL_DEMO_DISPLAY##" -readonly DEMO_ENV="##LVGL_DEMO_ENV##" readonly PID_FILE="/run/${DEMO_NAME}.pid" log() { @@ -54,21 +52,6 @@ check_is_running() { return 1 } -wait_for_wayland() { - local count=20 - local wayland_socket="/run/user/0/${DEMO_DISPLAY}" - - while [ ! -S "${wayland_socket}" ]; do - sleep 1 - count=$((count-1)) - if [ "${count}" = 0 ]; then - return 1 - fi - done - sleep 1 - return 0 -} - stop() { check_is_running || return @@ -89,15 +72,11 @@ stop() { start() { check_is_running && { log warning "start: ${DEMO_NAME} ALREADY running"; exit 0; } - if [ -d "/usr/share/wayland" ]; then - wait_for_wayland - else - # Disable the cursor when displaying at full screen on fbdev - echo "0" > /sys/class/graphics/fbcon/cursor_blink - fi + # Disable the cursor when displaying at full screen on fbdev + echo "0" > /sys/class/graphics/fbcon/cursor_blink # Launch demo - env ${DEMO_ENV} ${DEMO_PATH} >/dev/null 2>&1 & + env ${DEMO_PATH} >/dev/null 2>&1 & if [ $? -eq 0 ]; then echo $! > ${PID_FILE} diff --git a/meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc b/meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc index 3bc1db338..e2d90864e 100644 --- a/meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc +++ b/meta-digi-dey/recipes-graphics/lvgl/lv-conf.inc @@ -99,7 +99,4 @@ do_configure:append() { \ -e "s|^([[:space:]]*#define LV_USE_LOTTIE[[:space:]]).*|\1${LVGL_CONFIG_USE_LOTTIE}|" \ -i "${S}/lv_conf.h" - sed -i -e 's,##LVGL_CONFIG_DRM_CARD##,${LVGL_CONFIG_DRM_CARD},g' \ - -i -e 's,##LVGL_CONFIG_FBDEV_DEVICE##,${LVGL_CONFIG_FBDEV_DEVICE},g' \ - -i ${WORKDIR}/lvgl-demo-init } diff --git a/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb b/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb index 347bb929a..6cb730fb7 100644 --- a/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb +++ b/meta-digi-dey/recipes-graphics/lvgl/lvgl-demo_9.3.0.bb @@ -28,9 +28,11 @@ SRCREV_FORMAT = "demo_lvgl" EXTRA_OEMAKE = "DESTDIR=${D}" LVGL_CONFIG_DRM_CARD ?= "/dev/dri/card0" -LVGL_CONFIG_FBDEV_DEVICE ?= "/dev/fb0" # Change DRM card used for i.MX8-based platforms LVGL_CONFIG_DRM_CARD:mx8-generic-bsp = "/dev/dri/card1" +LVGL_CONFIG_FBDEV_DEVICE ?= "/dev/fb0" +# Change framebuffer used for the ccimx6/ccimx6qp (HDMI display) +LVGL_CONFIG_FBDEV_DEVICE:ccimx6 = "/dev/fb3" LVGL_CONFIG_LV_USE_LOG = "1" LVGL_CONFIG_LV_LOG_PRINTF = "1" LVGL_CONFIG_LV_MEM_SIZE = "(256 * 1024U)" @@ -42,9 +44,6 @@ inherit cmake systemd update-rc.d S = "${WORKDIR}/git" -LVGL_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\$\{DEMO_DISPLAY\}" -LVGL_DEMO_ENV:ccimx6ul ?= "" - do_configure:prepend() { if [ "${LVGL_CONFIG_USE_SDL}" -eq 1 ] ; then # Add libsdl build dependency, SDL2_image has no cmake file @@ -66,9 +65,9 @@ do_install:append() { # Install wrapper bootscript to launch LVGL demo on boot install -d ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/lvgl-demo-init ${D}${sysconfdir}/lvgl-demo-init - sed -i -e "s@##LVGL_DEMO_DISPLAY##@${WAYLAND_DISPLAY}@g" \ - -e "s@##LVGL_DEMO_ENV##@${LVGL_DEMO_ENV}@g" \ - "${D}${sysconfdir}/lvgl-demo-init" + sed -i -e 's,##LVGL_CONFIG_DRM_CARD##,${LVGL_CONFIG_DRM_CARD},g' \ + -i -e 's,##LVGL_CONFIG_FBDEV_DEVICE##,${LVGL_CONFIG_FBDEV_DEVICE},g' \ + -i ${D}${sysconfdir}/lvgl-demo-init ln -sf ${sysconfdir}/lvgl-demo-init ${D}${sysconfdir}/init.d/lvgl-demo-init }