Compare commits

...

187 Commits

Author SHA1 Message Date
Arturo Buzarra 74628a35ce meta-digi: revert revisions to AUTOREV
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-27 22:03:34 +02:00
Arturo Buzarra 1acb052f68 meta-digi: update revisions for dey-5.0-r4.2
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-27 22:03:33 +02:00
Arturo Buzarra d58d20358e meta-digi-dey: bump distro version to 5.0-r4.2
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-27 21:36:19 +02:00
Arturo Buzarra 14cd1e7966 build.sh: use dey-image-containers image name
Update the build script to use `dey-image-containers` instead of the old
`dey-image-container-manager` name.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-27 21:17:37 +02:00
Arturo Buzarra 89c42a5b0f installer: media: drop extra usb reset between partitions
Avoid EHCI timeout errors seen on some USB sticks by removing the redundant
`usb reset` between partitions.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-27 21:13:33 +02:00
Gonzalo Ruiz ed9beccdcd sysinfo: add SMARC information
If device is a SMARC, use SMARC properties to log in sysinfo (serial
number, variant, hardware version). If not, use SOM properties.

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2026-05-27 18:32:17 +02:00
Gonzalo Ruiz 9be4f140d2 connectcore-demo-example: ccimx95: add mp4 video file
Replace current MOV video file not supported by Chromium with a MP4
video file with the same video content.

https://onedigi.atlassian.net/browse/DEL-10156

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2026-05-27 18:29:34 +02:00
Gonzalo Ruiz 0248d4a728 video-examples: update tarball to include mp4 file
Add an mp4 example video, with the same contents as the mov file:
1280x720, MPEG-4 format.

Also, for ccimx95, due to Chromium limitations, install the mp4 file
instead of the mov file.

https://onedigi.atlassian.net/browse/DEL-10156

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2026-05-27 18:29:34 +02:00
Francisco Gil 18a23d71d6 dey-image-containers: rename image references
While on it, fix a typo.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-27 17:36:07 +02:00
Isaac Hermida 7950ac2460 meta-digi-containers: modify how to generate the DCP
Modify and document the way to generate a DCP by package_id.
Update the source code of the container manager to align with.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-27 17:01:02 +02:00
Isaac Hermida 9de4842dc3 meta-digi-containers: set container runtime paths
Install the manager configuration with CC_CONTAINER_PATH as working_path.
Move Podman graphroot under installed/podman and set lxc.lxcpath under
installed/lxc for both LXC recipes.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-27 17:01:02 +02:00
Francisco Gil 804e5d5514 dcp: remove unused custom profile
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-27 16:47:58 +02:00
Francisco Gil 6fd27ea079 dey-image-dcp: rename built-in profiles with -demo suffix
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-27 16:47:58 +02:00
Francisco Gil f3dc656029 dcp: chromium: fix hardcoded wayland display
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-27 16:47:58 +02:00
Francisco Gil 86763846ae dcp: remove CONTAINER_NAME variable and rename CONTAINER_TYPE
Now CONTAINER_TYPE is named DCP_NAME

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-27 16:47:58 +02:00
Francisco Gil 095fe1ac36 dey-image-dcp: rename dey-image-containers
Rename the files/references as follow:

dey-image-container-manager  ---> dey-image-containers
dey-image-containers ---> dey-image-dcp

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-27 16:47:58 +02:00
Francisco Gil 8674cf9edf containers: set lvgl as default CONTAINER_TYPE
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-27 16:47:58 +02:00
Hector Bujanda 852cac43ac mca-tool: update to version 1.28
Signed-off-by: Hector Bujanda <hector.bujanda@digi.com>
2026-05-27 03:34:19 +02:00
Arturo Buzarra 4645131dd8 dey-image-container-manager: include DEY Bluetooth packagegroup
Bluetooth init scripts depend on the `btmgmt` tool, which is provided by the
`bluez5-noinst-tools` package. Since we already include several BlueZ packages,
include the full Bluetooth stack via `packagegroup-dey-bluetooth`, consistent
with how we handle Wi-Fi.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-26 13:20:14 +02:00
Arturo Buzarra b1a41a9593 meta-digi: revert revisions to AUTOREV
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-24 23:20:53 +02:00
Arturo Buzarra 2a44e1aae0 meta-digi: update revisions for dey-5.0-r4.1
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-24 23:20:52 +02:00
Arturo Buzarra 963787022f README: dey-5.0-r4 release notes
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-24 22:21:42 +02:00
Isaac Hermida f041267730 meta-digi-containers: add explicit runtime dependencies for the manager
Our container managers depends on podman and LXC runtime tools, so add
that dependency.
As we provide a trimmed version of both tools (to keep the rootfs minimal),
add a variable so it is easily configurable by customers.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-22 16:32:16 +02:00
Isaac Hermida e713e2d2c0 cc-container-mng: update CLI package
Install the CLI wrapper as containerctl, and refresh archive checksums.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-22 16:32:16 +02:00
Isaac Hermida 1ab4bad7b0 dey-image-container-manager: add SFTP server
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-22 16:32:16 +02:00
Francisco Gil e079bb4689 hostapd: ccimx95: enable ACS by default
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-22 13:13:27 +02:00
Isaac Hermida d9e2154ddc weston-init: skip socket wait without a display
The previous socket wait fixed a race where the login prompt could appear
before Weston had created its Wayland socket. In that case, logging in as
root left WAYLAND_DISPLAY empty and applications could not use waylandsink.

Only wait for the socket when a DRM display is connected, or when the kernel
does not expose DRM connector status files. This keeps the race fix for
display boots while allowing immediate headless logins.
Keep showing a warning when there is no wayland socket.

https://onedigi.atlassian.net/browse/DEL-10141

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-21 18:55:10 +02:00
Isaac Hermida 6325cddb21 mount_digiparts: detect active block root by mounted device
Bootable SD cards may boot with root=/dev/mmcblkXpY instead of
root=PARTUUID=... In that case mount_digiparts.sh treated the system
as NAND/UBI and failed to mount the Digi partitions.
Resolve the active system from the block device mounted as "/" before
falling back to the existing UBI logic.

https://onedigi.atlassian.net/browse/DEL-9676

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-21 18:54:10 +02:00
Arturo Buzarra 7522d609d8 wpa_supplicant/hostapd: apply Murata custom patches on ConnectCore 95
ConnectCore 95 integrates the Murata 2EC Wi-Fi module and requires applying the
vendor custom patch set across the supported releases.

https://onedigi.atlassian.net/browse/DEL-10142

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-21 15:10:59 +02:00
Arturo Buzarra f27ad6b93c wpa_supplicant/hostapd: align nl80211 headers with Linux v6.6.116
Update nl80211 definitions to match Linux v6.6.116, preventing extended feature
mismatches and fixing parsing of driver-reported capabilities.

https://onedigi.atlassian.net/browse/DEL-10142

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-21 15:10:59 +02:00
Francisco Gil 91434f2ce6 conf: set by default HAS_WIFI_VIRTWLANS to "true"
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-21 08:53:29 +02:00
Francisco Gil 6fe296b691 ccimx95: align Wi-Fi userspace with Murata brcmfmac
Adjust the ccimx95-specific networking pieces so they no longer inherit
the IW612-specific behavior from ccimx9:
- use wlan1/p2p0 instead of uap0/wfd0 where appropriate
- install hostapd_wlan1.conf instead of hostapd_uap0.conf
- restore virtual WLAN handling for ccimx95
- avoid IW612-specific suspend/resume actions such as moal reload and
  load_iw612.sh

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-21 08:53:29 +02:00
Isaac Hermida c7adf015f9 bluetooth-init: validate HCI interface after initialization
Some Bluetooth controllers may expose hci0 even when the firmware
initialization has not completed correctly. In that state, the init
script may report success but bluetoothd cannot use the controller.

Validate the controller through the kernel management interface before
accepting the initialization as successful. This matches the interface
used by bluetoothd and catches controllers that are visible through HCI
but not registered in MGMT yet.

Use a timeout for the MGMT query so a broken controller state cannot
block the init script instead of falling back to the retry loop.

https://onedigi.atlassian.net/browse/DEL-9512

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-19 08:54:56 +02:00
Gonzalo Ruiz 23c969f954 firmware-murata-infineon: generalize autocountry service
Make this service generic so it can be reused on every device containing
a Murata+Infineon chip.

In some platforms Worldwide pseudo-country could be 'XZ', in others it
could be 'WW'. Cover both of them.

In the meantime, improve the service to ensure the wifi device is
available by waiting for udev device discovery to settle, retrying
until the wireless interface responds to wl, and restarting the
oneshot unit on failure.

https://onedigi.atlassian.net/browse/DEL-9798

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2026-05-18 17:54:37 +02:00
Gonzalo Ruiz 8359b75ec0 firmware-murata-infineon: add initial CCMP2 CLM blob files
Add CLM blob files with power limits based on the CCMP25 Certification
process.

There is a different CLM blob file to be used if the device operates
as STATION or Access point (AP) or if it is meant to be used Indoors or
Outdoors. Every file is deployed into the system, but only
STATION+INDOOR files are selected by default.

For each use case there is a US-only and a Worlwide CLM blob file.
Initial list of countries covered by the Worldwide binaries is:
* US
* Canada
* Europe
* Japan
* Australia
* New Zealand

Files:
- cyfmac55500-sdio_US.APIndoor.clm_blob      (MD5SUM: 3e6f5fdcf9a88cf425179c69862ac67f)
- cyfmac55500-sdio_US.APOutdoor.clm_blob     (MD5SUM: f8655f59b87ac5a71a2a90f08c52755b)
- cyfmac55500-sdio_US.STAIndoor.clm_blob     (MD5SUM: e2bf5ed665876203085bd0cc9c90e590)
- cyfmac55500-sdio_US.STAOutdoor.clm_blob    (MD5SUM: ddc81881d8ed0b70e2b843bb7899e758)
- cyfmac55500-sdio_World.APIndoor.clm_blob   (MD5SUM: e48416c461469652ef5594a402a596cd)
- cyfmac55500-sdio_World.APOutdoor.clm_blob  (MD5SUM: 5c57605395d4e186c58b59e4a57d80cd)
- cyfmac55500-sdio_World.STAIndoor.clm_blob  (MD5SUM: 3f54dbf06d633d7b1aad816f6d655b9d)
- cyfmac55500-sdio_World.STAOutdoor.clm_blob (MD5SUM: 9f706f9ae5d833e386ebabc21e7c779b)

https://onedigi.atlassian.net/browse/DEL-9798

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2026-05-18 17:54:37 +02:00
Isaac Hermida 2845b72ce9 x-linux-ai: recipes-samples: improvements to face-recognition
Add full support to face-recognition demo so it can be integrated in the
webkit demo.

Improvements are:
* support for USB camera
* use 640x480 resolution so it fits in our COG demo

https://onedigi.atlassian.net/browse/DEL-10133

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-15 11:39:39 +02:00
Isaac Hermida 2bbaa723b0 dey-image-container: remove old DCP artifacts when RM_OLD_IMAGE is set
dey-image-container is not a full image, so the regular image cleanup
does not remove old DCP artifacts from the deploy directory.
Add a dedicated cleanup task that honors RM_OLD_IMAGE and removes previous
LXC and Podman DCP artifacts before generating the new ones.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-14 18:02:27 +02:00
Isaac Hermida d54f8b7281 dey-image-container: flatten LXC payload layout
Generate the LXC payload tarball with config and rootfs/ at the
archive root so it matches the documented DCP format and the strict
installer expectations.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-14 18:02:27 +02:00
Isaac Hermida 57a87c4000 bluetooth-init: expand BT_GPIO in installed scripts
Expand the BT_GPIO placeholder after installing the init script, so
optional scripts such as bluetooth-init_atheros are handled the same way.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-14 18:01:24 +02:00
Mike Engel bcf4883d60 linux-dey-6.6: update RT patches to v6.6-stm32mp-r3 Linux release
Sync STM32MP-specific RT kernel patches, aligned with the latest
ST release from meta-st-x-linux-rt layer.

Signed-off-by: Mike Engel <Mike.Engel@digi.com>
2026-05-14 13:02:11 +02:00
Isaac Hermida 58577373ba mount: fix intermittent data partition automount
The udev mount script always queried the active system before mounting
any partition. On eMMC systems this lookup used /dev/disk/by-partlabel,
which is populated by udev itself and may still be incomplete and the
script exited for that partition.
Only resolve the active system for linux_a/linux_b, and read the eMMC
root partition name from sysfs instead of the udev-created by-partlabel
links.

https://onedigi.atlassian.net/browse/DEL-10131

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-13 19:23:19 +02:00
Javier Viguera 32996b0885 tf-a-tools: fix FIP encryption key conversion
create_st_fip_binary.sh converts binary encryption keys to hex before
passing them to encrypt_fw. hexdump may collapse repeated binary data
into '*', corrupting the key and causing encrypt_fw to reject it with an
invalid key size.

Add a bbappend to patch the helper from meta-digi and use hexdump -v so
the full key is emitted.

https://onedigi.atlassian.net/browse/DEL-10115

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-05-13 12:12:34 +02:00
Javier Viguera 8293eddb57 tf-a-stm32mp: force verbose hexdump for FIP encryption key
When TrustFence encryption is enabled, the TF-A recipe converts the
binary FIP encryption key to a hexadecimal string and passes it to the
TF-A build as ENC_KEY.

hexdump suppresses repeated output by default and emits '*' when it folds
duplicate data. If that happens while converting the key, the generated
ENC_KEY contains the '*' marker instead of the full hex string. The
malformed value then breaks the make command line, and make can interpret
the remaining key fragment as a target, failing for example with:

make ... ENC_KEY=13eb911dfcc316b1b99bbbbf10a7000c3055e863* 166d3c8c9cd6f888b720a9 all
make: *** No rule to make target '166d3c8c9cd6f888b720a9'.  Stop.

Use hexdump -v so every byte of the binary key is emitted and ENC_KEY is
always a complete, contiguous hex string.

https://onedigi.atlassian.net/browse/DEL-10115

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-05-13 12:12:34 +02:00
Francisco Gil 351a8df4ef ccimx95-dvk: update XBee UART and reset GPIO for smarc
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-13 10:14:54 +02:00
Arturo Buzarra 3a3d6c699f x-linux-ai: recipes-samples: add face-recognition example
Make the minimal changes needed to adapt the original X-LINUX-AI example and
integrate it into the Digi custom launcher.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-12 15:05:16 +02:00
Arturo Buzarra cb70c15394 x-linux-ai: recipes-samples: fix USB camera support on X-LINUX-AI v6.2.0
Restore the V4L2SRC based pipeline for USB webcams that was dropped in newer
X-LINUX-AI releases, fixing USB camera support on the v6.2.0 baseline.

https://onedigi.atlassian.net/browse/DEL-10040

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-12 15:05:16 +02:00
Francisco Gil 599fa04a01 sysinfo: update QR payload data sources and output
Read the QR serial number from /proc/device-tree/serial-number and the
MAC address from the U-Boot ethaddr environment variable.

Include digi,drm-ic in the QR payload only when present, and update the
console output and provisioning message accordingly.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-11 16:28:10 +02:00
Francisco Gil 56865c2972 ccimx95: libdigiapix: update configuration file for ccimx95 smarc
In the smarc board there is not a PWM/ADC signal to test.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-05-11 16:28:10 +02:00
Javier Viguera e60ec31593 imx-oei: update source revision
* Add support for 4GiB LPDDR5.
* Make default the 2GiB configuration.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-05-08 15:24:07 +02:00
Javier Viguera d96004a043 imx-boot: stop bundling ccimx95 Cortex-M7 demo firmware
Drop the imx-m7-demos dependency and build only the A55 boot target,
since Cortex-M firmware is board-specific and should not be selected as
a default SoC artifact. This follows the same cleanup done upstream in
meta-freescale commit 598f047ef112a0c88f699714cd10dc87c8460c5a.

https://onedigi.atlassian.net/browse/DEL-9882

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
(cherry picked from commit 81cf596834382f87701d701277e13c97316de978)
2026-05-08 15:22:02 +02:00
Isaac Hermida 3552e1b5e1 bluetooth-init: fix BT_GPIO expansion
After refactoring these scripts in a8c6dcb56e, some platforms are
not setting the enable line correctly.
Regarding the affected platforms, on the 6UL it works because that GPIO
comes enabled by default, but not on the other ones.
For the other platforms refactored, such as the CC91/93 or CCMP25,
it is not needed, as the variable is used directly in the gpioset command.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-08 12:25:27 +02:00
Isaac Hermida f814f4cda0 meta-digi-arm: fix Wi-Fi direct interface name for cc91/cc93
This error was introduced while refactoring the cc9 family config.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-07 12:27:57 +02:00
Isaac Hermida 2c9a8d9ca0 dey-image-container-manager: add recommended Wi-Fi tools
Add the complete Digi recommended set of Wi-Fi tools, if not wpa-cli or
hostapd are not included.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-07 12:24:28 +02:00
Isaac Hermida a8d8aeade8 cc-container-mng: switch to proprietary 1.0.0 tarball source
The package is no longer fetched from Git, so rename the recipe to a
versioned .bb file and fetch the proprietary artifact from Digi server.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-07 12:20:18 +02:00
Isaac Hermida b33ad27ba5 meta-digi-containers: add recipe for dey-image-container-manager-swu
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-07 12:19:48 +02:00
Arturo Buzarra 4039e2e4e2 cc-container-mng: fix license checksum
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-05-06 22:24:58 +02:00
Hector Bujanda 897ca48d9b bootcount: change ccimx95-dvk to store bootcount in mca_cc95_smarc nvram
Signed-off-by: Hector Bujanda <hector.bujanda@digi.com>
2026-05-05 17:43:03 +02:00
Gonzalo Ruiz fb7815bc6e firmware_qualcomm: ccimx6ul: adjust 2.4GHz TxPower
Update US Board Data File to use the new CTL3 power limits,
adjusting the TxPower levels in the 2.4GHz band to account for
output power tolerances.

The new BDF is:

- bdwlan30_US.bin (6ec9d36d5149c1cd3b6c3cbbed1bfb0e)

https://onedigi.atlassian.net/browse/DEL-10010
https://onedigi.atlassian.net/browse/CC6UL-1351

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2026-05-05 15:34:10 +02:00
Isaac Hermida f9da8e8db6 cc-containerd: run shutdown helper from shutdown.target
The shutdown helper was installed and enabled, but during reboot it was
never started.
Hook the helper directly into shutdown.target.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-05 08:48:28 +02:00
Isaac Hermida f1d71fd66c cccsd: wait for network readiness before starting service
CCCS service starts before the network is fully ready and fail the first
connection attempt. When that happens, the daemon waits for the
configured reconnect interval before trying again, which delays DRM
availability for dependent services.

https://onedigi.atlassian.net/browse/DEL-10083

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-05-04 18:39:46 +02:00
Hector Bujanda 8b03656826 mca-tool: update to version 1.27
Signed-off-by: Hector Bujanda <hector.bujanda@digi.com>
2026-05-04 16:26:11 +02:00
Mike Engel a8c6dcb56e bluez: generalize BT GPIO configuration for bluetooth-init script
This commit generalizes the BT GPIO value used in the bluetooth-init
script for different platforms.

Signed-off-by: Mike Engel <Mike.Engel@digi.com>

https://onedigi.atlassian.net/browse/DEL-9668
2026-04-30 16:39:03 +02:00
Isaac Hermida 9576c20113 meta-digi-containers: remove DRM options
The DRM support is still a work in progress feature and is not ready yet.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-30 13:00:13 +02:00
Isaac Hermida 0df6685a07 cccsd: add syslog dependency
The Cloud Connector depends on syslog for logging, so this package is
required to properly collect its messages.

https://onedigi.atlassian.net/browse/DEL-10080

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-30 12:55:07 +02:00
Arturo Buzarra 7d18bd37f3 ccimx95-dvk: add wl manufacturing tool for Infineon wireless chips
Install the wl tool by default. It is a useful utility for customers to
perform additional wireless configuration and debugging.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-04-30 12:32:40 +02:00
Arturo Buzarra 8f2ac0347c bluez5-init: ccmp2: increase Bluetooth operational speed to 3M
Increase the Bluetooth UART operational speed to 3M baudrate for CCMP2.

https://onedigi.atlassian.net/browse/DEL-9454

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-04-30 12:32:05 +02:00
Mike Engel e913427295 Merge branch 'dey-5.0/master' into dey-5.0/maint
Signed-off-by: Mike Engel <Mike.Engel@digi.com>
2026-04-30 11:51:33 +02:00
Francisco Gil 6f1080025c dey-image-container: clean temporary task directories reliably
Create task temporary directories under `${T}` instead of the host `/tmp`
and remove them when the task exits.

This avoids leaving large temporary directories behind during container
artifact generation.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-04-30 07:37:10 +02:00
Francisco Gil cc2630c59e ccimx95: dey-image-container: add chromium base image
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-04-30 07:37:10 +02:00
Francisco Gil c2c4edac9b ccimx95: dey-image-container: create base image for flutter/lvgl
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-04-30 07:37:10 +02:00
Hector Bujanda dd0c1a1957 ccimx95-dvk: add overlay for mca gpio watchdog
Signed-off-by: Hector Bujanda <hector.bujanda@digi.com>
2026-04-29 16:42:37 +02:00
Arturo Buzarra 9da8426ab4 build.sh: add step to partially copy build artifacts
Add an extra step to copy build artifacts after each build. Some build targets
require additional layers and custom configurations, and subsequent build steps
can overwrite or remove previously generated artifacts once the configuration is
no longer compatible.

https://onedigi.atlassian.net/browse/DEL-10026

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-04-29 15:09:07 +02:00
Javier Viguera abd3f4dbc2 libsocketcan: drop SRCREV override from bbappend
The bbappend hardcoded an old libsocketcan revision. Remove the override
so the recipe uses the revision from meta-openembedded. Also refresh our
patch, so it applies cleanly on top of the new revision.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-04-29 10:59:32 +02:00
Arturo Buzarra 28113b1665 build.sh: add support to build dey-image-container-manager images daily
Add support to build `dey-image-container-manager` daily, including handling
images that require additional Yocto layers or configuration beyond the default
set.

https://onedigi.atlassian.net/browse/DEL-10026

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-04-27 14:01:58 +02:00
Isaac Hermida 267f78ac9d containers: derive DCP package id from logical name
Generate the package if from logical name when it is not specified in
the json. If case it is set, use it.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-24 09:14:00 +02:00
Isaac Hermida 3b93a2c2e1 containers: preserve friendly names in generated DCP manifests
Propagate an optional manifest name field through the DCP generator, so the
container manager can publish friendly names DRM.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-24 09:14:00 +02:00
Isaac Hermida 2fa5427622 meta-digi-containers: generate DCP with DRM policy block
Align the policy DRM block with the latest changes done in the
cc-container-mng tool.

https://onedigi.atlassian.net/browse/DEL-10075

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-24 09:14:00 +02:00
Isaac Hermida 408a8bec60 cc-containerd: stop managed containers earlier on shutdown
Keep the shutdown helper active during normal system operation and run the
managed container stop path from ExecStop when shutdown begins.

This makes the container stop happen before the general system teardown,
so network and CCCS are still available and reboot is less likely to
block waiting for late shutdown ordering.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-23 10:22:05 +02:00
Isaac Hermida 6ad1a57317 cc-containerd: use "/root/container" as default containers path
Currently only the CCMP25 and CC95 will officially support containers.
For these platforms, "/root" is a common path with enough free space.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-23 10:22:05 +02:00
Isaac Hermida 69286f4057 Generate unique DCP package ids
https://onedigi.atlassian.net/browse/DEL-10035
https://onedigi.atlassian.net/browse/DEL-10081

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-22 10:00:31 +02:00
Isaac Hermida d743784281 cc-containerd: order service around CCCS
As cc-containerd uses DRM to publish metrics, start the service after
cccs (this is optional, as the container will retry it) and stop our
service before cccsd (to do our best to try to upload the STOP status
to DRM)

https://onedigi.atlassian.net/browse/DEL-10035

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-22 09:59:39 +02:00
Isaac Hermida 61dc4c88cf cc-container-mng: install config at /etc
There is no need to have a dedicated folder, as we only use a configuration
file. Other data is stored in a different path.

https://onedigi.atlassian.net/browse/DEL-10035

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-22 09:59:39 +02:00
Isaac Hermida 6d29433642 meta-digi-containers: dey-image-container: add DRM support for DCP
Add the support to enable DRM support on the DCP artifact.

https://onedigi.atlassian.net/browse/DEL-10035

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-22 09:59:37 +02:00
Isaac Hermida 6a75e08023 containers: cc-container-mng: add shutdown service
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-20 09:21:57 +02:00
Javier Viguera a82412530c packagegroup-dey-examples: skip MCA examples on ccimx95
Module ccimx95 enables the mca machine feature, but it does not support
dey-examples-adc-cmp or dey-examples-tamper. Move the MCA example list
to DEY_EXAMPLES_MCA and clear it for ccimx95.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-04-17 12:08:48 +02:00
Mike Engel 0a307d029e meta-digi-dey: replace systemd-udev-settle from BT and ifupdown service
This commit replaces systemd-udev-settle from bluetooth-init and
ifupdown service. Systemd recommends not to use that service and
wait for specifc event or service to sync interfaces.

Signed-off-by: Mike Engel <Mike.Engel@digi.com>

https://onedigi.atlassian.net/browse/DEL-9338
2026-04-16 11:08:02 +02:00
Isaac Hermida 0c915b99f0 dey-image-container-manager: add curl
Include curl in the container-manager image so basic HTTP checks can be
run directly on target when validating containers published ports.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-16 09:43:14 +02:00
Isaac Hermida 2d261dd473 containers: enable netavark port publishing
Enable netavark bridge networking in the trimmed Podman recipe
so container images support publish-port arguments
such as -p 80:8080 and restore iptables dependency.
It's needed to install iptables-modules because it is not
populated due to NO_RECOMMENDATIONS.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-16 09:42:44 +02:00
Isaac Hermida a5f42a53af linux-virtualization: enable CNI multiport support
Enable CONFIG_NETFILTER_XT_MATCH_MULTIPORT in the Docker kernel fragment
so port publishing works.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-16 09:42:44 +02:00
Isaac Hermida f70b5328c4 dey-image-container: generate canonical tar.gz LXC bundle payloads
Switch the Yocto LXC bundle output to tar.gz and require the same format
in the external DCP generator so the DCP can embed the payload
without extra conversion.
This saves time on the device when installing.

https://onedigi.atlassian.net/browse/DEL-10037

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-16 09:42:44 +02:00
Isaac Hermida efa04d2069 dey-image-container: move recipe to use external script
Instead of using the internal logic, move to use the external
script to generate the DCP, so internal and external DCP are
using a common flow.

https://onedigi.atlassian.net/browse/DEL-10037

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-16 09:42:44 +02:00
Isaac Hermida 6fe49f0469 containers: create external script to generate DCP
https://onedigi.atlassian.net/browse/DEL-10037

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-16 09:42:44 +02:00
Isaac Hermida bc497e0c48 dey-image-container-manager: add DRM runtime support
https://onedigi.atlassian.net/browse/DEL-10035

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-15 19:52:06 +02:00
Francisco Gil 01ad58fcb8 sysinfo: add QR output and display backends
Add QR code generation to sysinfo using U-Boot serial and
MAC address information, with support for both standard
and legacy payload formats.

When requested with --qr_display, show the QR code using the
most suitable backend for the running system

https://onedigi.atlassian.net/browse/DEL-9281

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-04-13 16:40:04 +02:00
Javier Viguera 5c87cefd91 meta-digi-dey: drop nxp-wlan-utils from ccimx95-dvk
Restrict nxp-wlan-utils to ccimx91 and ccimx93. The ccimx95 uses the
Murata wireless chip.

https://onedigi.atlassian.net/browse/DEL-9990

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-04-10 11:18:04 +02:00
Javier Viguera 2a121a371d imx-system-manager: update source revision
This brings latest changes related with SMARC modules.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-04-09 15:06:37 +02:00
Javier Viguera 322f90d0a4 meta-digi-arm: add u-boot environment partition to WIC images
Switch ccimx8/ccimx9 wic images to a layout with a u-boot-env
partition. Use a fixed PARTUUID for SD rootfs.

https://onedigi.atlassian.net/browse/DUB-1119

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-04-08 13:19:02 +02:00
Isaac Hermida 25dfe3d20a containers: make trimmed runtimes conflict with standard ones
Mark the trimmed runtime variants as conflicting with the standard
packages so images cannot include both Podman or LXC flavors at the
same time.

This avoids ambiguous runtime layouts and configuration ownership when a
minimal container-manager image uses the trimmed packages while other
images may select the standard runtimes.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-08 09:02:20 +02:00
Isaac Hermida 5b45c1e64c podman: configure network backend explicitly
Generate /etc/containers/containers.conf so Podman does not depend on
its internal default network backend at runtime.
If not, at runtime, the default podman network fails with:
"""
Error: could not find "netavark" in one of {[/usr/local/libexec/podman /usr/local/l
ib/podman /usr/libexec/podman /usr/lib/podman] {<nil>}}.  To resolve this error, se
t the helper_binaries_dir key in the `[engine]` section of containers.conf to the d
irectory containing your helper binaries.
"""

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-08 09:02:20 +02:00
Isaac Hermida da1aaeec78 dey-image-container: webkit: do not spawn two start init processes
The container entrypoint already runs docker-init, so there is no
need to chain a second instance.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-08 09:01:25 +02:00
Isaac Hermida f7a882fa1e dey-image-container: add DCP registration defaults
Include default registration settings in the generated DCP manifest so
future install flows can bootstrap the container configuration directly
from the package metadata.

Add registration_defaults with autostart, monitor and restart policy,
and populate those values for the lvgl and webkit container profiles.

https://onedigi.atlassian.net/browse/DEL-10033

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-08 09:01:25 +02:00
Isaac Hermida 36716d7b4d dey-image-container: webkit/lvgl: add podman create args
Populate the DCP manifest for the ccmp25 lvgl and webkit profiles with
the Podman runtime arguments required to create the containers on the
target.

Keep only runtime options in CONTAINER_CREATE_ARGS_PODMAN and compose the
entrypoint automatically from CONTAINER_INIT_MANAGER and
CONTAINER_INIT_SCRIPT when generating the Podman artifact metadata.

https://onedigi.atlassian.net/browse/DEL-10033

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-08 09:01:25 +02:00
Isaac Hermida d88eb15ccb containers: store LXC console logs
The log file is used by the daemon to show the LXC logs

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-08 09:00:08 +02:00
Isaac Hermida 4dba2c617b containers: add flutter demo profile
https://onedigi.atlassian.net/browse/DEL-10050

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-04-08 09:00:08 +02:00
Hector Palacios efb20ef387 ccimx9: rename LVDS ovelays
For consistency, rename LVDS overlays:
- Add display model to ccimx93-dvk LVDS overlay
- Convert underscore to dash on ccimx95-dvk LVDS overlays
  (the underscore only to separate platform from functionality)

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2026-04-07 11:32:07 +02:00
Arturo Buzarra 613b22faa2 firmware-murata: fetch firmware from Infineon repo instead of tarball
Update the recipe to pull Infineon firmware binaries from the official Infineon
repository (aligned with imx-scarthgap-longma Murata branch), avoiding
tarball-related build issues. Firmware remains at Infineon 2026_0108.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-30 22:16:06 +02:00
Isaac Hermida 69f53bf2d8 dey-image-container-manager: add dualboot
Add dualboot as part of the core support for dey-image-container-manager

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-30 18:58:02 +02:00
Isaac Hermida e8ecb28944 dey-image-container: webkit: fix config devices for ccmp25
The ccmp25 WebKit container needs a small set of extra device nodes
to run the embedded AI demos reliably.
Bind only the device nodes validated on target for the browser demos:
galcore, DRM, framebuffer, input, and the camera video/media/subdevice
nodes used by the AI examples.

https://onedigi.atlassian.net/browse/DEL-10038
https://onedigi.atlassian.net/browse/DEL-10039

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-30 18:58:02 +02:00
Isaac Hermida 4898b616a7 dey-image-container: webkit: complete runtime packages
The WebKit container profile was missing runtime pieces that are
present in the native WebKit image and required by the embedded
ConnectCore demos.

Add the font and icon packages needed by the fish tank WebGL demo,
include the Weston and GStreamer runtime packages used by the browser
demo stack, and switch the ccmp25 profile to the GCNano userspace
packages used by the native image.

Keep the machine learning packagegroup scoped to ccmp25, since the
ST X-LINUX-AI subset and its demo integration are specific to that
platform.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-30 18:58:02 +02:00
Isaac Hermida c0d042e953 dey-image-container: webkit/lvgl: modify weston startup
Standalone GPU and video tests perform as expected in the WebKit
container, but rendering degrades once Cog runs on top of Weston.
Align the container Weston startup with the native setup by
loading the default Weston options, enabling the systemd-notify
module and exporting WL_EGL_GBM_FENCE=0 before starting the compositor.

https://onedigi.atlassian.net/browse/DEL-10038
https://onedigi.atlassian.net/browse/DEL-10039

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-30 18:58:02 +02:00
Isaac Hermida 682b2aec84 dey-image-container-manager: restore hotplug support
Package recommendations are disable, so some recommended packages might
be missed.
For HW detecting add the next explicit packages, which solves the
microSD card detection.

https://onedigi.atlassian.net/browse/DEL-10042

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-30 18:58:02 +02:00
Mike Engel a16ad0fd2d trustfence: generalize u-boot environment encryption configuration
Signed-off-by: Mike Engel <Mike.Engel@digi.com>
(cherry picked from commit cd9a79152866ed2fcc91a2316d6a4f9eb3e72266)
(cherry picked from commit eb3d6e0355)
2026-03-30 13:59:21 +02:00
Arturo Buzarra c5dc142d65 libubootenv: add support for environment encryption on CCMP2
This commit adds support for environment encryption/decryption of the
u-boot environment on the CCMP2 platform in Linux.

https://onedigi.atlassian.net/browse/DEL-10029

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
(cherry picked from commit 9b99c0b073)
2026-03-30 13:59:21 +02:00
Arturo Buzarra 4f88e8969a x-linux-ai: recipes-samples: allow builds on ccmp1x
Remove the ccmp1x machine restriction from the sample recipes, since they
support both CPU and NPU variants.

https://onedigi.atlassian.net/browse/DEL-10045

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-30 13:44:30 +02:00
Mike Engel eb3d6e0355 trustfence: generalize u-boot environment encryption configuration
Signed-off-by: Mike Engel <Mike.Engel@digi.com>
(cherry picked from commit cd9a79152866ed2fcc91a2316d6a4f9eb3e72266)
2026-03-27 17:15:05 +01:00
Arturo Buzarra 9b99c0b073 libubootenv: add support for environment encryption on CCMP2
This commit adds support for environment encryption/decryption of the
u-boot environment on the CCMP2 platform in Linux.

https://onedigi.atlassian.net/browse/DEL-10029

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-27 17:14:23 +01:00
Arturo Buzarra 095726c170 ccimx95: bootscript: add bootscript for ConnectCore 95
Add a bootscript for the ConnectCore 95 platform, including the default device
tree overlay names.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-27 13:31:01 +01:00
Gabriel Valcazar 1ca5a27f51 weston: recover ccimx6/6qp suspend/resume workaround from DEY 3.0
We initially created this patch when adding XWayland support for the ccimx6 and
ccimx6qp back in dey-3.0-r2.1 (commit eda2f4177e), but we ended up removing
it in dey-4.0-r1.beta1 (commit 526cb3cae0). Even though the blank screen
issue isn't nearly as reproducible as it was back when it was initially
discovered (it used to have a 66% chance of happening), it can still occur
every now and then, especially on the ccimx6 when using an LVDS display.

Adapt the patch to weston 10.0.5.imx and apply it to fix the issue.

