Development Status for IoT Yocto v25.1-dev

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_printenv and fw_setenv is now supported on genio-720-evk-norboot-ufs.
  • [Boot] U-boot can now boot OS from USB mass storage in Genio 720/520 EVK.
  • [PCIe] meta-compliance-test scarthgap branch now includes patches for Genio 720 PCIe compliance tests.
  • [USB] meta-compliance-test scarthgap branch now includes patches for Genio 720 USB compliance tests.
  • [Ethernet] The mdio tool is now integrated in the rity-demo-image recipe 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 MAX96724 and AG190H camera
  • [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-128G is 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 devices on 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:

  1. Refer to this forum post
    and configure the board to boot from NOR flash.
  2. Flash the genio-720-evk-norboot-ufs image to the Genio 720 EVK P2V3.
  3. Prepare a micro SD card with an example root file system image and follow the
    SD card boot section
    in the developer guide.
  4. Insert the micro SD card into the Genio 720 EVK P2V3, and connect to
    UART0 with baud rate 921600.
  5. 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.
  6. 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:

  1. Connect CAM DTB D8 to CAM0 and CAM DTB D9 to CAM1.
  2. Load the DTBO camera-imx258-csi0-ov5640-csi1-std.dtbo.
    You can update the U-Boot boot_conf variable in the Linux console using fw_setenv:
fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-imx258-csi0-ov5640-csi1-std.dtbo" 
  1. 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
  1. 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

In PR2, the Genio 720/520 EVK enables the eDP adaptor by default, even if the eDP panel is not physically connected.

This may lead to some GUI test programs, such as gst-launch-1.0 with waylandsink, to appear not showing on the DSI display.

To remedy this, you can modify the Weston configuration to disable the eDP panel in Weston compositor.

  1. Boot and login to console
  2. Edit /etc/xdg/weston/weston.ini
  3. Add the following section to the ini file:
[output]
name=eDP-1
mode=off

Note that the name field should match the connect name you queried from DRM, e.g.

# modeprint mediatek | grep Connector
Connector: eDP-1
Connector: DSI-1
  1. Re-start weston with
systemctl restart weston

After restarting Weston, the eDP panel should be excluded from Weston, and subsequent GStreamer waylandsink should be output to the DSI panel instead.

1 Like

As a note, the post has been updated with PR3 information in Sep 30.

Do you have an updated camera setup script that handles the recently released AG190H camera + GMSL serdes?

Hi @Joel_Quanbeck,

You can test the SerDes camera with the following steps.

Genio 520/720 with SerDes camera (MAX96724 and AG190H)

  1. Connect SerDes to CAM0 and CAM1.
    • CAM0: MAX96724 EVKIT with 4x AG190H
    • CAM1: MAX96724 EVKIT with 2x AG190H
  2. Load the DTBO according to the hardware settings
    e.g., Use camera-ag190h-max96724-csi0-std.dtbo for SerDes on CAM0
    You can update the U-Boot boot_conf variable in the Linux console using fw_setenv:
fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-ag190h-max96724-csi0-std.dtbo"
  1. Save the following bash script to a file genio_520_720_standard_v4l2_camera_testcase_serdes_20251016.sh:
#!/bin/bash

# Genio 520/720 SerDes Camera Test

## Environment Setup

# +---------------+--------------------+--------------------+--------------------------------------+------------------------------------------------------------------------------------------------------------------------+
# | Genio EVK     | CAM0               | CAM1               | DTBO                                 | Load DTBO Command                                                                                                      |
# +---------------+--------------------+--------------------+--------------------------------------+------------------------------------------------------------------------------------------------------------------------+
# | Genio 520/720 | SerDes (4x AG190H) | x                  | camera-ag190h-max96724-csi0-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-ag190h-max96724-csi0-std.dtbo" |
# | Genio 520/720 | x                  | SerDes (2x AG190H) | camera-ag190h-max96724-csi1-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-ag190h-max96724-csi1-std.dtbo" |
# | Genio 520/720 | SerDes (4x AG190H) | SerDes (2x AG190H) | camera-ag190h-max96724-dual-std.dtbo | fw_setenv boot_conf "#conf-mediatek_mt8391-genio-720-evk.dtb#conf-emmc.dtbo#conf-camera-ag190h-max96724-dual-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)

## MAX96724

MAX96724_FMT () {
    MBUSFMT=YUYV8_1X16
    V4L2FMT=YUYV
    GSTFMT=YUY2
    WIDTH=1920
    HEIGHT=1080
}

MAX96724_CSI0 () {
    SENSOR="max96724 7-0027:0"
    NODE_ID=0
}

MAX96724_CSI1 () {
    SENSOR="max96724 8-0027:0"
    NODE_ID=1
}

## Set Media Device

SET_MEDIA () {
    SENINF=${SENINF_DEV_NAME[${NODE_ID}]}

    if [ ${NODE_ID} -eq 0 ] ; then
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENSOR}':0 -> '${SENINF}':0 [1]"
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENINF}':1 -> '${CAMSV_DEV_NAME[0]}':0 [1]"
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENINF}':2 -> '${CAMSV_DEV_NAME[1]}':0 [1]"
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENINF}':3 -> '${CAMSV_DEV_NAME[2]}':0 [1]"
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENINF}':4 -> '${CAMSV_DEV_NAME[3]}':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 "'${SENINF}':1 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${SENINF}':2 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${SENINF}':3 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${SENINF}':4 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${CAMSV_DEV_NAME[0]}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${CAMSV_DEV_NAME[1]}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${CAMSV_DEV_NAME[2]}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${CAMSV_DEV_NAME[3]}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
    elif [ ${NODE_ID} -eq 1 ] ; then
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENSOR}':0 -> '${SENINF}':0 [1]"
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENINF}':1 -> '${CAMSV_DEV_NAME[4]}':0 [1]"
        media-ctl -d ${CAM_MEDIA_DEV} -l "'${SENINF}':2 -> '${CAMSV_DEV_NAME[5]}':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 "'${SENINF}':1 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${SENINF}':2 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${CAMSV_DEV_NAME[4]}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
        media-ctl -d ${CAM_MEDIA_DEV} -V "'${CAMSV_DEV_NAME[5]}':0 [fmt:${MBUSFMT}/${WIDTH}x${HEIGHT}]"
    fi
}

