IoT Yocto v25.1-dev Development Status
Last Update: 2025-12-31
UPDATE: IoT Yocto v25.1 is released, please use the official v25.1 release instead.
Please refer to the v25.1 feature table for a list of enabled hardware features.
Notably, DPoC on Genio 520/720 EVK is not supported by IoT Yocto v25.1. The team plans to officially release IoT Yocto v25.1.1 by the end of January of 2026 to support DPoC.
Changelog
v25.1 (2025/12/30)
Please refer to IoT Yocto v25.1 Release Note
PR5 (2025/11/25)
Updates & Fixes:
- Idle power optimization has been implemented.
- Suspend-to-RAM power optimization has been implemented.
- Suspend-to-RAM now works with UFS storage (MACHINE=genio-720-evk-ufs).
- NOR flash boot now supports faster quad mode.
- Integrated ONNXRuntime now supports FP16 hardware acceleration using NPU.
- Ethernet Phy-based Wake-on-LAN is now supported with Airoha AN8801RIN/A.
- DisplayPort audio now works.
- I2S ports can now be configured as slave to suport master-only devices such as IT6625.
- A prebuilt browser image integrates a ported Chromium browser with experimental Pipewire support by 3rd party vendor Collabora.
Known Issues:
- [Display] LVDS panel is not supported in PR5.
- [Display] DPoC(DisplayPort over Type-C) is has been removed from the v25.1 official release scope.
- [Wi-Fi][MT7921] SoftAP function is not working in PR5.
- [USB] UVC Gadget is not supported in PR5.
- [NPU] Integrated ONNXRuntime does not yet support hadware acceleration for QDQ (Quant-Dequant).
- [NPU] Kernel panic (APUSYS_RV timeout) after suspend/resume during DLA inference.
- [VDEC][Suspend] Video decode shows black screen after suspend/resume.
- [VENC][Suspend] System hangs during suspend/resume while video encoding.
- [Chromium] Chromium browser hardware acceleration is not fully enabled.
PR4 (2025/10/27)
Updates & Fixes:
- [Power] Suspend-to-RAM now works for eMMC storage(
MACHINE=genio-720-evk). - [Boot]
fw_printenvandfw_setenvis now supported ongenio-720-evk-norboot-ufs. - [Boot] U-boot can now boot OS from USB mass storage in Genio 720/520 EVK.
- [PCIe] meta-compliance-test
scarthgapbranch now includes patches for Genio 720 PCIe compliance tests. - [USB] meta-compliance-test
scarthgapbranch now includes patches for Genio 720 USB compliance tests. - [Ethernet] The
mdiotool is now integrated in therity-demo-imagerecipe and is compatible with Genio 720/520. - [Camera] MIPI-CSI C-Phy is now supported on Genio 720/520.
- [Camera] External IT6625 HDMI to MIPI-CSI converter is now enabled on Genio 720/520.
- [Peripheral] Touch (Goodix GT9271) is now enabled on Genio 720/520 EVK.
- [Peripheral] External CANBUS IC MCP2518 is now enabled on Genio 720/520 EVK.
- [AI/ML] NNStreamer demo script is now compatible to Genio 720/520 EVK.
- [AI/ML] OnnxRuntime is now supported on Genio 720/520 EVK with CPU/NPU accleration(partial).
- [Security] eMMC RPMB access is now supported on Genio 720/520.
Known Issues:
- [Display] V-sync timeout error occurs when setting DisplayPort to 4K resolution
- [Power] Suspend-to-RAM fails to resume with UFS storage(
MACHINE=genio-720-evk-ufs). - [Power] Ethernet Wake-on-LAN does not work in PR4.
- [Boot] The NOR flash is not configured in quad SPI mode during bootloader phase.
- [Display] DisplayPort audio output does not work.
- [Display] DPoC(DisplayPort over Type-C) is not supported in PR4.
- [Display] LVDS panel is not supported in PR4.
PR3 (2025/09/30)
Updates & Fixes:
- [Boot] Enabled NOR flash boot support in
MACHINE=genio-720-evk-norboot-ufs - [MT7921S] Enabled basic MT7921S (
Sona MT320 2230) support - [Display] Fixed eDP output to 4K panel
HK173VB-01B - [Display] Enabled DisplayPort output on Genio 520 EVK P3V3
- [Camera] Enabled support for SerDes
MAX96724andAG190Hcamera - [Camera] Fixed kernel warning logs on IOMMU violation during camera data streaming
- [Camera] Fixed initial blank frames at the start of streaming
- [3rd Party] Integrated ASIX ax88179 USB GbE vendor driver from meta-asix
Known Issues:
- [UFS] UFS part
SDINFD04-128Gis not supported - [NOR Flash] Quad mode is not supported
- [Display] V-sync timeout error occurs when setting DisplayPort to 4K resolution
- [Video Decode] Decoding VP8 format may result in corrupted output
- [Video Decode] 2nd video playback may crash. To mitigate this, update vcu driver to commit 16f8920e or later.
- [Video Decode] v4l2convert only supports following output format: YUY2 I420 NV12
- [Power] Suspend-to-RAM does not work
PR2 (2025/09/02)
- Enabled Genio 520 EVK eDP port with FHD panel
AUO G156HAN03.0 - Enabled MIPI-CSI DTB D8 and D9
- Enabled NPU (TensorFlow Lite with hardware acceleration)
- Enabled CPU hotplug & CPU idle
- Fixed corrupted ADB device name when running
adb deviceson host PC
Known Issues:
- 4K display output via eDP panel shows a corrupted result
- AUTO00449868: No MT7921S support via SDIO interface
PR1.5 (2025/08/19)
- Support SD card slot
- Support UART 4-wire hardware flow control
- Support USB Type-C (reversible)
- Enable Linux Thermal framework
- Fix AUTO00447570: PCIe device failed to resume after system suspend
- Fix AUTO00458725: [Genio 1200] Low framerate for HDMI-RX with 4K60 input
- Add Genio 520/720 chip ID / segment ID query in TF-A
- U-Boot now shows correct part name in boot log
Known Issues:
- The eDP port is not working
- AUTO00449868: No MT7921S support via SDIO interface
Genio 720/520 BSP Usage Notes
NOR Boot with SD Card Root File System
While the genio-720-evk-norboot-ufs image by default boots from the
NOR flash and then loads the kernel onto
UFS storage, the bootloader in NOR flash is also capable of
booting into SD card storage using the EFI (EBBR) boot flow.
To evaluate NOR boot with SD card root file system, follow these steps:
- Refer to this forum post
and configure the board to boot from NOR flash. - Flash the
genio-720-evk-norboot-ufsimage to the Genio 720 EVK P2V3. - Prepare a micro SD card with an example root file system image and follow the
SD card boot section
in the developer guide. - Insert the micro SD card into the Genio 720 EVK P2V3, and connect to
UART0 with baud rate 921600. - Enter the U-Boot interactive shell
by hitting any key when you see the message “Hit any key to stop autoboot”
in the UART0 console. - Set the SD card as the OS boot device with these U-Boot shell commands:
setenv boot_targets mmc1
setenv list_dtbo emmc.dtbo
saveenv
reset
Note:
- This disables UFS storage as the root file system.
- This enables eMMC storage and also removes other device tree overlays,
such as apusys.dtbo for NPU.
Note for Bootloader Development
If you need to rebuild the image after modifying the bootloader source code
using the bitbake devtool command, please clean the following modules first:
MACHINE=genio-720-evk-norboot-ufs bitbake -c cleansstate trusted-firmware-a bl2 u-boot
NPU
Example test command for TensorFlow Lite:
benchmark_model --stable_delegate_settings_file=/usr/share/label_image/stable_delegate_settings.json --use_nnapi=false --use_xnnpack=false --use_gpu=false --min_secs=20 --graph=/usr/share/benchmark_dla/inception_v3_quant.tflite
Camera D8 and D9
Since there are some node changes in Genio 720/520 EVK, for the moment, please refer to the following unit test example:
- Connect CAM DTB D8 to CAM0 and CAM DTB D9 to CAM1.
- Load the DTBO
camera-imx258-csi0-ov5640-csi1-std.dtbo.
You can update the U-Bootboot_confvariable in the Linux console usingfw_setenv:
fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-imx258-csi0-ov5640-csi1-std.dtbo"
- Save the following bash script to a file
genio_520_720_standard_v4l2_camera_testcase_20250905.sh:
#!/bin/bash
# Genio 520/720 Camera Test
## Environment Setup
# +---------------+--------+--------+-----------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
# | Genio EVK | CSI0 | CSI1 | DTBO | Load DTBO Command |
# +---------------+--------+--------+-----------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
# | Genio 520/720 | OV5640 | x | camera-ov5640-csi0-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-ov5640-csi0-std.dtbo" |
# | Genio 510/700 | x | OV5640 | camera-ov5640-csi1-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-ov5640-csi1-std.dtbo" |
# | Genio 510/700 | OV5640 | OV5640 | camera-ov5640-dual-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-ov5640-dual-std.dtbo" |
# | Genio 510/700 | IMX258 | x | camera-imx258-csi0-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-imx258-csi0-std.dtbo" |
# | Genio 510/700 | x | IMX258 | camera-imx258-csi1-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-imx258-csi1-std.dtbo" |
# | Genio 510/700 | IMX258 | IMX258 | camera-imx258-dual-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-imx258-dual-std.dtbo" |
# | Genio 510/700 | IMX258 | OV5640 | camera-imx258-csi0-ov5640-csi1-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-imx258-csi0-ov5640-csi1-std.dtbo" |
# +---------------+--------+--------+-----------------------------------------+---------------------------------------------------------------------------------------------------------------------------+
## Obtain Camera Nodes
CAM_NAME="seninf-top"
CAM_BUS_NAME=platform:$(basename `find /sys/bus/platform/devices/ -name "*${CAM_NAME}"`)
export CAM_MEDIA_DEV=$(v4l2-ctl -z ${CAM_BUS_NAME} --list-devices | grep media)
if [ -z ${CAM_MEDIA_DEV} ] ; then echo "error: Cannot find media device"; [ "${BASH_SOURCE[0]}" != "${0}" ] && return; exit 1; fi
declare -a CAMSV_DEV_NAME=($(basename -a `find /sys/bus/platform/devices/ -name "*camsv*" | sort | tr "\n" " "`))
declare -a CAMSV_VIDEO_DEV=($(for i in ${CAMSV_DEV_NAME[@]}; do media-ctl -d ${CAM_MEDIA_DEV} --entity "${i} video stream"; done))
declare -a SENINF_DEV_NAME=(seninf-0 seninf-1)
## IMX258
IMX258_FMT () {
MBUSFMT="SBGGR10_1X10"
V4L2FMT=BG10
GSTFMT=UNKNOWN
WIDTH=2104
HEIGHT=1560
}
IMX258_CSI0 () {
SENSOR="imx258 7-001a"
NODE_ID=0
}
IMX258_CSI1 () {
SENSOR="imx258 8-001a"
NODE_ID=1
}
## OV5640
OV5640_FMT () {
MBUSFMT=YUYV8_1X16
V4L2FMT=YUYV
GSTFMT=YUY2
WIDTH=1920
HEIGHT=1080
}
OV5640_CSI0 () {
SENSOR="ov5640 7-003c"
NODE_ID=0
}
OV5640_CSI1 () {
SENSOR="ov5640 8-003c"
NODE_ID=1
}
## Set Media Device
SET_MEDIA () {
SENINF=${SENINF_DEV_NAME[${NODE_ID}]}
CAMSV=${CAMSV_DEV_NAME[${NODE_ID}]}
media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENSOR}':0 -> '${SENINF}':0 [1]"
media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENINF}':1 -> '${CAMSV}':0 [1]"
media-ctl -d ${CAM_MEDIA_DEV} -V "'${SENSOR}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
media-ctl -d ${CAM_MEDIA_DEV} -V "'${SENINF}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
media-ctl -d ${CAM_MEDIA_DEV} -V "'${CAMSV}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
}
## Run pipeline
LAUNCH () {
if [ "${GSTFMT}" != "UNKNOWN" ] ; then
gst-launch-1.0 -e v4l2src device=${CAMSV_VIDEO_DEV[${NODE_ID}]} num-buffers=300 io-mode=mmap ! video/x-raw,width=${WIDTH},height=${HEIGHT},format=${GSTFMT} ! waylandsink sync=false
else
v4l2-ctl -v width=${WIDTH},height=${HEIGHT},pixelformat=${V4L2FMT} --stream-mmap --stream-count=300 -d ${CAMSV_VIDEO_DEV[${NODE_ID}]}
fi
}
## Single Camera
SINGLE_CAMERA() {
media-ctl -d ${CAM_MEDIA_DEV} -r
${FMT0}
${CSI0}
SET_MEDIA
LAUNCH
}
## Dual Camera
DUAL_CAMERA() {
media-ctl -d ${CAM_MEDIA_DEV} -r
${FMT0}
${CSI0}
SET_MEDIA
LAUNCH &
${FMT1}
${CSI1}
SET_MEDIA
LAUNCH
}
# Buffer Starvation
BUFFER_STARVATION() {
media-ctl -d ${CAM_MEDIA_DEV} -r
${FMT1}
${CSI0}
SET_MEDIA
v4l2-ctl -v width=${WIDTH},height=${HEIGHT},pixelformat=${V4L2FMT} --stream-mmap --stream-count=100 -d ${CAMSV_VIDEO_DEV[${NODE_ID}]} --stream-sleep count=10
}
# Test Cases
SINGLE_CAMERA_OV5640_CSI0 () {
echo "Run ${FUNCNAME}"
FMT0=OV5640_FMT
CSI0=OV5640_CSI0
SINGLE_CAMERA
}
SINGLE_CAMERA_OV5640_CSI1 () {
echo "Run ${FUNCNAME}"
FMT0=OV5640_FMT
CSI0=OV5640_CSI1
SINGLE_CAMERA
}
DUAL_CAMERA_OV5640_CSI0_OV5640_CSI1 () {
echo "Run ${FUNCNAME}"
FMT0=OV5640_FMT
CSI0=OV5640_CSI0
FMT1=OV5640_FMT
CSI1=OV5640_CSI1
DUAL_CAMERA
}
SINGLE_CAMERA_IMX258_CSI0 () {
echo "Run ${FUNCNAME}"
FMT0=IMX258_FMT
CSI0=IMX258_CSI0
SINGLE_CAMERA
}
SINGLE_CAMERA_IMX258_CSI1 () {
echo "Run ${FUNCNAME}"
FMT0=IMX258_FMT
CSI0=IMX258_CSI1
SINGLE_CAMERA
}
SINGLE_CAMERA_IMX258_CSI0_BUFFER_STARVATION () {
echo "Run ${FUNCNAME}"
FMT0=IMX258_FMT
CSI0=IMX258_CSI0
BUFFER_STARVATION
}
DUAL_CAMERA_IMX258_CSI0_IMX258_CSI1 () {
echo "Run ${FUNCNAME}"
FMT0=IMX258_FMT
CSI0=IMX258_CSI0
FMT1=IMX258_FMT
CSI1=IMX258_CSI1
DUAL_CAMERA
}
DUAL_CAMERA_IMX258_CSI0_OV5640_CSI1 () {
echo "Run ${FUNCNAME}"
FMT0=IMX258_FMT
CSI0=IMX258_CSI0
FMT1=OV5640_FMT
CSI1=OV5640_CSI1
DUAL_CAMERA
}
help () {
echo "Run the following test according to your hardware setting:"
echo ""
echo " SINGLE_CAMERA_OV5640_CSI0"
echo " SINGLE_CAMERA_OV5640_CSI1"
echo " DUAL_CAMERA_OV5640_CSI0_OV5640_CSI1"
echo " SINGLE_CAMERA_IMX258_CSI0"
echo " SINGLE_CAMERA_IMX258_CSI1"
echo " SINGLE_CAMERA_IMX258_CSI0_BUFFER_STARVATION"
echo " DUAL_CAMERA_IMX258_CSI0_IMX258_CSI1"
echo " DUAL_CAMERA_IMX258_CSI0_OV5640_CSI1"
echo ""
echo " e.g. # SINGLE_CAMERA_OV5640_CSI0"
}
help
- You can then source the test script and run the test commands defined therein. For example:
source ./genio_520_720_standard_v4l2_camera_testcase_20250905.sh
SINGLE_CAMERA_IMX258_CSI0
SINGLE_CAMERA_OV5640_CSI1
DUAL_CAMERA_IMX258_CSI0_OV5640_CSI1