https://onedigi.atlassian.net/browse/DEL-7236

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-27 12:53:41 +01:00
Hector Bujanda 5407d4a206 mca-tool: update version 1.26 with artifacts from BuildServer
Signed-off-by: Hector Bujanda <hector.bujanda@digi.com>
2026-03-27 09:19:40 +01:00
Arturo Buzarra 4e191ff58a Revert "mca-tool/trustfence-tool: don't install files in /sbin when usrmerge is enabled"
This partially reverts commit f6d91b9022. The new
mca-tool v1.26 already installs its binaries to /usr/sbin (instead of /sbin),
so the workaround is no longer needed.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-27 08:35:21 +01:00
Hector Palacios f8df964716 ccimx95-dvk: add NXP EXPI-OS08A20 camera DT overlay
Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-10036
2026-03-26 18:14:02 +01:00
Hector Bujanda 5c37352478 mca-tool: update to version 1.26 with support for mca_cc95_smarc
Signed-off-by: Hector Bujanda <hector.bujanda@digi.com>
2026-03-26 08:24:01 +01:00
Francisco Gil f668d4722c lvgl: remove leading whitespaces in IMAGE_FEATURES:remove setences
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-03-25 16:19:01 +01:00
Francisco Gil addf529fc7 linux-dey: allow overriding the kernel logo file from Yocto
https://onedigi.atlassian.net/browse/DEL-9816

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-03-25 16:19:01 +01:00
Francisco Gil 9834232a8c weston: allow overriding the weston background from Yocto
https://onedigi.atlassian.net/browse/DEL-9816

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-03-25 16:19:01 +01:00
Francisco Gil 3b89442fdc psplash: allow overriding the splash logo image from Yocto
https://onedigi.atlassian.net/browse/DEL-9816

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-03-25 16:19:01 +01:00
Francisco Gil ca9f16965f u-boot: allow overriding the built-in splash logo from Yocto
https://onedigi.atlassian.net/browse/DEL-9816

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-03-25 16:19:01 +01:00
Francisco Gil 16e6e0978b core-image-base: disable splash screen
Disable splash screen for consistency with the rest of images.

https://onedigi.atlassian.net/browse/DEL-9816

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-03-25 16:19:01 +01:00
Arturo Buzarra da4aefa006 Revert "x-linux-ai: fix build issue with OpenSTLinux v6.2"
This reverts commit d0f9c61efd because it is no
longer needed with the X-LINUX-AI v6.2.0 release.

https://onedigi.atlassian.net/browse/DEL-10027

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra 8cfa94879b x-linux-ai: stai-mpu: update bbappend for X-LINUX-AI v6.2.0
ST updated the AI layer from v6.1.1 to v6.2.0, which means our v6.1.% bbappend
is no longer applied. Update the recipe version to match the new X-LINUX-AI
release.

https://onedigi.atlassian.net/browse/DEL-10027

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra 55456629f0 trustfence: stm: set TF-M variables to fix build issue
The latest ST release (openstlinux-6.6-yocto-scarthgap-mpu-v26.02.18) checks for
the presence of several TF-M-related variables at parse time, even when they are
not used. This triggers build failures with the new M33-TD flavor variables
required by the TF-M recipe.

Set default (dummy) values for these variables to avoid the parse-time failures.
This is a workaround until full support for building secure TF-M binaries is
integrated.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra ab5f937cb6 stm-st-stm32mp: tf-m-stm32mp-scripts: fix SDK build issue due to wrong UID ownership
The original do_install() preserves file ownership, which can contaminate the
SDK build and cause "getpwuid(): uid not found: 1000". Adjust the copy command
to not preserve owner/group.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra b0a140a35c stm-st-stm32mp: tf-m-stm32mp/m33fw-stm32mp2: Add custom sign-stm32mp bbclass to fix build issue
This commit imports the Digi custom version of sign-stm32mp bbclass to ensure
that the search_path() function does not raise a build exception if the signing
tool or keys are not present in the PATH before starting the build process.

In our case, we do not need to manually install the tools or generate the keys
beforehand, as this is automatically handled by Yocto in our DEY distribution.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra 261f0e1399 trustfence: fix PKI tree generation on non-encrypted platforms
Commit 3fdb245765 ("trustfence: add encrypted
boot artifact support for CCMP13 platform") broke PKI tree generation when
encryption is disabled. Fix it for ccmp15.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra 287a42403f stm-st-stm32mp: optee-os: remove CFG_REMOTEPROC_PUB_KEY_VERIFY for ccmp15
Commit 52a1111da6d72446530da26e135b65a34b48e279 ("OPTEE: MANAGE signature,
M33TD") in the ST layer incorrectly enables CFG_REMOTEPROC_PUB_KEY_VERIFY=y for
all platforms when SIGN_ENABLE is set.

However, co-processor public key verification against OTP fuses is not
supported on stm32mp1x platforms and causes the build to fail.

Remove CFG_REMOTEPROC_PUB_KEY_VERIFY for ccmp15.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra 1015773388 machine: ccmp2: fix SDK build issue with gcc-aarch64-none-elf toolchain
Remove the TF-A specific toolchain from SDK generation to avoid build issues
caused by unresolved runtime library dependencies in nativesdk-gcc-aarch64-none-elf,
including libcrypt.so.1, libncursesw.so.6, libpython3.8.so.1.0, and
libtinfo.so.6.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 21:45:00 +01:00
Arturo Buzarra ab4a2d558b ccmp15/ccmp25: update Cortex-M signed firmware support
Update secure boot support for Cortex-M processors by refreshing the patch set
and dropping patches already integrated, aligning the implementation with ST
release openstlinux-6.6-yocto-scarthgap-mpu-v26.02.18.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 11:59:23 +01:00
Arturo Buzarra 6e5e6b9dc2 machine: ccmp1x/ccmp25: set STM32 header version per platform
Since commit d29b92ed9935 ("CLASS: SIGN: manage signature for coprocessor")
in meta-st-stm32mp from tag openstlinux-6.6-yocto-scarthgap-mpu-v26.02.18, the
SIGN_HEADER_VERSION variable is required.

Set the appropriate SIGN_HEADER_VERSION value for each platform.

https://onedigi.atlassian.net/browse/DEL-10022

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-23 11:59:23 +01:00
Isaac Hermida c4c0383ed6 meta-digi-containers: use /mnt/data/cc-container as storage path
For podman, configure the storage path modifying its config file.
For LXC, the install path is automatically managed by the daemon.

https://onedigi.atlassian.net/browse/DEL-9996
https://onedigi.atlassian.net/browse/DEL-10005

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:42:03 +01:00
Isaac Hermida 0f54b5a346 meta-digi-containers: keep containers running when cc-containerd stops
Set KillMode=process in the systemd unit so 'systemctl stop
cc-containerd' only terminates the daemon itself.

Without this, systemd uses the default control-group kill mode and
can terminate container processes that share the service cgroup,
which changes container runtime state when the service is stopped.

https://onedigi.atlassian.net/browse/DEL-9963
https://onedigi.atlassian.net/browse/DEL-10005

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:42:03 +01:00
Isaac Hermida 1b6474935d meta-digi-containers: include cc-container-mng in dey-image-container-manager
Add cc-container-mng to dey-image-container-manager so the image ships the
container management daemon together with the trimmed Podman and LXC
runtimes.

https://onedigi.atlassian.net/browse/DEL-9996
https://onedigi.atlassian.net/browse/DEL-10005

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:36:29 +01:00
Isaac Hermida d721721567 meta-digi-containers: add cc-container-mng daemon recipe
Add the cc-container-mng recipe and systemd service.

https://onedigi.atlassian.net/browse/DEL-10005

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:32:18 +01:00
Isaac Hermida 2abcad0c78 meta-digi: document dey-image-container-manager usage
Document dey-image-container-manager in meta-digi-containers and
update the ccmp25-dvk and ccimx95-dvk build template notes so the
image is listed during environment setup together with its
virtualization requirement.

https://onedigi.atlassian.net/browse/DEL-9996

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:20:46 +01:00
Isaac Hermida 4f58ce26e9 meta-digi-containers: add dey-image-container-manager image
Add the dey-image-container-manager image recipe to provide a
dedicated DEY image for container management using the trimmed LXC
and Podman runtimes from meta-digi-containers.

https://onedigi.atlassian.net/browse/DEL-9996

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:20:46 +01:00
Isaac Hermida 17a6ba59cd meta-digi-containers: add trimmed container runtime recipes
Add dedicated trimmed runtime wrappers for LXC and Podman in
meta-digi-containers so dey-image-container-manager can install
reduced container runtimes without affecting other DEY images.

https://onedigi.atlassian.net/browse/DEL-9996

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:20:46 +01:00
Francisco Gil 2da298408e dey-image-container: add final artifact bundle generation
Add the artifact packaging stage that assembles deployable LXC/Podman
bundles with a normalized layout (manifest, payload, checksums, metadata).

The task also computes digests/metadata and removes intermediate build
outputs once final artifacts are produced.

https://onedigi.atlassian.net/browse/DEL-10004

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:17:39 +01:00
Francisco Gil 3efe532995 dey-image-container: add core image flow for LXC and Podman outputs
Introduce the base dey-image-container recipe and split core logic into
dedicated include files for rootfs overlays, LXC bundle generation and
Podman archive conversion.

This commit defines the profile-driven variables/overrides and the
native build tasks required to produce runtime-specific container outputs.

Also allow the recipe to overwrite WAYLAND_DISPLAY on init scripts to match
with different platforms.

https://onedigi.atlassian.net/browse/DEL-10004

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:16:25 +01:00
Francisco Gil 8ba3905c2e meta-digi-containers: add layer configuration for DEY 5.0 (scarthgap)
Add the new meta-digi-containers layer skeleton for Yocto 5.0 and wire it into bitbake layer discovery.

This initial layer commit provides:
- layer metadata and compatibility/dependency declarations
- recipe/bbappend file discovery for container-related content
- base structure used by subsequent commits for container images and runtime integration

https://onedigi.atlassian.net/browse/DEL-10004

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2026-03-20 13:15:39 +01:00
Gonzalo Ruiz 5d54f13c2d libubootenv: generate key modifier from fuses
Until now the key modifier was being read from 'hwid_n' device tree
entries, but now those entries reflect the environment HWID, which
could be temporarily overriding the fuse HWID.

Ensure the key modifier is generated from the new 'hwid_fuse_n'
device tree entries created by U-Boot with the contents of the
fuse HWID, just as U-Boot does to encrypt/decrypt the environment.

https://onedigi.atlassian.net/browse/DEL-9123

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2026-03-20 10:15:09 +01:00
Gabriel Valcazar 191f891f6c lvgl: clean up configuration options
Remove options that aren't supported in v9.3.0 (LV_MEM_CUSTOM and
LV_TICK_CUSTOM_*) and move the lvgl-demo's default values to lv-conf.inc so
they can be changed via local.conf

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Gabriel Valcazar 2af1e72123 lvgl: lv-conf.inc: enable touchscreen support for the wayland backend
LVGL v9.3.0 added support for multi-touch gestures via the
USE_GESTURE_RECOGNITION option, but in doing so, they made all touchscreen
support depend on said symbol, at least for the wayland backend. Since the
option is disabled by default, touchscreen support wasn't working in the
wayland version of the demo.

Enable gesture recognition/touchscreen support by default when using the
wayland backend. This depends on LVGL's floating number support, so make sure
this is reflected in the recipe as well.

https://onedigi.atlassian.net/browse/DEL-9925

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Gabriel Valcazar ce2b958a1d Revert "dey-image-lvgl: remove wayland backend for new version v9.3"
Now that we support the LVGL wayland backend, include the weston desktop in
dey-image-lvgl images, like we used to in older DEY versions.

This reverts commit db3e526b31.

https://onedigi.atlassian.net/browse/DEL-9925

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Gabriel Valcazar ec2d13053e Partially revert "wayland: remove wl_shell and libweston patch"
We only want to recover the libinput patch that fixes the cursor issue in the
LVGL demo, don't recover the wl_shell patch.

This partially reverts commit 7afc4a67de.

https://onedigi.atlassian.net/browse/DEL-9925

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Gabriel Valcazar de238b6d81 lvgl: lvgl-demo: rework recipe to include wayland backend support
Rework our customizations and apply them as full files instead of patches to
make it easier for users to inspect.

Instead of having one cmake file for all backends, provide a separate file for
each backend and select it dynamically based on the selected backend. To do
this, create a new LVGL_BACKEND variable in lv-conf.inc.

While at it, increase the demo's memory from 256 KiB to 2 MiB to ensure that
the wayland flavor of the demo works properly.

https://onedigi.atlassian.net/browse/DEL-9925

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Gabriel Valcazar e3df152ccd lvgl: remove support for the SDL backend
This backend depends on libsdl2, a library we don't include in our default
images. Even when this library is included, the LVGL demo doesn't work properly
when using the SDL backend on any of our platforms, so remove it.

https://onedigi.atlassian.net/browse/DEL-9925

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Gabriel Valcazar c360c9b757 Revert "lvgl-demo: remove vestigial Wayland logic"
We're going to be adding support for LVGL's wayland backend in the following
commits, so recover the initscript logic that ties in with said backend

This reverts commit 21d9c4f17b.

https://onedigi.atlassian.net/browse/DEL-9925

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Gabriel Valcazar a3927c0306 lvgl: lv-conf.inc: include wayland backend support
This is mostly logic to convert the backend configured in the PACKAGECONFIG to
the lv_conf.h file, based on the DEY 4.0 version of the recipe. Add weston as
a runtime dependency to make sure the final image has a wayland compositor and
recover DEY 4.0's mechanism to fall back to a minimal backend if wayland is
missing from DISTRO_FEATURES

Use the wayland backend by default in all platforms except the ccimx6ul

https://onedigi.atlassian.net/browse/DEL-9925

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2026-03-19 15:57:18 +01:00
Arturo Buzarra 2f29dd1dec linux-dey-6.6: update STM branch for release v6.6-stm32mp-r3
Update the STM32MP-specific kernel branch to Linux v6.6.116, aligned with the
latest ST release: openstlinux-6.6-yocto-scarthgap-mpu-v26.02.18.

https://onedigi.atlassian.net/browse/DEL-10021

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-18 10:48:10 +01:00
Arturo Buzarra 35cbb6a169 x-linux-ai: dcmipp-isp-ctrl: sync with OpenSTLinux v6.2
Synchronize the dcmipp-isp-ctrl recipe with the meta-OpenSTLinux layer from the
openstlinux-6.6-yocto-scarthgap-mpu-v26.02.18 tag. Although the version string
appears to be a downgrade, the recipe points to a newer commit (SHA1),
following ST’s versioning.

https://onedigi.atlassian.net/browse/DEL-10021

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-18 10:44:20 +01:00
Arturo Buzarra a5eb54435e stm-st-stm32mp: evision: add evision libraries
These libraries are required by libcamera when IPA support is enabled.
Import them from the meta-OpenSTLinux layer at the
openstlinux-6.6-yocto-scarthgap-mpu-v26.02.18 tag.

https://onedigi.atlassian.net/browse/DEL-10021

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-18 08:48:27 +01:00
Arturo Buzarra 17d1f19a48 stm-st-stm32mp: libcamera-stm32mp: add v0.3.0 with ST IPA
Synchronize the libcamera recipe with the meta-OpenSTLinux layer from the
openstlinux-6.6-yocto-scarthgap-mpu-v26.02.18 tag.

https://onedigi.atlassian.net/browse/DEL-10021

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-18 08:48:27 +01:00
Arturo Buzarra d0f9c61efd x-linux-ai: fix build issue with OpenSTLinux v6.2
The meta-st-x-linux-ai layer is still based on v6.1.1 and is not compatible
with the OpenSTLinux v6.2 BSP.

Mask the recipes that fail to build with v6.2 while waiting for an official
meta-st-x-linux-ai release aligned with OpenSTLinux v6.2.

https://onedigi.atlassian.net/browse/DEL-10021

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-18 08:48:27 +01:00
Arturo Buzarra 61db652b8b ccmp1/ccmp2: disable ENABLE_PARTITIONS_IMAGE for Digi platforms
The meta-st-stm32mp layer for OpenSTLinux v6.2 introduces the flag
ENABLE_PARTITIONS_IMAGE to generate per-partition images. This breaks the build
for DEY platforms, so disable it by default.

https://onedigi.atlassian.net/browse/DEL-10021

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-18 08:48:27 +01:00
Arturo Buzarra fef6a25ca3 ccmp1: remove deprecated image_types-stubi class
This class was removed from meta-st-stm32mp layer for OpenSTLinux 6.2 release.

https://onedigi.atlassian.net/browse/DEL-10021

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-18 08:48:27 +01:00
Javier Viguera 2ec067c6ee openssl: rebase patches for OpenSSL 3.5.5
This fixes the build failure caused by the OpenSSL update in Poky.

Import the OpenSSL patch set from NXP's whinlatter release. Since NXP's
whinlatter release is based on OpenSSL 3.5.4, rebase the patches on top
of OpenSSL 3.5.5 to match the current version.

https://onedigi.atlassian.net/browse/DEL-10019

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-03-17 15:25:20 +01:00
Hector Palacios 5b18593bfd ccimx95-dvk: remove unneeded overlays for SMARC DVK
The SMARC module uses both Ethernet controllers, so ENET2 is
no longer optional.
The DVK does no longer have a MikroBUS connector so the
Mikro-E overlays are no longer needed.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2026-03-17 12:03:19 +01:00
Hector Palacios 77dde9f8f1 ccimx95: adapt systemd power key events for SMARC module
For the ccimx95 SMARC module, the power button is connected
to the MCA, and the MCA is the one that generates the signal
to the ON_OFF input. In the SMARC design, the power button is dedicated
(there is a different button for standby) so we want short key
presses to be treated as a poweroff event right away.
We also want systemd to ignore long presses, as these are absorbed by
the MCA firmware to forcefully power off the PMIC.

When SMARC is disabled, use the default behavior:
- short press: suspend
- long press: graceful poweroff

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2026-03-17 12:01:09 +01:00
Hector Palacios 6b9d2e4114 systemd-conf: machine-configurable power key behavior
Use placeholders and machine-configurable variables to determine systemd
behavior when receiving power key events.
By default, these are:
- short press: suspend
- long press: graceful poweroff

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2026-03-17 12:00:47 +01:00
Hector Palacios ebe606d9ac ccimx95: enable SMARC module by default and conditionalize 'mca' feature
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2026-03-17 11:17:20 +01:00
Javier Viguera cf8d771390 imx-system-manager: use git repository and drop local patches
Remove the local ccimx95 patch series from imx-system-manager bbappend
and fetch the DEY-specific changes directly from the Digi fork.

https://onedigi.atlassian.net/browse/DEL-10009

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-03-13 14:56:11 +01:00
Javier Viguera fe54927861 imx-oei: use git repository and drop local patches
Remove the local ccimx95 patch series from imx-oei bbappend and fetch
the DEY-specific changes directly from the Digi fork.

https://onedigi.atlassian.net/browse/DEL-10009

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-03-13 14:55:56 +01:00
Javier Viguera 2a416f7ebd neo-ipa-uguzzi: add package for NXP's Neo ISP
The neo-ipa-uguzzi package provides uGuzzi IPA (image processing
algorithms) for NXP's Neo ISP on the ccimx95. The recipe is backported
from NXP’s lf-6.12.49_2.2.0 release, and enabled at runtime as part of
the gstreamer packagegroup.

https://onedigi.atlassian.net/browse/DEL-10003

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
(cherry picked from commit 3f4a8a410c)
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-03-09 16:59:36 +01:00
Javier Viguera 3f4a8a410c neo-ipa-uguzzi: add package for NXP's Neo ISP
The neo-ipa-uguzzi package provides uGuzzi IPA (image processing
algorithms) for NXP's Neo ISP on the ccimx95. The recipe is backported
from NXP’s lf-6.12.49_2.2.0 release, and enabled at runtime as part of
the gstreamer packagegroup.

https://onedigi.atlassian.net/browse/DEL-10003

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-03-09 16:51:02 +01:00
Francisco Gil 3b9a8698a7 xbee: cellular: add PLSx3 firmware updater recipe and helper script
Add new `glinswup-PLSx3_1.0.5.bb` binary recipe to package the
Cinterion PLSx3 firmware update tool.

Include `pls3_fw_update.sh` helper script to:
- validate input firmware file and modem port
- stop modem-related services before update
- run `glinswup_PLSx3` firmware update
- restore services on exit

https://onedigi.atlassian.net/browse/DEL-9989

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-03-09 15:54:01 +01:00
Javier Viguera 35dd3ec6c9 imx-oei: add patch with support for 2GiB ram
https://onedigi.atlassian.net/browse/DUB-1117

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-03-06 14:49:00 +01:00
Javier Viguera d5fe033b46 imx-system-manager: add patch with SM fix for 2GiB DDR
The system manager was not reporting (via SCMI) the size for the 2GiB
ram. This patch is a backport of a newer version of the SM.

https://onedigi.atlassian.net/browse/DUB-1117

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-03-06 14:49:00 +01:00
Arturo Buzarra f4d412f08e trustfence: add warnings for deprecated TF variables
Warn when the deprecated TRUSTFENCE_DEK_PATH variable is detected, and fail the
build if it is used to disable artifact encryption. This prevents accidental
wrong compilations and guides users to replacement variables.

https://onedigi.atlassian.net/browse/DEL-9929

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-03-02 10:08:39 +01:00
Javier Viguera a4ce8c0944 ccimx95-dvk: add Neutron NPU overlay
https://onedigi.atlassian.net/browse/DEL-9987

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-02-24 17:41:54 +01:00
Javier Viguera 1768135abd libcamera: backport NXP fork and enable on ccimx95
Add libcamera from NXP’s lf-6.12.49_2.2.0 release, and enable libcamera
gstreamer support for ccimx95.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-02-24 17:40:59 +01:00
Javier Viguera be4c25a260 packagegroup-imx-ml: cosmetic, remove redundant code
ETHOS_U_PKGS appended packages are already set in the bitbake recipe,
so there is no need to add them also in this bbappend.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-02-24 17:40:59 +01:00
Javier Viguera 11999b4810 ccimx95: backport NPU suppport from lf-6.12.49-2.2.0
https://onedigi.atlassian.net/browse/DEL-9987

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2026-02-24 17:40:59 +01:00
Francisco Gil 7736ba21ca xbee: ccimx95: fix reset line in xbee interface
Due to GPIO1 port belongs to the Always-ON (AON) domain and probed last,
port GPIO4 is probed as gpio2.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2026-02-09 09:05:46 +01:00
Arturo Buzarra 90239d6343 ccmp1/ccmp2: set default OP-TEE board config for SDK generation
Select the proper OP-TEE board configuration in the optee-os-stm32mp recipe so
trusted applications are built/exported correctly in the SDK. Without this
change, the build may choose a different MACHINE and trigger unexpected
compilation issues.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-01-27 13:06:35 +01:00
Arturo Buzarra 6927bb1d4a trustfence: fix typo in TRUSTFENCE_COPRO_PASSWORD_FILE
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2026-01-27 13:06:21 +01:00
Javier Viguera d12c7af018 ccimx93-dvk: add missing NHD-3.5-640480EF-MSXP display overlay
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
(cherry picked from commit 2430122424)
2026-01-16 12:08:20 +01:00
Javier Viguera 81bfa24ca4 build-github.sh: bring back ccimx6 supported platforms
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-12-19 10:08:54 +01:00
Arturo Buzarra 4e19acb893 meta-digi: revert revisions to AUTOREV
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-12-16 18:02:34 +01:00
250 changed files with 11741 additions and 82901 deletions

View File

@ -22,11 +22,20 @@ OS versions:
Software for the following hardware platforms is in production support:
## ConnectCore 95
* ConnectCore 95 System-on-Module (SOM)
* ConnectCore 95 SMT 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)
* [CC-WMX-B38E-B1](https://www.digi.com/products/models/cc-wmx-b38e-b1)
* [CC-MX-B38E-B1](https://www.digi.com/products/models/cc-mx-b38e-b1)
* [CC-WMX-B88D-B1](https://www.digi.com/products/models/cc-wmx-b88d-b1)
* [CC-MX-B88D-B1](https://www.digi.com/products/models/cc-mx-b88d-b1)
* ConnectCore 95 SMARC System-on-Module (SOM)
* [CC-MX-B88D-BS](https://www.digi.com/products/models/cc-mx-b88d-bs)
* [CC-WMX-B30F-BS](https://www.digi.com/products/models/cc-wmx-b30f-bs)
* [CC-WMX-B38E-BS](https://www.digi.com/products/models/cc-wmx-b38e-bs)
* 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))
* [CC-WMX95-2G-KIT](https://www.digi.com/products/models/cc-wmx95-2g-kit)
## ConnectCore MP25
* ConnectCore MP25 System-on-Module (SOM)
@ -154,7 +163,42 @@ Documentation is available online at https://www.digi.com/resources/documentatio
## 5.0-r4
TODO
* ST-based platforms
* Updated BSP
* Trusted Firmware ARM v2.10 (based on tag 'v2.10-stm32mp-r3' by ST)
* OP-TEE v4.0.0 (based on tag '4.0.0-stm32mp-r3' by ST)
* U-Boot v2023.10 (based on tag 'v2023.10-stm32mp-r3' by ST)
* Linux kernel v6.6.116 (based on tag 'v6.6-stm32mp-r3' by ST)
* Updated X-LINUX-AI software package (based on tag 'v6.2.0' by ST)
* Added new face recognition demo
* Updated Wifi firmware to 'imx-scarthgap-longma_r1.0' release from Murata
* 2FY Wireless chip: v28.10.590.3
* Added initial country support to the ConnectCore MP2 World CLM blob file
* Fix U-Boot environment encryption support for ConnectCore MP25
* Cortex-M4 signing and authentication support for ConnectCore MP15
* Encryption support for ConnectCore MP13
* NXP-based platforms
* Added support for ConnectCore 95 SMARC
* Updated BSP
* Trusted Firmware ARM v2.10 (based on tag 'lf-6.6.52-2.2.2' by NXP)
* OP-TEE v4.4.0 (based on tag 'lf-6.6.52-2.2.2' by NXP)
* OEI v1.0 (based on tag 'lf-6.6.52-2.2.2' by NXP)
* System Manager 2025q3 (based on tag 'lf-6.6.52-2.2.2' by NXP)
* U-Boot v2024.04 (based on tag 'lf-6.6.52-2.2.2' by NXP)
* Linux kernel v6.6.52 (based on tag 'lf-6.6.52-2.2.2' by NXP)
* Updated Wifi firmware to 'imx-scarthgap-longma_r1.0' release from Murata
* 2EC Wireless chip: v18.53.546.29
* Added WIC support
* Added Flutter image support for ConnectCore 95
* Added Digi Embedded Yocto containers framework through new 'meta-digi-containers' layer
* Added systemd service to start/mount encrypted folders
* Added support for customization of boot logos
* Generation of provisioning QR code in sysinfo
* Upgrade LVGL version to 9.3
* TrustFence
* Sign installer boot scripts
* Improve log messages during artifacts authentication
* General bug fixing and improvements
## 5.0-r3
@ -301,17 +345,16 @@ updated list can be found on the online documentation.
## ConnectCore MP25
* MMC0 input/output errors may appear during extended suspend/resume cycles.
* The system may fail to power off correctly, eventually falling back to a watchdog
reset.
* ConnectCore MP25 System-on-Module (SOM)
* The UART connected to the Bluetooth chip may not operate reliably at higher
baud rates. As a workaround, USART1 is configured to run at 115200 bps, which
limits the maximum throughput of this interface.
## ConnectCore MP13
## ConnectCore 95
* The power button becomes unresponsive after one power-off/power-on cycle.
A system reboot is required to restore normal functionality.
The issue originates from the OP-TEE/ATF firmware and will be addressed in
the next DEY release.
If you need further assistance, please contact Digi Technical Support.
* ConnectCore 95 Development Kit (DVK)
* RS485 is disabled on DVKv2 because DE/RE# line is an MCA_IO that cannot be
toggled in interrupt context.
# Support Contact Information

View File

@ -9,7 +9,6 @@ include conf/machine/include/ccimx6.inc
# Wireless external module
WIRELESS_MODULE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'kernel-module-qualcomm', '', d)}"
HAS_WIFI_VIRTWLANS = "true"
# Wireless p2p interface
WLAN_P2P_DEVICE_NAME ?= "ccimx6qp-p2p"
@ -44,6 +43,9 @@ BT_DEVICE_NAME ?= "cc6qp"
# Bluetooth tty
BT_TTY ?= "ttymxc1"
# Bluetooth GPIO
BT_GPIO ?= "da9063-gpio 4"
# XBee
XBEE_TTY ?= "ttymxc4"

View File

@ -9,7 +9,6 @@ include conf/machine/include/ccimx6.inc
# Wireless external module
WIRELESS_MODULE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'kernel-module-qualcomm', '', d)}"
HAS_WIFI_VIRTWLANS = "true"
# Firmware
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_BT', '1' , 'firmware-atheros-ar3k firmware-qualcomm-qca6564-bt', '', d)}"
@ -46,6 +45,9 @@ SERIAL_CONSOLES ?= "115200;ttymxc3"
# Bluetooth tty
BT_TTY ?= "ttymxc1"
# Bluetooth GPIO
BT_GPIO ?= "da9063-gpio 4"
# XBee
XBEE_TTY ?= "ttymxc4"

View File

@ -31,6 +31,9 @@ SERIAL_CONSOLES ?= "115200;ttymxc4"
# Bluetooth tty
BT_TTY ?= "ttymxc0"
# Bluetooth GPIO
BT_GPIO ?= "gpio5 9"
# XBee
XBEE_TTY ?= "ttymxc1"

View File

@ -30,6 +30,9 @@ SERIAL_CONSOLES ?= "115200;ttymxc4"
# Bluetooth tty
BT_TTY ?= "ttymxc0"
# Bluetooth GPIO
BT_GPIO ?= "gpio5 9"
# Default image for install scripts
DEFAULT_IMAGE_NAME ?= "core-image-base"

View File

@ -14,14 +14,16 @@ SERIAL_CONSOLES = "115200;ttyLP5"
# Bluetooth tty
BT_TTY ?= "ttyLP0"
# Bluetooth GPIO
BT_GPIO ?= "1 7"
# Firmware
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'firmware-nxp-wifi-nxpiw612-sdio firmware-murata-nxp', '', d)}"
# Wi-Fi
WIRELESS_MODULE ?= ""
WIRELESS_MODULE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'kernel-module-nxp-wlan', '', d)}"
HAS_WIFI_VIRTWLANS = "true"
WLAN_P2P_INTERFACE = "p2p0"
WLAN_P2P_INTERFACE = "wfd0"
MACHINE_EXTRA_RRECOMMENDS += "${WIRELESS_MODULE}"
# XBee

View File

@ -14,6 +14,9 @@ SERIAL_CONSOLES = "115200;ttyLP5"
# Bluetooth tty
BT_TTY ?= "ttyLP0"
# Bluetooth GPIO
BT_GPIO ?= "1 7"
# Firmware
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'firmware-nxp-wifi-nxpiw612-sdio firmware-murata-nxp', '', d)}"
MACHINE_FIRMWARE:append = " ethos-u-firmware"
@ -21,8 +24,7 @@ MACHINE_FIRMWARE:append = " ethos-u-firmware"
# Wi-Fi
WIRELESS_MODULE ?= ""
WIRELESS_MODULE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'kernel-module-nxp-wlan', '', d)}"
HAS_WIFI_VIRTWLANS = "true"
WLAN_P2P_INTERFACE = "p2p0"
WLAN_P2P_INTERFACE = "wfd0"
MACHINE_EXTRA_RRECOMMENDS += "${WIRELESS_MODULE}"
# XBee
@ -65,7 +67,7 @@ KERNEL_DEVICETREE ?= " \
digi/ccimx9-dvk_mikroe-accel2-click.dtbo \
digi/ccimx9-dvk_mikroe-gyro-click.dtbo \
digi/ccimx93-dvk_dlc0200ccp04df-mipi-dsi.dtbo \
digi/ccimx93-dvk_lvds.dtbo \
digi/ccimx93-dvk_lvds-g101evn010.dtbo \
digi/ccimx93-dvk_nhd-3-5-640480ef-msxp-mipi-dsi.dtbo \
digi/ccimx93-dvk.dtb \
${@bb.utils.contains('DISTRO_FEATURES', 'tsn', 'digi/ccimx9-dvk_eqos-tsn.dtbo', '', d)} \

View File

@ -8,8 +8,11 @@ MACHINEOVERRIDES =. "mx95:${DIGI_FAMILY}:${DIGI_SOM}:"
# Include the machine configuration for Digi's ConnectCore 9 module
include conf/machine/include/ccimx9.inc
# SMARC module
SMARC ?= "1"
# Machine features
MACHINE_FEATURES += "mca"
MACHINE_FEATURES += "${@oe.utils.conditional('SMARC', '1', 'mca', '', d)}"
# Console
SERIAL_CONSOLES = "115200;ttyLP0"
@ -18,16 +21,15 @@ SERIAL_CONSOLES = "115200;ttyLP0"
BT_TTY ?= "ttyLP4"
# Firmware
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'firmware-murata-infineon', '', d)}"
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'firmware-murata-infineon firmware-murata-infineon-mfgtest', '', d)}"
# Wi-Fi
HAS_WIFI_VIRTWLANS = "true"
WLAN_P2P_INTERFACE = "p2p0"
# XBee
XBEE_RESET_N_GPIO ?= "43840000.gpio@21"
XBEE_RESET_N_GPIO ?= "43820000.gpio@7"
XBEE_SLEEP_RQ_GPIO ?= ""
XBEE_TTY ?= "ttyLP3"
XBEE_TTY ?= "ttyLP6"
# U-Boot configurations
UBOOT_CONFIG ??= "ccimx95-dvk"
@ -41,7 +43,7 @@ UBOOT_INSTALL_SD_INDEX = "1"
# imx-boot configurations
ATF_PLATFORM = "imx95"
IMX_BOOT_SOC_TARGET = "iMX95"
IMXBOOT_TARGETS = "flash_all flash_a55"
IMXBOOT_TARGETS = "flash_a55"
SYSTEM_MANAGER_CONFIG ?= "ccimx95dvk"
SYSTEM_MANAGER_FIRMWARE_BASENAME ?= "m33_image"
SYSTEM_MANAGER_FIRMWARE_NAME ?= "${SYSTEM_MANAGER_FIRMWARE_BASENAME}-${SYSTEM_MANAGER_CONFIG}"
@ -61,11 +63,10 @@ DDR_FIRMWARE_NAME = " \
KERNEL_DEVICETREE ?= " \
digi/ccimx95-dvk.dtb \
digi/ccimx95-dvk_enet2.dtbo \
digi/ccimx95-dvk_lvds0_g101evn010.dtbo \
digi/ccimx95-dvk_lvds1_g101evn010.dtbo \
digi/ccimx95-dvk_mikroe-accel2-click.dtbo \
digi/ccimx95-dvk_mikroe-gyro-click.dtbo \
digi/ccimx95-dvk_expi-os08a20-cam.dtbo \
digi/ccimx95-dvk_gpio-watchdog.dtbo \
digi/ccimx95-dvk_lvds0-g101evn010.dtbo \
digi/ccimx95-dvk_lvds1-g101evn010.dtbo \
digi/ccimx95-dvk_pcam5c.dtbo \
digi/ccimx95_bt.dtbo \
digi/ccimx95_npu.dtbo \
@ -80,3 +81,13 @@ DEFAULT_IMAGE_NAME ?= "dey-image-chromium"
BOOTABLE_ARTIFACTS = " \
imx-boot##SIGNED##-ccimx95-dvk.bin \
"
# Systemd logind power key event.
# short press:
# SMARC=1: graceful poweroff
# SMARC=0: suspend
# long press:
# SMARC=1: ignored by systemd (absorbed by MCA fw for a forceful poweroff)
# SMARC=0: graceful poweroff
LOGIND_HANDLE_POWER_KEY ?= "${@oe.utils.conditional('SMARC', '1', 'poweroff', 'suspend', d)}"
LOGIND_HANDLE_POWER_KEY_LONGPRESS ?= "${@oe.utils.conditional('SMARC', '1', 'ignore', 'poweroff', d)}"