## Run pipeline

LAUNCH () {
    if [ ${NODE_ID} -eq 0 ] ; then
        gst-launch-1.0 -e v4l2src device=${CAMSV_VIDEO_DEV[0]} num-buffers=300 io-mode=dmabuf ! video/x-raw,width=${WIDTH},height=${HEIGHT},format=${GSTFMT} ! waylandsink sync=false &
        gst-launch-1.0 -e v4l2src device=${CAMSV_VIDEO_DEV[1]} num-buffers=300 io-mode=dmabuf ! video/x-raw,width=${WIDTH},height=${HEIGHT},format=${GSTFMT} ! waylandsink sync=false &
        gst-launch-1.0 -e v4l2src device=${CAMSV_VIDEO_DEV[2]} num-buffers=300 io-mode=dmabuf ! video/x-raw,width=${WIDTH},height=${HEIGHT},format=${GSTFMT} ! waylandsink sync=false &
        gst-launch-1.0 -e v4l2src device=${CAMSV_VIDEO_DEV[3]} num-buffers=300 io-mode=dmabuf ! video/x-raw,width=${WIDTH},height=${HEIGHT},format=${GSTFMT} ! waylandsink sync=false
    elif [ ${NODE_ID} -eq 1 ] ; then
        gst-launch-1.0 -e v4l2src device=${CAMSV_VIDEO_DEV[4]} num-buffers=300 io-mode=dmabuf ! video/x-raw,width=${WIDTH},height=${HEIGHT},format=${GSTFMT} ! waylandsink sync=false &
        gst-launch-1.0 -e v4l2src device=${CAMSV_VIDEO_DEV[5]} num-buffers=300 io-mode=dmabuf ! video/x-raw,width=${WIDTH},height=${HEIGHT},format=${GSTFMT} ! waylandsink sync=false
    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
}