View File

@ -96,16 +96,6 @@ WKS_FILE += "ccmp1-256MB.wks.in"
# For populate_sdk, gcc-arm-none-eabi_9 has a python2 dependency, so we remove it.
ST_TOOLS_FOR_SDK:remove = "nativesdk-gcc-arm-none-eabi"
# =========================================================================
# flashlayout
# =========================================================================
# Define the config labels to use to generate flashlayout file
# =========================================================================
# extlinux configuration
# =========================================================================
# As example, modify the default boot config for each target to M4 config
# =========================================================================
# Debug trace
# =========================================================================
@ -113,13 +103,14 @@ ST_TOOLS_FOR_SDK:remove = "nativesdk-gcc-arm-none-eabi"
ST_DEBUG_TRACE = "0"
# =========================================================================
# Flashlayouts
# Signing configuration
# =========================================================================
SIGN_HEADER_VERSION_stm32mp13 ?= "2.0"
# =========================================================================
# DEY settings
# =========================================================================
IMAGE_CLASSES = "image_types_digi image_types-stubi"
IMAGE_CLASSES = "image_types_digi"
# mkfs.ubifs parameters for boot partition (the one holding kernel and device tree files)
# Max LEB count (-c 255) calculated for a partition of up to 32 MiB considering 128 KiB erase-block size.
@ -134,7 +125,6 @@ MKUBIFS_RECOVERY_ARGS ?= "${MKUBIFS_BOOT_ARGS} -x zlib"
MKUBIFS_ARGS ?= "-m 2048 -e 126976 -c 8191"
# Wireless external module
HAS_WIFI_VIRTWLANS = "true"
# Set this platform without graphical support
IS_HEADLESS = "true"
@ -168,3 +158,6 @@ BOOTABLE_ARTIFACTS = " \
OVERLAYFS_ETC_MOUNT_POINT ?= "/mnt/data"
OVERLAYFS_ETC_DEVICE ?= "ubi1:data"
OVERLAYFS_ETC_FSTYPE ?= "ubifs"
# Bluetooth
BT_TTY ?= "ttySTM1"

View File

@ -112,16 +112,6 @@ WKS_FILES += " \
# For populate_sdk, gcc-arm-none-eabi_9 has a python2 dependency, so we remove it.
ST_TOOLS_FOR_SDK:remove = "nativesdk-gcc-arm-none-eabi"
# =========================================================================
# flashlayout
# =========================================================================
# Define the config labels to use to generate flashlayout file
# =========================================================================
# extlinux configuration
# =========================================================================
# As example, modify the default boot config for each target to M4 config
# =========================================================================
# Debug trace
# =========================================================================
@ -129,13 +119,14 @@ ST_TOOLS_FOR_SDK:remove = "nativesdk-gcc-arm-none-eabi"
ST_DEBUG_TRACE = "0"
# =========================================================================
# Flashlayouts
# Signing configuration
# =========================================================================
SIGN_HEADER_VERSION_stm32mp15 ?= "1.0"
# =========================================================================
# DEY settings
# =========================================================================
IMAGE_CLASSES = "image_types_digi image_types-stubi"
IMAGE_CLASSES = "image_types_digi"
# mkfs.ubifs parameters for boot partition (the one holding kernel and device tree files)
# Max LEB count (-c 255) calculated for a partition of up to 32 MiB considering 128 KiB erase-block size.
@ -150,7 +141,6 @@ MKUBIFS_RECOVERY_ARGS ?= "${MKUBIFS_BOOT_ARGS} -x zlib"
MKUBIFS_ARGS ?= "-m 2048 -e 126976 -c 8191"
# Wireless external module
HAS_WIFI_VIRTWLANS = "true"
# XBee
XBEE_RESET_N_GPIO ?= "GPIOZ@2"
@ -181,3 +171,6 @@ BOOTABLE_ARTIFACTS = " \
OVERLAYFS_ETC_MOUNT_POINT ?= "/mnt/data"
OVERLAYFS_ETC_DEVICE ?= "ubi1:data"
OVERLAYFS_ETC_FSTYPE ?= "ubifs"
# Bluetooth
BT_TTY ?= "ttySTM1"

View File

@ -118,8 +118,15 @@ WKS_FILES += " \
ccmp2-1GB.wks.in \
"
# =========================================================================
# Signing configuration
# =========================================================================
SIGN_HEADER_VERSION_stm32mp25 ?= "2.2"
# =========================================================================
# DEY settings
# =========================================================================
# Wireless external module
HAS_WIFI_VIRTWLANS = "true"
# For populate_sdk, gcc-arm-none-eabi_11 has a libpython3 dependency, so we remove it.
ST_TOOLS_FOR_SDK:remove = "nativesdk-gcc-arm-none-eabi"
@ -166,3 +173,9 @@ IMAGE_ROOTFS_MAXSIZE = "2621440"
OVERLAYFS_ETC_MOUNT_POINT ?= "/mnt/data"
OVERLAYFS_ETC_DEVICE ?= "/dev/mmcblk0p11"
OVERLAYFS_ETC_FSTYPE ?= "ext4"
# Bluetooth
BT_TTY ?= "ttySTM1"
# Bluetooth GPIO
BT_GPIO ?= "gpiochip11 5"

View File

@ -24,7 +24,6 @@ STORAGE_MEDIA = "mtd"
# Wireless external module
WIRELESS_MODULE ?= ""
WIRELESS_MODULE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'kernel-module-qualcomm', '', d)}"
HAS_WIFI_VIRTWLANS = "true"
# Machine firmware
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_BT', '1', 'firmware-qualcomm-qca6564-bt', '', d)}"

View File

@ -34,7 +34,6 @@ STORAGE_MEDIA = "mmc"
# Wireless external module
WIRELESS_MODULE ?= ""
WIRELESS_MODULE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'kernel-module-qualcomm', '', d)}"
HAS_WIFI_VIRTWLANS = "true"
# Machine firmware
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_BT', '1', 'firmware-qualcomm-qca6564-bt', '', d)}"

View File

@ -36,7 +36,6 @@ STORAGE_MEDIA = "mmc"
# Wireless external module
WIRELESS_MODULE ?= ""
WIRELESS_MODULE:append = " ${@oe.utils.conditional('HAVE_WIFI', '1', 'kernel-module-qualcomm', '', d)}"
HAS_WIFI_VIRTWLANS = "true"
# Machine firmware
MACHINE_FIRMWARE:append = " ${@oe.utils.conditional('HAVE_BT', '1', 'firmware-qualcomm-qca6574-bt', '', d)}"

View File

@ -34,7 +34,6 @@ MACHINE_FEATURES:append:use-nxp-bsp = " optee jailhouse"
SDK_MACHINE_FEATURES:append = " optee"
STORAGE_MEDIA = "mmc"
WLAN_P2P_INTERFACE = "wfd0"
# Linux kernel configuration
KERNEL_DEFCONFIG ?= "arch/arm64/configs/ccimx9_defconfig"

View File

@ -114,6 +114,9 @@ SWUPDATE_MTD_BLACKLIST = "0 1 2 3 4 5"
# Remove custom kernel headers from toolchain
ST_TOOLS_FOR_TARGET_SDK:remove = "kernel-headers"
# Disable partitions configuration from ST layer
ENABLE_PARTITIONS_IMAGE ??= "0"
# Skip warnings for packages using 32-bit APIs
INSANE_SKIP:append:pn-alsa-lib = " 32bit-time"
INSANE_SKIP:append:pn-ir-keytable = " 32bit-time"

View File

@ -130,3 +130,13 @@ ENABLE_FLASHLAYOUT_CONFIG = "0"
# Remove custom kernel headers from toolchain
ST_TOOLS_FOR_TARGET_SDK:remove = " kernel-headers "
# Remove toolchain for TF-A on aarch64 added by st-machine-common-stm32mp.inc
# because it throws a build issue.
ST_TOOLS_FOR_SDK:remove:aarch64 = " \
nativesdk-gcc-aarch64-none-elf \
nativesdk-gcc-aarch64-none-elf-staticdev \
"
# Disable partitions configuration from ST layer
ENABLE_PARTITIONS_IMAGE ??= "0"

View File

@ -30,7 +30,7 @@ HAVE_BT = "${@bb.utils.contains('MACHINE_FEATURES', 'bluetooth', '1', ''
HAVE_GUI = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '1', '', d)}"
# Default value for WiFi virtual wlans
HAS_WIFI_VIRTWLANS ?= "false"
HAS_WIFI_VIRTWLANS ?= "true"
#
# Ethernet, Wi-Fi, and Bluetooth configuration used in recipes
@ -116,6 +116,7 @@ BOOTLOADER_SEEK_BOOTPART ?= "0"
# This is otherwise forced by systemd because of hard-coded paths
# in systemd source code.
ROOT_HOME ?= "/root"
CC_CONTAINER_PATH ?= "${ROOT_HOME}/cc-container"
# Default IMAGE_FSTYPES for eMMC/NAND
IMAGE_FSTYPES ?= "${@ \
@ -130,3 +131,7 @@ IMAGE_FSTYPES ?= "${@ \
'' , d), \
d) \
}"
# Systemd logind power key event
LOGIND_HANDLE_POWER_KEY ??= "suspend"
LOGIND_HANDLE_POWER_KEY_LONGPRESS ??= "poweroff"

View File

@ -390,8 +390,8 @@ WKS_FILE_DEPENDS:append:mx8-nxp-bsp = " imx-boot"
WKS_FILE_DEPENDS:append:mx9-nxp-bsp = " imx-boot"
SOC_DEFAULT_WKS_FILE ?= "imx-uboot-bootpart.wks.in"
SOC_DEFAULT_WKS_FILE:mx8-generic-bsp ?= "imx-imx-boot-bootpart.wks.in"
SOC_DEFAULT_WKS_FILE:mx9-generic-bsp ?= "imx-imx-boot-bootpart.wks.in"
SOC_DEFAULT_WKS_FILE:mx8-generic-bsp ?= "imx-imx-boot-bootpart-uboot-env.wks.in"
SOC_DEFAULT_WKS_FILE:mx9-generic-bsp ?= "imx-imx-boot-bootpart-uboot-env.wks.in"
WKS_FILE ?= "${SOC_DEFAULT_WKS_FILE}"

View File

@ -18,3 +18,9 @@ Digi Embedded Yocto provides the following image recipes:
Expansion of custom Digi core-image-base including full Flutter
framework support.
* dey-image-containers: container management image
Minimal image including the trimmed Podman and LXC runtimes used to
manage container artifacts on target.
Requires DISTRO_FEATURES:append = " virtualization" in local.conf.

View File

@ -19,6 +19,12 @@ Digi Embedded Yocto provides the following image recipes:
Expansion of custom Digi core-image-base including full Flutter
framework support.
* dey-image-containers: container management image
Minimal image including the trimmed Podman and LXC runtimes used to
manage container artifacts on target.
Requires DISTRO_FEATURES:append = " virtualization" in local.conf.
* core-image-base: a console-only image
Expansion of native core-image-base by including all the support for the

View File

@ -1,56 +0,0 @@
From: Isaac Hermida <isaac.hermida@digi.com>
Date: Mon, 15 Sep 2025 11:38:55 +0200
Subject: [PATCH] ccimx95: configure console on LPUART6
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
boards/ccimx95/config_board.h | 2 +-
boards/ccimx95/pin_mux.c | 7 +++++++
devices/MIMX95/oei/soc_clock.c | 2 ++
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/boards/ccimx95/config_board.h b/boards/ccimx95/config_board.h
index 3095ebf1d8ce..ec97626a2a28 100644
--- a/boards/ccimx95/config_board.h
+++ b/boards/ccimx95/config_board.h
@@ -52,7 +52,7 @@
/* Defines */
/*! Config for UART instance */
-#define BOARD_DEBUG_UART_INSTANCE 2U
+#define BOARD_DEBUG_UART_INSTANCE 6U
/*! Config for UART baudrate */
#define BOARD_DEBUG_UART_BAUDRATE 115200U
diff --git a/boards/ccimx95/pin_mux.c b/boards/ccimx95/pin_mux.c
index a8c15513b578..3cb33909f740 100644
--- a/boards/ccimx95/pin_mux.c
+++ b/boards/ccimx95/pin_mux.c
@@ -29,5 +29,12 @@ void BOARD_InitPins(void)
IOMUXC_SetPinMux(IOMUXC_PAD_UART2_TXD__LPUART2_TX, 0);
IOMUXC_SetPinConfig(IOMUXC_PAD_UART2_TXD__LPUART2_TX, IOMUXC_PAD_DSE(0xFU));
+#elif (BOARD_DEBUG_UART_INSTANCE == 6U)
+ /* Configure LPUART 6 */
+ IOMUXC_SetPinMux(IOMUXC_PAD_GPIO_IO05__LPUART6_RX, 0);
+ IOMUXC_SetPinConfig(IOMUXC_PAD_GPIO_IO05__LPUART6_RX, IOMUXC_PAD_PD(1U));
+
+ IOMUXC_SetPinMux(IOMUXC_PAD_GPIO_IO04__LPUART6_TX, 0);
+ IOMUXC_SetPinConfig(IOMUXC_PAD_GPIO_IO04__LPUART6_TX, IOMUXC_PAD_DSE(0xFU));
#endif
}
diff --git a/devices/MIMX95/oei/soc_clock.c b/devices/MIMX95/oei/soc_clock.c
index 17493b08e1b8..c1f5cecfa9b6 100644
--- a/devices/MIMX95/oei/soc_clock.c
+++ b/devices/MIMX95/oei/soc_clock.c
@@ -25,6 +25,8 @@ static struct clk_root_cfg clk_root_cfgs[] = {
{ CLOCK_ROOT_LPUART1, CLOCK_SRC_OSC24M, 1}, /* 24MHz */
#elif (BOARD_DEBUG_UART_INSTANCE == 2)
{ CLOCK_ROOT_LPUART2, CLOCK_SRC_OSC24M, 1}, /* 24MHz */
+#elif (BOARD_DEBUG_UART_INSTANCE == 6)
+ { CLOCK_ROOT_LPUART6, CLOCK_SRC_OSC24M, 1}, /* 24MHz */
#endif
#endif
};

View File

@ -1,37 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Wed, 14 Jan 2026 17:11:28 +0100
Subject: [PATCH] ccimx95: configure console on LPUART1
On version 2 of the SOM, the console has been changed
to LPUART1.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
https://onedigi.atlassian.net/browse/DEL-9915
---
boards/ccimx95/config_board.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/boards/ccimx95/config_board.h b/boards/ccimx95/config_board.h
index ec97626a2a28..e666575ae6e8 100644
--- a/boards/ccimx95/config_board.h
+++ b/boards/ccimx95/config_board.h
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2023-2024 NXP
+** Copyright 2025-2026 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -52,7 +53,7 @@
/* Defines */
/*! Config for UART instance */
-#define BOARD_DEBUG_UART_INSTANCE 6U
+#define BOARD_DEBUG_UART_INSTANCE 1U
/*! Config for UART baudrate */
#define BOARD_DEBUG_UART_BAUDRATE 115200U

View File

@ -1,15 +1,12 @@
# Copyright (C) 2025,2026 Digi International Inc.
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
# Select internal or Github imx-oei repo
IMX_OEI_URI_STASH = "${DIGI_MTK_GIT}/emp/imx-oei.git;protocol=ssh"
IMX_OEI_URI_GITHUB = "${DIGI_GITHUB_GIT}/imx-oei.git;protocol=https"
IMX_OEI_SRC:dey = "${@oe.utils.conditional('DIGI_INTERNAL_GIT', '1', '${IMX_OEI_URI_STASH}', '${IMX_OEI_URI_GITHUB}', d)}"
SRC_URI:append:dey = " \
file://0001-boards-ccimx95-add-platform-as-a-clone-of-mx95lp5.patch \
file://0002-ddr-add-DDR-configuration-file-for-ccimx95.patch \
file://0003-ccimx95-configure-console-on-LPUART6.patch \
file://0004-ccimx95-add-DDR-configuration-file-for-ccimx95-B0-si.patch \
file://0005-ccimx95-configure-console-on-LPUART1.patch \
"
# NXP's 'lf-6.6.52_2.2.2' release
SRCREV = "49bfaa93e9d1fe213866bcb9507927a59a9ede5a"
SRCBRANCH:dey = "dey/scarthgap/lf-6.6.52-2.2.2"
# NXP's 'lf-6.6.52_2.2.2' release + patches
SRCREV:dey = "1dd57d4c97c1597dcab4b0cdba6eee188af9e33d"
OEI_DEBUG:dey = "1"

View File

@ -1,254 +0,0 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Mon, 15 Sep 2025 12:37:05 +0200
Subject: [PATCH] ccimx95dvk: disable PCAL6408A expander and move GPIO1 to A55
Our board does not populate that expander, so disable the initialization
and assign GPIO1 to be used by the A55 cpu.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
boards/ccimx95dvk/board.c | 7 ---
boards/ccimx95dvk/pin_mux.c | 4 --
boards/ccimx95dvk/sm/brd_sm.c | 9 ---
boards/ccimx95dvk/sm/brd_sm_handlers.c | 82 --------------------------
configs/ccimx95dvk.cfg | 3 +-
configs/ccimx95dvk/config_scmi.h | 2 +
configs/ccimx95dvk/config_trdc.h | 2 +-
7 files changed, 5 insertions(+), 104 deletions(-)
diff --git a/boards/ccimx95dvk/board.c b/boards/ccimx95dvk/board.c
index c9b97b2a67d9..fe76d6e1a1a3 100755
--- a/boards/ccimx95dvk/board.c
+++ b/boards/ccimx95dvk/board.c
@@ -355,9 +355,6 @@ void BOARD_InitHandlers(void)
/* Enable FCCU handler */
NVIC_SetPriority(FCCU_INT0_IRQn, IRQ_PRIO_NOPREEMPT_CRITICAL);
NVIC_EnableIRQ(FCCU_INT0_IRQn);
-
- /* Enable GPIO1 handler */
- NVIC_EnableIRQ(GPIO1_0_IRQn);
}
/*--------------------------------------------------------------------------*/
@@ -539,10 +536,6 @@ void BOARD_SystemSleepPrepare(uint32_t sleepMode, uint32_t sleepFlags)
(void) CPU_PerLpiConfigSet(CPU_IDX_M33P, s_uartConfig.perLpiId,
CPU_PER_LPI_ON_RUN_WAIT_STOP);
}
-
- /* Configure LPI for GPIO1 */
- (void) CPU_PerLpiConfigSet(CPU_IDX_M33P, CPU_PER_LPI_IDX_GPIO1,
- CPU_PER_LPI_ON_RUN_WAIT_STOP);
}
/*--------------------------------------------------------------------------*/
diff --git a/boards/ccimx95dvk/pin_mux.c b/boards/ccimx95dvk/pin_mux.c
index ff2b9540ea7a..6f5bb4a51c4c 100755
--- a/boards/ccimx95dvk/pin_mux.c
+++ b/boards/ccimx95dvk/pin_mux.c
@@ -57,9 +57,5 @@ void BOARD_InitPins(void)
IOMUXC_SetPinConfig(IOMUXC_PAD_I2C2_SDA__LPI2C2_SDA, IOMUXC_PAD_DSE(0xFU)
| IOMUXC_PAD_FSEL1(0x3U) | IOMUXC_PAD_PU(0x1U) | IOMUXC_PAD_OD(0x1U));
#endif
-
- /* Configure GPIO1-10 (INT from the PCAL6408A) */
- IOMUXC_SetPinMux(IOMUXC_PAD_PDM_BIT_STREAM1__GPIO1_IO_BIT10, 0U);
- IOMUXC_SetPinConfig(IOMUXC_PAD_PDM_BIT_STREAM1__GPIO1_IO_BIT10, 0U);
}
diff --git a/boards/ccimx95dvk/sm/brd_sm.c b/boards/ccimx95dvk/sm/brd_sm.c
index 36b4b52c6986..ae6c3195f0b2 100755
--- a/boards/ccimx95dvk/sm/brd_sm.c
+++ b/boards/ccimx95dvk/sm/brd_sm.c
@@ -458,15 +458,6 @@ void BRD_SM_ShutdownRecordSave(dev_sm_rst_rec_t shutdownRec)
int32_t BRD_SM_SystemReset(void)
{
int32_t status = SM_ERR_SUCCESS;
- rgpio_pin_config_t gpioConfig =
- {
- kRGPIO_DigitalOutput,
- 0U
- };
-
- /* Drive WDOG_ANY to reset PMIC */
- RGPIO_PinInit(GPIO1, 15U, &gpioConfig);
- IOMUXC_SetPinMux(IOMUXC_PAD_WDOG_ANY__GPIO1_IO_BIT15, 0U);
/* Wait for PMIC to react */
SystemTimeDelay(1000U);
diff --git a/boards/ccimx95dvk/sm/brd_sm_handlers.c b/boards/ccimx95dvk/sm/brd_sm_handlers.c
index a96f6ce0e2f4..19ee28e93134 100755
--- a/boards/ccimx95dvk/sm/brd_sm_handlers.c
+++ b/boards/ccimx95dvk/sm/brd_sm_handlers.c
@@ -96,26 +96,6 @@ int32_t BRD_SM_SerialDevicesInit(void)
{
int32_t status = SM_ERR_SUCCESS;
LPI2C_Type *const s_i2cBases[] = LPI2C_BASE_PTRS;
- pcal6408a_config_t pcal6408Config;
-
- /* Fill in PCAL6408A dev */
- g_pcal6408aDev.i2cBase = s_i2cBases[BOARD_I2C_INSTANCE];
- g_pcal6408aDev.devAddr = BOARD_PCAL6408A_DEV_ADDR;
-
- /* Init the bus expander */
- PCAL6408A_GetDefaultConfig(&pcal6408Config);
- pcal6408Config.inputLatch = 0xFFU;
- if (!PCAL6408A_Init(&g_pcal6408aDev, &pcal6408Config))
- {
- status = SM_ERR_HARDWARE_ERROR;
- }
- else
- {
- if (!PCAL6408A_IntMaskSet(&g_pcal6408aDev, PCAL6408A_INITIAL_MASK))
- {
- status = SM_ERR_HARDWARE_ERROR;
- }
- }
if (status == SM_ERR_SUCCESS)
{
@@ -254,20 +234,6 @@ int32_t BRD_SM_SerialDevicesInit(void)
}
}
- if (status == SM_ERR_SUCCESS)
- {
- rgpio_pin_config_t gpioConfig =
- {
- kRGPIO_DigitalInput,
- 0U
- };
-
- /* Init GPIO1-10 */
- RGPIO_PinInit(GPIO1, 10U, &gpioConfig);
- RGPIO_SetPinInterruptConfig(GPIO1, 10U, kRGPIO_InterruptOutput0,
- kRGPIO_InterruptLogicZero);
- }
-
/* Return status */
return status;
}
@@ -300,54 +266,6 @@ int32_t BRD_SM_BusExpMaskSet(uint8_t val, uint8_t mask)
return status;
}
-/*--------------------------------------------------------------------------*/
-/* GPIO1 handler */
-/*--------------------------------------------------------------------------*/
-void GPIO1_0_IRQHandler(void)
-{
- uint32_t flags;
- uint8_t status, val;
-
- /* Get GPIO status */
- flags = RGPIO_GetPinsInterruptFlags(GPIO1, kRGPIO_InterruptOutput0);
-
- /* Get PCAL6408A status */
- (void) PCAL6408A_IntStatusGet(&g_pcal6408aDev, &status);
-
- /* Get value and Clear PCAL6408A interrupts */
- (void) PCAL6408A_InputGet(&g_pcal6408aDev, &val);
-
- /* Clear GPIO interrupts */
- RGPIO_ClearPinsInterruptFlags(GPIO1, kRGPIO_InterruptOutput0, flags);
-
- /* Handle PF09 interrupt */
- if ((status & BIT8(PCAL6408A_INPUT_PF09_INT)) != 0U)
- {
- /* Asserts low */
- if ((val & BIT8(PCAL6408A_INPUT_PF09_INT)) == 0U)
- {
- BRD_SM_Pf09Handler();
- }
- }
-
- /* Handle PCA2131 interrupt */
- if (g_pca2131Used && ((status & BIT8(PCAL6408A_INPUT_PCA2131_INT))
- != 0U))
- {
- /* Asserts low */
- if ((val & BIT8(PCAL6408A_INPUT_PCA2131_INT)) == 0U)
- {
- BRD_SM_BbmHandler();
- }
- }
-
- /* Handle controls interrupts */
- BRD_SM_ControlHandler(status, val);
-
- /* Adjust dynamic IRQ priority */
- (void) DEV_SM_IrqPrioUpdate();
-}
-
/*==========================================================================*/
/*--------------------------------------------------------------------------*/
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index 557bba3cecf2..cd6c5c4551c2 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -217,7 +217,6 @@ ELE OWNER
FSB READONLY
GIC ACCESS
GPC OWNER
-GPIO1 OWNER
GPR0 OWNER
GPR1 OWNER
GPR2 OWNER
@@ -503,6 +502,7 @@ PERLPI_LPUART4 ALL
PERLPI_LPUART5 ALL
PERLPI_LPUART6 ALL
PERLPI_LPUART8 ALL
+PERLPI_GPIO1 ALL
PERLPI_WDOG3 ALL
PERLPI_WDOG4 ALL
SYS ALL
@@ -737,6 +737,7 @@ FLEXIO2 OWNER
FLEXSPI1 OWNER
FSB READONLY
GIC OWNER
+GPIO1 OWNER
GPIO2 OWNER
GPIO3 OWNER
GPIO4 OWNER
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 7032a0efc948..edb2a17eaca1 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -183,6 +183,7 @@
.perlpiPerms[DEV_SM_PERLPI_CAN3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN5] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_GPIO1] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO2] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO4] = SM_SCMI_PERM_ALL, \
@@ -465,6 +466,7 @@
.perlpiPerms[DEV_SM_PERLPI_CAN3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN5] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_GPIO1] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO2] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO4] = SM_SCMI_PERM_ALL, \
diff --git a/configs/ccimx95dvk/config_trdc.h b/configs/ccimx95dvk/config_trdc.h
index 1d8ed0b6fc95..47df6a7577d5 100644
--- a/configs/ccimx95dvk/config_trdc.h
+++ b/configs/ccimx95dvk/config_trdc.h
@@ -116,7 +116,6 @@
SM_CFG_W1(0x00010470U), 0x33333333U, \
SM_CFG_W1(0x00010474U), 0x00003000U, \
SM_CFG_W1(0x00010580U), 0x000003C0U, \
- SM_CFG_W1(0x000105a8U), 0x00000003U, \
SM_CFG_W1(0x00010640U), 0x99999999U, \
SM_CFG_W1(0x00010644U), 0x99999999U, \
SM_CFG_W1(0x00010648U), 0x99999999U, \
@@ -129,6 +128,7 @@
SM_CFG_W1(0x0001066cU), 0x90909000U, \
SM_CFG_W1(0x00010670U), 0x00009000U, \
SM_CFG_W1(0x00010780U), 0x099330C0U, \
+ SM_CFG_W1(0x000107a8U), 0x00000009U, \
SM_CFG_Z1(0x00010850U), \
SM_CFG_W1(0x00010854U), 0x9000C000U, \
SM_CFG_W1(0x00010858U), 0x00000099U, \

View File

@ -1,206 +0,0 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Tue, 16 Sep 2025 17:51:14 +0200
Subject: [PATCH] ccimx95dvk: move resources from M7 to A55
Moved from M7 to A55 domain:
* LPUART7
* PIN_GPIO_IO14
* PIN_GPIO_IO15
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
configs/ccimx95dvk.cfg | 11 ++++-------
configs/ccimx95dvk/config_scmi.h | 15 ++++++++-------
configs/ccimx95dvk/config_test.h | 7 +------
configs/ccimx95dvk/config_trdc.h | 3 +--
4 files changed, 14 insertions(+), 22 deletions(-)
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index cd6c5c4551c2..49861f4545ae 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -390,7 +390,6 @@ LPIT1 OWNER
LPTMR1 OWNER
LPTMR2 OWNER
LPTPM1 OWNER
-LPUART3 OWNER, test
MSGINTR1 OWNER
MSGINTR2 OWNER
MU5_A OWNER
@@ -403,11 +402,6 @@ TSTMR2 OWNER
V2X_SHE1 OWNER
WDOG5 OWNER
-# Pins
-
-PIN_GPIO_IO14 OWNER
-PIN_GPIO_IO15 OWNER
-
# Memory
M7MIX DATA, begin=0x020380000, end=0x02047FFFF
@@ -498,6 +492,7 @@ PERLPI_GPIO4 ALL
PERLPI_GPIO5 ALL
PERLPI_LPUART1 ALL
PERLPI_LPUART2 ALL
+PERLPI_LPUART3 ALL
PERLPI_LPUART4 ALL
PERLPI_LPUART5 ALL
PERLPI_LPUART6 ALL
@@ -784,6 +779,7 @@ LPTPM5 OWNER
LPTPM6 OWNER
LPUART1 OWNER
LPUART2 OWNER
+LPUART3 OWNER
LPUART4 OWNER
LPUART5 OWNER
LPUART6 OWNER
@@ -936,6 +932,8 @@ PIN_GPIO_IO10 OWNER
PIN_GPIO_IO11 OWNER
PIN_GPIO_IO12 OWNER
PIN_GPIO_IO13 OWNER
+PIN_GPIO_IO14 OWNER
+PIN_GPIO_IO15 OWNER
PIN_GPIO_IO16 OWNER
PIN_GPIO_IO17 OWNER
PIN_GPIO_IO18 OWNER
@@ -1015,4 +1013,3 @@ OCRAM EXEC, begin=0x0204C0000, size=96K
GPU DATA, begin=0x04D900000, end=0x04DD7FFFF
DDR EXEC, begin=0x088000000, end=0x089FFFFFF
DDR EXEC, begin=0x08E000000, end=0x87FFFFFFF
-
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index edb2a17eaca1..297806453ee1 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -69,7 +69,6 @@
.clkPerms[DEV_SM_CLK_CAN1] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPTMR1] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPTMR2] = SM_SCMI_PERM_ALL, \
- .clkPerms[DEV_SM_CLK_LPUART3] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_M7SYSTICK] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_TSTMR2] = SM_SCMI_PERM_ALL, \
.cpuPerms[DEV_SM_CPU_M7P] = SM_SCMI_PERM_ALL, \
@@ -81,9 +80,6 @@
.daisyPerms[DEV_SM_DAISY_LPTMR2_0] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPTMR2_1] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPTMR2_2] = SM_SCMI_PERM_ALL, \
- .daisyPerms[DEV_SM_DAISY_LPUART3_CTS] = SM_SCMI_PERM_ALL, \
- .daisyPerms[DEV_SM_DAISY_LPUART3_RXD] = SM_SCMI_PERM_ALL, \
- .daisyPerms[DEV_SM_DAISY_LPUART3_TXD] = SM_SCMI_PERM_ALL, \
.faultPerms[DEV_SM_FAULT_M7_LOCKUP] = SM_SCMI_PERM_ALL, \
.faultPerms[DEV_SM_FAULT_M7_RESET] = SM_SCMI_PERM_ALL, \
.faultPerms[DEV_SM_FAULT_SW0] = SM_SCMI_PERM_ALL, \
@@ -94,10 +90,7 @@
.pdPerms[DEV_SM_PD_M7] = SM_SCMI_PERM_ALL, \
.perfPerms[DEV_SM_PERF_M7] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN1] = SM_SCMI_PERM_ALL, \
- .perlpiPerms[DEV_SM_PERLPI_LPUART3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_WDOG5] = SM_SCMI_PERM_ALL, \
- .pinPerms[DEV_SM_PIN_GPIO_IO14] = SM_SCMI_PERM_ALL, \
- .pinPerms[DEV_SM_PIN_GPIO_IO15] = SM_SCMI_PERM_ALL, \
.rtcPerms[BRD_SM_RTC_PCA2131] = SM_SCMI_PERM_ALL, \
.rtcPerms[DEV_SM_RTC_BBNSM] = SM_SCMI_PERM_PRIV, \
.sensorPerms[BRD_SM_SENSOR_TEMP_PF09] = SM_SCMI_PERM_SET, \
@@ -190,6 +183,7 @@
.perlpiPerms[DEV_SM_PERLPI_GPIO5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART1] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART2] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_LPUART3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART6] = SM_SCMI_PERM_ALL, \
@@ -281,6 +275,7 @@
.clkPerms[DEV_SM_CLK_LPSPI8] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART1] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART2] = SM_SCMI_PERM_ALL, \
+ .clkPerms[DEV_SM_CLK_LPUART3] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART4] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART5] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART6] = SM_SCMI_PERM_ALL, \
@@ -389,6 +384,9 @@
.daisyPerms[DEV_SM_DAISY_LPSPI4_SCK] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPSPI4_SDI] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPSPI4_SDO] = SM_SCMI_PERM_ALL, \
+ .daisyPerms[DEV_SM_DAISY_LPUART3_CTS] = SM_SCMI_PERM_ALL, \
+ .daisyPerms[DEV_SM_DAISY_LPUART3_RXD] = SM_SCMI_PERM_ALL, \
+ .daisyPerms[DEV_SM_DAISY_LPUART3_TXD] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPUART4_CTS] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPUART4_RXD] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPUART4_TXD] = SM_SCMI_PERM_ALL, \
@@ -473,6 +471,7 @@
.perlpiPerms[DEV_SM_PERLPI_GPIO5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART1] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART2] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_LPUART3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART6] = SM_SCMI_PERM_ALL, \
@@ -527,6 +526,8 @@
.pinPerms[DEV_SM_PIN_GPIO_IO11] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO12] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO13] = SM_SCMI_PERM_ALL, \
+ .pinPerms[DEV_SM_PIN_GPIO_IO14] = SM_SCMI_PERM_ALL, \
+ .pinPerms[DEV_SM_PIN_GPIO_IO15] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO16] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO17] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO18] = SM_SCMI_PERM_ALL, \
diff --git a/configs/ccimx95dvk/config_test.h b/configs/ccimx95dvk/config_test.h
index e667d2d5bf36..eed7c5a3d9b8 100644
--- a/configs/ccimx95dvk/config_test.h
+++ b/configs/ccimx95dvk/config_test.h
@@ -143,12 +143,11 @@
/*--------------------------------------------------------------------------*/
/*! Config for number of tests */
-#define SM_SCMI_NUM_TEST 42U
+#define SM_SCMI_NUM_TEST 37U
/*! Config data array for tests */
#define SM_SCMI_TEST_CONFIG_DATA \
{.testId = TEST_BUTTON, .channel = 5U, .rsrc = DEV_SM_BUTTON_0}, \
- {.testId = TEST_CLK, .channel = 0U, .rsrc = DEV_SM_CLK_LPUART3}, \
{.testId = TEST_CLK, .channel = 5U, .rsrc = DEV_SM_CLK_ENETREF}, \
{.testId = TEST_CLK, .channel = 5U, .rsrc = DEV_SM_CLK_ENETTIMER1}, \
{.testId = TEST_CLK, .channel = 5U, .rsrc = DEV_SM_CLK_GPU_CGC}, \
@@ -157,9 +156,6 @@
{.testId = TEST_CLK, .channel = 5U, .rsrc = DEV_SM_CLK_SAI1}, \
{.testId = TEST_CTRL, .channel = 5U, .rsrc = DEV_SM_CTRL_MQS1_SETTINGS}, \
{.testId = TEST_CTRL, .channel = 5U, .rsrc = DEV_SM_CTRL_SAI1_MCLK}, \
- {.testId = TEST_DAISY, .channel = 0U, .rsrc = DEV_SM_DAISY_LPUART3_CTS}, \
- {.testId = TEST_DAISY, .channel = 0U, .rsrc = DEV_SM_DAISY_LPUART3_RXD}, \
- {.testId = TEST_DAISY, .channel = 0U, .rsrc = DEV_SM_DAISY_LPUART3_TXD}, \
{.testId = TEST_DAISY, .channel = 5U, .rsrc = DEV_SM_DAISY_NETC_EMDC}, \
{.testId = TEST_DAISY, .channel = 5U, .rsrc = DEV_SM_DAISY_NETC_EMDIO}, \
{.testId = TEST_DAISY, .channel = 5U, .rsrc = DEV_SM_DAISY_NETC_ETH0_RMII_RX_ER}, \
@@ -184,7 +180,6 @@
{.testId = TEST_PERF, .channel = 5U, .rsrc = DEV_SM_PERF_GPU}, \
{.testId = TEST_PERF, .channel = 5U, .rsrc = DEV_SM_PERF_NPU}, \
{.testId = TEST_PERF, .channel = 5U, .rsrc = DEV_SM_PERF_VPU}, \
- {.testId = TEST_PERLPI, .channel = 0U, .rsrc = DEV_SM_PERLPI_LPUART3}, \
{.testId = TEST_PERLPI, .channel = 5U, .rsrc = DEV_SM_PERLPI_LPUART8}, \
{.testId = TEST_PIN, .channel = 5U, .rsrc = DEV_SM_PIN_UART1_RXD}, \
{.testId = TEST_RTC, .channel = 5U, .rsrc = DEV_SM_RTC_BBNSM}, \
diff --git a/configs/ccimx95dvk/config_trdc.h b/configs/ccimx95dvk/config_trdc.h
index 47df6a7577d5..dc6245097316 100644
--- a/configs/ccimx95dvk/config_trdc.h
+++ b/configs/ccimx95dvk/config_trdc.h
@@ -1168,7 +1168,7 @@
SM_CFG_W1(0x0001065cU), 0x99999999U, \
SM_CFG_W1(0x00010660U), 0x00909099U, \
SM_CFG_W1(0x00010664U), 0x99090990U, \
- SM_CFG_W1(0x00010668U), 0x09999999U, \
+ SM_CFG_W1(0x00010668U), 0x99999999U, \
SM_CFG_W1(0x0001066cU), 0x09999999U, \
SM_CFG_W1(0x00010670U), 0x99900009U, \
SM_CFG_W1(0x00010674U), 0x99999909U, \
@@ -1178,7 +1178,6 @@
SM_CFG_W1(0x000107a8U), 0x00000009U, \
SM_CFG_W1(0x00010860U), 0x00090000U, \
SM_CFG_W1(0x00010864U), 0x00909009U, \
- SM_CFG_W1(0x00010868U), 0x90000000U, \
SM_CFG_W1(0x00010878U), 0x00090000U, \
SM_CFG_Z1(0x00010a60U), \
SM_CFG_Z1(0x00010c60U), \

View File

@ -1,75 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Wed, 24 Sep 2025 12:26:07 +0200
Subject: [PATCH] ccimx95dvk: move pads to non-secure A55
The following pads are multiplexed and used by A55 in Linux:
- PIN_UART2_RXD is used as LPUART1 CTS
- PIN_UART2_TXD is used as LPUART1 RTS
- PIN_PDM_BIT_STREAM1 is used as MIKROBUS_RST
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
---
configs/ccimx95dvk.cfg | 5 ++++-
configs/ccimx95dvk/config_scmi.h | 3 +++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index 49861f4545ae..78fad32b4513 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -1,6 +1,7 @@
## ###################################################################
##
## Copyright 2023-2025 NXP
+## Copyright 2025 Digi International Inc.
##
## Redistribution and use in source and binary forms, with or without modification,
## are permitted provided that the following conditions are met:
@@ -305,7 +306,6 @@ L_STCU_NPUMIX OWNER
PIN_FCCU_ERR0 OWNER
PIN_I2C1_SCL OWNER
PIN_I2C1_SDA OWNER
-PIN_PDM_BIT_STREAM1 OWNER
PIN_GPIO_IO08 OWNER # LPUART7_TX
PIN_GPIO_IO09 OWNER # LPUART7_RX
PIN_WDOG_ANY OWNER
@@ -959,6 +959,7 @@ PIN_GPIO_IO37 OWNER
PIN_I2C2_SCL OWNER
PIN_I2C2_SDA OWNER
PIN_PDM_BIT_STREAM0 OWNER
+PIN_PDM_BIT_STREAM1 OWNER
PIN_PDM_CLK OWNER
PIN_SAI1_RXD0 OWNER
PIN_SAI1_TXC OWNER
@@ -992,6 +993,8 @@ PIN_SD3_DATA2 OWNER
PIN_SD3_DATA3 OWNER
PIN_UART1_RXD OWNER, test
PIN_UART1_TXD OWNER
+PIN_UART2_RXD OWNER
+PIN_UART2_TXD OWNER
PIN_XSPI1_DATA0 OWNER
PIN_XSPI1_DATA1 OWNER
PIN_XSPI1_DATA2 OWNER
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 297806453ee1..3d4b9cad69ad 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -553,6 +553,7 @@
.pinPerms[DEV_SM_PIN_I2C2_SCL] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_I2C2_SDA] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_PDM_BIT_STREAM0] = SM_SCMI_PERM_ALL, \
+ .pinPerms[DEV_SM_PIN_PDM_BIT_STREAM1] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_PDM_CLK] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_SAI1_RXD0] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_SAI1_TXC] = SM_SCMI_PERM_ALL, \
@@ -586,6 +587,8 @@
.pinPerms[DEV_SM_PIN_SD3_DATA3] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_UART1_RXD] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_UART1_TXD] = SM_SCMI_PERM_ALL, \
+ .pinPerms[DEV_SM_PIN_UART2_RXD] = SM_SCMI_PERM_ALL, \
+ .pinPerms[DEV_SM_PIN_UART2_TXD] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_XSPI1_DATA0] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_XSPI1_DATA1] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_XSPI1_DATA2] = SM_SCMI_PERM_ALL, \

View File

@ -1,151 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Wed, 24 Sep 2025 13:01:57 +0200
Subject: [PATCH] ccimx95dvk: move CAN1 to be used by A55
CAN1 is no longer reserved by M7 but instead moved to
non-secure A55 so that it can be used by Linux.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
---
configs/ccimx95dvk.cfg | 3 ++-
configs/ccimx95dvk/config_bctrl.h | 14 +++++++-------
configs/ccimx95dvk/config_scmi.h | 7 ++++---
configs/ccimx95dvk/config_trdc.h | 3 +--
4 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index 78fad32b4513..c1374d4684a9 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -383,7 +383,6 @@ SYS ALL
# Resources
M7P OWNER # CPUs must be first
-CAN_FD1 OWNER
FSB READONLY
IRQSTEER_M7 OWNER
LPIT1 OWNER
@@ -482,6 +481,7 @@ CHANNEL db=1, xport=smt, rpc=scmi, type=p2a_notify
PERF_A55 ALL
PERF_DRAM ALL
+PERLPI_CAN1 ALL
PERLPI_CAN2 ALL
PERLPI_CAN3 ALL
PERLPI_CAN4 ALL
@@ -604,6 +604,7 @@ CAMERA5 OWNER
CAMERA6 OWNER
CAMERA7 OWNER
CAMERA8 OWNER
+CAN_FD1 OWNER
CAN_FD2 OWNER
CAN_FD3 OWNER
CAN_FD4 OWNER
diff --git a/configs/ccimx95dvk/config_bctrl.h b/configs/ccimx95dvk/config_bctrl.h
index a757834c32ab..a55abe03ec02 100644
--- a/configs/ccimx95dvk/config_bctrl.h
+++ b/configs/ccimx95dvk/config_bctrl.h
@@ -61,13 +61,13 @@
#define SM_BCTRL_A_CONFIG \
{ \
SM_CFG_W1(0x00000008U), 0x00001804U, \
- SM_CFG_W1(0x0000000CU), 0x0000E56AU, \
- SM_CFG_W1(0x00000010U), 0x0000E56AU, \
- SM_CFG_W1(0x00000014U), 0x0000E56AU, \
- SM_CFG_W1(0x00000018U), 0x0000E56AU, \
- SM_CFG_W1(0x0000001CU), 0x0000E56AU, \
- SM_CFG_W1(0x00000020U), 0x0000E56AU, \
- SM_CFG_W1(0x00000024U), 0x00000291U, \
+ SM_CFG_W1(0x0000000CU), 0x0000E56BU, \
+ SM_CFG_W1(0x00000010U), 0x0000E56BU, \
+ SM_CFG_W1(0x00000014U), 0x0000E56BU, \
+ SM_CFG_W1(0x00000018U), 0x0000E56BU, \
+ SM_CFG_W1(0x0000001CU), 0x0000E56BU, \
+ SM_CFG_W1(0x00000020U), 0x0000E56BU, \
+ SM_CFG_W1(0x00000024U), 0x00000290U, \
SM_CFG_END \
}
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 3d4b9cad69ad..45114d0002f4 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -66,7 +66,6 @@
.secure = 0U, \
.seenvId = 1U, \
.buttonPerms[DEV_SM_BUTTON_0] = SM_SCMI_PERM_NOTIFY, \
- .clkPerms[DEV_SM_CLK_CAN1] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPTMR1] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPTMR2] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_M7SYSTICK] = SM_SCMI_PERM_ALL, \
@@ -76,7 +75,6 @@
.ctrlPerms[BRD_SM_CTRL_PCA2131] = SM_SCMI_PERM_ALL, \
.ctrlPerms[BRD_SM_CTRL_TEST] = SM_SCMI_PERM_ALL, \
.ctrlPerms[BRD_SM_CTRL_TEST_A] = SM_SCMI_PERM_ALL, \
- .daisyPerms[DEV_SM_DAISY_CAN1_RX] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPTMR2_0] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPTMR2_1] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPTMR2_2] = SM_SCMI_PERM_ALL, \
@@ -89,7 +87,6 @@
.lmmPerms[2] = SM_SCMI_PERM_ALL, \
.pdPerms[DEV_SM_PD_M7] = SM_SCMI_PERM_ALL, \
.perfPerms[DEV_SM_PERF_M7] = SM_SCMI_PERM_ALL, \
- .perlpiPerms[DEV_SM_PERLPI_CAN1] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_WDOG5] = SM_SCMI_PERM_ALL, \
.rtcPerms[BRD_SM_RTC_PCA2131] = SM_SCMI_PERM_ALL, \
.rtcPerms[DEV_SM_RTC_BBNSM] = SM_SCMI_PERM_PRIV, \
@@ -172,6 +169,7 @@
.pdPerms[DEV_SM_PD_A55P] = SM_SCMI_PERM_ALL, \
.perfPerms[DEV_SM_PERF_A55] = SM_SCMI_PERM_ALL, \
.perfPerms[DEV_SM_PERF_DRAM] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_CAN1] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN2] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN4] = SM_SCMI_PERM_ALL, \
@@ -228,6 +226,7 @@
.clkPerms[DEV_SM_CLK_AUDIOPLL2] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_AUDIOPLL2_VCO] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_AUDIOXCVR] = SM_SCMI_PERM_ALL, \
+ .clkPerms[DEV_SM_CLK_CAN1] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_CAN2] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_CAN3] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_CAN4] = SM_SCMI_PERM_ALL, \
@@ -318,6 +317,7 @@
.ctrlPerms[DEV_SM_CTRL_SAI3_MCLK] = SM_SCMI_PERM_ALL, \
.ctrlPerms[DEV_SM_CTRL_SAI4_MCLK] = SM_SCMI_PERM_ALL, \
.ctrlPerms[DEV_SM_CTRL_SAI5_MCLK] = SM_SCMI_PERM_ALL, \
+ .daisyPerms[DEV_SM_DAISY_CAN1_RX] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_CAN2_RX] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_CAN3_RX] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_CAN4_RX] = SM_SCMI_PERM_ALL, \
@@ -460,6 +460,7 @@
.perfPerms[DEV_SM_PERF_GPU] = SM_SCMI_PERM_ALL, \
.perfPerms[DEV_SM_PERF_NPU] = SM_SCMI_PERM_ALL, \
.perfPerms[DEV_SM_PERF_VPU] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_CAN1] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN2] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_CAN4] = SM_SCMI_PERM_ALL, \
diff --git a/configs/ccimx95dvk/config_trdc.h b/configs/ccimx95dvk/config_trdc.h
index dc6245097316..12ebbc61ca64 100644
--- a/configs/ccimx95dvk/config_trdc.h
+++ b/configs/ccimx95dvk/config_trdc.h
@@ -123,7 +123,7 @@
SM_CFG_W1(0x00010650U), 0x09000309U, \
SM_CFG_W1(0x00010654U), 0x0000C900U, \
SM_CFG_W1(0x00010658U), 0x99909900U, \
- SM_CFG_W1(0x0001065cU), 0x00009099U, \
+ SM_CFG_W1(0x0001065cU), 0x00009999U, \
SM_CFG_W1(0x00010668U), 0x00009900U, \
SM_CFG_W1(0x0001066cU), 0x90909000U, \
SM_CFG_W1(0x00010670U), 0x00009000U, \
@@ -132,7 +132,6 @@
SM_CFG_Z1(0x00010850U), \
SM_CFG_W1(0x00010854U), 0x9000C000U, \
SM_CFG_W1(0x00010858U), 0x00000099U, \
- SM_CFG_W1(0x0001085cU), 0x00000900U, \
SM_CFG_W1(0x00010870U), 0x00000090U, \
SM_CFG_W1(0x00010874U), 0x00000999U, \
SM_CFG_W1(0x00010980U), 0x900000C0U, \

View File

@ -1,457 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Thu, 25 Sep 2025 11:11:20 +0200
Subject: [PATCH] ccimx95dvk: remove PCAL6408A IO expander from EVK
NXP used this I2C IO expander on their EVK to process
wakeup interrupt lines.
This chip is not available on the DVK.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
---
boards/ccimx95dvk/board.c | 1 +
boards/ccimx95dvk/sm/Makefile | 4 +-
boards/ccimx95dvk/sm/brd_sm_bbm.c | 5 +-
boards/ccimx95dvk/sm/brd_sm_control.c | 96 +-------------------------
boards/ccimx95dvk/sm/brd_sm_control.h | 14 ++--
boards/ccimx95dvk/sm/brd_sm_handlers.c | 36 +---------
boards/ccimx95dvk/sm/brd_sm_handlers.h | 21 +-----
configs/ccimx95dvk.cfg | 6 --
configs/ccimx95dvk/config_scmi.h | 6 --
9 files changed, 13 insertions(+), 176 deletions(-)
diff --git a/boards/ccimx95dvk/board.c b/boards/ccimx95dvk/board.c
index fe76d6e1a1a3..2cc8f826b781 100755
--- a/boards/ccimx95dvk/board.c
+++ b/boards/ccimx95dvk/board.c
@@ -1,5 +1,6 @@
/*
* Copyright 2023-2025 NXP
+ * Copyright 2025 Digi International Inc.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
diff --git a/boards/ccimx95dvk/sm/Makefile b/boards/ccimx95dvk/sm/Makefile
index d5b576737636..db27ea922733 100755
--- a/boards/ccimx95dvk/sm/Makefile
+++ b/boards/ccimx95dvk/sm/Makefile
@@ -1,6 +1,7 @@
## ###################################################################
##
## Copyright 2023 NXP
+## Copyright 2025 Digi International Inc.
##
## Redistribution and use in source and binary forms, with or without modification,
## are permitted provided that the following conditions are met:
@@ -40,7 +41,6 @@ INCLUDE += \
-I$(BOARDS_DIR) \
-I$(BOARD_DIR) \
-I$(BOARD_DIR)/sm \
- -I$(COMPONENTS_DIR)/pcal6408a \
-I$(COMPONENTS_DIR)/pf09 \
-I$(COMPONENTS_DIR)/pf53 \
-I$(COMPONENTS_DIR)/pca2131
@@ -50,7 +50,6 @@ VPATH += \
$(BOARDS_DIR) \
$(BOARD_DIR) \
$(BOARD_DIR)/sm \
- $(COMPONENTS_DIR)/pcal6408a \
$(COMPONENTS_DIR)/pf09 \
$(COMPONENTS_DIR)/pf53 \
$(COMPONENTS_DIR)/pca2131
@@ -63,7 +62,6 @@ OBJS += \
$(OUT)/brd_sm_sensor.o \
$(OUT)/brd_sm_voltage.o \
$(OUT)/brd_sm_bbm.o \
- $(OUT)/fsl_pcal6408a.o \
$(OUT)/fsl_pf09.o \
$(OUT)/fsl_pf53.o \
$(OUT)/fsl_pca2131.o
diff --git a/boards/ccimx95dvk/sm/brd_sm_bbm.c b/boards/ccimx95dvk/sm/brd_sm_bbm.c
index 6103583ff69d..2c5cc953b1e2 100755
--- a/boards/ccimx95dvk/sm/brd_sm_bbm.c
+++ b/boards/ccimx95dvk/sm/brd_sm_bbm.c
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2025 NXP
+** Copyright 2025 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -432,8 +433,6 @@ int32_t BRD_SM_BbmRtcAlarmSet(uint32_t rtcId, bool enable, uint64_t val)
/* Enable interrupt */
if (PCA2131_IntEnable(&g_pca2131Dev, true))
{
- /* Enable bus expander interrupt */
- status = BRD_SM_BusExpMaskSet(0U, BIT8(6));
}
else
{
@@ -457,8 +456,6 @@ int32_t BRD_SM_BbmRtcAlarmSet(uint32_t rtcId, bool enable, uint64_t val)
/* Disable interrupt */
if (PCA2131_IntEnable(&g_pca2131Dev, false))
{
- /* Disable bus expander interrupt */
- status = BRD_SM_BusExpMaskSet(BIT8(6), BIT8(6));
}
else
{
diff --git a/boards/ccimx95dvk/sm/brd_sm_control.c b/boards/ccimx95dvk/sm/brd_sm_control.c
index fde28d939fca..76de9fad9e86 100755
--- a/boards/ccimx95dvk/sm/brd_sm_control.c
+++ b/boards/ccimx95dvk/sm/brd_sm_control.c
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2023-2025 NXP
+** Copyright 2025 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -44,13 +45,6 @@
/* Local defines */
-/* PCAL6408A input signals */
-#define PCAL6408A_INPUT_SD3_WAKE 0U
-#define PCAL6408A_INPUT_PCIE1_WAKE 4U
-#define PCAL6408A_INPUT_BT_WAKE 5U
-#define PCAL6408A_INPUT_PCIE2_WAKE 6U
-#define PCAL6408A_INPUT_BUTTON 7U
-
/* Local types */
/* Local variables */
@@ -105,26 +99,7 @@ int32_t BRD_SM_ControlGet(uint32_t ctrlId, uint32_t *numRtn, uint32_t *rtn)
}
else if (ctrlId < BRD_SM_CTRL_TEST)
{
- uint8_t data;
-
- /* Read expander data input */
- if (PCAL6408A_InputGet(&g_pcal6408aDev, &data))
- {
- uint32_t shift = ctrlId - DEV_SM_NUM_CTRL;
-
- /* Adjust bit position */
- if (shift > 0U)
- {
- shift += 3U;
- }
-
- *numRtn = 1U;
- rtn[0] = (((uint32_t) data) >> shift) & 0x1UL;
- }
- else
- {
- status = SM_ERR_HARDWARE_ERROR;
- }
+ status = SM_ERR_HARDWARE_ERROR;
}
else
{
@@ -270,41 +245,12 @@ int32_t BRD_SM_ControlFlagsSet(uint32_t ctrlId, uint32_t flags)
}
else
{
- uint8_t mask;
- uint32_t val;
- uint32_t enb = (flags != 0U) ? 0U : 1U;
-
switch (ctrlId)
{
- case BRD_SM_CTRL_SD3_WAKE:
- mask = BIT8(PCAL6408A_INPUT_SD3_WAKE);
- val = (enb & 0x1U) << PCAL6408A_INPUT_SD3_WAKE;
- break;
- case BRD_SM_CTRL_PCIE1_WAKE:
- mask = BIT8(PCAL6408A_INPUT_PCIE1_WAKE);
- val = (enb & 0x1U) << PCAL6408A_INPUT_PCIE1_WAKE;
- break;
- case BRD_SM_CTRL_BT_WAKE:
- mask = BIT8(PCAL6408A_INPUT_BT_WAKE);
- val = (enb & 0x1U) << PCAL6408A_INPUT_BT_WAKE;
- break;
- case BRD_SM_CTRL_PCIE2_WAKE:
- mask = BIT8(PCAL6408A_INPUT_PCIE2_WAKE);
- val = (enb & 0x1U) << PCAL6408A_INPUT_PCIE2_WAKE;
- break;
- case BRD_SM_CTRL_BUTTON:
- mask = BIT8(PCAL6408A_INPUT_BUTTON);
- val = (enb & 0x1U) << PCAL6408A_INPUT_BUTTON;
- break;
default:
status = SM_ERR_NOT_FOUND;
break;
}
-
- if (status == SM_ERR_SUCCESS)
- {
- status = BRD_SM_BusExpMaskSet((uint8_t) val, mask);
- }
}
return status;
@@ -315,42 +261,6 @@ int32_t BRD_SM_ControlFlagsSet(uint32_t ctrlId, uint32_t flags)
/*--------------------------------------------------------------------------*/
void BRD_SM_ControlHandler(uint8_t status, uint8_t val)
{
- uint32_t data = (uint32_t) val;
-
- /* Handle SD3 wake */
- if ((status & BIT8(PCAL6408A_INPUT_SD3_WAKE)) != 0U)
- {
- LMM_MiscControlEvent(BRD_SM_CTRL_SD3_WAKE,
- ((data >> PCAL6408A_INPUT_SD3_WAKE) & 0x1U) + 1U);
- }
-
- /* Handle PCIe1 wake */
- if ((status & BIT8(PCAL6408A_INPUT_PCIE1_WAKE)) != 0U)
- {
- LMM_MiscControlEvent(BRD_SM_CTRL_PCIE1_WAKE,
- ((data >> PCAL6408A_INPUT_PCIE1_WAKE) & 0x1U) + 1U);
- }
-
- /* Handle BT wake */
- if ((status & BIT8(PCAL6408A_INPUT_BT_WAKE)) != 0U)
- {
- LMM_MiscControlEvent(BRD_SM_CTRL_BT_WAKE,
- ((data >> PCAL6408A_INPUT_BT_WAKE) & 0x1U) + 1U);
- }
-
- /* Handle PCIe2 wake */
- if (((status & BIT8(PCAL6408A_INPUT_PCIE2_WAKE)) != 0U)
- && !g_pca2131Used)
- {
- LMM_MiscControlEvent(BRD_SM_CTRL_PCIE2_WAKE,
- ((data >> PCAL6408A_INPUT_PCIE2_WAKE) & 0x1U) + 1U);
- }
-
- /* Handle button */
- if ((status & BIT8(PCAL6408A_INPUT_BUTTON)) != 0U)
- {
- LMM_MiscControlEvent(BRD_SM_CTRL_BUTTON,
- ((data >> PCAL6408A_INPUT_BUTTON) & 0x1U) + 1U);
- }
+ // Call pertinent LMM_MiscControlEvent()
}
diff --git a/boards/ccimx95dvk/sm/brd_sm_control.h b/boards/ccimx95dvk/sm/brd_sm_control.h
index 30ad8e67eb6f..9c61bce72f8e 100755
--- a/boards/ccimx95dvk/sm/brd_sm_control.h
+++ b/boards/ccimx95dvk/sm/brd_sm_control.h
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2023-2025 NXP
+** Copyright 2025 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -67,7 +68,7 @@
/** @} */
/*! Number of board controls */
-#define BRD_SM_NUM_CTRL 8UL
+#define BRD_SM_NUM_CTRL 3UL
/*! Total number of controls */
#define SM_NUM_CTRL (DEV_SM_NUM_CTRL + BRD_SM_NUM_CTRL)
@@ -76,14 +77,9 @@
* @name BRD_SM control domain indexes
*/
/** @{ */
-#define BRD_SM_CTRL_SD3_WAKE (DEV_SM_NUM_CTRL + 0U) /*!< PCAL6408A-0 */
-#define BRD_SM_CTRL_PCIE1_WAKE (DEV_SM_NUM_CTRL + 1U) /*!< PCAL6408A-4 */
-#define BRD_SM_CTRL_BT_WAKE (DEV_SM_NUM_CTRL + 2U) /*!< PCAL6408A-5 */
-#define BRD_SM_CTRL_PCIE2_WAKE (DEV_SM_NUM_CTRL + 3U) /*!< PCAL6408A-6 */
-#define BRD_SM_CTRL_BUTTON (DEV_SM_NUM_CTRL + 4U) /*!< PCAL6408A-7 */
-#define BRD_SM_CTRL_TEST (DEV_SM_NUM_CTRL + 5U) /*!< Test */
-#define BRD_SM_CTRL_PCA2131 (DEV_SM_NUM_CTRL + 6U) /*!< PCA2131 raw access */
-#define BRD_SM_CTRL_TEST_A (DEV_SM_NUM_CTRL + 7U) /*!< Test action */
+#define BRD_SM_CTRL_TEST (DEV_SM_NUM_CTRL + 0U) /*!< Test */
+#define BRD_SM_CTRL_PCA2131 (DEV_SM_NUM_CTRL + 1U) /*!< PCA2131 raw access */
+#define BRD_SM_CTRL_TEST_A (DEV_SM_NUM_CTRL + 2U) /*!< Test action */
/** @} */
/* Types */
diff --git a/boards/ccimx95dvk/sm/brd_sm_handlers.c b/boards/ccimx95dvk/sm/brd_sm_handlers.c
index 19ee28e93134..a42359f15e8b 100755
--- a/boards/ccimx95dvk/sm/brd_sm_handlers.c
+++ b/boards/ccimx95dvk/sm/brd_sm_handlers.c
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2023-2025 NXP
+** Copyright 2025 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -48,23 +49,16 @@
/* I2C device addresses */
#define BOARD_PF09_DEV_ADDR 0x08U
-#define BOARD_PCAL6408A_DEV_ADDR 0x20U
#define BOARD_PF5301_DEV_ADDR 0x2AU
#define BOARD_PF5302_DEV_ADDR 0x29U
#define BOARD_PCA2131_DEV_ADDR 0x53U
-#define PCAL6408A_INPUT_PF53_ARM_PG 1U
-#define PCAL6408A_INPUT_PF53_SOC_PG 2U
-#define PCAL6408A_INPUT_PF09_INT 3U
-#define PCAL6408A_INPUT_PCA2131_INT 6U
-
/* Local types */
/* Local variables */
/* Global variables */
-PCAL6408A_Type g_pcal6408aDev;
PF09_Type g_pf09Dev;
PF53_Type g_pf5301Dev;
PF53_Type g_pf5302Dev;
@@ -238,34 +232,6 @@ int32_t BRD_SM_SerialDevicesInit(void)
return status;
}
-/*--------------------------------------------------------------------------*/
-/* Set bus expander interrupt mask */
-/*--------------------------------------------------------------------------*/
-int32_t BRD_SM_BusExpMaskSet(uint8_t val, uint8_t mask)
-{
- int32_t status = SM_ERR_SUCCESS;
- static uint8_t cachedMask = PCAL6408A_INITIAL_MASK;
- uint8_t newMask = (cachedMask & ~mask);
-
- newMask |= val;
-
- /* Mask changed? */
- if (cachedMask != newMask)
- {
- if (PCAL6408A_IntMaskSet(&g_pcal6408aDev, newMask))
- {
- cachedMask = newMask;
- }
- else
- {
- status = SM_ERR_HARDWARE_ERROR;
- }
- }
-
- /* Return status */
- return status;
-}
-
/*==========================================================================*/
/*--------------------------------------------------------------------------*/
diff --git a/boards/ccimx95dvk/sm/brd_sm_handlers.h b/boards/ccimx95dvk/sm/brd_sm_handlers.h
index e34d52b50f7a..781a443e8444 100755
--- a/boards/ccimx95dvk/sm/brd_sm_handlers.h
+++ b/boards/ccimx95dvk/sm/brd_sm_handlers.h
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2023-2024 NXP
+** Copyright 2025 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -52,16 +53,12 @@
#include "sm.h"
#include "dev_sm.h"
-#include "fsl_pcal6408a.h"
#include "fsl_pf09.h"
#include "fsl_pf53.h"
#include "fsl_pca2131.h"
/* Defines */
-/*! Initial PCAL6408A interrupt mask */
-#define PCAL6408A_INITIAL_MASK 0xF7U
-
/*! Number of board IRQs participating dynamic prioritization */
#define BOARD_NUM_IRQ_PRIO_IDX 1U
@@ -72,9 +69,6 @@
/* External variables */
-/*! Handle to access PCAL6408A */
-extern PCAL6408A_Type g_pcal6408aDev;
-
/*! Handle to access PF09 */
extern PF09_Type g_pf09Dev;
@@ -105,19 +99,6 @@ extern uint32_t g_pmicFaultFlags;
*/
int32_t BRD_SM_SerialDevicesInit(void);
-/*!
- * Enable/disable bus expander interrupts.
- *
- * @param[in] val Value to write
- * @param[in] mask Mask of bits to modify
- *
- * This function allows a caller to configure the bus expander.
- * interrupts.
- *
- * @return Returns the status (::SM_ERR_SUCCESS = success).
- */
-int32_t BRD_SM_BusExpMaskSet(uint8_t val, uint8_t mask);
-
/*!
* GPIO 1 interrupt 0 handler.
*/
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index c1374d4684a9..c3c280d275b0 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -365,7 +365,6 @@ CHANNEL db=2, xport=smt, check=crc32, rpc=scmi, \
# API
-BRD_SM_CTRL_BUTTON NOTIFY
BRD_SM_CTRL_PCA2131 ALL
BRD_SM_CTRL_TEST ALL
BRD_SM_CTRL_TEST_A ALL
@@ -553,11 +552,6 @@ CHANNEL db=1, xport=smt, rpc=scmi, type=p2a_notify
AUDIO_PLL1 ALL
AUDIO_PLL2 ALL
-BRD_SM_CTRL_BT_WAKE NOTIFY
-BRD_SM_CTRL_BUTTON NOTIFY
-BRD_SM_CTRL_PCIE1_WAKE NOTIFY
-BRD_SM_CTRL_PCIE2_WAKE NOTIFY
-BRD_SM_CTRL_SD3_WAKE NOTIFY
BRD_SM_CTRL_TEST_A ALL
BRD_SM_RTC_PCA2131 PRIV
BRD_SM_SENSOR_TEMP_PF09 ALL
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 45114d0002f4..83d7bd94bcd1 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -71,7 +71,6 @@
.clkPerms[DEV_SM_CLK_M7SYSTICK] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_TSTMR2] = SM_SCMI_PERM_ALL, \
.cpuPerms[DEV_SM_CPU_M7P] = SM_SCMI_PERM_ALL, \
- .ctrlPerms[BRD_SM_CTRL_BUTTON] = SM_SCMI_PERM_NOTIFY, \
.ctrlPerms[BRD_SM_CTRL_PCA2131] = SM_SCMI_PERM_ALL, \
.ctrlPerms[BRD_SM_CTRL_TEST] = SM_SCMI_PERM_ALL, \
.ctrlPerms[BRD_SM_CTRL_TEST_A] = SM_SCMI_PERM_ALL, \
@@ -304,11 +303,6 @@
.clkPerms[DEV_SM_CLK_VIDEOPLL1_VCO] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_VPUDSP] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_XSPISLVROOT] = SM_SCMI_PERM_ALL, \
- .ctrlPerms[BRD_SM_CTRL_BT_WAKE] = SM_SCMI_PERM_NOTIFY, \
- .ctrlPerms[BRD_SM_CTRL_BUTTON] = SM_SCMI_PERM_NOTIFY, \
- .ctrlPerms[BRD_SM_CTRL_PCIE1_WAKE] = SM_SCMI_PERM_NOTIFY, \
- .ctrlPerms[BRD_SM_CTRL_PCIE2_WAKE] = SM_SCMI_PERM_NOTIFY, \
- .ctrlPerms[BRD_SM_CTRL_SD3_WAKE] = SM_SCMI_PERM_NOTIFY, \
.ctrlPerms[BRD_SM_CTRL_TEST_A] = SM_SCMI_PERM_ALL, \
.ctrlPerms[DEV_SM_CTRL_ADC_TEST] = SM_SCMI_PERM_ALL, \
.ctrlPerms[DEV_SM_CTRL_MQS1_SETTINGS] = SM_SCMI_PERM_ALL, \

View File