# Test Cases

SINGLE_CAMERA_MAX96724_CSI0 () {
    echo "Run ${FUNCNAME}"
    FMT0=MAX96724_FMT
    CSI0=MAX96724_CSI0
    SINGLE_CAMERA
}

SINGLE_CAMERA_MAX96724_CSI1 () {
    echo "Run ${FUNCNAME}"
    FMT0=MAX96724_FMT
    CSI0=MAX96724_CSI1
    SINGLE_CAMERA
}

DUAL_CAMERA_MAX96724_CSI0_MAX96724_CSI1 () {
    echo "Run ${FUNCNAME}"
    FMT0=MAX96724_FMT
    CSI0=MAX96724_CSI0
    FMT1=MAX96724_FMT
    CSI1=MAX96724_CSI1
    DUAL_CAMERA
}

help () {
    echo "Run the following test according to your hardware setting:"
    echo ""
    echo "    SINGLE_CAMERA_MAX96724_CSI0"
    echo "    SINGLE_CAMERA_MAX96724_CSI1"
    echo "    DUAL_CAMERA_MAX96724_CSI0_MAX96724_CSI1"
    echo ""
    echo "    e.g. # SINGLE_CAMERA_MAX96724_CSI0"
}

help
  1. You can then source the test script and run the test commands defined therein. For example:
source ./genio_520_720_standard_v4l2_camera_testcase_serdes_20251016.sh
SINGLE_CAMERA_MAX96724_CSI0
SINGLE_CAMERA_MAX96724_CSI1
DUAL_CAMERA_MAX96724_CSI0_MAX96724_CSI1
2 Likes

Is the touch panel supported yet? I don’t see the driver loading. I’m testing a UI.

@Aaron_Clarke there is a display-dsi.dts overlay to enable the EVK’s touch display.

1 Like

The PR4 status has been updated in the post.

1 Like

Is the genio_520_720_standard_v4l2_camera_testcase_20250905.sh script passing through raw frames from the IMX258 and OV5640 cameras? Or is the script also configuring the ISP? Thanks!

Or is the script also configuring the ISP?

Hi @David_Downey , it is passing through the sensor frame data to DRAM. In IoT Yocto v25.1 there is no support fo the ISP pipeline for Genio 720/520. The ISP support is planned in future IoT Yocto releases such as 26.0.

1 Like

The post has been updated with PR5 info in 2025/11/25.

The PR5 announcement contains a wrong link to the “eMMC boot” prebuilt image. It has been updated to the correct eMMC prebuilt image link for Genio 720/520 EVK.

Hi folks, looking for additional details and clarifications on the above point.

Does this mean, with the recent PR5 release, we can configure any I2S interface on the Genio 520 SoC as a slave I2S interface (i.e. an I2S interface that can accept MCLK, BCLK, and LRCLK from an external I2S master).

At the moment, the MT8371 datasheet specifies that there are the following 4 I2S interfaces on the Genio 520 SoC:

  • 1 Master I2S input
  • 1 Master or Slave I2S input
  • 2 Master I2S outputs

Could you clarify which one of the below points is true with the recent PR5 release?

  • The existing Master or Slave I2S input only worked as a Master I2S input. With PR5, the existing Master or Slave I2S input now works as either Master or Slave I2S input.
  • The existing Master I2S input can also be configured as a Slave I2S input. Hence, it is possible to have 2 Slave I2S inputs on the Genio 520 SoC
  • All 4 I2S interfaces of the Genio 520 SoC can be configured as Slave I2S interfaces. Hence, it is possible to have 2 Slave I2S inputs and 2 Slave I2S outputs on the Genio 520 SoC.

Thanks, and look forward to reading your response.

1 Like