@ -1,276 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Mon, 29 Sep 2025 13:02:02 +0200
Subject: [PATCH] ccimx95: change names of voltage regulators
Change the names of voltage regulators for easier identification.
Use the PMIC regulator (SW1, SW2, LDO1...) and then the name of the power
rail used in the SOM.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
---
boards/ccimx95dvk/sm/brd_sm_voltage.c | 85 ++++++++++++++-------------
boards/ccimx95dvk/sm/brd_sm_voltage.h | 15 ++---
2 files changed, 51 insertions(+), 49 deletions(-)
diff --git a/boards/ccimx95dvk/sm/brd_sm_voltage.c b/boards/ccimx95dvk/sm/brd_sm_voltage.c
index b81ffd970294..d7e7c9b3ea27 100755
--- a/boards/ccimx95dvk/sm/brd_sm_voltage.c
+++ b/boards/ccimx95dvk/sm/brd_sm_voltage.c
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2023-2025 NXP
+** Copyright 2025 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -63,13 +64,13 @@ int32_t BRD_SM_VoltageNameGet(uint32_t domainId, string *voltNameAddr,
static string const s_name[BRD_SM_NUM_VOLT] =
{
- "vdd_gpio_3p3",
- "vdd_ana_0p8",
- "vdd_gpio_1p8",
- "vddq_ddr",
- "vdd2_ddr",
- "sd_card",
- "nvcc_sd2"
+ "vdd_3v3",
+ "vdd_ana_0v8",
+ "vdd_1v8",
+ "lpd5_vddq",
+ "lpd5_vdd2",
+ "vdd_ldo1",
+ "vdd_sdio2"
};
/* Get max string width */
@@ -117,25 +118,25 @@ int32_t BRD_SM_VoltageDescribe(uint32_t domainId,
case DEV_SM_VOLT_ARM:
status = DEV_SM_VoltageDescribe(domainId, range);
break;
- case BRD_SM_VOLT_VDD_GPIO_3P3:
+ case BRD_SM_VOLT_SW1_VDD_3V3:
rc = PF09_RegulatorInfoGet(PF09_REG_SW1, &info);
break;
- case BRD_SM_VOLT_VDD_ANA_0P8:
+ case BRD_SM_VOLT_SW2_VDD_ANA_0V8:
rc = PF09_RegulatorInfoGet(PF09_REG_SW2, &info);
break;
- case BRD_SM_VOLT_VDD_GPIO_1P8:
+ case BRD_SM_VOLT_SW3_VDD_1V8:
rc = PF09_RegulatorInfoGet(PF09_REG_SW3, &info);
break;
- case BRD_SM_VOLT_VDDQ_DDR:
+ case BRD_SM_VOLT_SW4_LPD5_VDDQ:
rc = PF09_RegulatorInfoGet(PF09_REG_SW4, &info);
break;
- case BRD_SM_VOLT_VDD2_DDR:
+ case BRD_SM_VOLT_SW5_LPD5_VDD2:
rc = PF09_RegulatorInfoGet(PF09_REG_SW5, &info);
break;
- case BRD_SM_VOLT_SD_CARD:
+ case BRD_SM_VOLT_LDO1_VDD_LDO1:
rc = PF09_RegulatorInfoGet(PF09_REG_LDO1, &info);
break;
- case BRD_SM_VOLT_NVCC_SD2:
+ case BRD_SM_VOLT_LDO2_VDD_SDIO2:
rc = PF09_RegulatorInfoGet(PF09_REG_LDO2, &info);
break;
default:
@@ -206,31 +207,31 @@ int32_t BRD_SM_VoltageModeSet(uint32_t domainId, uint8_t voltMode)
s_modeArm = voltMode;
}
break;
- case BRD_SM_VOLT_VDD_GPIO_3P3:
+ case BRD_SM_VOLT_SW1_VDD_3V3:
rc = PF09_SwModeSet(&g_pf09Dev, PF09_REG_SW1, PF09_STATE_VRUN,
mode);
break;
- case BRD_SM_VOLT_VDD_ANA_0P8:
+ case BRD_SM_VOLT_SW2_VDD_ANA_0V8:
rc = PF09_SwModeSet(&g_pf09Dev, PF09_REG_SW2, PF09_STATE_VRUN,
mode);
break;
- case BRD_SM_VOLT_VDD_GPIO_1P8:
+ case BRD_SM_VOLT_SW3_VDD_1V8:
rc = PF09_SwModeSet(&g_pf09Dev, PF09_REG_SW3, PF09_STATE_VRUN,
mode);
break;
- case BRD_SM_VOLT_VDDQ_DDR:
+ case BRD_SM_VOLT_SW4_LPD5_VDDQ:
rc = PF09_SwModeSet(&g_pf09Dev, PF09_REG_SW4, PF09_STATE_VRUN,
mode);
break;
- case BRD_SM_VOLT_VDD2_DDR:
+ case BRD_SM_VOLT_SW5_LPD5_VDD2:
rc = PF09_SwModeSet(&g_pf09Dev, PF09_REG_SW5, PF09_STATE_VRUN,
mode);
break;
- case BRD_SM_VOLT_SD_CARD:
+ case BRD_SM_VOLT_LDO1_VDD_LDO1:
rc = PF09_LdoEnable(&g_pf09Dev, PF09_REG_LDO1, PF09_STATE_VRUN,
enable);
break;
- case BRD_SM_VOLT_NVCC_SD2:
+ case BRD_SM_VOLT_LDO2_VDD_SDIO2:
rc = PF09_LdoEnable(&g_pf09Dev, PF09_REG_LDO2, PF09_STATE_VRUN,
enable);
break;
@@ -271,36 +272,36 @@ int32_t BRD_SM_VoltageModeGet(uint32_t domainId, uint8_t *voltMode)
rc = PF09_GpioCtrlGet(&g_pf09Dev, PF09_GPIO4, PF53_STATE_VRUN,
&enable);
break;
- case BRD_SM_VOLT_VDD_GPIO_3P3:
+ case BRD_SM_VOLT_SW1_VDD_3V3:
rc = PF09_SwModeGet(&g_pf09Dev, PF09_REG_SW1, PF09_STATE_VRUN,
&mode);
enable = (mode != PF09_SW_MODE_OFF);
break;
- case BRD_SM_VOLT_VDD_ANA_0P8:
+ case BRD_SM_VOLT_SW2_VDD_ANA_0V8:
rc = PF09_SwModeGet(&g_pf09Dev, PF09_REG_SW2, PF09_STATE_VRUN,
&mode);
enable = (mode != PF09_SW_MODE_OFF);
break;
- case BRD_SM_VOLT_VDD_GPIO_1P8:
+ case BRD_SM_VOLT_SW3_VDD_1V8:
rc = PF09_SwModeGet(&g_pf09Dev, PF09_REG_SW3, PF09_STATE_VRUN,
&mode);
enable = (mode != PF09_SW_MODE_OFF);
break;
- case BRD_SM_VOLT_VDDQ_DDR:
+ case BRD_SM_VOLT_SW4_LPD5_VDDQ:
rc = PF09_SwModeGet(&g_pf09Dev, PF09_REG_SW4, PF09_STATE_VRUN,
&mode);
enable = (mode != PF09_SW_MODE_OFF);
break;
- case BRD_SM_VOLT_VDD2_DDR:
+ case BRD_SM_VOLT_SW5_LPD5_VDD2:
rc = PF09_SwModeGet(&g_pf09Dev, PF09_REG_SW5, PF09_STATE_VRUN,
&mode);
enable = (mode != PF09_SW_MODE_OFF);
break;
- case BRD_SM_VOLT_SD_CARD:
+ case BRD_SM_VOLT_LDO1_VDD_LDO1:
rc = PF09_LdoIsEnabled(&g_pf09Dev, PF09_REG_LDO1, PF09_STATE_VRUN,
&enable);
break;
- case BRD_SM_VOLT_NVCC_SD2:
+ case BRD_SM_VOLT_LDO2_VDD_SDIO2:
rc = PF09_LdoIsEnabled(&g_pf09Dev, PF09_REG_LDO2, PF09_STATE_VRUN,
&enable);
break;
@@ -359,31 +360,31 @@ int32_t BRD_SM_VoltageLevelSet(uint32_t domainId, int32_t voltageLevel)
s_levelArm = (int32_t) level;
rc = true;
break;
- case BRD_SM_VOLT_VDD_GPIO_3P3:
+ case BRD_SM_VOLT_SW1_VDD_3V3:
rc = PF09_VoltageSet(&g_pf09Dev, PF09_REG_SW1, PF09_STATE_VRUN,
level);
break;
- case BRD_SM_VOLT_VDD_ANA_0P8:
+ case BRD_SM_VOLT_SW2_VDD_ANA_0V8:
rc = PF09_VoltageSet(&g_pf09Dev, PF09_REG_SW2, PF09_STATE_VRUN,
level);
break;
- case BRD_SM_VOLT_VDD_GPIO_1P8:
+ case BRD_SM_VOLT_SW3_VDD_1V8:
rc = PF09_VoltageSet(&g_pf09Dev, PF09_REG_SW3, PF09_STATE_VRUN,
level);
break;
- case BRD_SM_VOLT_VDDQ_DDR:
+ case BRD_SM_VOLT_SW4_LPD5_VDDQ:
rc = PF09_VoltageSet(&g_pf09Dev, PF09_REG_SW4, PF09_STATE_VRUN,
level);
break;
- case BRD_SM_VOLT_VDD2_DDR:
+ case BRD_SM_VOLT_SW5_LPD5_VDD2:
rc = PF09_VoltageSet(&g_pf09Dev, PF09_REG_SW5, PF09_STATE_VRUN,
level);
break;
- case BRD_SM_VOLT_SD_CARD:
+ case BRD_SM_VOLT_LDO1_VDD_LDO1:
rc = PF09_VoltageSet(&g_pf09Dev, PF09_REG_LDO1, PF09_STATE_VRUN,
level);
break;
- case BRD_SM_VOLT_NVCC_SD2:
+ case BRD_SM_VOLT_LDO2_VDD_SDIO2:
rc = PF09_VoltageSet(&g_pf09Dev, PF09_REG_LDO2, PF09_STATE_VRUN,
level);
break;
@@ -458,31 +459,31 @@ int32_t BRD_SM_VoltageLevelGet(uint32_t domainId, int32_t *voltageLevel)
}
}
break;
- case BRD_SM_VOLT_VDD_GPIO_3P3:
+ case BRD_SM_VOLT_SW1_VDD_3V3:
rc = PF09_VoltageGet(&g_pf09Dev, PF09_REG_SW1, PF09_STATE_VRUN,
&level);
break;
- case BRD_SM_VOLT_VDD_ANA_0P8:
+ case BRD_SM_VOLT_SW2_VDD_ANA_0V8:
rc = PF09_VoltageGet(&g_pf09Dev, PF09_REG_SW2, PF09_STATE_VRUN,
&level);
break;
- case BRD_SM_VOLT_VDD_GPIO_1P8:
+ case BRD_SM_VOLT_SW3_VDD_1V8:
rc = PF09_VoltageGet(&g_pf09Dev, PF09_REG_SW3, PF09_STATE_VRUN,
&level);
break;
- case BRD_SM_VOLT_VDDQ_DDR:
+ case BRD_SM_VOLT_SW4_LPD5_VDDQ:
rc = PF09_VoltageGet(&g_pf09Dev, PF09_REG_SW4, PF09_STATE_VRUN,
&level);
break;
- case BRD_SM_VOLT_VDD2_DDR:
+ case BRD_SM_VOLT_SW5_LPD5_VDD2:
rc = PF09_VoltageGet(&g_pf09Dev, PF09_REG_SW5, PF09_STATE_VRUN,
&level);
break;
- case BRD_SM_VOLT_SD_CARD:
+ case BRD_SM_VOLT_LDO1_VDD_LDO1:
rc = PF09_VoltageGet(&g_pf09Dev, PF09_REG_LDO1, PF09_STATE_VRUN,
&level);
break;
- case BRD_SM_VOLT_NVCC_SD2:
+ case BRD_SM_VOLT_LDO2_VDD_SDIO2:
rc = PF09_VoltageGet(&g_pf09Dev, PF09_REG_LDO2, PF09_STATE_VRUN,
&level);
break;
diff --git a/boards/ccimx95dvk/sm/brd_sm_voltage.h b/boards/ccimx95dvk/sm/brd_sm_voltage.h
index 6c9e01286e7e..46ddc9d89096 100755
--- a/boards/ccimx95dvk/sm/brd_sm_voltage.h
+++ b/boards/ccimx95dvk/sm/brd_sm_voltage.h
@@ -2,6 +2,7 @@
** ###################################################################
**
** Copyright 2023-2024 NXP
+** Copyright 2025 Digi International Inc.
**
** Redistribution and use in source and binary forms, with or without modification,
** are permitted provided that the following conditions are met:
@@ -76,13 +77,13 @@
* @name BRD_SM voltage domains
*/
/** @{ */
-#define BRD_SM_VOLT_VDD_GPIO_3P3 (DEV_SM_NUM_VOLT + 0U) /*!< VDD GPIO 3.3v */
-#define BRD_SM_VOLT_VDD_ANA_0P8 (DEV_SM_NUM_VOLT + 1U) /*!< VDD ANA 0.8v */
-#define BRD_SM_VOLT_VDD_GPIO_1P8 (DEV_SM_NUM_VOLT + 2U) /*!< VDD GPIO 1.8v */
-#define BRD_SM_VOLT_VDDQ_DDR (DEV_SM_NUM_VOLT + 3U) /*!< DDR VDDQ */
-#define BRD_SM_VOLT_VDD2_DDR (DEV_SM_NUM_VOLT + 4U) /*!< DDR VDD2 */
-#define BRD_SM_VOLT_SD_CARD (DEV_SM_NUM_VOLT + 5U) /*!< SD1 */
-#define BRD_SM_VOLT_NVCC_SD2 (DEV_SM_NUM_VOLT + 6U) /*!< SD2 */
+#define BRD_SM_VOLT_SW1_VDD_3V3 (DEV_SM_NUM_VOLT + 0U) /*!< VDD 3V3 */
+#define BRD_SM_VOLT_SW2_VDD_ANA_0V8 (DEV_SM_NUM_VOLT + 1U) /*!< VDD ANA 0V8 */
+#define BRD_SM_VOLT_SW3_VDD_1V8 (DEV_SM_NUM_VOLT + 2U) /*!< VDD 1V8 */
+#define BRD_SM_VOLT_SW4_LPD5_VDDQ (DEV_SM_NUM_VOLT + 3U) /*!< DDR VDDQ */
+#define BRD_SM_VOLT_SW5_LPD5_VDD2 (DEV_SM_NUM_VOLT + 4U) /*!< DDR VDD2 */
+#define BRD_SM_VOLT_LDO1_VDD_LDO1 (DEV_SM_NUM_VOLT + 5U) /*!< LDO1 */
+#define BRD_SM_VOLT_LDO2_VDD_SDIO2 (DEV_SM_NUM_VOLT + 6U) /*!< LDO2 (VDD_SDIO2) */
/** @} */
/* Types */

View File

@ -1,49 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Thu, 9 Oct 2025 13:16:00 +0200
Subject: [PATCH] ccimx95dvk: enable full access to certain regulators from
non-secure LVM
The following PMIC regulators are used by the DVK:
- VDD_3V3 (SW1)
- VDD_1V8 (SW3)
- VDD_LDO1 (LDO1)
- VDD_SDIO2 (LDO2)
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
---
configs/ccimx95dvk.cfg | 4 ++++
configs/ccimx95dvk/config_scmi.h | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index c160dbce0b85..d7ee4d0115fa 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -554,6 +554,10 @@ BRD_SM_CTRL_TEST_A ALL
BRD_SM_SENSOR_TEMP_PF09 ALL
BRD_SM_SENSOR_TEMP_PF5301 SET
BRD_SM_SENSOR_TEMP_PF5302 SET
+BRD_SM_VOLT_SW1_VDD_3V3 ALL
+BRD_SM_VOLT_SW3_VDD_1V8 ALL
+BRD_SM_VOLT_LDO1_VDD_LDO1 ALL
+BRD_SM_VOLT_LDO2_VDD_SDIO2 ALL
BUTTON ALL, test
CLOCK_DISP1PIX ALL
CLOCK_DISP2PIX ALL
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 87de1fd591ca..83084a9d1fbd 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -601,6 +601,10 @@
.sensorPerms[DEV_SM_SENSOR_TEMP_A55] = SM_SCMI_PERM_ALL, \
.sensorPerms[DEV_SM_SENSOR_TEMP_ANA] = SM_SCMI_PERM_SET, \
.sysPerms = SM_SCMI_PERM_NOTIFY, \
+ .voltPerms[BRD_SM_VOLT_LDO1_VDD_LDO1] = SM_SCMI_PERM_ALL, \
+ .voltPerms[BRD_SM_VOLT_LDO2_VDD_SDIO2] = SM_SCMI_PERM_ALL, \
+ .voltPerms[BRD_SM_VOLT_SW1_VDD_3V3] = SM_SCMI_PERM_ALL, \
+ .voltPerms[BRD_SM_VOLT_SW3_VDD_1V8] = SM_SCMI_PERM_ALL, \
}
/*! Config for SCMI channel 5 */

View File

@ -1,39 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Mon, 13 Oct 2025 08:49:57 +0200
Subject: [PATCH] components: pf09: reduce LDOs step to 50mV
The voltage values that can be programmed to the LDOs are not linear.
For low voltages, the step is 50mV, but for higher voltages it is 100mV.
Setting the step as 100mV fools the Linux kernel regulator framework
which does not properly calculate the selector it must call when using
the SCMI regulator framework, resulting in -EINVAL errors.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
---
components/pf09/fsl_pf09.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/components/pf09/fsl_pf09.c b/components/pf09/fsl_pf09.c
index fc0638cbdba5..5d842c9a3062 100755
--- a/components/pf09/fsl_pf09.c
+++ b/components/pf09/fsl_pf09.c
@@ -528,7 +528,7 @@ bool PF09_RegulatorInfoGet(uint8_t regulator, PF09_RegInfo *regInfo)
/* set min/max/step in microvolts */
regInfo->minV = 750000U;
regInfo->maxV = 3300000U;
- regInfo->stepV = 100000U;
+ regInfo->stepV = 50000U;
}
break;
case PF09_REG_LDO2:
@@ -537,7 +537,7 @@ bool PF09_RegulatorInfoGet(uint8_t regulator, PF09_RegInfo *regInfo)
/* set min/max/step in microvolts */
regInfo->minV = 650000U;
regInfo->maxV = 3300000U;
- regInfo->stepV = 100000U;
+ regInfo->stepV = 50000U;
}
break;
default:

View File

@ -1,60 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Wed, 29 Oct 2025 16:54:45 +0100
Subject: [PATCH] ccimx95dvk: remove access to VDD_3V3 and VDD_1V8 from
non-secure world
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
There doesn't seem to be a clear registered handler for reboot or shutdown
path from Linux to SM.
When a 'reboot' is requested, Linux falls back to run the global
device_shutdown() path.
The SM will turn these regulators off in their shutdown path or via a
global “disable regulators on reboot” policy. The current SM firmware
doesn't get to know if Linux has marked these regulators as "always-on".
Powering these regulators off removes power to the SOM who is then not
able to continue the reset (it is not powered).
By removing access to Linux, we fully rely on SM managing these regulators,
though apparently support is incomplete (for instance they are not powered
off on the poweroff path from Linux), so this may need to be revisited in
future BSP upgrades.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
https://onedigi.atlassian.net/browse/DEL-9804
---
configs/ccimx95dvk.cfg | 2 --
configs/ccimx95dvk/config_scmi.h | 2 --
2 files changed, 4 deletions(-)
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index d7ee4d0115fa..b73401792592 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -554,8 +554,6 @@ BRD_SM_CTRL_TEST_A ALL
BRD_SM_SENSOR_TEMP_PF09 ALL
BRD_SM_SENSOR_TEMP_PF5301 SET
BRD_SM_SENSOR_TEMP_PF5302 SET
-BRD_SM_VOLT_SW1_VDD_3V3 ALL
-BRD_SM_VOLT_SW3_VDD_1V8 ALL
BRD_SM_VOLT_LDO1_VDD_LDO1 ALL
BRD_SM_VOLT_LDO2_VDD_SDIO2 ALL
BUTTON ALL, test
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 83084a9d1fbd..506cb750af65 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -603,8 +603,6 @@
.sysPerms = SM_SCMI_PERM_NOTIFY, \
.voltPerms[BRD_SM_VOLT_LDO1_VDD_LDO1] = SM_SCMI_PERM_ALL, \
.voltPerms[BRD_SM_VOLT_LDO2_VDD_SDIO2] = SM_SCMI_PERM_ALL, \
- .voltPerms[BRD_SM_VOLT_SW1_VDD_3V3] = SM_SCMI_PERM_ALL, \
- .voltPerms[BRD_SM_VOLT_SW3_VDD_1V8] = SM_SCMI_PERM_ALL, \
}
/*! Config for SCMI channel 5 */

View File

@ -1,226 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Wed, 14 Jan 2026 16:03:29 +0100
Subject: [PATCH 13/14] ccimx95dvk: change SM console from LPUART7 to LPUART2
On version 2 of the SOM, the SM console has changed to LPUART2.
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
https://onedigi.atlassian.net/browse/DEL-9915
---
configs/ccimx95dvk.cfg | 18 +++++++++---------
configs/ccimx95dvk/config_board.h | 2 +-
configs/ccimx95dvk/config_scmi.h | 12 +++++++-----
configs/ccimx95dvk/config_trdc.h | 7 +++----
4 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index b73401792592..53444e785270 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -1,7 +1,7 @@
## ###################################################################
##
## Copyright 2023-2025 NXP
-## Copyright 2025 Digi International Inc.
+## Copyright 2025,2026 Digi International Inc.
##
## Redistribution and use in source and binary forms, with or without modification,
## are permitted provided that the following conditions are met:
@@ -42,7 +42,7 @@ include ../devices/MIMX95/configtool/device.cfg
# Board #
#==========================================================================#
-BOARD DEBUG_UART_INSTANCE=7
+BOARD DEBUG_UART_INSTANCE=2
BOARD DEBUG_UART_BAUDRATE=115200
BOARD I2C_INSTANCE=1
@@ -233,7 +233,7 @@ IOMUXC OWNER
IOMUX_GPR OWNER
JTAG OWNER
LPI2C1 OWNER
-LPUART7 OWNER
+LPUART2 OWNER
M33_CACHE_CTRL OWNER
M33_PCF OWNER
M33_PSF OWNER
@@ -306,8 +306,8 @@ L_STCU_NPUMIX OWNER
PIN_FCCU_ERR0 OWNER
PIN_I2C1_SCL OWNER
PIN_I2C1_SDA OWNER
-PIN_GPIO_IO08 OWNER # LPUART7_TX
-PIN_GPIO_IO09 OWNER # LPUART7_RX
+PIN_UART2_RXD OWNER
+PIN_UART2_TXD OWNER
PIN_WDOG_ANY OWNER
# Memory
@@ -488,11 +488,11 @@ PERLPI_GPIO3 ALL
PERLPI_GPIO4 ALL
PERLPI_GPIO5 ALL
PERLPI_LPUART1 ALL
-PERLPI_LPUART2 ALL
PERLPI_LPUART3 ALL
PERLPI_LPUART4 ALL
PERLPI_LPUART5 ALL
PERLPI_LPUART6 ALL
+PERLPI_LPUART7 ALL
PERLPI_LPUART8 ALL
PERLPI_GPIO1 ALL
PERLPI_WDOG3 ALL
@@ -772,11 +772,11 @@ LPTPM4 OWNER
LPTPM5 OWNER
LPTPM6 OWNER
LPUART1 OWNER
-LPUART2 OWNER
LPUART3 OWNER
LPUART4 OWNER
LPUART5 OWNER
LPUART6 OWNER
+LPUART7 OWNER
LPUART8 OWNER, test
LVDS OWNER
MIPI_CSI0 OWNER
@@ -922,6 +922,8 @@ PIN_GPIO_IO04 OWNER
PIN_GPIO_IO05 OWNER
PIN_GPIO_IO06 OWNER
PIN_GPIO_IO07 OWNER
+PIN_GPIO_IO08 OWNER
+PIN_GPIO_IO09 OWNER
PIN_GPIO_IO10 OWNER
PIN_GPIO_IO11 OWNER
PIN_GPIO_IO12 OWNER
@@ -987,8 +989,6 @@ PIN_SD3_DATA2 OWNER
PIN_SD3_DATA3 OWNER
PIN_UART1_RXD OWNER, test
PIN_UART1_TXD OWNER
-PIN_UART2_RXD OWNER
-PIN_UART2_TXD OWNER
PIN_XSPI1_DATA0 OWNER
PIN_XSPI1_DATA1 OWNER
PIN_XSPI1_DATA2 OWNER
diff --git a/configs/ccimx95dvk/config_board.h b/configs/ccimx95dvk/config_board.h
index 23ecae56cf78..b511a0320a68 100644
--- a/configs/ccimx95dvk/config_board.h
+++ b/configs/ccimx95dvk/config_board.h
@@ -54,7 +54,7 @@
/* Defines */
/*! Config for UART instance */
-#define BOARD_DEBUG_UART_INSTANCE 7U
+#define BOARD_DEBUG_UART_INSTANCE 2U
/*! Config for UART baudrate */
#define BOARD_DEBUG_UART_BAUDRATE 115200U
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 506cb750af65..3b6899a7b9c8 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -177,11 +177,11 @@
.perlpiPerms[DEV_SM_PERLPI_GPIO4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART1] = SM_SCMI_PERM_ALL, \
- .perlpiPerms[DEV_SM_PERLPI_LPUART2] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART6] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_LPUART7] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART8] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_WDOG3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_WDOG4] = SM_SCMI_PERM_ALL, \
@@ -270,11 +270,11 @@
.clkPerms[DEV_SM_CLK_LPSPI7] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPSPI8] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART1] = SM_SCMI_PERM_ALL, \
- .clkPerms[DEV_SM_CLK_LPUART2] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART3] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART4] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART5] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART6] = SM_SCMI_PERM_ALL, \
+ .clkPerms[DEV_SM_CLK_LPUART7] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_LPUART8] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_MIPIPHYCFG] = SM_SCMI_PERM_ALL, \
.clkPerms[DEV_SM_CLK_MIPIPHYPLLBYPASS] = SM_SCMI_PERM_ALL, \
@@ -388,6 +388,8 @@
.daisyPerms[DEV_SM_DAISY_LPUART6_CTS] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPUART6_RXD] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_LPUART6_TXD] = SM_SCMI_PERM_ALL, \
+ .daisyPerms[DEV_SM_DAISY_LPUART7_RXD] = SM_SCMI_PERM_ALL, \
+ .daisyPerms[DEV_SM_DAISY_LPUART7_TXD] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_NETC_EMDC] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_NETC_EMDIO] = SM_SCMI_PERM_ALL, \
.daisyPerms[DEV_SM_DAISY_NETC_ETH0_RMII_RX_ER] = SM_SCMI_PERM_ALL, \
@@ -463,11 +465,11 @@
.perlpiPerms[DEV_SM_PERLPI_GPIO4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_GPIO5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART1] = SM_SCMI_PERM_ALL, \
- .perlpiPerms[DEV_SM_PERLPI_LPUART2] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART4] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART5] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART6] = SM_SCMI_PERM_ALL, \
+ .perlpiPerms[DEV_SM_PERLPI_LPUART7] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_LPUART8] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_WDOG3] = SM_SCMI_PERM_ALL, \
.perlpiPerms[DEV_SM_PERLPI_WDOG4] = SM_SCMI_PERM_ALL, \
@@ -515,6 +517,8 @@
.pinPerms[DEV_SM_PIN_GPIO_IO05] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO06] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO07] = SM_SCMI_PERM_ALL, \
+ .pinPerms[DEV_SM_PIN_GPIO_IO08] = SM_SCMI_PERM_ALL, \
+ .pinPerms[DEV_SM_PIN_GPIO_IO09] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO10] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO11] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_GPIO_IO12] = SM_SCMI_PERM_ALL, \
@@ -580,8 +584,6 @@
.pinPerms[DEV_SM_PIN_SD3_DATA3] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_UART1_RXD] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_UART1_TXD] = SM_SCMI_PERM_ALL, \
- .pinPerms[DEV_SM_PIN_UART2_RXD] = SM_SCMI_PERM_ALL, \
- .pinPerms[DEV_SM_PIN_UART2_TXD] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_XSPI1_DATA0] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_XSPI1_DATA1] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_XSPI1_DATA2] = SM_SCMI_PERM_ALL, \
diff --git a/configs/ccimx95dvk/config_trdc.h b/configs/ccimx95dvk/config_trdc.h
index 12ebbc61ca64..5758f62bdef5 100644
--- a/configs/ccimx95dvk/config_trdc.h
+++ b/configs/ccimx95dvk/config_trdc.h
@@ -108,7 +108,7 @@
SM_CFG_W1(0x00010450U), 0x30003330U, \
SM_CFG_W1(0x00010454U), 0x03333033U, \
SM_CFG_W1(0x00010458U), 0x00030000U, \
- SM_CFG_W1(0x0001045cU), 0x33330000U, \
+ SM_CFG_W1(0x0001045cU), 0x33330030U, \
SM_CFG_W1(0x00010460U), 0x33333333U, \
SM_CFG_W1(0x00010464U), 0x30000003U, \
SM_CFG_W1(0x00010468U), 0x33330030U, \
@@ -123,7 +123,7 @@
SM_CFG_W1(0x00010650U), 0x09000309U, \
SM_CFG_W1(0x00010654U), 0x0000C900U, \
SM_CFG_W1(0x00010658U), 0x99909900U, \
- SM_CFG_W1(0x0001065cU), 0x00009999U, \
+ SM_CFG_W1(0x0001065cU), 0x00009909U, \
SM_CFG_W1(0x00010668U), 0x00009900U, \
SM_CFG_W1(0x0001066cU), 0x90909000U, \
SM_CFG_W1(0x00010670U), 0x00009000U, \
@@ -1151,7 +1151,6 @@
SM_CFG_Z1(0x00010260U), \
SM_CFG_W1(0x00010270U), 0x00000090U, \
SM_CFG_W1(0x00010460U), 0x33000300U, \
- SM_CFG_W1(0x00010474U), 0x00000030U, \
SM_CFG_W1(0x00010478U), 0x33300000U, \
SM_CFG_W1(0x0001047cU), 0x00003333U, \
SM_CFG_W1(0x000105d0U), 0x33333333U, \
@@ -1170,7 +1169,7 @@
SM_CFG_W1(0x00010668U), 0x99999999U, \
SM_CFG_W1(0x0001066cU), 0x09999999U, \
SM_CFG_W1(0x00010670U), 0x99900009U, \
- SM_CFG_W1(0x00010674U), 0x99999909U, \
+ SM_CFG_W1(0x00010674U), 0x99999999U, \
SM_CFG_W1(0x00010678U), 0x00009999U, \
SM_CFG_W1(0x0001067cU), 0x00990000U, \
SM_CFG_W1(0x00010780U), 0x00000009U, \

View File

@ -1,69 +0,0 @@
From: Hector Palacios <hector.palacios@digi.com>
Date: Wed, 14 Jan 2026 14:05:57 +0100
Subject: [PATCH 14/14] ccimx95dvk: PF09 PMIC interrupt moved to
PDM_BIT_STREAM1
Upstream-Status: Inappropriate [DEY specific]
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
https://onedigi.atlassian.net/browse/DEL-9915
---
boards/ccimx95dvk/pin_mux.c | 5 +++++
configs/ccimx95dvk.cfg | 2 +-
configs/ccimx95dvk/config_scmi.h | 1 -
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/boards/ccimx95dvk/pin_mux.c b/boards/ccimx95dvk/pin_mux.c
index 6f5bb4a51c4c..41ad97dd4e75 100755
--- a/boards/ccimx95dvk/pin_mux.c
+++ b/boards/ccimx95dvk/pin_mux.c
@@ -1,5 +1,6 @@
/*
* Copyright 2023, 2025 NXP
+ * Copyright 2025, 2026 Digi International Inc.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -57,5 +58,9 @@ void BOARD_InitPins(void)
IOMUXC_SetPinConfig(IOMUXC_PAD_I2C2_SDA__LPI2C2_SDA, IOMUXC_PAD_DSE(0xFU)
| IOMUXC_PAD_FSEL1(0x3U) | IOMUXC_PAD_PU(0x1U) | IOMUXC_PAD_OD(0x1U));
#endif
+
+ /* Configure GPIO1-10 (INT from PF09) */
+ IOMUXC_SetPinMux(IOMUXC_PAD_PDM_BIT_STREAM1__GPIO1_IO_BIT10, 0U);
+ IOMUXC_SetPinConfig(IOMUXC_PAD_PDM_BIT_STREAM1__GPIO1_IO_BIT10, 0U);
}
diff --git a/configs/ccimx95dvk.cfg b/configs/ccimx95dvk.cfg
index 53444e785270..ba7cc9e0499a 100755
--- a/configs/ccimx95dvk.cfg
+++ b/configs/ccimx95dvk.cfg
@@ -306,6 +306,7 @@ L_STCU_NPUMIX OWNER
PIN_FCCU_ERR0 OWNER
PIN_I2C1_SCL OWNER
PIN_I2C1_SDA OWNER
+PIN_PDM_BIT_STREAM1 OWNER # PF09_INT_B
PIN_UART2_RXD OWNER
PIN_UART2_TXD OWNER
PIN_WDOG_ANY OWNER
@@ -955,7 +956,6 @@ PIN_GPIO_IO37 OWNER
PIN_I2C2_SCL OWNER
PIN_I2C2_SDA OWNER
PIN_PDM_BIT_STREAM0 OWNER
-PIN_PDM_BIT_STREAM1 OWNER
PIN_PDM_CLK OWNER
PIN_SAI1_RXD0 OWNER
PIN_SAI1_TXC OWNER
diff --git a/configs/ccimx95dvk/config_scmi.h b/configs/ccimx95dvk/config_scmi.h
index 3b6899a7b9c8..20168f81df9d 100644
--- a/configs/ccimx95dvk/config_scmi.h
+++ b/configs/ccimx95dvk/config_scmi.h
@@ -550,7 +550,6 @@
.pinPerms[DEV_SM_PIN_I2C2_SCL] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_I2C2_SDA] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_PDM_BIT_STREAM0] = SM_SCMI_PERM_ALL, \
- .pinPerms[DEV_SM_PIN_PDM_BIT_STREAM1] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_PDM_CLK] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_SAI1_RXD0] = SM_SCMI_PERM_ALL, \
.pinPerms[DEV_SM_PIN_SAI1_TXC] = SM_SCMI_PERM_ALL, \

View File

@ -1,23 +1,13 @@
# Copyright (C) 2025, 2026, Digi International Inc.
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
# Select internal or Github imx-system-manager repo
IMX_SYSTEM_MANAGER_URI_STASH = "${DIGI_MTK_GIT}/emp/imx-sm.git;protocol=ssh"
IMX_SYSTEM_MANAGER_URI_GITHUB = "${DIGI_GITHUB_GIT}/imx-sm.git;protocol=https"
IMX_SYSTEM_MANAGER_SRC:dey = "${@oe.utils.conditional('DIGI_INTERNAL_GIT', '1', '${IMX_SYSTEM_MANAGER_URI_STASH}', '${IMX_SYSTEM_MANAGER_URI_GITHUB}', d)}"
SRC_URI:append:dey = " \
file://0001-ccimx95dvk-add-new-platform-config-and-board.patch \
file://0002-ccimx95dvk-configure-board-and-switch-debug-UART-to-.patch \
file://0003-ccimx95dvk-disable-PCAL6408A-expander-and-move-GPIO1.patch \
file://0004-ccimx95dvk-move-resources-from-M7-to-A55.patch \
file://0005-ccimx95dvk-move-pads-to-non-secure-A55.patch \
file://0006-ccimx95dvk-move-CAN1-to-be-used-by-A55.patch \
file://0007-ccimx95dvk-remove-PCAL6408A-IO-expander-from-EVK.patch \
file://0008-ccimx95dvk-remove-PCA2123-RTC-from-EVK.patch \
file://0009-ccimx95-change-names-of-voltage-regulators.patch \
file://0010-ccimx95dvk-enable-full-access-to-certain-regulators-.patch \
file://0011-components-pf09-reduce-LDOs-step-to-50mV.patch \
file://0012-ccimx95dvk-remove-access-to-VDD_3V3-and-VDD_1V8-from.patch \
file://0013-ccimx95dvk-change-SM-console-from-LPUART7-to-LPUART2.patch \
file://0014-ccimx95dvk-PF09-PMIC-interrupt-moved-to-PDM_BIT_STRE.patch \
"
SRCBRANCH:dey = "dey/scarthgap/lf-6.6.52-2.2.2"
# NXP's 'lf-6.6.52_2.2.2' release + patches
SRCREV:dey = "ecd89d0bc35687c7e1e19b47cf6bcdefc3a3fe68"
# Disable debug monitor by default
PACKAGECONFIG ??= "m0"

View File

@ -15,18 +15,6 @@ SRC_URI:append:dey = " \
file://0008-imx95-soc.mak-capture-commands-output-into-a-log-fil.patch \
"
IMX_CORTEXM_DEMOS = ""
IMX_CORTEXM_DEMOS:ccimx95 = "imx-m7-demos:do_deploy"
CORTEXM_DEFAULT_IMAGE = ""
CORTEXM_DEFAULT_IMAGE:ccimx95 = "imx95-19x19-evk_m7_TCM_power_mode_switch.bin"
do_compile[depends] += "${IMX_CORTEXM_DEMOS}"
compile_mx95:append:ccimx95() {
cp ${DEPLOY_DIR_IMAGE}/mcore-demos/${CORTEXM_DEFAULT_IMAGE} ${BOOT_STAGING}/m7_image.bin
}
# Revert compile_mx8m() to how it was in kirkstone branch of meta-freescale,
# otherwise, a dead symlink is created in place of the dtb
compile_mx8m() {
@ -126,10 +114,6 @@ generate_symlinks() {
ln -sf imx-boot-${MACHINE}.bin-${IMAGE_IMXBOOT_TARGET} ${DEPLOYDIR}/imx-boot
}
deploy_mx95:append:ccimx95() {
install -m 0644 ${DEPLOY_DIR_IMAGE}/mcore-demos/${CORTEXM_DEFAULT_IMAGE} ${DEPLOYDIR}/${BOOT_TOOLS}
}
do_deploy:append:ccimx8m() {
generate_symlinks
for target in ${IMXBOOT_TARGETS}; do

View File

@ -10,7 +10,7 @@ TFA_URI_STASH = "${DIGI_MTK_GIT}/emp/arm-trusted-firmware.git;protocol=ssh"
TFA_URI_GITHUB = "${DIGI_GITHUB_GIT}/arm-trusted-firmware.git;protocol=https"
TFA_GIT_URI ?= "${@oe.utils.conditional('DIGI_INTERNAL_GIT', '1' , '${TFA_URI_STASH}', '${TFA_URI_GITHUB}', d)}"
SRCBRANCH = "v2.10/stm32mp/master"
SRCBRANCH = "v2.10/stm32mp/maint"
SRCREV = "${AUTOREV}"
SRC_URI = " \
@ -212,7 +212,7 @@ do_compile() {
# The encryption key is already available in hexadecimal format, so just extract it from file
encrypt_key="$(cat ${encrypt_key})"
else
encrypt_key="$(hexdump -e '/1 "%02x"' ${encrypt_key})"
encrypt_key="$(hexdump -ve '/1 "%02x"' "${encrypt_key}")"
fi
encrypt_extra_opt="ENC_KEY=${encrypt_key}"
fi

View File

@ -0,0 +1,37 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Tue, 12 May 2026 14:09:40 +0200
Subject: [PATCH] create_st_fip_binary: use verbose hexdump for encryption key
hexdump may collapse repeated binary data into '*'. This corrupts the
hex string passed to encrypt_fw and makes the key size invalid. Pass -v
so the full encryption key is always emitted.
Fix error:
CMD> encrypt_fw \
--key 13eb911dfcc316b1b99bbbbf10a7000c3055e863*
166d3c8c9cd6f888b720a9 \
--nonce 1234567890abcdef12345678 \
--fw-enc-status 0 \
--in <abs-path>/recipe-sysroot/optee/tee-header_v2-ccmp25-dvk-optee.bin \
--out <abs-path>/recipe-sysroot/optee/tee-header_v2-ccmp25-dvk-optee_Encrypted.bin
ERROR: Unsupported key size: 41
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
create_st_fip_binary.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/create_st_fip_binary.sh b/create_st_fip_binary.sh
index 8664b1b94093..b491c4e59356 100755
--- a/create_st_fip_binary.sh
+++ b/create_st_fip_binary.sh
@@ -757,7 +757,7 @@ else
# The encryption key is already available in hexadecimal format, so just extract it from file
encrypt_key="$(cat ${encrypt_key})"
else
- encrypt_key="$(hexdump -e '/1 "%02x"' ${encrypt_key})"
+ encrypt_key="$(hexdump -ve '/1 "%02x"' ${encrypt_key})"
fi
if [ $USE_BL32 -eq 0 ]; then

View File

@ -0,0 +1,7 @@
# Copyright (C) 2026, Digi International Inc.
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
SRC_URI:append = " \
file://0001-create_st_fip_binary-use-verbose-hexdump-for-encrypt.patch;patchdir=${WORKDIR} \
"

View File

@ -0,0 +1,27 @@
#
# Copyright (C) 2026, Digi International Inc.
#
do_install() {
# Install assemble and signing firmware script
install -d ${D}${bindir}
install -m 755 ${WORKDIR}/scripts/create_st_m33fw_binary.sh ${D}${bindir}
install -m 755 ${WORKDIR}/scripts/st_m33td_firmware_signature.sh ${D}${bindir}
# Update version
sed 's/^SIGN_VERSION=.*$/SIGN_VERSION='"${TF_M_VERSION}"'/' -i ${D}${bindir}/st_m33td_firmware_signature.sh
# Install default MCUBOOT keys
install -d ${D}${datadir}/tf-m/keys
install -m 0644 ${S}/bl2/ext/mcuboot/root-EC-P256.pem ${D}${datadir}/tf-m/keys/root-ec-p256.pem
install -m 0644 ${S}/bl2/ext/mcuboot/root-EC-P256_1.pem ${D}${datadir}/tf-m/keys/root-ec-p256_1.pem
# Install all python scripts needed for assemble and sign
install -d ${D}${datadir}/tf-m/scripts
install -m 0755 ${S}/bl2/ext/mcuboot/scripts/assemble.py ${D}${datadir}/tf-m/scripts
install -m 0755 ${S}/bl2/ext/mcuboot/scripts/macro_parser.py ${D}${datadir}/tf-m/scripts
install -d ${D}${datadir}/tf-m/scripts/wrapper
install -m 0755 ${S}/bl2/ext/mcuboot/scripts/wrapper/wrapper.py ${D}${datadir}/tf-m/scripts/wrapper
# Install imgtool suite
install -m 0755 ${WORKDIR}/${TF_M_EXTERNAL_SOURCES_ROOTDIR}/${TF_M_PATH_MCUBOOT}/scripts/imgtool.py ${D}${datadir}/tf-m/scripts/wrapper
install -d ${D}${datadir}/tf-m/scripts/wrapper/imgtool
cp -rf ${WORKDIR}/${TF_M_EXTERNAL_SOURCES_ROOTDIR}/${TF_M_PATH_MCUBOOT}/scripts/imgtool/* ${D}${datadir}/tf-m/scripts/wrapper/imgtool/
}

View File

@ -0,0 +1,6 @@
#
# Copyright (C) 2026, Digi International Inc.
#
# Inherit custom DIGI sign class to skip signing tool and key parsing restrictions
inherit sign-stm32mp-digi

View File

@ -0,0 +1,6 @@
#
# Copyright (C) 2026, Digi International Inc.
#
# Inherit custom DIGI sign class to skip signing tool and key parsing restrictions
inherit sign-stm32mp-digi

View File

@ -1,10 +1,13 @@
# Copyright (C) 2026, Digi International Inc.
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
WESTON_BACKGROUND_PNG ?= "${WORKDIR}/background.png"
DEPENDS += "${@oe.utils.conditional('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)}"
SRC_URI += " \
file://weston.ini \
file://digi_background.png \
file://background.png \
file://weston-launch.service \
file://weston-checkgpu.service \
file://weston_profile.sh \
@ -42,7 +45,7 @@ do_install() {
install -m 0644 ${WORKDIR}/weston.ini ${D}${sysconfdir}/xdg/weston
install -m 0644 ${WORKDIR}/digi_background.png ${D}${datadir}/weston/backgrounds/digi_background.png
install -m 0644 "${WESTON_BACKGROUND_PNG}" ${D}${datadir}/weston/backgrounds/background.png
printf "\n[launcher]\nicon=${datadir}/weston/terminal.png\npath=${bindir}/weston-terminal\n" >> ${D}${sysconfdir}/xdg/weston/weston.ini
install -d ${D}${systemd_system_unitdir} ${D}${sbindir}

View File

@ -13,7 +13,7 @@ remoting=remoting-plugin.so
keymap_layout=us
[shell]
background-image=/usr/share/weston/backgrounds/digi_background.png
background-image=/usr/share/weston/backgrounds/background.png
background-type=scale-crop
# HDMI connector

View File

@ -1,4 +1,38 @@
if [ "$USER" == "root" ]; then
find_wayland_display()
{
if [ -e "$XDG_RUNTIME_DIR/wayland-0" ]; then
export WAYLAND_DISPLAY=wayland-0
return 0
fi
if [ -e "$XDG_RUNTIME_DIR/wayland-1" ]; then
export WAYLAND_DISPLAY=wayland-1
return 0
fi
return 1
}
has_connected_drm_display()
{
local drm_status
local drm_status_found=false
local drm_state
for drm_status in /sys/class/drm/card*-*/status; do
[ -e "$drm_status" ] || continue
drm_status_found=true
read -r drm_state < "$drm_status" || continue
if [ "$drm_state" = "connected" ]; then
return 0
fi
done
[ "$drm_status_found" = "false" ]
}
if [ "$USER" = "root" ]; then
export XDG_RUNTIME_DIR=/run/user/`id -u root`
export ELM_ENGINE=wayland_shm
@ -8,20 +42,16 @@ if [ "$USER" == "root" ]; then
export PULSE_RUNTIME_PATH=/run/user/`id -u root`/pulse
export USE_PLAYBIN3=1
# Wait for 10 seconds until a Wayland socket is available
for i in {1..10}; do
if [ -e $XDG_RUNTIME_DIR/wayland-0 ]; then
export WAYLAND_DISPLAY=wayland-0
break
elif [ -e $XDG_RUNTIME_DIR/wayland-1 ]; then
export WAYLAND_DISPLAY=wayland-1
break
else
if ! find_wayland_display && has_connected_drm_display; then
# Weston may still be creating its socket after the login prompt
# appears, but do not delay headless serial logins.
for i in {1..10}; do
sleep 1
fi
done
if [ -z "$WAYLAND_DISPLAY" ]; then
echo "WARNING: No Wayland socket found"
find_wayland_display && break
done
fi
[ -z "$WAYLAND_DISPLAY" ] && echo "WARNING: No Wayland socket found"
fi
unset -f find_wayland_display
unset -f has_connected_drm_display

View File

@ -0,0 +1,92 @@
From: Haihua Hu <jared.hu@nxp.com>
Date: Wed, 3 Aug 2022 16:34:47 +0800
Subject: [PATCH] Revert "libweston/libinput-device: Enable/Set pointer
capabilities only on pointer movement"
This reverts commit e825fe389ebd63470028abd828019840c1170a03.
This commit will cause waylandsink cannot register pointer seat.
As a result, mouse cannot move waylandsink window
(cherry picked from commit 3f8f336b5d2cf7ea7aa4e047d669d093fc46dfe6)
Upstream-Status: Inappropriate [DEY specific]
---
libweston/libinput-device.c | 29 +++++------------------------
1 file changed, 5 insertions(+), 24 deletions(-)
diff --git a/libweston/libinput-device.c b/libweston/libinput-device.c
index 4ea89de0..2d7a7d5f 100644
--- a/libweston/libinput-device.c
+++ b/libweston/libinput-device.c
@@ -60,21 +60,6 @@ evdev_led_update(struct evdev_device *device, enum weston_led weston_leds)
libinput_device_led_update(device->device, leds);
}
-static void
-ensure_pointer_capability(struct libinput_device *libinput_device)
-{
- struct evdev_device *device = libinput_device_get_user_data(libinput_device);
- struct weston_seat *seat = device->seat;
-
- if (!libinput_device_has_capability(libinput_device, LIBINPUT_DEVICE_CAP_POINTER))
- return;
-
- if (!(device->seat_caps & EVDEV_SEAT_POINTER)) {
- weston_seat_init_pointer(seat);
- device->seat_caps |= EVDEV_SEAT_POINTER;
- }
-}
-
static void
handle_keyboard_key(struct libinput_device *libinput_device,
struct libinput_event_keyboard *keyboard_event)
@@ -112,8 +97,6 @@ handle_pointer_motion(struct libinput_device *libinput_device,
struct timespec time;
double dx_unaccel, dy_unaccel;
- ensure_pointer_capability(libinput_device);
-
timespec_from_usec(&time,
libinput_event_pointer_get_time_usec(pointer_event));
dx_unaccel = libinput_event_pointer_get_dx_unaccelerated(pointer_event);
@@ -146,8 +129,6 @@ handle_pointer_motion_absolute(
double x, y;
uint32_t width, height;
- ensure_pointer_capability(libinput_device);
-
if (!output)
return false;
@@ -179,8 +160,6 @@ handle_pointer_button(struct libinput_device *libinput_device,
libinput_event_pointer_get_seat_button_count(pointer_event);
struct timespec time;
- ensure_pointer_capability(libinput_device);
-
/* Ignore button events that are not seat wide state changes. */
if ((button_state == LIBINPUT_BUTTON_STATE_PRESSED &&
seat_button_count != 1) ||
@@ -260,8 +239,6 @@ handle_pointer_axis(struct libinput_device *libinput_device,
bool has_vert, has_horiz;
struct timespec time;
- ensure_pointer_capability(libinput_device);
-
has_vert = libinput_event_pointer_has_axis(pointer_event,
LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);
has_horiz = libinput_event_pointer_has_axis(pointer_event,
@@ -738,7 +715,11 @@ evdev_device_create(struct libinput_device *libinput_device,
device->seat_caps |= EVDEV_SEAT_KEYBOARD;
}
-
+ if (libinput_device_has_capability(libinput_device,
+ LIBINPUT_DEVICE_CAP_POINTER)) {
+ weston_seat_init_pointer(seat);
+ device->seat_caps |= EVDEV_SEAT_POINTER;
+ }
if (libinput_device_has_capability(libinput_device,
LIBINPUT_DEVICE_CAP_TOUCH)) {
if (weston_seat_init_touch(seat) < 0) {

View File

@ -5,6 +5,7 @@ SRC_URI:append:stm32mpcommon = " \
file://0002-Disable-request-to-EGL_DRM_RENDER_NODE_FILE_EXT.patch \
file://0003-Revert-compositor-improve-opacity-handling-for-scale.patch \
file://0004-Revert-compositor-set-transform.opaque-for-surfaces-.patch \
file://0005-Revert-libweston-libinput-device-Enable-Set-pointer-.patch \
"
SIMPLECLIENTS="egl,touch,dmabuf-v4l,dmabuf-egl"

View File

@ -0,0 +1,61 @@
# Copyright (C) 2024, STMicroelectronics - All Rights Reserved
SUMMARY = "evision package to install AE an AWB algorithm libraries"
LICENSE = "SLA0044"
LIC_FILES_CHKSUM = "file://evision-libs/LICENSE;md5=91fc08c2e8dfcd4229b69819ef52827c"
NO_GENERIC_LICENSE[SLA0044] = "evision-libs/LICENSE"
LICENSE:${PN} = "SLA0044"
SRC_URI = "file://evision-libs/;subdir=${BPN}-${PV} \
"
COMPATIBLE_MACHINE = "^(aarch64)"
# Configure evision output library dir
ST_SPECIFIC_OUTPUT_LIBDIR ??= "${libdir}"
EVISION_LDCONF ?= "evision.conf"
S = "${WORKDIR}/${BPN}-${PV}"
do_configure[noexec] = "1"
do_compile() {
# Generate specific conf file if required
if [ "${ST_SPECIFIC_OUTPUT_LIBDIR}" = "${libdir}" ]; then
bbnote "evision output libdir is default one (${libdir})"
echo "" > ${B}/${EVISION_LDCONF}
else
bbnote "evision output libdir set to ${ST_SPECIFIC_OUTPUT_LIBDIR}: generate specific conf file for ldconfig"
echo ${ST_SPECIFIC_OUTPUT_LIBDIR} > ${B}/${EVISION_LDCONF}
fi
}
do_install() {
# includes
install -m 0755 -d ${D}${includedir}/evision
install -m 0644 ${S}/evision-libs/*.h ${D}${includedir}/evision
install -m 0644 ${S}/evision-libs/LICENSE ${D}${includedir}/evision
# libraries
install -m 0755 -d ${D}${ST_SPECIFIC_OUTPUT_LIBDIR}
install -m 0755 ${S}/evision-libs/*.so.* ${D}${ST_SPECIFIC_OUTPUT_LIBDIR}/
# ldconfig file
if [ -s "${B}/${EVISION_LDCONF}" ]; then
install -d ${D}${sysconfdir}/ld.so.conf.d/
install -m 0644 "${B}/${EVISION_LDCONF}" ${D}${sysconfdir}/ld.so.conf.d/
fi
}
PACKAGES += "\
evision-ldconf \
"
FILES:${PN} = "${ST_SPECIFIC_OUTPUT_LIBDIR}/*.so.*"
FILES:evision-ldconf = "${sysconfdir}/ld.so.conf.d/*"
ALLOW_EMPTY:${evision-ldconf} = "1"
RDEPENDS:${PN} += "\
evision-ldconf \
"

View File

@ -0,0 +1,81 @@
SLA0044 Rev5/February 2018
Software license agreement
ULTIMATE LIBERTY SOFTWARE LICENSE AGREEMENT
BY INSTALLING, COPYING, DOWNLOADING, ACCESSING OR OTHERWISE USING THIS SOFTWARE
OR ANY PART THEREOF (AND THE RELATED DOCUMENTATION) FROM STMICROELECTRONICS
INTERNATIONAL N.V, SWISS BRANCH AND/OR ITS AFFILIATED COMPANIES
(STMICROELECTRONICS), THE RECIPIENT, ON BEHALF OF HIMSELF OR HERSELF, OR ON
BEHALF OF ANY ENTITY BY WHICH SUCH RECIPIENT IS EMPLOYED AND/OR ENGAGED AGREES
TO BE BOUND BY THIS SOFTWARE LICENSE AGREEMENT.
Under STMicroelectronics intellectual property rights, the redistribution,
reproduction and use in source and binary forms of the software or any part
thereof, with or without modification, are permitted provided that the following
conditions are met:
1. Redistribution of source code (modified or not) must retain any copyright
notice, this list of conditions and the disclaimer set forth below as items 10
and 11.
2. Redistributions in binary form, except as embedded into microcontroller or
microprocessor device manufactured by or for STMicroelectronics or a software
update for such device, must reproduce any copyright notice provided with the
binary code, this list of conditions, and the disclaimer set forth below as
items 10 and 11, in documentation and/or other materials provided with the
distribution.
3. Neither the name of STMicroelectronics nor the names of other contributors to
this software may be used to endorse or promote products derived from this
software or part thereof without specific written permission.
4. This software or any part thereof, including modifications and/or derivative
works of this software, must be used and execute solely and exclusively on or in
combination with a microcontroller or microprocessor device manufactured by or
for STMicroelectronics.
5. No use, reproduction or redistribution of this software partially or totally
may be done in any manner that would subject this software to any Open Source
Terms. “Open Source Terms” shall mean any open source license which requires as
part of distribution of software that the source code of such software is
distributed therewith or otherwise made available, or open source license that
substantially complies with the Open Source definition specified at
www.opensource.org and any other comparable open source license such as for
example GNU General Public License (GPL), Eclipse Public License (EPL), Apache
Software License, BSD license or MIT license.
6. STMicroelectronics has no obligation to provide any maintenance, support or
updates for the software.
7. The software is and will remain the exclusive property of STMicroelectronics
and its licensors. The recipient will not take any action that jeopardizes
STMicroelectronics and its licensors' proprietary rights or acquire any rights
in the software, except the limited rights specified hereunder.
8. The recipient shall comply with all applicable laws and regulations affecting
the use of the software or any part thereof including any applicable export
control law or regulation.
9. Redistribution and use of this software or any part thereof other than as
permitted under this license is void and will automatically terminate your
rights under this license.
10. THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY RIGHTS, WHICH ARE
DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT SHALL
STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11. EXCEPT AS EXPRESSLY PERMITTED HEREUNDER, NO LICENSE OR OTHER RIGHTS, WHETHER
EXPRESS OR IMPLIED, ARE GRANTED UNDER ANY PATENT OR OTHER INTELLECTUAL PROPERTY
RIGHTS OF STMICROELECTRONICS OR ANY THIRD PARTY.

View File

@ -0,0 +1,548 @@
/**
******************************************************************************
* @file evision-api-awb.h
* @author LACROIX - Impulse
* @brief eVision Auto White Balance algorithm public header.
******************************************************************************
* @attention
*
* Copyright (c) 2023 LACROIX - Impulse.
* Copyright (c) 2025 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
#ifndef EVISION_API_AWB_H_
#define EVISION_API_AWB_H_
/************************************************************************
* Includes
************************************************************************/
#include <stdint.h>
#include <stdlib.h>
#include "evision-api-utils.h"
/************************************************************************
* Public Defines
************************************************************************/
/*! @brief Maximum number of supported sensor configurations. */
#define EVISION_AWB_MAX_SENSOR_CONFIGS (2u)
/*! @brief Default sensor configuration index. */
#define EVISION_AWB_DEFAULT_SENSOR_CONFIG_INDEX (0u)
/*! @brief Default number of ROIs for AWB. */
#define EVISION_AWB_DEFAULT_NB_ROI (1u)
/*! @brief Maximum number of AWB profiles. */
#define EVISION_AWB_MAX_PROFILE_COUNT (5u)
/*! @brief Number of CFA digital gains for AWB */
#define EVISION_AWB_NB_DG_CFA_GAINS (4u)
/*! @brief Number of rows / columns of CCM for AWB */
#define EVISION_AWB_CCM_SIZE (3u)
/*! @brief Size of estimated color temperatures history. Restrictions: >= 3. */
#define EVISION_AWB_HIST_SIZE (3u)
/*! @brief Number of components for external measurements */
#define EVISION_AWB_EXT_MEAS_SIZE (3u)
/*! @brief Flag value to indicate the use of profile selection based AWB operation mode. */
#define EVISION_AWB_USE_PROFILE_SELECTION_AWB (1u)
/************************************************************************
* Public Structures
************************************************************************/
/**
* @typedef evision_awb_priv_param_runtime_t
* @brief AWB algorithm private run-time parameters, member of #evision_awb_estimator_t.
*
* @struct evision_awb_priv_param_runtime
* @brief AWB algorithm private run-time parameters, member of #evision_awb_estimator_t.
*/
typedef struct evision_awb_priv_param_runtime {
/*! @brief
* Current convergence speed. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Default value:</b> 1.0
*/
double speed_p_value;
/*! @brief
* Flag to indicate change in estimated AWB color temperature. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Default value:</b> 0
*/
uint8_t temp_changed;
/*! @brief
* AWB internal color temperature. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Default value:</b> -1.0
*/
double int_temp;
/*! @brief
* T value parameter. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Default value:</b> 0.1 */
double t_value;
/*! @brief
* Flag to indicate the estimator has entered an oscillatory state. <br/>
* <b>Restrictions:</b> >=0 AND < #EVISION_AWB_HIST_SIZE
*/
uint8_t oscillation;
/*! @brief
* History of selected profile color temperatures. <br/>
*/
double hist_temp_current[EVISION_AWB_HIST_SIZE];
/*! @brief
* History of computed color temperatures. <br/>
*/
double hist_temp_estim[EVISION_AWB_HIST_SIZE];
/*! @brief
* History of computed chromaticity stats. <br/>
*/
double hist_stats[EVISION_AWB_HIST_SIZE][2u];
/*! @brief
* Counter for the current number of items in history. <br/>
* <b>Restrictions:</b> >=0 AND < #EVISION_AWB_HIST_SIZE
*/
uint16_t cnt_hist;
} evision_awb_priv_param_runtime_t;
/**
* @typedef evision_awb_profile_t
* @brief AWB algorithm profile definition.
*
* @struct evision_awb_profile
* @brief AWB algorithm profile definition.
*/
typedef struct evision_awb_profile {
/*! @brief
* The color temperature of the illumination for which the profile is defined.
* Positive value, typical range of values is between 2000 and 10000 °Kelvin. <br/>
* <b>Restrictions:</b> Internal algorithm parameter set during initialization, must not be changed during run-time. <br/>
*/
float color_temperature;
/*! @brief
* The sensor/ISP channel gains. <br/>
* <b>Note:</b> The individual gain values are stored using the float type.
* The gains can be stored as ratios or as floating point representations of integer values.
* It is up to the user to convert the values to the format expected by the sensor/ISP.
*/
float gain_values[EVISION_AWB_NB_DG_CFA_GAINS];
/*! @brief
* The ISP color correction matrix coefficients. <br/>
* <b>Note:</b> The individual color correction matrix coefficients are stored using the float type.
* The coefficients can be stored as ratios or as a floating point representation of integer values.
* It is up to the user to convert the values to the format expected by the sensor/ISP.
*/
float ccm_coefficients[EVISION_AWB_CCM_SIZE][EVISION_AWB_CCM_SIZE];
/*! @brief
* The ISP color correction matrix offset coefficients. <br/>
* <b>Note:</b> The individual color correction matrix offset coefficients are stored using the float type.
* The coefficients can be stored as ratios or as a floating point representation of integer values.
* It is up to the user to convert the values to the format expected by the sensor/ISP.
*/
float ccm_offsets[EVISION_AWB_CCM_SIZE];
} evision_awb_profile_t;
/**
* @typedef evision_awb_calib_data_t
* @brief Sensor specific AWB calibration data, member of #evision_awb_estimator_t.
*
* @struct evision_awb_calib_data
* @brief Sensor specific AWB calibration data, member of #evision_awb_estimator_t.
*
* Contains sensor specific AWB calibration data for accurate color rendering.
* Support for both continious AWB and profile selection based AWB.
*
*/
typedef struct evision_awb_calib_data {
/*! @brief
* Minimum supported color temperature. <br/>
* <b>Restrictions:</b> Internal algorithm parameter, positive valued. Set during estimator initialization.
*/
double min_temp;
/*! @brief
* Maximum supported color temperature. <br/>
* <b>Restrictions:</b> Internal algorithm parameter, positive valued and > #min_temp. Set during estimator initialization.
*/
double max_temp;
/* ##############################
Parameters for continuous AWB
*/
/* #################################
Parameters for profile based AWB
*/
/*! @brief
* Counter for the actual number of specified profiles. <br/>
* <b>Restrictions:</b> Internal algorithm parameter set during initialization. Must not be changed during runtime.
* Range of possible values: > 0 and < #EVISION_AWB_MAX_PROFILE_COUNT
*/
uint16_t profiles_count;
/*! @brief
* Array containing the color temperatures of the defined profiles. <br/>
* <b>Restrictions:</b> Internal algorithm parameter set during initialization. Must not be changed during runtime.
*/
float temperatures[EVISION_AWB_MAX_PROFILE_COUNT];
/*! @brief
* Array containing the decision thresholds between the different profiles for profile selection. <br/>
* <b>Restrictions:</b> Internal algorithm parameter set during initialization. Must not be changed during runtime.
*/
float decision_thresholds[EVISION_AWB_MAX_PROFILE_COUNT - 1];
/*! @brief
* Array containing the different AWB profiles. <br/>
* <b>Restrictions:</b> Internal algorithm parameter set during initialization. Must not be changed during runtime.
*/
evision_awb_profile_t profiles[EVISION_AWB_MAX_PROFILE_COUNT];
/*! @brief
* Pointer to the active profile. <br/>
* <b>Restrictions:</b> Internal algorithm parameter updated during runtime. Code outside of the library must not alter its value.
*/
evision_awb_profile_t* active_profile;
} evision_awb_calib_data_t;
/**
* @typedef evision_awb_hyper_param_t
* @brief AWB algorithm hyper-parameters, member of #evision_awb_estimator_t.
*
* @struct evision_awb_hyper_param
* @brief AWB algorithm hyper-parameters, member of #evision_awb_estimator_t.
*
*/
typedef struct evision_awb_hyper_param {
/*! @brief
* Ratio of pixels to be processed for AWB when using the SW statistics extraction block, direct impact on processing time.
* (Ex. A value of 2 will process 1 pixel every 2*2 pixel block in the entire ROI). <br/>
* <b>Restrictions:</b> >= 1 AND < image_size. <br/>
* <b>Default value:</b> 1 */
uint16_t awb_process_ratio;
/*! @brief
* AWB low luminance threshold value when using the SW statistics extraction block.
* Skip pixel from AWB stats if luminance value below the threshold. <br/>
* <b>Restrictions:</b> >= 0 AND < #y_thresh_high. <br/>
* <b>Default value:</b> 0 */
double y_thresh_low;
/*! @brief
* AWB high luminance threshold value when using the SW statistics extraction block.
* Skip pixel from AWB stats if luminance value above the threshold. <br/>
* <b>Restrictions:</b> > #y_thresh_low AND <= 255. <br/>
* <b>Default value:</b> 0 */
double y_thresh_high;
/*! @brief
* Convergence speed increment. <br/>
* <b>Restrictions:</b> > 0 AND < #speed_p_max. <br/>
* <b>Default value:</b> 0.1 */
double speed_p_increment;
/*! @brief
* Minimum convergence speed. <br/>
* <b>Restrictions:</b> > 0 AND < #speed_p_max. <br/>
* <b>Default value:</b> 1.0 */
double speed_p_min;
/*! @brief
* Maximum convergence speed. <br/>
* <b>Restrictions:</b> > #speed_p_min. <br/>
* <b>Default value:</b> 3.0 */
double speed_p_max;
/*! @brief
* AWB color temperature estimation precision. <br/>
* <b>Default value:</b> 1 °K */
double precision_temp;
/*! @brief
* Offset around the decision threshold for hysteresis based decision for profile selection. <br/>
* <b>Default value:</b> 50 °K */
float hysteresis_offset;
/*! @brief
* Threshold of acceptable chromatic deviation around neutrality for convergence. <br/>
* <b>Restrictions:</b> > 0. <br/>
* <b>Default value:</b> 1.0. */
float conv_criterion;
/*! @brief
* Threshold of acceptable chromatic deviation along the green-magenta axis.
* Inhibit profile switch if the green or magenta component is higher than this threshold.<br/>
* <b>Restrictions:</b> > 0. <br/>
* <b>Default value:</b> 0.5. */
float gm_tolerance;
/*! @brief
* Tolerance parameter to assess color temperature similarity: assume same colour temperature if absolute difference smaller than this value.
* Parameter of the profile selection oscillation detection logic.<br/>
* <b>Restrictions:</b> > 0 and >= 2 * #hysteresis_offset <br/>
* <b>Default value:</b> 175 K. */
float ct_tolerance;
/*! @brief
* Tolerance parameter to assess similarity of AWB statistics: assume identical statistics if euclidean norm smaller than this value.
* Parameter of the profile selection oscillation detection logic.<br/>
* <b>Restrictions:</b> > 0. <br/>
* <b>Default value:</b> 1.5. */
float stats_tolerance;
} evision_awb_hyper_param_t;
/**
* @typedef evision_awb_estimator_t
* @brief AWB estimator structure.
*
* @struct evision_awb_estimator
* @brief AWB estimator structure.
*
* Set of all data structures required for the functioning of the AWB algorithm.
*/
typedef struct evision_awb_estimator {
/*! @brief
* Indicates the state of the AWB algorithm. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* Possible values: see #evision_state_t */
evision_state_t state;
/*! @brief
* Computed sensor/ISP gain values stored as float values.
* To be applied to the sensor/ISP after conversion to the format expected by the sensor/ISP. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Note:</b> Storing values as floats provides the required flexibility to support different sensors and ISPs.
* Converting the float value to the specific sensor/ISP format is to be performed at application level.
*/
float dg_cf[EVISION_AWB_NB_DG_CFA_GAINS];
/*! @brief
* Computed ISP CCM coefficients stored as float values.
* To be applied to the sensor/ISP after conversion to the format expected by the sensor/ISP. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Note:</b> Storing values as floats provides the required flexibility to support different sensors and ISPs.
* Converting the float value to the specific sensor/ISP format is to be performed at application level.
*/
float ccm[EVISION_AWB_CCM_SIZE][EVISION_AWB_CCM_SIZE];
/*! @brief
* Computed ISP CCM offset coefficients stored as float values.
* To be applied to the sensor/ISP after conversion to the format expected by the sensor/ISP. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Note:</b> Storing values as floats provides the required flexibility to support different sensors and ISPs.
* Converting the float value to the specific sensor/ISP format is to be performed at application level.
*/
float ccm_offsets[EVISION_AWB_CCM_SIZE];
/*! @brief
* Estimated color temperature. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* <b>Default value:</b> 5000 °K
*/
double out_temp;
/*! @brief
* Select the AWB operating mode. <br/>
* <b>Restrictions:</b> Only profile selection AWB is currently supported.
*/
uint8_t awb_mode;
/*! @brief
* The set of run-time variables. <br/>
* <b>Restrictions:</b> Internal algorithm parameters.
* Must not be changed! */
evision_awb_priv_param_runtime_t runtime_vars;
/*! @brief
* AWB calibration data. <br/>
* <b>Restrictions:</b> Internal algorithm parameter.
* Must be set during initialization using the provided functions!
* Must not be changed during runtime! */
evision_awb_calib_data_t calib_data;
/*! @brief
* The set of AWB algorithm hyper-parameters. Set to default values during initialization! <br/>
* As a general note, the hyper-parameters can be updated from their default values.
* Care must be taken as in such a case there is no guarantee of proper functioning of the estimator! <br/>
* <b>Restrictions:</b> Must not be updated during runtime!
*/
evision_awb_hyper_param_t hyper_params;
/*! @brief
* Handler to output logs. <br/> */
evision_api_log_callback log_cb;
} evision_awb_estimator_t;
/************************************************************************
* Public Variables
************************************************************************/
/************************************************************************
* Public Function Prototypes
************************************************************************/
/************************************************************************
* Public Function Definitions
************************************************************************/
/**
* @fn evision_awb_estimator_t* evision_api_awb_new(void);
* @brief Create a new #evision_awb_estimator_t instance.
*
* @param[in] log_cb Callback to output logs.
* @return The address of the created instance. NULL if it failed.
*
* This function performs dynamic memory allocations for the AWB estimator.
* If the process fails, NULL is returned.
*
* @warning Allocates memory. Free memory with evision_api_awb_delete().
*/
evision_awb_estimator_t* evision_api_awb_new(evision_api_log_callback log_cb);
/**
* @fn evision_return_t evision_api_awb_delete(evision_awb_estimator_t* self);
* @brief Releases the memory allocated for the #evision_awb_estimator_t estimator instance.
*
* @param[in, out] self Concerned estimator instance address.
* @return
* - EVISION_RET_SUCCESS
* - EVISION_RET_PARAM_ERR
*
* This function releases the memory allocated for an AWB estimator.
* To be called when the estimator is no longer required.
*/
evision_return_t evision_api_awb_delete(evision_awb_estimator_t* self);
/**
* @brief Set the parameters of the input AWB profile structure.
*
* @param[in, out] awb_profile AWB profile structure.
* @param[in] color_temperature Color temperature of the illumination used to derive the profile parameters.
* @param[in] cfa_gains Array containing the sensor/ISP channel gains.
* @param[in] ccm_coefficients Matrix containing the color correction matrix coefficients.
* @param[in] ccm_offsets Array containing the color correction matrix offsets.
*
*/
void evision_api_awb_set_profile(evision_awb_profile_t* awb_profile,
float color_temperature, const float cfa_gains[EVISION_AWB_NB_DG_CFA_GAINS],
const float ccm_coefficients[EVISION_AWB_CCM_SIZE][EVISION_AWB_CCM_SIZE],
const float ccm_offsets[EVISION_AWB_CCM_SIZE]);
/**
* @brief Initialize the AWB profiles from user supplied data.
* The library supports a variable number of profiles from a minimum of 1 up to a max number of #EVISION_AWB_MAX_PROFILE_COUNT.
*
* @param[in, out] self AWB estimator to be initialized.
* @param[in] min_temp Minimum supported color temperature, positive value.
* @param[in] max_temp Maximum supported color temperature, positive value and greater than min_temp.
* @param[in] nb_profiles The number of defined profiles, between 1 and #EVISION_AWB_MAX_PROFILE_COUNT.
* @param[in] decision_thresholds The decision thresholds between profiles in degrees Kelvin. A total of nb_profiles - 1 decision thresholds must be provided.
* @param[in] awb_profiles Array of profile data, a total of nb_profiles must be provided.
* @return
* - EVISION_RET_SUCCESS
* - EVISION_RET_PARAM_ERR
* - EVISION_RET_FAILURE
*
* The min_temp parameter must be at most equal to the smallest color temperature of the defined profiles.
* The max_temp parameter must be at least equal to the highest color temperature of the defined profiles.
*
* The profiles must be unique with respect to the color temperature of the illumination and must be specified in ascending order.
* The choice of the actual number of profiles and the color temperature of the illumination for each profile is
* generally dependent on the intended application and/or the available hardware equipement for generating the calibration data.
* They must be complete in the sense that they must contain all the required fields (channel gains and color correction coefficients).
* It is the user's responsibility to ensure that this is indeed the case.
*
* The decision thresholds must be unique and specified in ascending order.
* Between each pair of adjacent profiles there must be exactly one decision threshold.
* The exact strategy for choosing the decision thresholds between adjacent thresholds (e.g. halfway, 1/3 - 2/3, etc.)
* is a tuning strategy which generally depends on the intended application and the choice of the profiles.
*
*/
evision_return_t evision_api_awb_init_profiles(evision_awb_estimator_t* const self,
double min_temp, double max_temp,
uint16_t nb_profiles, float decision_thresholds[EVISION_AWB_MAX_PROFILE_COUNT - 1],
evision_awb_profile_t awb_profiles[EVISION_AWB_MAX_PROFILE_COUNT]);
/**
* @brief Run the AWB estimator on the full frame data.
*
* @param[in] self Concerned estimator instance address.
* @param[in] image Current frame.
* @param[in] use_ext_meas Flag to indicate the use of external AWB measurement: 0 - use internal AWB measurement, > 0 - use external measurement.
* @param[in] ext_meas External measurement vector, contains average R, G, B values.
* @return
* - EVISION_RET_INVALID_VALUE
* - EVISION_RET_SUCCESS
* - EVISION_RET_PARAM_ERROR
* - EVISION_RET_FAILURE
*
* Run an execution of the control loop on the current camera setup and frame.
* The parameters #evision_awb_estimator_t.ccm and #evision_awb_estimator_t.dg_cf are updated to reflect the new CCMs and channel gains to apply.
*
* The software statistics extraction block, if used, will consider the entire data frame in the extraction of the AWB statistics.
* The parameter #evision_awb_hyper_param_t.awb_process_ratio defines a ratio of pixels to check PER row and PER column.
* It serves to reduce the computational requirements for AWB statistics extraction.
* For example: a process_ratio of 4 means that for every 4 pixels per row and per column, (block of 16 pixels) only 1 is considered.
* For small to moderate values, the loss in accuracy is mostly negligeable with non-negligeable improvements in computational time.
*
* The average R, G, and B values provided by the external \[hardware\] measurement block must be in the range \[0, 255\].
* If the data is in a different range, the average values must be converted to this range before being passed as parameters to the function.
*
* The switch at run-time between using the internal software measurements and the external \[hardware\] measurements is not supported.
*
* <b>Raises:</b>
* - EVISION_LOGSEV_INFO
* - EVISION_LOGSEV_WARNING
* - EVISION_LOGSEV_ERROR
*/
evision_return_t evision_api_awb_run_average(evision_awb_estimator_t* const self, const evision_image_t* const image,
uint8_t use_ext_meas, double ext_meas[EVISION_AWB_EXT_MEAS_SIZE]);
#ifdef ALGO_SW_STATISTICS
/**
* @brief Run the AWB estimator on the selected ROIs.
*
* @param[in] self Concerned estimator instance address.
* @param[in] image Current frame.
* @param[in] roi_array Set of ROIs where the process will be applied, other regions will not be considered.
* @param[in] use_ext_meas Flag to indicate the use of external AWB measurement: 0 - use internal AWB measurement, > 0 - use external measurement.
* @param[in] ext_meas External measurement vector, contains average R, G, B values.
* @return
* - EVISION_RET_INVALID_VALUE
* - EVISION_RET_SUCCESS
* - EVISION_RET_PARAM_ERROR
* - EVISION_RET_FAILURE
*
* Run an execution of the control loop on the current camera setup and frame.
* The parameters #evision_awb_estimator_t.ccm and #evision_awb_estimator_t.dg_cf are updated to reflect the new CCMs and channel gains to apply.
*
* The software statistics extraction block, if used, will only considered the pixels within the specified ROIs.
* The parameter #evision_awb_hyper_param_t.awb_process_ratio defines, within the ROI to check, a portion of pixels to check PER row and PER column.
* It serves to reduce the computational requirements for AWB statistics extraction.
* For example: a process_ratio of 4 means that for every 4 pixels per row and per column, (block of 16 pixels) only 1 is considered.
* For small to moderate values, the loss in accuracy is mostly negligeable with non-negligeable improvements in computational time.
*
* The average R, G, and B values provided by the external \[hardware\] measurement block must be in the range \[0, 255\].
* If the data is in a different range, the average values must be converted to this range before being passed as parameters to the function.
*
* The switch at run-time between using the internal software measurements and the external \[hardware\] measurements is not supported.
*
* <b>Raises:</b>
* - EVISION_LOGSEV_INFO
* - EVISION_LOGSEV_WARNING
* - EVISION_LOGSEV_ERROR
*/
evision_return_t evision_api_awb_run_roi(evision_awb_estimator_t* const self,
const evision_image_t* const image, const evision_roi_array_t* const roi_array,
uint8_t use_ext_meas, double ext_meas[EVISION_AWB_EXT_MEAS_SIZE]);
#endif
#endif /* EVISION_API_AWB_H_ */

View File

@ -0,0 +1,228 @@
/**
******************************************************************************
* @file evision-api-st-ae.h
* @author STMicroelectronics / LACROIX - Impulse
* @brief ST eVision Auto Exposure algorithm public header.
******************************************************************************
* @attention
*
* Copyright (c) 2025 STMicroelectronics.
* Copyright (c) 2023 LACROIX - Impulse.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef EVISION_API_ST_AE_H_
#define EVISION_API_ST_AE_H_
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include <stdlib.h>
#include "evision-api-utils.h"
/* Exported types ------------------------------------------------------------*/
typedef struct evision_st_ae_hyper_param {
/*! @brief
* Target exposure to reach. <br/>
* <b>Restrictions:</b> >= 0 AND < 256. <br/>
* <b>Default value:</b> 56 */
uint32_t target;
/*! @brief
* Max delta between lum stat and target in convergence region <br/>
* <b>Restrictions:</b> >= 0 AND < 256. <br/>
* <b>Default value:</b> 10 */
uint32_t tolerance;
/*! @brief
* Factor applied to increment gain update <br/>
* <b>Restrictions:</b> >= 0 AND < 1000. <br/>
* <b>Default value:</b> 100 */
uint32_t gain_increment_coeff;
/*! @brief
* Max delta value between lum stat and target in low delta region <br/>
* <b>Restrictions:</b> >= 0 AND < 256. <br/>
* <b>Default value:</b> 45 */
uint32_t gain_low_delta;
/*! @brief
* Min delta value between lum stat and target in high delta region <br/>
* <b>Restrictions:</b> >= 0 AND < 256. <br/>
* <b>Default value:</b> 120 */
uint32_t gain_high_delta;
/*! @brief
* Maximum gain update value in luminance low delta region <br/>
* <b>Restrictions:</b> >= #gain_min AND < #gain_max. <br/>
* <b>Default value:</b> 1500 */
uint32_t gain_low_increment_max;
/*! @brief
* Maximum gain update value in luminance medium delta region <br/>
* <b>Restrictions:</b> >= #gain_min AND < #gain_max. <br/>
* <b>Default value:</b> 6000 */
uint32_t gain_medium_increment_max;
/*! @brief
* Maximum gain update value in luminance high delta region <br/>
* <b>Restrictions:</b> >= #gain_min AND < #gain_max. <br/>
* <b>Default value:</b> 12000 */
uint32_t gain_high_increment_max;
/*! @brief
* Factor applied to increment exposure <br/>
* <b>Restrictions:</b> >= 0.0 AND < 1. <br/>
* <b>Default value:</b> 0.020*/
double exposure_up_ratio;
/*! @brief
* Minimum value accepted for exposure time. <br/>
* <b>Restrictions:</b> >= 0.0 AND < 1. <br/>
* <b>Default value:</b> 0.004*/
double exposure_down_ratio;
/*! @brief
* Minimum value accepted for exposure time. <br/>
* <b>Restrictions:</b> >= 0.0 AND < #exposure_max. <br/>
* <b>Default value:</b> 0.0*/
uint32_t exposure_min;
/*! @brief
* Maximum value accepted for exposure time. <br/>
* <b>Restrictions:</b> > 0.0 AND >= #exposure_min. <br/>
* <b>Default value:</b> 1.0 */
uint32_t exposure_max;
/*! @brief
* Minimum possible gain value. <br/>
* <b>Restrictions:</b> > 1 AND < #gain_max. <br/>
* <b>Default value:</b> 1 */
uint32_t gain_min;
/*! @brief
* Maximum possible gain value. <br/>
* <b>Restrictions:</b> >= 1 AND > #gain_min. <br/>
* <b>Default value:</b> 1 */
uint32_t gain_max;
/*! @brief
* Luminance limit where we consider the frame as dark. <br/>
* <b>Restrictions:</b> >= 0 AND < 256. <br/>
* <b>Default value:</b> 5 */
uint32_t dark_zone_lum_limit;
/*! @brief
* Compatible light frequency in Hz to avoid flickering effect. <br/>
* <b>Restrictions:</b> >= 0 (None) AND < 256. <br/>
* <b>Default value:</b> 0 (None) */
uint32_t compat_freq;
} evision_st_ae_hyper_param_t;
/**
* @typedef evision_ae_estimator_t
* @brief AE estimator structure.
*
* @struct evision_ae_estimator
* @brief AE estimator structure.
*
* Set of all data structures required for the functioning of the AE algorithm.
*/
typedef struct evision_st_ae_process_t {
/*! @brief
* Indicates the state of the AE algorithm. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! <br/>
* Possible values: see #evision_state_t */
evision_state_t state;
/*! @brief
* Computed exposure time to apply to sensor. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! */
uint32_t new_exposure;
/*! @brief
* Computed gain value to apply to sensor. <br/>
* <b>Restrictions:</b> Internal algorithm parameter. Must not be changed! */
uint32_t new_gain;
/*! @brief
* The set of AE algorithm hyper-parameters. Set to default values at creation! <br/>
* #evision_ae_hyper_param_t.exposure_min, #evision_ae_hyper_param_t.exposure_max,
* #evision_ae_hyper_param_t.gain_min and #evision_ae_hyper_param_t.gain_max hyper-parameters
* <b> must be updated </b> before running the ae process with respect to the sensor in use. <br/>
* As a general note, the hyper-parameters can be updated from their default values.
* Care must be taken as in such a case there is no guarantee of proper functioning of the process! <br/>
* <b>Restrictions:</b> Must not be updated during runtime!
*/
evision_st_ae_hyper_param_t hyper_params;
/*! @brief
* Handler to output logs. <br/> */
evision_api_log_callback log_cb;
} evision_st_ae_process_t;
/* Exported constants --------------------------------------------------------*/
#define EVISION_ST_AEC_LUM_TARGET 56 /* Default luminance value targeted by the AE algorithm */
#define EVISION_ST_AEC_TOLERANCE 10 /* Max delta between lum stat and target in convergence region */
#define EVISION_ST_AEC_GAIN_INCREMENT_COEFF 100 /* Factor applied to increment gain update */
#define EVISION_ST_AEC_GAIN_LOW_DELTA 45 /* Max delta value between lum stat and target in low delta region */
#define EVISION_ST_AEC_GAIN_HIGH_DELTA 120 /* Min delta value between lum stat and target in high delta region */
#define EVISION_ST_AEC_GAIN_LOW_INC_MAX 1500 /* Maximum gain update value in luminance low delta region */
#define EVISION_ST_AEC_GAIN_MEDIUM_INC_MAX 6000 /* Maximum gain update value in luminance medium delta region */
#define EVISION_ST_AEC_GAIN_HIGH_INC_MAX 12000 /* Maximum gain update value in luminance high delta region */
#define EVISION_ST_AEC_EXPOSURE_UP_RATIO 0.020F /* Factor applied to increment exposure */
#define EVISION_ST_AEC_EXPOSURE_DOWN_RATIO 0.004F /* Factor applied to decrement exposure */
#define EVISION_ST_AEC_DARKZONE_LUM_LIMIT 5 /* Default value for dark zone luminance limit */
#define EVISION_ST_DEFAULT_EXPOSURE_MIN 0 /* Default value for exposure min */
#define EVISION_ST_DEFAULT_EXPOSURE_MAX 33000 /* Default value for expsoure max */
#define EVISION_ST_DEFAULT_GAIN_MIN 1 /* Default value for gain min */
#define EVISION_ST_DEFAULT_GAIN_MAX 100 /* Default value for gain max */
#define EVISION_ST_DEFAULT_COMPAT_FREQ 0 /* Default value for compatible frequency */
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
/**
* @fn evision_st_ae_process_t* evision_api_st_ae_new(void);
* @brief Create a new #evision_st_ae_process_t instance.
*
* @param[in] log_cb Callback to output logs.
* @return The address of the created instance. NULL if it failed.
*/
evision_st_ae_process_t* evision_api_st_ae_new(evision_api_log_callback log_cb);
/**
* @fn evision_return_t evision_api_st_ae_delete(evision_st_ae_process_t* self);
* @brief Releases the memory allocated for the #evision_st_ae_process_t ae process instance.
*
* @param[in, out] ae process instance address.
* @return
* - EVISION_RET_SUCCESS
* - EVISION_RET_PARAM_ERR
*/
evision_return_t evision_api_st_ae_delete(evision_st_ae_process_t* self);
/**
* @fn evision_return_t evision_api_st_ae_init(evision_st_ae_process_t* const self)
* @brief Initialize the AE process structure.
*
* @param[in, out] self AE process to be initialized.
* @return
* - EVISION_RET_SUCCESS
* - EVISION_RET_PARAM_ERROR
*
* Initializes the AE process structure. Hyper params can later be modified.
*/
evision_return_t evision_api_st_ae_init(evision_st_ae_process_t* const self);
/**
* @fn evision_return_t evision_api_st_ae_process(evision_st_ae_process_t* const self, uint32t_t current_gain, uint32_t current_exposure, uint8_t average_lum)
* @brief Run the ae process to calculate new gain and expsoure
*
* @param[in, out] self Concerned process instance address.
* @param[in] current_gain Current sensor gain in mdB.
* @param[in] current_exposure Current sensor exposure microsecond.
* @param[in] average_lum Average luminance measurement value. Range should normally be between 0 (completely dark image) and 255 (completely white image).
*
* @return
* - EVISION_RET_SUCCESS
* - EVISION_RET_FAILURE
*/
evision_return_t evision_api_st_ae_process(evision_st_ae_process_t* const self, uint32_t current_gain, uint32_t current_exposure, uint8_t average_lum);
/* Exported variables --------------------------------------------------------*/
#endif /* EVISION_API_ST_AE_H_ */

View File

@ -0,0 +1,326 @@
/**
******************************************************************************
* @file evision-api-utils.h
* @author LACROIX - Impulse
* @brief eVision utilitary public header.
******************************************************************************
* @attention
*
* Copyright (c) 2023 LACROIX - Impulse.
* Copyright (c) 2025 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
#ifndef EVISION_API_UTILS_H_
#define EVISION_API_UTILS_H_
#ifdef __cplusplus
extern "C" {
#endif
/************************************************************************
* Includes
************************************************************************/
#include <stdint.h>
/************************************************************************
* Public Defines
************************************************************************/
/**
* @def EVISION_MIN
* @brief Determine the lowest value between a and b
*/
#define EVISION_MIN(a, b) ((a) < (b) ? (a) : (b))
/**
* @def EVISION_MAX
* @brief Determine the greatest value between a and b
*/
#define EVISION_MAX(a, b) ((a) > (b) ? (a) : (b))
/**
* @def EVISION_SIGN
* @brief Determine the sign of a number.
*/
#define EVISION_SIGN(x) ((x) > 0.0f ? 1.0f : -1.0f)
#ifdef ALGO_SW_STATISTICS
/* YUV parameters */
/*! @brief Minimum of Y value due to ISP RGB 2 YUV conversion formula */
#define EVISION_YUV_MIN_Y_VAL (16.0)
/*! @brief Maximum of Y value due to ISP RGB 2 YUV conversion formula */
#define EVISION_YUV_MAX_Y_VAL (235.140625)
/*! @brief YUV factor value due to ISP RGB 2 YUV conversion formula */
#define EVISION_YUV_FACTOR (256)
/*! @brief YUV maximum value due to ISP RGB 2 YUV conversion formula */
#define EVISION_YUV_MAX_VAL (255)
/*! @brief range of Y value due to ISP RGB 2 YUV conversion formula */
#define EVISION_YUV_RANGE_Y_VAL (EVISION_YUV_MAX_Y_VAL - EVISION_YUV_MIN_Y_VAL)
#endif
/**
* @typedef evision_return_t
* @brief Return type for functions.
*
* @enum evision_return
* @brief Return type for functions.
*
* Return code that must be checked to be sure the output of the function is valid.
*/
typedef enum evision_return {
EVISION_RET_INVALID_VALUE = 2, /*!< The process succeeded but the output value is invalid and should not be used.*/
EVISION_RET_SUCCESS = 1, /*!< the process succeeded. */
EVISION_RET_FAILURE = 0, /*!< Error: There was a failure. */
EVISION_RET_PARAM_ERR = -1, /*!< Error: A parameter is invalid. */
EVISION_RET_DIMENSION_ERR = -2, /*!< Error: A dimension is incompatible with the process. */
EVISION_RET_MEMORY_ERR = -3, /*!< Error: Could not allocate memory. */
EVISION_RET_FILE_ERR = -4, /*!< Error: A file could not be opened */
EVISION_RET_FORMAT_ERR = -5, /*!< Error: the specified format is invalid. */
} evision_return_t;
/**
* @typedef evision_state_t
* @brief Describes the state of the estimator.
*
* @enum evision_state
* @brief Describes the state of the estimator.
*/
typedef enum evision_state {
/*! @brief
* The estimator exists.
*/
EVISION_STATE_NONE = 0u,
/*! @brief
* The estimator was initialized and is ready to run.
*/
EVISION_STATE_INIT = 1u,
/*! @brief
* The estimator is running.
*/
EVISION_STATE_RUN = 2u,
} evision_state_t;
/**
* @typedef evision_image_format_t
* @brief Specify the format under which the image is stored.
*
* @enum evision_image_format
* @brief Specify the format under which the image is stored.
*
* Those formats are as the ones defined by V4L2.
*/
typedef enum evision_image_format {
/*! @brief
* 8 bit gray-level.
*/
EVISION_IMAGE_FORMAT_GRAY8 = 0u,
/*! @brief
* 8 bit gray-level.
*/
EVISION_IMAGE_FORMAT_GREY8 = 1u,
/*! @brief
* RGB interleaved, 8 bit per channel, 24 bit per pixel..
*/
EVISION_IMAGE_FORMAT_RGB8 = 2u,
/*! @brief
* BGR interleaved, 8 bit per channel, 24 bit per pixel..
*/
EVISION_IMAGE_FORMAT_BGR8 = 3u,
/*! @brief
* 8 bit YUV 422 SP format.
*/
EVISION_IMAGE_FORMAT_YUV422SP = 4u,
/*! @brief
* RGGB Bayer format, 8 bit per channel, Red compound first.
*/
EVISION_IMAGE_FORMAT_RGGB8 = 5u,
/*! @brief
* BGGR Bayer format, 8 bit per channel, Blue compound first.
*/
EVISION_IMAGE_FORMAT_BGGR8 = 6u,
/*! @brief
* GRBG Bayer format, 16 bit per channel, each coded on 16 bits inverted (0xFF, 0x0F).
*/
EVISION_IMAGE_FORMAT_GRBG12 = 7u,
/*! @brief
* RGGB Bayer format, 16 bit per channel, each coded on 16 bits inverted (0xFF, 0x0F).
*/
EVISION_IMAGE_FORMAT_RGGB12 = 8u
} evision_image_format_t;
/************************************************************************
* Public Functions Signatures
************************************************************************/
/**
* @brief Callback function to output logs.
*
* @param[in] msg Received message.
*
* If the user wants to handle the log and messages yielded by the estimator,
* a function with this signature must be specified.
*
*/
typedef void (*evision_api_log_callback)(const char* const msg);
/************************************************************************
* Public Structures
************************************************************************/
/**
* @typedef evision_image_t
* @brief Structure to hold frame data and metadata for eVision AE and AWB algorithms.
*
* @struct evision_image
* @brief Structure to hold frame data and metadata for eVision AE and AWB algorithms.
*
*/
typedef struct evision_image {
/*! @brief
* Frame data.
*/
uint8_t* pdata;
/*! @brief
* Number of pixels columns in the image.
*/
uint16_t width;
/*! @brief
* Number of pixels rows in the image.
*/
uint16_t height;
/*! @brief
* The format of the image.
*/
evision_image_format_t format;
} evision_image_t;
#ifdef ALGO_SW_STATISTICS
/**
* @typedef evision_roi_t
* @brief Represents a Region Of Interest (aka a rectangle of pixels in an image).
*
* @struct evision_roi
* @brief Represents a Region Of Interest (aka a rectangle of pixels in an image).
*
* A ROI serves to limit the statistics extraction to a specific zone inside the frame.
* Several ROIs can be defined and for each ROI a weight must be defined.
* The aggregated statistic is the weighted average of individual ROI statistics.
* Setting all weights equal results in the aggregated statistic to be the arithmetic average of the individual statistics.
*
*/
typedef struct evision_roi {
/*! @brief
* Horizontal pixel coordinate of the Top-Left corner of the ROI.
*/
uint16_t x0;
/*! @brief
* Vertical pixel coordinate of the Top-Left corner of the ROI.
*/
uint16_t y0;
/*! @brief
* Horizontal pixel coordinate of the Bottom-Right corner of the ROI.
*/
uint16_t x1;
/*! @brief
* Vertical pixel coordinate of the Bottom-Right corner of the ROI.
*/
uint16_t y1;
/*! @brief
* Weight associated to the ROI.
*/
double weight;
} evision_roi_t;
/**
* @typedef evision_roi_array_t
* @brief Represents an array of evision_roi.
*
* @struct evision_roi_array
* @brief Represents an array of evision_roi.
*
* Represents the collection of all the defined ROIs for the estimator. Must contain at least one ROI.
*
*/
typedef struct evision_roi_array {
/*! @brief
* Pointer to the beginning of the array.
*/
evision_roi_t* parray;
/*! @brief
* Number of elements in the array.
*/
uint16_t len;
} evision_roi_array_t;
#endif
/************************************************************************
* Private Structure Declaration
************************************************************************/
/************************************************************************
* Public Variables
************************************************************************/
/************************************************************************
* Public Function Prototypes
************************************************************************/
/* Library management functions */
#ifdef ALGO_SW_STATISTICS
/* ROI array management */
/**
* @fn evision_roi_array_t* evision_api_roi_array_new(const uint16_t length)
* @brief Create and allocate the memory for a new array of #evision_roi_array_t elements.
*
* @param[in] length Size of the array to create
* @return Address of the created #evision_roi_array_t. NULL if something went wrong.
*/
evision_roi_array_t* evision_api_roi_array_new(const uint16_t length);
/**
* @fn evision_roi_array_t* evision_api_roi_array_new_grid(const uint16_t frame_width, const uint16_t frame_height, const uint16_t roi_width, const uint16_t roi_height, const uint16_t nb_roi_col, const uint16_t nb_roi_row)
* @brief Create and allocate the memory for a new array of #evision_roi_array_t with pre filled ROIs positioned as a grid.
*
* In the end, the number of ROIs will be nb_roi_col * nb_roi_row
*
* @param[in] frame_width Number of pixels column in the frame where the ROIs will be placed.
* @param[in] frame_height Number of pixels rows in the frame where the ROIs will be placed.
* @param[in] roi_width Size (columns) of each ROI.
* @param[in] roi_height Size (rows) of each ROI.
* @param[in] nb_roi_col Number of ROIs to be placed in the horizontal dimension.
* @param[in] nb_roi_row Number of ROIs to be placed in the vertical dimension.
* @return Address of the created #evision_roi_array_t. NULL if something went wrong.
*/
evision_roi_array_t* evision_api_roi_array_new_grid(const uint16_t frame_width, const uint16_t frame_height, const uint16_t roi_width, const uint16_t roi_height, const uint16_t nb_roi_col, const uint16_t nb_roi_row);
/**
* @fn evision_return_t evision_api_roi_array_delete(evision_roi_array_t* self)
* @brief Free the memory allocated to an #evision_roi_array_t.
*
* @param[in, out] self Address of the concerned ROI array instance to be deleted, cannot be used after.
* @return
* - EVISION_RET_SUCCESS
* - EVISION_RET_PARAM_ERR
*/
evision_return_t evision_api_roi_array_delete(evision_roi_array_t* self);
#endif
/************************************************************************
* Public Function Definitions
************************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* EVISION_API_UTILS_H_ */

View File

@ -1,33 +0,0 @@
From: Arturo Buzarra <arturo.buzarra@digi.com>
Date: Wed, 19 Nov 2025 11:58:43 +0100
Subject: [PATCH] dcmipp: Fix configureAwbAlgo() encapsulation under
EVISION_ALGO_ENABLED
Awb::queueRequest() unconditionally calls configureAwbAlgo(), but it is
compiled only when EVISION_ALGO_ENABLED is defined. With EVISION_ALGO_ENABLED
disabled, this leads to an undefined symbol at runtime when loading the DCMIPP
IPA. This commit guards the call under EVISION_ALGO_ENABLED so that non-EVISION
builds no longer reference the helper.
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
---
src/ipa/dcmipp/algorithms/awb.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/ipa/dcmipp/algorithms/awb.cpp b/src/ipa/dcmipp/algorithms/awb.cpp
index 006ad4b8..4444ac98 100644
--- a/src/ipa/dcmipp/algorithms/awb.cpp
+++ b/src/ipa/dcmipp/algorithms/awb.cpp
@@ -652,10 +652,12 @@ void Awb::queueRequest([[maybe_unused]] IPAContext &context,
LOG(DcmippAwb, Debug) << "Updating AwbColourConv to " << (*cconv)[0] << "...";
}
+#ifdef EVISION_ALGO_ENABLED
if (internal_.profileDirty && !configureAwbAlgo()) {
LOG(DcmippAwb, Error) << "Cannot reconfigure awb algorithm";
return;
}
+#endif /* EVISION_ALGO_ENABLED */
/* Static config: update params_ and if applicable force config_ update now */
const auto &customColorTemp = controls.get(controls::draft::AwbCustomColorTemperature);

View File

@ -0,0 +1,74 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/libcamera-stm32mp:"
PROVIDES += "libcamera"
PE = "1"
S = "${WORKDIR}/git"
DEPENDS = "python3-pyyaml-native python3-jinja2-native python3-ply-native python3-jinja2-native udev gnutls chrpath-native libevent libyaml"
DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'qt', 'qtbase qtbase-native', '', d)}"
DEPENDS:append:aarch64 = " evision-libs "
PACKAGES =+ "${PN}-gst"
PACKAGECONFIG ??= "gst python"
PACKAGECONFIG[gst] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base"
PACKAGECONFIG[python] = "-Dpycamera=enabled,-Dpycamera=disabled,python3-pybind11"
LIBCAMERA_PIPELINES ??= "dcmipp"
LIBCAMERA_IPAS = "dcmipp"
EXTRA_OEMESON = " \
-Dpipelines=${LIBCAMERA_PIPELINES} \
-Dv4l2=true \
-Dcam=enabled \
-Dlc-compliance=disabled \
-Dtest=false \
-Ddocumentation=disabled \
"
EXTRA_OEMESON += " \
-Dipas=${LIBCAMERA_IPAS} \
"
EXTRA_OEMESON:append:aarch64 = " \
-Devision_algo=true \
-Devision_algo_inc_dir=${RECIPE_SYSROOT}/usr/include/evision \
"
RDEPENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland qt', 'qtwayland', '', d)}"
RDEPENDS:${PN}:append:aarch64 = " evision-libs "
inherit meson pkgconfig python3native python3-dir
do_configure:prepend() {
sed -i -e 's|py_compile=True,||' ${S}/utils/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py
}
do_install:append() {
chrpath -d ${D}${libdir}/libcamera.so
chrpath -d ${D}${libexecdir}/libcamera/v4l2-compat.so
}
do_package:append() {
bb.build.exec_func("do_package_recalculate_ipa_signatures", d)
}
do_package_recalculate_ipa_signatures() {
local modules
for module in $(find ${PKGD}/usr/lib/libcamera -name "*.so.sign"); do
module="${module%.sign}"
if [ -f "${module}" ] ; then
modules="${modules} ${module}"
fi
done
${S}/src/ipa/ipa-sign-install.sh ${B}/src/ipa-priv-key.pem "${modules}"
}
FILES:${PN} += " ${libexecdir}/libcamera/v4l2-compat.so"
FILES:${PN} += "${datadir} ${libdir} ${PYTHON_SITEPACKAGES_DIR}"
FILES:${PN}-gst = "${libdir}/gstreamer-1.0"
# libcamera-v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
# both 32 and 64 bit file APIs.
GLIBC_64BIT_TIME_FLAGS = ""

View File

@ -8,85 +8,18 @@ LIC_FILES_CHKSUM = "\
file://LICENSES/LGPL-2.1-or-later.txt;md5=2a4f4fd2128ea2f65047ee63fbca9f68 \
"
include libcamera-stm32mp.inc
# 0.3.0
SRC_URI = " \
git://git.libcamera.org/libcamera/libcamera.git;protocol=https;branch=master \
file://0001-media_device-Add-bool-return-type-to-unlock.patch \
file://0002-options-Replace-use-of-VLAs-in-C.patch \
file://0001-rpi-Use-alloca-instead-of-variable-length-arrays.patch \
"
SRC_URI = "git://git.libcamera.org/libcamera/libcamera.git;protocol=https;branch=master"
SRCREV = "aee16c06913422a0ac84ee3217f87a9795e3c2d9"
SRC_URI += " \
file://0001-0.3.0-stm32mp-add-dcmipp-ipa.patch \
file://0002-dcmipp-Fix-configureAwbAlgo-encapsulation-under-EVIS.patch \
"
PV = "v0.3.0-stm32mp"
file://0001-media_device-Add-bool-return-type-to-unlock.patch \
file://0002-options-Replace-use-of-VLAs-in-C.patch \
file://0001-rpi-Use-alloca-instead-of-variable-length-arrays.patch \
\
file://0001-v0.3.0-stm32mp.patch \
"
PROVIDES += "libcamera"
PE = "1"
S = "${WORKDIR}/git"
DEPENDS = "python3-pyyaml-native python3-jinja2-native python3-ply-native python3-jinja2-native udev gnutls chrpath-native libevent libyaml"
DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'qt', 'qtbase qtbase-native', '', d)}"
PACKAGES =+ "${PN}-gst"
PACKAGECONFIG ??= "gst python"
PACKAGECONFIG[gst] = "-Dgstreamer=enabled,-Dgstreamer=disabled,gstreamer1.0 gstreamer1.0-plugins-base"
PACKAGECONFIG[python] = "-Dpycamera=enabled,-Dpycamera=disabled,python3-pybind11"
LIBCAMERA_PIPELINES ??= "dcmipp"
LIBCAMERA_IPAS = "dcmipp"
EXTRA_OEMESON = " \
-Dpipelines=${LIBCAMERA_PIPELINES} \
-Dv4l2=true \
-Dcam=enabled \
-Dlc-compliance=disabled \
-Dtest=false \
-Ddocumentation=disabled \
"
EXTRA_OEMESON += " \
-Dipas=${LIBCAMERA_IPAS} \
"
RDEPENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland qt', 'qtwayland', '', d)}"
inherit meson pkgconfig python3native python3-dir
do_configure:prepend() {
sed -i -e 's|py_compile=True,||' ${S}/utils/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py
}
do_install:append() {
chrpath -d ${D}${libdir}/libcamera.so
chrpath -d ${D}${libexecdir}/libcamera/v4l2-compat.so
}
do_package:append() {
bb.build.exec_func("do_package_recalculate_ipa_signatures", d)
}
do_package_recalculate_ipa_signatures() {
local modules
for module in $(find ${PKGD}/usr/lib/libcamera -name "*.so.sign"); do
module="${module%.sign}"
if [ -f "${module}" ] ; then
modules="${modules} ${module}"
fi
done
${S}/src/ipa/ipa-sign-install.sh ${B}/src/ipa-priv-key.pem "${modules}"
}
FILES:${PN} += " ${libexecdir}/libcamera/v4l2-compat.so"
FILES:${PN} += "${datadir} ${libdir} ${PYTHON_SITEPACKAGES_DIR}"
FILES:${PN}-gst = "${libdir}/gstreamer-1.0"
# libcamera-v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
# both 32 and 64 bit file APIs.
GLIBC_64BIT_TIME_FLAGS = ""
PV = "0.3.0"

View File

@ -1,5 +1,5 @@
From: Arturo Buzarra <arturo.buzarra@digi.com>
Date: Mon, 3 Nov 2025 23:00:27 +0100
Date: Wed, 18 Mar 2026 22:07:56 +0100
Subject: [PATCH] ARM: dts: ccmp15: add signed firmware support for RPROC
Enable the Cortex-M4 inter-processor communication node so remoteproc can
@ -9,24 +9,19 @@ https://onedigi.atlassian.net/browse/DEL-9920
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
---
core/arch/arm/dts/ccmp15-dvk.dtsi | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
core/arch/arm/dts/ccmp15-dvk.dtsi | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/arch/arm/dts/ccmp15-dvk.dtsi b/core/arch/arm/dts/ccmp15-dvk.dtsi
index 7ea04b659..53533bd36 100644
index ff7ee6504..ea88e3e1e 100644
--- a/core/arch/arm/dts/ccmp15-dvk.dtsi
+++ b/core/arch/arm/dts/ccmp15-dvk.dtsi
@@ -263,9 +263,12 @@
@@ -259,7 +259,7 @@
&m4_rproc {
memory-region = <&retram>, <&mcusram1>, <&mcusram2>, <&mcusram3>;
mboxes = <&ipcc 0>, <&ipcc 1>, <&ipcc 2>, <&ipcc 3>;
mbox-names = "vq0", "vq1", "shutdown", "detach";
+ resets = <&rcc MCU_R>, <&rcc MCU_HOLD_BOOT_R>;
+ reset-names = "mcu_rst", "hold_boot";
+ #reset-cells = <1>;
interrupt-parent = <&exti>;
interrupts = <68 1>;
- status = "disabled";
+ status = "okay";
};
&mcusram1 {

View File

@ -1,55 +0,0 @@
From: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Date: Wed, 7 Jan 2026 14:10:13 +0100
Subject: [PATCH] Revert "drivers: remoteproc: stm32mp15: check Cortex-M
isolation"
This reverts commit b9f1c0820783436d45646fa50a62702f85d8fd62.
The MCKPROT is a system configuration that protects MCUSS clocks.
This must not be managed in remoteproc, as some peripherals use PLL3
as the parent clock.
Some SCMI services must first be implemented to manage the MCUSS clocks
before allowing the enabling of MCKPROT.
https://onedigi.atlassian.net/browse/DEL-9920
Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
Change-Id: I78214e4c482c3947fa36c0bde7cd2fe2eee133d4
---
core/drivers/remoteproc/stm32_remoteproc.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/core/drivers/remoteproc/stm32_remoteproc.c b/core/drivers/remoteproc/stm32_remoteproc.c
index c99a47fe3..914474035 100644
--- a/core/drivers/remoteproc/stm32_remoteproc.c
+++ b/core/drivers/remoteproc/stm32_remoteproc.c
@@ -8,9 +8,6 @@
#include <drivers/firewall_device.h>
#include <drivers/rstctrl.h>
#include <drivers/stm32_remoteproc.h>
-#ifdef CFG_STM32MP15
-#include <drivers/stm32mp1_rcc.h>
-#endif
#include <keep.h>
#include <kernel/cache_helpers.h>
#include <kernel/dt_driver.h>
@@ -904,19 +901,6 @@ static TEE_Result stm32_rproc_probe(const void *fdt, int node,
stm32_rproc_a35ss_cfg(rproc);
#endif
-#ifdef CFG_STM32MP15
- if (!rproc->cdata->ns_loading) {
- if (!stm32_rcc_is_secure()) {
- if (IS_ENABLED(CFG_INSECURE))
- IMSG("WARNING: insecure rproc support regarding RCC hardening");
- else
- panic("RCC secure hardening issue");
- } else {
- stm32_rcc_set_mckprot(true);
- }
- }
-#endif
-
if (!rproc->cdata->ns_loading)
SLIST_INSERT_HEAD(&rproc_list, rproc, link);

View File

@ -1,38 +0,0 @@
From: Patrick Delaunay <patrick.delaunay@foss.st.com>
Date: Thu, 8 Jan 2026 10:20:20 +0100
Subject: [PATCH] drivers: firewall: stm32_etzpc: remove trace when rcc mckprot
is not activated
The RCC MCKPROT is deactivated even for remoteproc with secure loading
embedded in the platform, so stm32_rcc_is_mckprot always returns false
and a WARNING traces are displayed.
I/TC: WARNING: RCC tzen:1 mckprot:0, insecure ETZPC hardening
81:ETZPC_DECPROT_MCU_ISOLATION
This patch temporarily removes this trace in OpenSTLinux V6.X
as mckprot is not managed.
NOT_UPSTREAMABLE only avoid warning message.
https://onedigi.atlassian.net/browse/DEL-9920
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Change-Id: If8cbec0bc2d5ad65b2f5e716c561f9598728d4e0
---
core/drivers/firewall/stm32_etzpc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/drivers/firewall/stm32_etzpc.c b/core/drivers/firewall/stm32_etzpc.c
index 257bcd76e..9d588b1c3 100644
--- a/core/drivers/firewall/stm32_etzpc.c
+++ b/core/drivers/firewall/stm32_etzpc.c
@@ -184,7 +184,7 @@ sanitize_decprot_config(uint32_t decprot_id __maybe_unused,
}
break;
case ETZPC_DECPROT_MCU_ISOLATION:
- if (!stm32_rcc_is_secure() || !stm32_rcc_is_mckprot()) {
+ if (!stm32_rcc_is_secure()) {
IMSG("WARNING: RCC tzen:%u mckprot:%u, insecure ETZPC hardening %"PRIu32":%s",
stm32_rcc_is_secure(), stm32_rcc_is_mckprot(),
decprot_id, etzpc_decprot_strings[attr]);

View File

@ -12,7 +12,7 @@ OPTEE_URI_STASH = "${DIGI_MTK_GIT}/emp/optee_os.git;protocol=ssh"
OPTEE_URI_GITHUB = "${DIGI_GITHUB_GIT}/optee_os.git;protocol=https"
OPTEE_GIT_URI ?= "${@oe.utils.conditional('DIGI_INTERNAL_GIT', '1' , '${OPTEE_URI_STASH}', '${OPTEE_URI_GITHUB}', d)}"
SRCBRANCH = "4.0.0/stm/master"
SRCBRANCH = "4.0.0/stm/maint"
SRCREV = "${AUTOREV}"
SRC_URI = " \
@ -21,9 +21,7 @@ SRC_URI = " \
"
SRC_URI:append:ccmp15 = " \
${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM-dts-ccmp15-add-signed-firmware-support-for-RPROC.patch \
file://0002-Revert-drivers-remoteproc-stm32mp15-check-Cortex-M-i.patch \
file://0003-drivers-firewall-stm32_etzpc-remove-trace-when-rcc-m.patch', '', d)} \
${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'file://0001-ARM-dts-ccmp15-add-signed-firmware-support-for-RPROC.patch', '', d)} \
"
SRC_URI:append:ccmp25 = " \
@ -34,3 +32,4 @@ SRC_URI:append:ccmp25 = " \
EXTRA_OEMAKE:append:ccmp25 = " ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1', 'CFG_REMOTEPROC_PUB_KEY_VERIFY=y', '', d)}"
# Enable remoteproc custom public key verification for signed firmware support
EXTRA_OEMAKE:append:ccmp15 = " ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'CFG_STM32MP_REMOTEPROC=y RPROC_SIGN_KEY=%s' % (d.getVar('TRUSTFENCE_COPRO_SIGN_KEY') or ''), '', d)}"
EXTRA_OEMAKE:remove:ccmp15 = " ${@oe.utils.conditional('TRUSTFENCE_COPRO_ENABLED', '1' , 'CFG_REMOTEPROC_PUB_KEY_VERIFY=y', '', d)}"

View File

@ -6,14 +6,14 @@ LICENSE = "CYPRESS-EULA"
LIC_FILES_CHKSUM = "file://${S}/cyw-bt-patch/LICENCE.cypress;md5=cbc5f665d04f741f1e006d2096236ba7"
SRC_URI = " \
https://github.com/Infineon/ifx-linux-firmware/archive/refs/tags/release-v6.1.145-2026_0108.tar.gz;destsuffix=cyw-fmac-fw-ifx;name=cyw-fmac-fw-ifx \
git://github.com/Infineon/ifx-linux-firmware;protocol=http;branch=master;destsuffix=ifx-linux-firmware-longma;name=ifx-linux-firmware-longma \
git://github.com/murata-wireless/cyw-fmac-fw;protocol=http;branch=longma;destsuffix=cyw-fmac-fw;name=cyw-fmac-fw \
git://github.com/murata-wireless/cyw-fmac-nvram;protocol=http;branch=longma;destsuffix=cyw-fmac-nvram;name=cyw-fmac-nvram \
git://github.com/murata-wireless/cyw-bt-patch;protocol=http;branch=master;destsuffix=cyw-bt-patch;name=cyw-bt-patch \
git://github.com/murata-wireless/cyw-fmac-utils-imx32;protocol=http;branch=master;destsuffix=cyw-fmac-utils-imx32;name=cyw-fmac-utils-imx32 \
git://github.com/murata-wireless/cyw-fmac-utils-imx64;protocol=http;branch=master;destsuffix=cyw-fmac-utils-imx64;name=cyw-fmac-utils-imx64 \
file://cyw4373-autocountry \
file://cyw4373-autocountry.service \
file://autocountry \
file://autocountry.service \
"
SRC_URI:append:ccmp1 = " \
@ -22,11 +22,19 @@ SRC_URI:append:ccmp1 = " \
"
SRC_URI:append:ccmp2 = " \
file://cyfmac55500-sdio_US.APIndoor.clm_blob \
file://cyfmac55500-sdio_US.APOutdoor.clm_blob \
file://cyfmac55500-sdio_US.STAIndoor.clm_blob \
file://cyfmac55500-sdio_US.STAOutdoor.clm_blob \
file://cyfmac55500-sdio_World.APIndoor.clm_blob \
file://cyfmac55500-sdio_World.APOutdoor.clm_blob \
file://cyfmac55500-sdio_World.STAIndoor.clm_blob \
file://cyfmac55500-sdio_World.STAOutdoor.clm_blob \
file://mbt \
"
SRC_URI[cyw-fmac-fw-ifx.sha256sum]="54928426f0b060ed680d649cc3a4db0643f82f8c33810ee8a3359322e1e5e565"
SRCREV_cyw-fmac-fw="f2884c410d7d60f5283e05c4549abc35633b60e0"
SRCREV_ifx-linux-firmware-longma="f24790e6fa2f05a0f974236bed7da7fa493b9ad2"
SRCREV_cyw-fmac-fw="8cdb1886852e0b5f9876654619a8371b952bf248"
SRCREV_cyw-fmac-nvram="411c87d4cf924a1a5415273265fd54d7d7d4044f"
SRCREV_cyw-bt-patch="64ac86708253e12d7089cf75ef8dcc9b30594958"
SRCREV_cyw-fmac-utils-imx32="dad9ed86bf6691910197bc91d42a45ea8175180c"
@ -49,14 +57,14 @@ do_install () {
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
# Install systemd unit files
install -d ${D}${systemd_unitdir}/system/
install -m 0644 ${WORKDIR}/cyw4373-autocountry.service ${D}${systemd_unitdir}/system/cyw4373-autocountry.service
install -m 0644 ${WORKDIR}/autocountry.service ${D}${systemd_unitdir}/system/autocountry.service
fi
install -d ${D}${sysconfdir}/init.d/
# Install autocountry service
install -m 0755 ${WORKDIR}/cyw4373-autocountry ${D}${sysconfdir}/cyw4373-autocountry
ln -sf /etc/cyw4373-autocountry ${D}${sysconfdir}/init.d/cyw4373-autocountry
install -m 0755 ${WORKDIR}/autocountry ${D}${sysconfdir}/autocountry
ln -sf /etc/autocountry ${D}${sysconfdir}/init.d/autocountry
# Install WLAN client utility binary based on 32-bit/64-bit arch
if [ ${TARGET_ARCH} = "aarch64" ]; then
@ -80,7 +88,7 @@ do_install:append:ccmp1 () {
# Install WLAN firmware file (*.bin) and Regulatory binary file (*.clm_blob)
# For Murata 2AE (LBEE5PK2AE-564)
install -m 444 ${S}/ifx-linux-firmware-release-v6.1.145-2026_0108/firmware/cyfmac4373-sdio.industrial.bin ${D}${base_libdir}/firmware/cypress/cyfmac4373-sdio.bin
install -m 444 ${S}/ifx-linux-firmware-longma/firmware/cyfmac4373-sdio.industrial.bin ${D}${base_libdir}/firmware/cypress/cyfmac4373-sdio.bin
install -m 444 cyfmac4373-sdio_US.clm_blob ${D}${base_libdir}/firmware/cypress/cyfmac4373-sdio_US.clm_blob
install -m 444 cyfmac4373-sdio_World.clm_blob ${D}${base_libdir}/firmware/cypress/cyfmac4373-sdio_World.clm_blob
@ -103,9 +111,11 @@ do_install:append:ccmp2 () {
# Install WLAN firmware file (*.bin) and Regulatory binary file (*.clm_blob)
# For Murata 2FY (LBEE5HY2FY)
install -m 444 ${S}/ifx-linux-firmware-release-v6.1.145-2026_0108/firmware/cyfmac55500-sdio.trxse ${D}${base_libdir}/firmware/cypress/cyfmac55500-sdio.trxse
install -m 444 ${S}/cyw-fmac-fw/cyfmac55500-sdio.2FY.STAIndoor.clm_blob ${D}/${base_libdir}/firmware/cypress/
ln -sf cyfmac55500-sdio.2FY.STAIndoor.clm_blob ${D}/${base_libdir}/firmware/cypress/cyfmac55500-sdio_US.clm_blob
install -m 444 ${S}/ifx-linux-firmware-longma/firmware/cyfmac55500-sdio.trxse ${D}${base_libdir}/firmware/cypress/cyfmac55500-sdio.trxse
install -m 444 cyfmac55500-sdio_US.*.clm_blob ${D}${base_libdir}/firmware/cypress/
install -m 444 cyfmac55500-sdio_World.*.clm_blob ${D}${base_libdir}/firmware/cypress/
ln -sf cyfmac55500-sdio_US.STAIndoor.clm_blob ${D}/${base_libdir}/firmware/cypress/cyfmac55500-sdio_US.clm_blob
ln -sf cyfmac55500-sdio_World.STAIndoor.clm_blob ${D}/${base_libdir}/firmware/cypress/cyfmac55500-sdio_World.clm_blob
# Install NVRAM files (*.txt)
# For Murata 2FY (LBEE5HY2FY)
@ -129,7 +139,7 @@ do_install:append:ccimx95 () {
# Install WLAN firmware file (*.bin) and Regulatory binary file (*.clm_blob)
# For Murata 2EC (LBEE5XV2EC)
install -m 444 ${S}/ifx-linux-firmware-release-v6.1.145-2026_0108/firmware/cyfmac55572-sdio.trxse ${D}${base_libdir}/firmware/cypress/cyfmac55572-sdio.trxse
install -m 444 ${S}/ifx-linux-firmware-longma/firmware/cyfmac55572-sdio.trxse ${D}${base_libdir}/firmware/cypress/cyfmac55572-sdio.trxse
install -m 444 ${S}/cyw-fmac-fw/cyfmac55572-sdio.2EA.clm_blob_STAIndoor ${D}/${base_libdir}/firmware/cypress/
ln -sf cyfmac55572-sdio.2EA.clm_blob_STAIndoor ${D}/${base_libdir}/firmware/cypress/cyfmac55572-sdio_US.clm_blob
@ -141,10 +151,10 @@ do_install:append:ccimx95 () {
inherit update-rc.d systemd
INITSCRIPT_PACKAGES += "${PN}-autocountry"
INITSCRIPT_NAME:${PN}-autocountry = "cyw4373-autocountry"
INITSCRIPT_NAME:${PN}-autocountry = "autocountry"
INITSCRIPT_PARAMS:${PN}-autocountry = "start 19 2 3 4 5 . stop 21 0 1 6 ."
SYSTEMD_SERVICE:${PN}-autocountry = "cyw4373-autocountry.service"
SYSTEMD_SERVICE:${PN}-autocountry = "autocountry.service"
SYSTEMD_PACKAGES = "${PN}-autocountry"
PACKAGES =+ " \
@ -161,16 +171,16 @@ FILES:${PN}-mfgtest = " \
"
FILES:${PN}-autocountry = " \
${sysconfdir}/cyw4373-autocountry \
${sysconfdir}/init.d/cyw4373-autocountry \
${systemd_unitdir}/system/cyw4373-autocountry.service \
${sysconfdir}/autocountry \
${sysconfdir}/init.d/autocountry \
${systemd_unitdir}/system/autocountry.service \
"
FILES:${PN}:append:ccmp2 = " \
${sbindir}/mbt \
"
RDEPENDS:${PN}:append:ccmp1 = " ${PN}-autocountry"
RDEPENDS:${PN}:append = " ${PN}-autocountry"
RDEPENDS:${PN}-autocountry:append = " ${PN}-mfgtest"
INSANE_SKIP:${PN} += "build-deps"

View File

@ -1,7 +1,7 @@
#!/bin/sh
#===============================================================================
#
# Copyright (C) 2024 by Digi International Inc.
# Copyright (C) 2024-2026, Digi International Inc.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it
@ -9,7 +9,7 @@
# the Free Software Foundation.
#
#
# !Description: Enable Wireless autocountry feature (802.11d)
# !Description: Enable Infineon Wireless autocountry feature (802.11d)
#
#===============================================================================
@ -23,9 +23,30 @@ log() {
fi
}
wait_for_wifi() {
timeout="${1:-30}"
count=0
while [ "${count}" -lt "${timeout}" ]; do
if wl country list >/dev/null 2>&1; then
return 0
fi
sleep 1
count=$((count + 1))
done
return 1
}
# Only for Wireless variants
if [ -d "/proc/device-tree/wireless" ]; then
# Check if WorldWide regulatory domain is available
if ! wait_for_wifi 30; then
log warning "Wireless device not ready after waiting 30 seconds"
exit 1
fi
# Check if 'XZ' WorldWide regulatory domain is available
if wl country list | grep -qs ^XZ; then
# Select WorldWide Country Code as driver operational region
wl country XZ/0 agg
@ -35,4 +56,14 @@ if [ -d "/proc/device-tree/wireless" ]; then
wl autocountry 1
log info "Set WorldWide regulatory domain"
fi
# Check if 'WW' WorldWide regulatory domain is available
if wl country list | grep -qs ^WW; then
# Select WorldWide Country Code as driver operational region
wl country WW/0 agg
# Select WorldWide Country Code for use with Auto Contry Discovery
wl autocountry_default WW
# Enable 802.11d
wl autocountry 1
log info "Set WorldWide regulatory domain"
fi
fi

View File

@ -0,0 +1,13 @@
[Unit]
Description=Infineon autocountry (802.11d)
Wants=systemd-udev-settle.service
After=systemd-udev-settle.service network.target suspend.target
[Service]
Type=oneshot
ExecStart=/etc/autocountry
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target suspend.target

View File

@ -1,10 +0,0 @@
[Unit]
Description=CYW4373 autocountry (802.11d)
After=network.target suspend.target
[Service]
Type=oneshot
ExecStart=/etc/cyw4373-autocountry
[Install]
WantedBy=multi-user.target suspend.target

View File

@ -49,15 +49,35 @@ Generalize the code to make room for Optee-based encryption.
Optee) implementation.
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
# This is the commit message #4:
crypt: read HWID from 'digi,hwid_fuse_n' dt properties
Now that U-Boot supports overriding the HWID, it inserts the local,
variable HWID into the 'digi,hwid_n' properties and the fused,
stable HWID into the 'digi,hwid_fuse_n' properties.
Read the HWID to compute the key modifier from 'digi,hwid_fuse_n'
as a preferred method. If those properties do not exist, fall back
to the previous method, 'digi,hwid_n'.
An outdated U-Boot that does not create the 'digi,hwid_fuse_n'
properties does not support HWID overriding either, so we can trust
'digi,hwid_n' to have the contents from the fuses.
https://onedigi.atlassian.net/browse/DEL-9123
Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
---
src/CMakeLists.txt | 4 +
src/caam_keyblob.h | 42 +++++++
src/crypt.c | 179 +++++++++++++++++++++++++++++
src/crypt.c | 194 ++++++++++++++++++++++++++++++++
src/crypt.h | 10 ++
src/md5.c | 275 +++++++++++++++++++++++++++++++++++++++++++++
src/md5.h | 24 ++++
src/uboot_env.c | 18 +++
7 files changed, 552 insertions(+)
7 files changed, 567 insertions(+)
create mode 100644 src/caam_keyblob.h
create mode 100644 src/crypt.c
create mode 100644 src/crypt.h
@ -129,10 +149,10 @@ index 0000000..e313e87
+#endif /* CAAM_KEYBLOB_H */
diff --git a/src/crypt.c b/src/crypt.c
new file mode 100644
index 0000000..213cffd
index 0000000..565d13d
--- /dev/null
+++ b/src/crypt.c
@@ -0,0 +1,179 @@
@@ -0,0 +1,194 @@
+/*
+ * Copyright 2024 Digi International Inc
+ *
@ -192,10 +212,25 @@ index 0000000..213cffd
+ int len;
+ int fd;
+ uint32_t ocotp_hwid[MAX_HWID_WORDS];
+ char dt_prop[32];
+ char dt_prop[40];
+ char buf[sizeof(uint32_t)];
+
+ for (i = 0; i < MAX_HWID_WORDS; i++) {
+ sprintf(dt_prop, "/proc/device-tree/digi,hwid_fuse_%d", i);
+ if (access(dt_prop, F_OK) != -1) {
+ fd = open(dt_prop, O_RDONLY);
+ if (fd < 0)
+ return fd;
+ len = read(fd, buf, sizeof(uint32_t));
+ if (len < 0) {
+ close(fd);
+ return -1;
+ }
+ ocotp_hwid[i] = ntohl(*(uint32_t *) buf);
+ close(fd);
+ continue;
+ }
+
+ sprintf(dt_prop, "/proc/device-tree/digi,hwid_%d", i);
+ if (access(dt_prop, F_OK) != -1) {
+ fd = open(dt_prop, O_RDONLY);

View File

@ -1,4 +1,4 @@
# Copyright (C) 2021-2024, Digi International Inc.
# Copyright (C) 2021-2026, Digi International Inc.
FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
@ -23,6 +23,7 @@ DEPENDS += "${@oe.utils.conditional('OPTEE_PATCHES', '', '', 'optee-client', d)}
OPTEE_PATCHES = ""
OPTEE_PATCHES:ccimx9 = "file://0004-Implement-support-for-environment-encryption-using-O.patch"
OPTEE_PATCHES:ccmp1 = "file://0004-Implement-support-for-environment-encryption-using-O.patch"
OPTEE_PATCHES:ccmp2 = "file://0004-Implement-support-for-environment-encryption-using-O.patch"
SRC_URI += " \
file://${FW_CONFIG_FILE} \

View File

@ -35,10 +35,13 @@ SRC_URI = " \
"
BUILD_UBOOT_SCRIPTS ?= "true"
UBOOT_LOGO_BMP ?= ""
LOCALVERSION ?= ""
inherit ${@oe.utils.conditional('DEY_SOC_VENDOR', 'NXP', 'fsl-u-boot-localversion uuu_bootloader_tag', '', d)}
EXTRA_OEMAKE:append = "${@' LOGO_BMP=%s' % d.getVar('UBOOT_LOGO_BMP') if d.getVar('UBOOT_LOGO_BMP') else ''}"
# Disable u-boot tagging for imx8/9, as the boot image is imx-boot
UUU_BOOTLOADER:mx8-generic-bsp = ""
UUU_BOOTLOADER:mx9-generic-bsp = ""

View File

@ -12,8 +12,8 @@ if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Dual boot update verification
if test "${dualboot}" = "yes"; then
# Dual boot update verification (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${upgrade_available}" = "1"; then
echo "Update detected; Booting new system in ${active_system} ${bootattempt}"
else
@ -52,7 +52,7 @@ else
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# We are booting from the SD card.
# SD boot (MBR partition table)
setenv mmcroot /dev/mmcblk${mmcbootdev}p2
fi
if test "${upgrade_available}" = "1"; then

View File

@ -12,8 +12,8 @@ if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Dual boot update verification
if test "${dualboot}" = "yes"; then
# Dual boot update verification (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${upgrade_available}" = "1"; then
echo "Update detected; Booting new system in ${active_system} ${bootattempt}"
else
@ -52,7 +52,7 @@ else
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# We are booting from the SD card.
# SD boot (MBR partition table)
setenv mmcroot /dev/mmcblk${mmcbootdev}p2
fi
if test "${upgrade_available}" = "1"; then

View File

@ -11,8 +11,8 @@ if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Dual boot verification
if test "${dualboot}" = "yes"; then
# Dual boot (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${active_system}" = "linux_a"; then
echo "Booting from system A ${bootattempt}"
part number mmc ${mmcbootdev} linux_a tmp_mmcpart
@ -48,12 +48,11 @@ else
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# We are booting from the SD card.
setenv mmcroot /dev/mmcblk${mmcbootdev}p2
# SD boot (use SD specific rootfs partition uuid)
setenv mmcroot PARTUUID=b74d3700-a3c2-4806-8cb6-4e0fed784c7f
fi
fi
# Back up environment variables
setenv ORIG_overlays ${overlays}
setenv ORIG_extra_bootargs ${extra_bootargs}

View File

@ -11,8 +11,8 @@ if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Dual boot verification
if test "${dualboot}" = "yes"; then
# Dual boot (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${active_system}" = "linux_a"; then
echo "Booting from system A ${bootattempt}"
part number mmc ${mmcbootdev} linux_a tmp_mmcpart
@ -48,8 +48,8 @@ else
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# We are booting from the SD card.
setenv mmcroot /dev/mmcblk${mmcbootdev}p2
# SD boot (use SD specific rootfs partition uuid)
setenv mmcroot PARTUUID=b74d3700-a3c2-4806-8cb6-4e0fed784c7f
fi
fi

View File

@ -11,8 +11,8 @@ if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Dual boot verification
if test "${dualboot}" = "yes"; then
# Dual boot (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${active_system}" = "linux_a"; then
echo "Booting from system A ${bootattempt}"
part number mmc ${mmcbootdev} linux_a tmp_mmcpart
@ -48,8 +48,8 @@ else
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# We are booting from the SD card.
setenv mmcroot /dev/mmcblk${mmcbootdev}p2
# SD boot (use SD specific rootfs partition uuid)
setenv mmcroot PARTUUID=b74d3700-a3c2-4806-8cb6-4e0fed784c7f
fi
fi

View File

@ -11,8 +11,8 @@ if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Dual boot verification
if test "${dualboot}" = "yes"; then
# Dual boot (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${active_system}" = "linux_a"; then
echo "Booting from system A ${bootattempt}"
part number mmc ${mmcbootdev} linux_a tmp_mmcpart
@ -48,8 +48,8 @@ else
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# We are booting from the SD card.
setenv mmcroot /dev/mmcblk${mmcbootdev}p2
# SD boot (use SD specific rootfs partition uuid)
setenv mmcroot PARTUUID=b74d3700-a3c2-4806-8cb6-4e0fed784c7f
fi
fi

View File

@ -11,11 +11,8 @@ if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Pre step: check if we boot from uSD.
if test "${mmcbootdev}" = "1"; then
# We are booting from the SD card.
setenv mmcroot /dev/mmcblk${mmcbootdev}p2
elif test "${dualboot}" = "yes"; then
# Dual boot (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${active_system}" = "linux_a"; then
echo "Booting from system A ${bootattempt}"
part number mmc ${mmcbootdev} linux_a tmp_mmcpart
@ -50,6 +47,9 @@ else
# We are booting from the eMMC using 'recovery'.
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# SD boot (use SD specific rootfs partition uuid)
setenv mmcroot PARTUUID=b74d3700-a3c2-4806-8cb6-4e0fed784c7f
fi
fi

View File

@ -0,0 +1,92 @@
#
# U-Boot bootscript for EMMC/SD images created by Yocto.
#
# As the first step in the boot script, check if we are using DualBoot. This
# requires the script to change some variables and save them, while the rest
# of the script changes variables only temporarily without saving them.
# Build boot attempt message string
if test "${bootlimit}" -gt 0 && test "${bootcount}" -gt 0; then
bootattempt="(boot attempt ${bootcount}/${bootlimit})"
fi
# Dual boot (only on EMMC)
if test "${mmcbootdev}" = "${emmc_dev}" && test "${dualboot}" = "yes"; then
if test "${active_system}" = "linux_a"; then
echo "Booting from system A ${bootattempt}"
part number mmc ${mmcbootdev} linux_a tmp_mmcpart
part number mmc ${mmcbootdev} rootfs_a tmp_rootfs_index
else
echo "Booting from system B ${bootattempt}"
part number mmc ${mmcbootdev} linux_b tmp_mmcpart
part number mmc ${mmcbootdev} rootfs_b tmp_rootfs_index
fi
part uuid mmc ${mmcbootdev}:${tmp_rootfs_index} tmp_mmcroot
if test "${mmcpart}" -ne "${tmp_mmcpart}"; then
setexpr mmcpart ${tmp_mmcpart}
env_save_needed="1"
fi
if test "${mmcroot}" != "PARTUUID=${tmp_mmcroot}"; then
setenv mmcroot PARTUUID=${tmp_mmcroot}
env_save_needed="1"
fi
if test "${env_save_needed}" = "1"; then
env delete tmp_mmcpart tmp_rootfs_index tmp_mmcroot
env save
fi
else
echo "Booting system ${bootattempt}"
# Get the UUID of the configured boot partition.
part uuid mmc ${mmcbootdev}:${mmcpart} bootpart
# Check the boot source.
if test "${bootpart}" = "${part1_uuid}"; then
# We are booting from the eMMC using 'linux'.
true
elif test "${bootpart}" = "${part2_uuid}"; then
# We are booting from the eMMC using 'recovery'.
setenv boot_initrd true
setenv initrd_file uramdisk-recovery.img
else
# SD boot (use SD specific rootfs partition uuid)
setenv mmcroot PARTUUID=b74d3700-a3c2-4806-8cb6-4e0fed784c7f
fi
fi
# Back up environment variables
setenv ORIG_overlays ${overlays}
#
# Determine overlays to apply depending on the hardware capabilities
# described by the HWID, SOM version, and carrier board version.
#
setexpr module_has_wifi ${hwid_2} \& 20000
setexpr module_has_wifi ${module_has_wifi} / 20000
setexpr module_has_bt ${hwid_2} \& 40000
setexpr module_has_bt ${module_has_bt} / 40000
if test "${module_has_bt}" = "1" && test -z "${disable_bt}"; then
setenv overlays ccimx95_bt.dtbo,${overlays}
fi
if test "${module_has_wifi}" = "1" && test -z "${disable_wifi}"; then
setenv overlays ccimx95_wifi.dtbo,${overlays}
fi
if test -z "${disable_npu}"; then
setenv overlays ccimx95_npu.dtbo,${overlays}
fi
if test "${dboot_kernel_var}" = "fitimage" && test -z "${temp-fitimg-loaded}"; then
# Set temp var to avoid re-loading fitimage
setenv temp-fitimg-loaded yes
fi
dboot linux mmc ${mmcbootdev}:${mmcpart}
#
# Undo changes to environment variables
#
# (we only get here in case of an error on the dboot command)
#
setenv overlays ${ORIG_overlays}
setenv ORIG_overlays

View File

@ -179,7 +179,6 @@ fi
# - Erase the 'update' partition
# - Configure recovery to wipe 'update' partition
# - Run 'recovery' and let the system boot after
# NOTE: insert some 'usb reset' commands to avoid EHCI timeouts
setenv bootcmd "
env default -a;
setenv dualboot ${dualboot};
@ -228,9 +227,6 @@ setenv bootcmd "
exit;
fi;
fi;
if test "${INSTALL_MEDIA}" = "usb"; then
usb reset;
fi;
echo \"\";
echo \"\";
echo \">> Installing file ${INSTALL_ROOTFS_FILENAME} on rootfs_a\";

View File

@ -1,5 +1,5 @@
From: Arturo Buzarra <arturo.buzarra@digi.com>
Date: Thu, 30 Oct 2025 14:35:29 +0100
Date: Wed, 18 Mar 2026 15:26:07 +0100
Subject: [PATCH] ARM: dts: ccmp25: add signed firmware support for RPROC
Declare only the shared memory used for inter-processor communication
@ -14,7 +14,7 @@ Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/arch/arm/dts/ccmp25.dtsi b/arch/arm/dts/ccmp25.dtsi
index 913eac366b9..51b65f2408a 100644
index cdbc26efabc..b0a91cb0180 100644
--- a/arch/arm/dts/ccmp25.dtsi
+++ b/arch/arm/dts/ccmp25.dtsi
@@ -246,11 +246,8 @@
@ -25,7 +25,7 @@ index 913eac366b9..51b65f2408a 100644
- <&ipc_shmem_1>, <&vdev0vring0>,
- <&vdev0vring1>, <&vdev0buffer>,
- <&cm33_sram2>;
- st,syscfg-nsvtor = <&a35ss_syscfg 0xa8 0xffffff80>;
- st,syscfg-nsvtor = <&a35ss_syscfg 0x20a8 0xffffff80>;
+ compatible = "st,stm32mp2-m33-tee";
+ memory-region = <&vdev0vring0>, <&vdev0vring1>, <&vdev0buffer>, <&ipc_shmem_1>;
status = "okay";

View File

@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://Licenses/README;md5=2ca5f2c35c8cc335f0a19756634782f1"
DEPENDS += "flex-native bison-native"
DEPENDS += "python3-setuptools-native"
SRCBRANCH = "v2023.10/master"
SRCBRANCH = "v2023.10/maint"
SRCREV = "${AUTOREV}"
SRC_URI += " \

View File

@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://Licenses/README;md5=2ca5f2c35c8cc335f0a19756634782f1"
DEPENDS += "flex-native bison-native"
SRCBRANCH = "v2024.04/master"
SRCBRANCH = "v2024.04/maint"
SRCREV = "${AUTOREV}"
COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul|ccimx8m|ccimx8x|ccimx9)"

View File

@ -17,10 +17,61 @@
BASE_INIT="$(readlink -f "@base_sbindir@/init")"
BASE_INIT_ORIG="$(readlink -f "@base_sbindir@/init.orig")"
INIT_SYSTEMD="@systemd_unitdir@/systemd"
EMMCROOTFS="$(grep -qs 'root=PARTUUID.*' /proc/cmdline 2>/dev/null && echo 1)"
get_block_disk() {
local dev
local syspath
dev="${1##*/}"
syspath="$(readlink -f "/sys/class/block/${dev}")"
[ -n "${syspath}" ] || return
if [ -f "${syspath}/partition" ]; then
basename "$(dirname "${syspath}")"
else
basename "${syspath}"
fi
}
get_root_disk() {
local ROOT_DEV
local devname
local uevent
ROOT_DEV="$(stat -c%D /)"
for uevent in /sys/class/block/*/uevent; do
devname="$(sed -ne 's/^DEVNAME=//p' "${uevent}")"
[ -n "${devname}" ] || continue
if [ "$(stat -c"%02t%02T" "/dev/${devname}")" = "${ROOT_DEV}" ]; then
get_block_disk "${devname}"
break
fi
done
}
get_active_system() {
if [ -z "${EMMCROOTFS}" ]; then
local ROOT_DEV
local devname
local label
local uevent
ROOT_DEV="$(stat -c%D /)"
for uevent in /sys/class/block/*/uevent; do
devname="$(sed -ne 's/^DEVNAME=//p' "${uevent}")"
label="$(sed -ne 's/^PARTNAME=//p' "${uevent}")"
[ -n "${devname}" ] || continue
[ -n "${label}" ] || continue
if [ "$(stat -c"%02t%02T" "/dev/${devname}")" = "${ROOT_DEV}" ]; then
ACTIVE_SYSTEM="${label}"
break
fi
done
if [ -z "${ACTIVE_SYSTEM}" ]; then
# For a read-only filesystem this will be /dev/ubiblock0_X
# For an ubifs filesystem this will be ubiX:rootfs_X
ACTIVE_SYSTEM="$(sed -e 's/^.*root=\([^ ]*\) .*$/\1/' /proc/cmdline 2>/dev/null)"
@ -36,17 +87,6 @@ get_active_system() {
#Character device major/minor: 242:6
ACTIVE_SYSTEM="$(ubinfo "${ACTIVE_SYSTEM}" | sed -ne '/^Name/s,.* \([^[:blank:]]\+\)$,\1,g;T;p')"
fi
else
local MMCROOT_DEV
MMCROOT_DEV="$(stat -c%D /)"
for label in /dev/disk/by-partlabel/*; do
if [ "$(stat -c"%02t%02T" "$(realpath "${label}")")" = "${MMCROOT_DEV}" ]; then
ACTIVE_SYSTEM="$(basename "${label}")"
break
fi
done
fi
if [ -z "${ACTIVE_SYSTEM}" ]; then
@ -74,6 +114,17 @@ elif [ "${SUBSYSTEM}" = "ubi" ]; then
[ -n "${result}" ] && exit 0
fi
if [ "${SUBSYSTEM}" = "block" ]; then
ROOT_DISK="$(get_root_disk)"
DEV_DISK="$(get_block_disk "${DEVNAME}")"
if [ -n "${ROOT_DISK}" ] && [ -n "${DEV_DISK}" ] &&
[ "${ROOT_DISK}" != "${DEV_DISK}" ]; then
logger "Skip mounting partition '${PARTNAME}', because it does not belong to the root disk"
exit 0
fi
fi
MOUNT_FOLDER=${PARTNAME}
MOUNT_PARAMS="-o silent"
# Mount 'linux' partition as read-only
@ -89,10 +140,10 @@ if grep -qs "${MOUNTPOINT}" /proc/mounts; then
exit 0
fi
# Get from proc/cmdline the active system "a" or "b"
get_active_system || exit
if [ "${PARTNAME}" = "linux_a" ] || [ "${PARTNAME}" = "linux_b" ]; then
# Get from proc/cmdline the active system "a" or "b"
get_active_system || exit
PARTINDEX="${PARTNAME#linux_}"
if [ "${ACTIVE_SYSTEM}" != "${PARTINDEX}" ]; then
logger "Skip mount partition '${PARTNAME}', because it is not the active system"

View File

@ -1,35 +0,0 @@
# Copyright (C) 2016-2026, Digi International Inc.
SUMMARY = "MCA firmware management tool"
SECTION = "console/tools"
LICENSE = "CLOSED"
PKGNAME = "mca_tool"
# ARM tarball
SRC_URI:arm = "${DIGI_PKG_SRC}/${PKGNAME}-${PV}-${TUNE_ARCH}.tar.gz;name=arm"
SRC_URI[arm.md5sum] = "ffa8967cb9b684f3846b641a5d57b8f6"
SRC_URI[arm.sha256sum] = "057c289990d79f0b749e9d0d7af2570332e9215e697de75dc6851d89bdd61dff"
# AARCH64 tarball
SRC_URI:aarch64 = "${DIGI_PKG_SRC}/${PKGNAME}-${PV}-${TUNE_ARCH}.tar.gz;name=aarch64"
SRC_URI[aarch64.md5sum] = "12033830965f2861628461c612a7604e"
SRC_URI[aarch64.sha256sum] = "2467e426c6a4e6b89f4aaced846c1f52787e130f16ffb62e6f046bea7bc4f21f"
S = "${WORKDIR}/${PKGNAME}-${PV}"
inherit bin_package
HAS_USRMERGE = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '1', '0', d)}"
do_install:append() {
# Move binaries from /sbin to /usr/sbin to avoid usrmerge QA error.
if [ "${HAS_USRMERGE}" = "1" ]; then
install -d ${D}${base_sbindir}
mv ${D}/sbin/* ${D}${base_sbindir} && rmdir ${D}/sbin
fi
}
INSANE_SKIP:${PN} = "already-stripped"
COMPATIBLE_MACHINE = "(ccimx6ul|ccimx8m|ccimx8x|ccmp1|ccimx95)"

Some files were not shown because too many files have changed in this diff Show More