summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README10
-rw-r--r--classes/image_type_tezi.bbclass200
-rw-r--r--classes/toradex-devicetree.bbclass17
-rw-r--r--classes/toradex-fitimage.bbclass149
-rw-r--r--classes/toradex-kernel-config.bbclass23
-rw-r--r--classes/toradex-kernel-deploy-config.bbclass8
-rw-r--r--classes/toradex-kernel-localversion.bbclass13
-rw-r--r--classes/toradex-sanity.bbclass65
-rw-r--r--classes/toradex-u-boot-localversion.bbclass2
-rw-r--r--conf/layer.conf2
-rw-r--r--recipes-bsp/btnxpuartconf/btnxpuartconf/btnxpuart.conf1
-rw-r--r--recipes-bsp/btnxpuartconf/btnxpuartconf_1.0.bb14
-rw-r--r--recipes-bsp/gpio-export/files/COPYING5
-rw-r--r--recipes-bsp/gpio-export/files/apalis-imx6/gpio-export.sh51
-rw-r--r--recipes-bsp/gpio-export/files/gpio-export.service12
-rw-r--r--recipes-bsp/gpio-export/files/gpio-export.sh4
-rw-r--r--recipes-bsp/gpio-export/gpio-export_1.0.bb26
-rw-r--r--recipes-bsp/mwifiexap/mwifiexap_1.0.bb17
-rw-r--r--recipes-bsp/mwifiexconf/mwifiexconf/mwifiex.conf (renamed from recipes-bsp/mwifiexap/mwifiexap/mwifiex.conf)0
-rw-r--r--recipes-bsp/mwifiexconf/mwifiexconf/verdin-am62/mwifiex.conf1
-rw-r--r--recipes-bsp/mwifiexconf/mwifiexconf_1.0.bb21
-rw-r--r--recipes-bsp/tezi-metadata/files/LA_OPT_NXP_SW.html168
-rw-r--r--recipes-bsp/tezi-metadata/files/TI-TFL.txt127
-rw-r--r--recipes-bsp/tezi-metadata/tezi-metadata_0.3.bb11
-rw-r--r--recipes-bsp/u-boot/libubootenv/colibri-imx6ull/fw_env.config10
-rw-r--r--recipes-bsp/u-boot/libubootenv/colibri-imx7/fw_env.config10
-rw-r--r--recipes-bsp/u-boot/libubootenv/fw_env.config18
-rw-r--r--recipes-bsp/u-boot/libubootenv_%.bbappend12
-rw-r--r--recipes-bsp/u-boot/u-boot-distro-boot.bb8
-rw-r--r--recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in35
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex-common.inc26
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex-imx.inc24
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex-ti.inc66
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-ARM-imx8mp-verdin-imx8mp-Add-memory-size-detection.patch40
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri-imx6-imx6ull-imx7-defconfig-Enable-fa.patch112
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri_imx6-imx6ull-_imx7-update-env-memory-.patch197
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-arm-dts-Makefile-Prevent-build-errors-from-other-imx.patch53
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-arm-imx-add-u-boot-nand.imx-to-boot-from-NAND-withou.patch61
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-arm-mach-imx-Makefile-Extend-u-boot-nand.imx-padding.patch43
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-colibri-imx7-Call-fdt_increase_size.patch66
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-colibri_imx6-fix-RALAT-and-WALAT-values.patch51
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-configs-colibri-imx7-Fix-bad-block-table-in-flash-co.patch35
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-toradex-colibri_imx7-Enable-nand-emmc-detection-and-.patch82
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0001-toradex-tdx-cfg-block-use-only-snprintf.patch71
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0002-board-apalis-colibri-imx6-imx6ull-imx7-Add-fastboot-.patch133
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0002-toradex-tdx-cfg-block-use-defines-for-string-length.patch45
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0003-toradex-tdx-cfg-block-extend-assembly-version.patch181
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0004-toradex-tdx-cfg-block-add-new-toradex-oui-range.patch129
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0005-toradex-tdx-cfg-block-add-0068-i.mx-8m-mini-sku.patch96
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0006-toradex-common-Remove-stale-comments-about-modules-a.patch63
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0007-toradex-common-Use-ARRAY_SIZE-macro.patch41
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0008-toradex-tdx-cfg-block-Cleanup-interactive-cfg-block-.patch451
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0009-toradex-common-Remove-stale-function-declaration.patch30
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0010-toradex-common-Remove-ifdef-usage-for-2nd-ethaddr.patch40
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0011-toradex-tdx-cfg-block-Use-official-SKU-names.patch171
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0012-toradex-common-Improve-product-serial-print-during-b.patch41
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/0013-configs-colibri-imx7-Enable-bootd-command.patch44
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/use-head-next/0001-colibri_imx7-boot-linux-kernel-in-secure-mode.patch31
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex/use_hash_old_parser.cfg2
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex_2022.07.bb31
-rw-r--r--recipes-bsp/u-boot/u-boot-toradex_mainline.bb15
-rw-r--r--recipes-core/fs-init/fs-init.bb4
-rw-r--r--recipes-core/set-hostname/files/set-hostname.service2
-rw-r--r--recipes-core/set-hostname/set-hostname_1.0.bb4
-rw-r--r--recipes-core/systemd/systemd-conf/journald.conf3
-rw-r--r--recipes-core/systemd/systemd-conf_%.bbappend2
-rw-r--r--recipes-core/systemd/systemd_%.bbappend4
-rw-r--r--recipes-core/udev/files/apalis-imx6/99-toradex.rules37
-rw-r--r--recipes-core/udev/files/apalis-imx8/99-toradex.rules25
-rw-r--r--recipes-core/udev/files/apalis-imx8x/99-toradex.rules15
-rwxr-xr-xrecipes-core/udev/files/apalis-imx8x/toradex-adc.sh21
-rw-r--r--recipes-core/udev/files/apalis-tk1/99-toradex.rules3
-rw-r--r--recipes-core/udev/files/bootpart-automount.rules6
-rw-r--r--recipes-core/udev/files/colibri-imx6/99-toradex.rules27
-rw-r--r--recipes-core/udev/files/colibri-imx6ull-emmc/99-toradex.rules20
-rwxr-xr-xrecipes-core/udev/files/colibri-imx6ull-emmc/toradex-adc.sh21
-rw-r--r--recipes-core/udev/files/colibri-imx6ull/99-toradex.rules26
-rwxr-xr-xrecipes-core/udev/files/colibri-imx6ull/toradex-adc.sh2
-rw-r--r--recipes-core/udev/files/colibri-imx7-emmc/99-toradex.rules22
-rw-r--r--recipes-core/udev/files/colibri-imx7/99-toradex.rules25
-rw-r--r--recipes-core/udev/files/colibri-imx8x/99-toradex.rules17
-rw-r--r--recipes-core/udev/files/hotplug.rules2
-rw-r--r--recipes-core/udev/files/hotplug.sh44
-rw-r--r--recipes-core/udev/files/mount.blacklist6
-rw-r--r--recipes-core/udev/files/mount.sh109
-rwxr-xr-xrecipes-core/udev/files/toradex-mount-bootpart.sh33
-rw-r--r--recipes-core/udev/files/verdin-am62/10-toradex-can0-ifname.link6
-rw-r--r--recipes-core/udev/files/verdin-am62/10-toradex-can1-ifname.link6
-rw-r--r--recipes-core/udev/files/verdin-am62/99-toradex.rules17
-rwxr-xr-xrecipes-core/udev/files/verdin-am62/toradex-adc.sh21
-rw-r--r--recipes-core/udev/files/verdin-imx8mm/10-toradex-can0-ifname.link6
-rw-r--r--recipes-core/udev/files/verdin-imx8mm/99-toradex.rules21
-rwxr-xr-xrecipes-core/udev/files/verdin-imx8mm/toradex-adc.sh10
-rw-r--r--recipes-core/udev/files/verdin-imx8mp/10-toradex-can0-ifname.link6
-rw-r--r--recipes-core/udev/files/verdin-imx8mp/10-toradex-can1-ifname.link6
-rw-r--r--recipes-core/udev/files/verdin-imx8mp/99-toradex.rules22
-rw-r--r--recipes-core/udev/udev-extraconf_%.bbappend14
-rw-r--r--recipes-core/udev/udev-toradex-rules.bb31
-rw-r--r--recipes-core/util-linux/util-linux/fstrim.service7
-rw-r--r--recipes-core/util-linux/util-linux/fstrim.timer11
-rw-r--r--recipes-core/util-linux/util-linux_%.bbappend18
-rw-r--r--recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend9
-rw-r--r--recipes-devtools/mtd/mtd-utils_%.bbappend8
-rw-r--r--recipes-devtools/python/python3-docutils/rst2man_using_python3.patch8
-rw-r--r--recipes-devtools/python/python3-docutils_%.bbappend6
-rw-r--r--recipes-graphics/wayland/weston-init.bbappend22
-rw-r--r--recipes-graphics/wayland/weston-init/weston.sh7
-rw-r--r--recipes-kernel/backports/backports_5.4.bb10
-rw-r--r--recipes-kernel/kernel-module-atemsys/kernel-module-atemsys_1.3.08.bb2
-rw-r--r--recipes-kernel/kmod/depmodwrapper-cross_%.bbappend2
-rw-r--r--recipes-kernel/linux-firmware/linux-firmware_%.bbappend71
-rw-r--r--recipes-kernel/linux/device-tree-overlays-mainline_git.bb9
-rw-r--r--recipes-kernel/linux/linux-toradex-mainline.inc27
-rw-r--r--recipes-kernel/linux/linux-toradex-mainline_%.bbappend1
-rw-r--r--recipes-kernel/linux/linux-toradex-mainline_5.4.bb27
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0001-ARM-dts-imx6qdl-apalis-Add-usdhc-aliases.patch38
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch52
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-add-verdin-imx8mm-mallow-board.patch44
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0001-power-reset-gpio-poweroff-use-a-struct-to-store-the-.patch110
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0001-thermal-imx-Update-critical-temp-threshold.patch40
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch68
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx-Add-support-for-Apalis-Evaluation-Board-.patch530
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx6qdl-colibri-Add-usdhc-aliases.patch38
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch61
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0002-arm64-dts-freescale-verdin-imx8mm-add-support-to-mal.patch273
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0002-power-reset-gpio-poweroff-use-sys-off-handler-API.patch103
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0003-ARM-dts-imx7d-colibri-emmc-Add-usdhc-aliases.patch35
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch39
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0003-dt-bindings-power-reset-gpio-poweroff-Add-priority-p.patch45
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0004-media-i2c-ov5640-Implement-get_mbus_config.patch54
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/0004-power-reset-gpio-poweroff-make-sys-handler-priority-.patch54
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/defconfig1025
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/toradex_aarch64.config527
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/defconfig421
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-6.6/toradex_imx_v6_v7.config299
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt-less-latency.cfg (renamed from recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt-less-latency.cfg)0
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt-less-latency.scc (renamed from recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt-less-latency.scc)0
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt.cfg (renamed from recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt.cfg)1
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt.scc (renamed from recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt.scc)0
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream-rt_6.6.bb20
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream.inc45
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/0001-thermal-imx-Update-critical-temp-threshold.patch40
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch68
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch61
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch39
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/0004-media-i2c-ov5640-Implement-get_mbus_config.patch54
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/aarch64/defconfig1026
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/aarch64/toradex_aarch64.config534
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/defconfig421
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream/toradex_imx_v6_v7.config299
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream_6.6.bb30
-rw-r--r--recipes-kernel/linux/linux-toradex-upstream_mainline.bb20
-rw-r--r--recipes-kernel/linux/linux-toradex_%.bbappend1
-rw-r--r--recipes-kernel/perf/perf.bbappend2
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.%.bbappend1
-rw-r--r--recipes-support/libsoc/libsoc/0001-libsoc-use-sane-board-naming.patch552
-rw-r--r--recipes-support/libsoc/libsoc_0.8.2.bbappend33
-rw-r--r--recipes-support/libusbgx/files/g1.schema.in18
-rwxr-xr-xrecipes-support/libusbgx/files/setup-board.sh11
-rw-r--r--recipes-support/libusbgx/files/usbg.service17
-rw-r--r--recipes-support/libusbgx/libusbgx-config.bbappend19
-rw-r--r--recipes-support/libusbgx/libusbgx_git.bb50
-rw-r--r--recipes-support/rng-tools/rng-tools_%.bbappend1
-rw-r--r--recipes-support/snapd/snapd_2.25.bb14
-rw-r--r--recipes-support/tdx-info/tdx-info_0.1.1.bb16
165 files changed, 10230 insertions, 1421 deletions
diff --git a/README b/README
index b4c799e..c2605b6 100644
--- a/README
+++ b/README
@@ -3,8 +3,7 @@ OpenEmbedded/Yocto BSP Layer for Toradex Modules
This layer provides support for ARM based Toradex computer on modules (COM)
common to all used SoCs for use with OpenEmbedded and/or Yocto.
-It is to be used together with meta-toradex-nxp and/or meta-toradex-tegra
-layers.
+It is to be used together with meta-toradex-nxp layer.
For more information on available Toradex COMs please visit:
https://www.toradex.com/computer-on-modules
@@ -32,10 +31,6 @@ This layer depends on:
URI: git://git.toradex.com/meta-toradex-nxp
branch: master
revision: HEAD
-and/or
- URI: git://git.toradex.com/meta-toradex-tegra
- branch: master
- revision: HEAD
Patches
=======
@@ -54,8 +49,7 @@ To send patches, use
Building
========
-See the README in either meta-toradex-nxp or meta-toradex-tegra depending
-on your SoC.
+See the README in meta-toradex-nxp layer.
License
=======
diff --git a/classes/image_type_tezi.bbclass b/classes/image_type_tezi.bbclass
index c10a325..89396b3 100644
--- a/classes/image_type_tezi.bbclass
+++ b/classes/image_type_tezi.bbclass
@@ -5,12 +5,12 @@
# Since it also generates the image.json description file it is rather
# interwind with the boot flow which is U-Boot target specific.
-WKS_FILE_DEPENDS_append = " tezi-metadata virtual/dtb"
+KERNEL_DEVICETREE_BASENAME = "${@make_dtb_boot_files(d)}"
+WKS_FILE_DEPENDS:append = " tezi-metadata virtual/dtb"
DEPENDS += "${WKS_FILE_DEPENDS}"
-IMAGE_BOOT_FILES_REMOVE = "${@make_dtb_boot_files(d) if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else ''}"
-IMAGE_BOOT_FILES_REMOVE_apalis-tk1 = "${@ d.getVar('KERNEL_DEVICETREE') if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else ''}"
-IMAGE_BOOT_FILES_append = " overlays.txt ${@'' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'overlays/*;overlays/'}"
-IMAGE_BOOT_FILES_remove = "${IMAGE_BOOT_FILES_REMOVE}"
+IMAGE_BOOT_FILES_REMOVE = "${@'${KERNEL_DEVICETREE_BASENAME}' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else ''}"
+IMAGE_BOOT_FILES:append = " overlays.txt ${@'' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'overlays/*;overlays/'}"
+IMAGE_BOOT_FILES:remove = "${IMAGE_BOOT_FILES_REMOVE}"
RM_WORK_EXCLUDE += "${PN}"
@@ -19,18 +19,25 @@ TDX_RELEASE ??= "0.0.0"
TDX_MATRIX_BUILD_TIME ??= "${DATETIME}"
TDX_MATRIX_BUILD_TIME[vardepsexclude] = "DATETIME"
+EMMCDEV = "mmcblk0"
+EMMCDEV:verdin-imx8mp = "emmc"
+EMMCDEVBOOT0 = "mmcblk0boot0"
+EMMCDEVBOOT0:verdin-imx8mp = "emmc-boot0"
TEZI_VERSION ?= "${DISTRO_VERSION}"
TEZI_DATE ?= "${TDX_MATRIX_BUILD_TIME}"
TEZI_IMAGE_NAME ?= "${IMAGE_NAME}"
TEZI_ROOT_FSTYPE ??= "ext4"
+TEZI_ROOT_FSOPTS ?= "-E nodiscard"
TEZI_ROOT_LABEL ??= "RFS"
TEZI_ROOT_NAME ??= "rootfs"
TEZI_ROOT_SUFFIX ??= "tar.xz"
+TEZI_ROOT_FILELIST ??= ""
TEZI_USE_BOOTFILES ??= "true"
+TEZI_AUTO_INSTALL ??= "false"
TEZI_BOOT_SUFFIX ??= "${@'bootfs.tar.xz' if oe.types.boolean('${TEZI_USE_BOOTFILES}') else ''}"
TEZI_CONFIG_FORMAT ??= "2"
# Require newer Tezi for mx8 Socs with the u-boot environment bugfix
-TEZI_CONFIG_FORMAT_mx8 ??= "4"
+TEZI_CONFIG_FORMAT:mx8-generic-bsp ??= "4"
TORADEX_FLASH_TYPE ??= "emmc"
UBOOT_BINARY_TEZI_EMMC ?= "${UBOOT_BINARY}"
UBOOT_BINARY_TEZI_RAWNAND ?= "${UBOOT_BINARY}"
@@ -40,18 +47,20 @@ UBOOT_ENV_TEZI_RAWNAND ?= "${UBOOT_ENV_TEZI}"
# use DISTRO_FLAVOUR to append to the image name displayed in TEZI
DISTRO_FLAVOUR ??= ""
-SUMMARY_append = "${DISTRO_FLAVOUR}"
+SUMMARY:append = "${DISTRO_FLAVOUR}"
-TEZI_EULA_URL ?= "https://www.nxp.com/docs/en/disclaimer/LA_OPT_NXP_SW.html"
-export TEZI_EULA_URL
+TEZI_EULA_FILE ?= "LA_OPT_NXP_SW.html"
+TEZI_EULA_FILE:ti-soc ?= "TI-TFL.txt"
+TEZI_EULA_URL ?= "https://www.nxp.com/docs/en/disclaimer/${TEZI_EULA_FILE}"
+TEZI_EULA_URL:ti-soc ?= ""
# Append tar command to store uncompressed image size to ${T}.
# If a custom rootfs type is used make sure this file is created
# before compression.
-IMAGE_CMD_tar_append = "; du -ks ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.tar | cut -f 1 > ${T}/image-size${IMAGE_NAME_SUFFIX}"
-CONVERSION_CMD_tar_append = "; du -ks ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.tar | cut -f 1 > ${T}/image-size.${type}"
-CONVERSION_CMD_tar = "touch ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}; ${IMAGE_CMD_TAR} --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.tar -C ${TAR_IMAGE_ROOTFS} . || [ $? -eq 1 ]"
-CONVERSIONTYPES_append = " tar"
+IMAGE_CMD:tar:append = "; du -ks ${IMGDEPLOYDIR}/${IMAGE_NAME}.tar | cut -f 1 > ${T}/image-size${IMAGE_NAME_SUFFIX}"
+CONVERSION_CMD:tar:append = "; du -ks ${IMGDEPLOYDIR}/${IMAGE_NAME}.${type}.tar | cut -f 1 > ${T}/image-size.${type}"
+CONVERSION_CMD:tar = "touch ${IMGDEPLOYDIR}/${IMAGE_NAME}.${type}; ${IMAGE_CMD_TAR} --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}.${type}.tar -C ${TAR_IMAGE_ROOTFS} . || [ $? -eq 1 ]"
+CONVERSIONTYPES:append = " tar"
def get_uncompressed_size(d, type):
path = os.path.join(d.getVar('T'), "image-size.%s" % type)
@@ -69,6 +78,59 @@ def get_bootfs_part_size(d):
part_size = 3 * 2 ** (1 + int(log(get_uncompressed_size(d, 'bootfs'), 2)))
return max(16, part_size)
+def get_filelist_var(d, varname):
+ filelist = d.getVar(varname)
+ if not filelist:
+ return None
+ import re
+ return re.split(r"\s+", filelist.strip())
+
+def get_tezi_filelist_artifacts(d):
+ filelist = get_filelist_var(d, 'TEZI_ROOT_FILELIST')
+ if not filelist:
+ return None
+ artifacts = []
+ for entry in filelist:
+ artifacts.append(entry.split(":")[0])
+ return artifacts
+
+# Determine the storage space required for the given "filelist".
+def get_filelist_extra_size(d, filelist):
+ import shlex
+ import subprocess
+
+ extra_size = 0
+ for entry in filelist:
+ unpack = False
+ flds = entry.split(":")
+ fpath = os.path.join(d.getVar('IMGDEPLOYDIR'), flds[0])
+ # Any non-empty string is considered as true except the strings "0" and
+ # "false"; this is to be compatible with the QVariant used by Tezi.
+ if len(flds) >= 3 and (flds[2] and flds[2].lower() not in ["0", "false"]):
+ unpack = True
+ if unpack and fpath.endswith(".zip"):
+ # Deal with .zip files only:
+ cmd = ("unzip -p %s | wc -c" % shlex.quote(fpath))
+ bb.debug(1, "Running command [%s]" % cmd)
+ outp = subprocess.check_output(cmd, shell=True)
+ size = int(outp)
+ bb.debug(1, "Unpacked size of '%s': %d (bytes)" % (fpath, size))
+ elif unpack:
+ # Deal with .tar.(gz|xz|bz2|lzo|zstd):
+ cmd = ("tar -xf %s -O | wc -c" % shlex.quote(fpath))
+ bb.debug(1, "Running command [%s]" % cmd)
+ outp = subprocess.check_output(cmd, shell=True)
+ size = int(outp)
+ bb.debug(1, "Unpacked size of '%s': %d (bytes)" % (fpath, size))
+ else:
+ stat = os.stat(fpath)
+ size = stat.st_size
+ bb.debug(1, "Size of '%s': %d (bytes)" % (fpath, size))
+ extra_size += size
+
+ # Returned size is in MB.
+ return float(extra_size) / 1024 / 1024
+
# Whitespace separated list of files declared by 'deploy_var' variable
# from 'source_dir' (DEPLOY_DIR_IMAGE by default) to place in 'deploy_dir'.
# Entries will be installed under a same name as the source file. To change
@@ -128,23 +190,39 @@ def tezi_deploy_files(d, deploy_var, deploy_dir, source_dir=None):
def rootfs_tezi_emmc(d, use_bootfiles):
from collections import OrderedDict
+ emmcdev = d.getVar('EMMCDEV')
+ emmcdevboot0 = d.getVar('EMMCDEVBOOT0')
+ imagename = d.getVar('IMAGE_LINK_NAME')
offset_bootrom = d.getVar('OFFSET_BOOTROM_PAYLOAD')
+ offset_fw = d.getVar('OFFSET_FW_PAYLOAD')
offset_spl = d.getVar('OFFSET_SPL_PAYLOAD')
- imagename = d.getVar('IMAGE_LINK_NAME')
bootpart_rawfiles = []
filesystem_partitions = []
+ offset_payload = offset_bootrom
+ if offset_fw:
+ # FIRMWARE_BINARY contain product_id <-> filename mapping
+ fwmapping = d.getVarFlags('FIRMWARE_BINARY')
+ for f, v in fwmapping.items():
+ bootpart_rawfiles.append(
+ {
+ "filename": v,
+ "dd_options": "seek=" + offset_payload,
+ "product_ids": f
+ })
+ offset_payload = offset_fw
if offset_spl:
bootpart_rawfiles.append(
{
"filename": d.getVar('SPL_BINARY'),
- "dd_options": "seek=" + offset_bootrom
+ "dd_options": "seek=" + offset_payload
})
+ offset_payload = offset_spl
bootpart_rawfiles.append(
{
"filename": d.getVar('UBOOT_BINARY_TEZI_EMMC'),
- "dd_options": "seek=" + (offset_spl if offset_spl else offset_bootrom)
+ "dd_options": "seek=" + offset_payload
})
if use_bootfiles:
@@ -161,26 +239,32 @@ def rootfs_tezi_emmc(d, use_bootfiles):
}
})
- filesystem_partitions.append(
- {
- "partition_size_nominal": 512,
- "want_maximised": True,
- "content": {
- "label": d.getVar('TEZI_ROOT_LABEL'),
- "filesystem_type": d.getVar('TEZI_ROOT_FSTYPE'),
- "mkfs_options": "-E nodiscard",
- "filename": imagename + "." + d.getVar('TEZI_ROOT_SUFFIX'),
- "uncompressed_size": get_uncompressed_size(d, d.getVar('TEZI_ROOT_NAME'))
- }
- })
+ rootfs = {
+ "partition_size_nominal": 512,
+ "want_maximised": True,
+ "content": {
+ "label": d.getVar('TEZI_ROOT_LABEL'),
+ "filesystem_type": d.getVar('TEZI_ROOT_FSTYPE'),
+ "mkfs_options": d.getVar('TEZI_ROOT_FSOPTS'),
+ "filename": imagename + "." + d.getVar('TEZI_ROOT_SUFFIX'),
+ "uncompressed_size": get_uncompressed_size(d, d.getVar('TEZI_ROOT_NAME'))
+ }
+ }
+
+ rootfs_filelist = get_filelist_var(d, 'TEZI_ROOT_FILELIST')
+ if rootfs_filelist:
+ rootfs["content"]["filelist"] = rootfs_filelist
+ rootfs["content"]["uncompressed_size"] += get_filelist_extra_size(d, rootfs_filelist)
+
+ filesystem_partitions.append(rootfs)
return [
OrderedDict({
- "name": "mmcblk0",
+ "name": emmcdev,
"partitions": filesystem_partitions
}),
OrderedDict({
- "name": "mmcblk0boot0",
+ "name": emmcdevboot0,
"erase": True,
"content": {
"filesystem_type": "raw",
@@ -228,9 +312,14 @@ def rootfs_tezi_rawnand(d):
}
}
+ rootfs_filelist = get_filelist_var(d, 'TEZI_ROOT_FILELIST')
+ if rootfs_filelist:
+ rootfs["content"]["filelist"] = rootfs_filelist
+ rootfs["content"]["uncompressed_size"] += get_filelist_extra_size(d, rootfs_filelist)
+
kernel = {
"name": "kernel",
- "size_kib": 8192,
+ "size_kib": 12288,
"type": "static",
"content": {
"rawfile": {
@@ -274,7 +363,7 @@ def rootfs_tezi_json(d, flash_type, flash_data, json_file, uenv_file):
from datetime import datetime
deploydir = d.getVar('DEPLOY_DIR_IMAGE')
- data = OrderedDict({ "config_format": d.getVar('TEZI_CONFIG_FORMAT'), "autoinstall": False })
+ data = OrderedDict({ "config_format": d.getVar('TEZI_CONFIG_FORMAT'), "autoinstall": oe.types.boolean(d.getVar('TEZI_AUTO_INSTALL')) })
# Use image recipes SUMMARY/DESCRIPTION...
data["name"] = d.getVar('SUMMARY')
@@ -291,8 +380,7 @@ def rootfs_tezi_json(d, flash_type, flash_data, json_file, uenv_file):
if os.path.exists(os.path.join(deploydir, "toradexlinux.png")):
data["icon"] = "toradexlinux.png"
if d.getVar('TEZI_SHOW_EULA_LICENSE') == "1":
- url = d.getVar('TEZI_EULA_URL')
- data["license"] = os.path.basename(url)
+ data["license"] = d.getVar('TEZI_EULA_FILE')
product_ids = d.getVar('TORADEX_PRODUCT_IDS')
if product_ids is None:
@@ -319,6 +407,18 @@ def rootfs_tezi_json(d, flash_type, flash_data, json_file, uenv_file):
json.dump(data, outfile, indent=4)
bb.note("Toradex Easy Installer metadata file {0} written.".format(json_file))
+def fw_binaries(d):
+ fwmapping = d.getVarFlags('FIRMWARE_BINARY')
+
+ if fwmapping is not None:
+ fw_bins = []
+ for key, val in fwmapping.items():
+ if val not in fw_bins:
+ fw_bins.append(val)
+ return " " + " ".join(fw_bins)
+ else:
+ return ""
+
python rootfs_tezi_run_json() {
artifacts = "%s/%s.%s" % (d.getVar('IMGDEPLOYDIR'), d.getVar('IMAGE_LINK_NAME'), d.getVar('TEZI_ROOT_SUFFIX'))
flash_type = d.getVar('TORADEX_FLASH_TYPE')
@@ -330,19 +430,24 @@ python rootfs_tezi_run_json() {
flash_data = rootfs_tezi_rawnand(d)
uenv_file = d.getVar('UBOOT_ENV_TEZI_RAWNAND')
uboot_file = d.getVar('UBOOT_BINARY_TEZI_RAWNAND')
- artifacts += " " + d.getVar('KERNEL_IMAGETYPE') + " " + d.getVar('KERNEL_DEVICETREE')
+ artifacts += " " + d.getVar('KERNEL_IMAGETYPE') + " " + d.getVar('KERNEL_DEVICETREE_BASENAME')
elif flash_type == "emmc":
use_bootfiles = oe.types.boolean(d.getVar('TEZI_USE_BOOTFILES'))
flash_data = rootfs_tezi_emmc(d, use_bootfiles)
uenv_file = d.getVar('UBOOT_ENV_TEZI_EMMC')
uboot_file = d.getVar('UBOOT_BINARY_TEZI_EMMC')
# TODO: Multi image/raw NAND with SPL currently not supported
+ uboot_file += fw_binaries(d);
uboot_file += " " + d.getVar('SPL_BINARY') if d.getVar('OFFSET_SPL_PAYLOAD') else ""
artifacts += " " + "%s/%s.%s" % (d.getVar('IMGDEPLOYDIR'), d.getVar('IMAGE_LINK_NAME'), d.getVar('TEZI_BOOT_SUFFIX')) if use_bootfiles else ""
else:
bb.fatal("Toradex flash type unknown")
artifacts += " " + uenv_file + " " + uboot_file
+ artifacts_fl = get_tezi_filelist_artifacts(d)
+ if artifacts_fl:
+ for artifact in artifacts_fl:
+ artifacts += " %s/%s" % (d.getVar('IMGDEPLOYDIR'), artifact)
d.setVar("TEZI_ARTIFACTS", artifacts)
rootfs_tezi_json(d, flash_type, flash_data, "image-%s.json" % d.getVar('IMAGE_BASENAME'), uenv_file)
@@ -355,36 +460,43 @@ tezi_deploy_bootfs_files[dirs] =+ "${WORKDIR}/bootfs"
tezi_deploy_bootfs_files[cleandirs] += "${WORKDIR}/bootfs"
tezi_deploy_bootfs_files[vardeps] += "IMAGE_BOOT_FILES"
-TAR_IMAGE_ROOTFS_task-image-bootfs = "${WORKDIR}/bootfs"
-IMAGE_CMD_bootfs () {
+TAR_IMAGE_ROOTFS:task-image-bootfs = "${WORKDIR}/bootfs"
+IMAGE_CMD:bootfs () {
:
}
TEZI_IMAGE_BOOTFS_PREFUNCS ??= "tezi_deploy_bootfs_files"
do_image_bootfs[prefuncs] += "${TEZI_IMAGE_BOOTFS_PREFUNCS}"
TEZI_IMAGE_TEZIIMG_PREFUNCS ??= "rootfs_tezi_run_json"
-IMAGE_TYPEDEP_teziimg += "${TEZI_BOOT_SUFFIX} ${TEZI_ROOT_SUFFIX}"
-IMAGE_CMD_teziimg () {
+IMAGE_TYPEDEP:teziimg += "${TEZI_BOOT_SUFFIX} ${TEZI_ROOT_SUFFIX}"
+IMAGE_CMD:teziimg () {
bbnote "Create Toradex Easy Installer tarball"
# Copy image json file to ${WORKDIR}/image-json
cp ${IMGDEPLOYDIR}/image*.json ${WORKDIR}/image-json/image.json
- # Keep License up to date
- curl -k -O ${TEZI_EULA_URL}
- EULA_FILE=$(echo "${TEZI_EULA_URL##*/}")
+ if [ -n "$TEZI_EULA_URL" ]; then
+ curl -k --retry 5 -O ${TEZI_EULA_URL} || true
+ fi
+
+ local outfile stdoutfile
+ outfile=${TEZI_IMAGE_NAME}-Tezi_${TEZI_VERSION}.tar
+ stdoutfile=${TEZI_IMAGE_NAME}-Tezi.tar
# The first transform strips all folders from the files to tar, the
# second transform "moves" them in a subfolder ${TEZI_IMAGE_NAME}-Tezi_${TEZI_VERSION}.
${IMAGE_CMD_TAR} \
--transform='s/.*\///' \
--transform 's,^,${TEZI_IMAGE_NAME}-Tezi_${TEZI_VERSION}/,' \
- -chf ${IMGDEPLOYDIR}/${TEZI_IMAGE_NAME}-Tezi_${TEZI_VERSION}.tar \
- toradexlinux.png marketing.tar prepare.sh wrapup.sh ${EULA_FILE} \
+ -chf "${IMGDEPLOYDIR}/${outfile}" \
+ toradexlinux.png marketing.tar prepare.sh wrapup.sh ${TEZI_EULA_FILE} \
${WORKDIR}/image-json/image.json ${TEZI_ARTIFACTS}
+
+ ln -sf "${outfile}" "${IMGDEPLOYDIR}/${stdoutfile}"
}
do_image_teziimg[dirs] += "${WORKDIR}/image-json ${DEPLOY_DIR_IMAGE}"
do_image_teziimg[cleandirs] += "${WORKDIR}/image-json"
do_image_teziimg[prefuncs] += "${TEZI_IMAGE_TEZIIMG_PREFUNCS}"
do_image_teziimg[recrdeptask] += "do_deploy"
do_image_teziimg[vardepsexclude] = "TEZI_VERSION TEZI_DATE"
+do_image_teziimg[network] = "1"
diff --git a/classes/toradex-devicetree.bbclass b/classes/toradex-devicetree.bbclass
index 4deb850..a511c64 100644
--- a/classes/toradex-devicetree.bbclass
+++ b/classes/toradex-devicetree.bbclass
@@ -13,8 +13,8 @@
#
# The devicetree overlays to be deployed
# to ${DEPLOY_DIR_IMAGE}/overlays, if not
-# set, all common and machine related
-# overlays would be deployed.
+# set, all machine related overlays would
+# be deployed.
#
# TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT = "a-overlay.dtbo"
#
@@ -38,18 +38,19 @@ inherit devicetree
S = "${WORKDIR}/git/overlays"
DT_FILES_PATH = "${WORKDIR}/machine-overlays"
+DT_INCLUDE:append = " ${S}"
+KERNEL_DTB_PREFIX ??= ""
+KERNEL_INCLUDE:append = " ${STAGING_KERNEL_DIR}/arch/${ARCH}/boot/dts/${KERNEL_DTB_PREFIX}"
# The machine specific recipes start with MACHINE_PREFIX}[_-]
MACHINE_PREFIX = "${MACHINE}"
-MACHINE_PREFIX_colibri-imx7-emmc = "colibri-imx7"
-MACHINE_PREFIX_apalis-imx8x-v11a = "apalis-imx8x"
-MACHINE_PREFIX_colibri-imx8x-v10b = "colibri-imx8x"
+MACHINE_PREFIX:colibri-imx6ull-emmc = "colibri-imx6ull"
+MACHINE_PREFIX:colibri-imx7-emmc = "colibri-imx7"
do_collect_overlays () {
if [ -z "${TEZI_EXTERNAL_KERNEL_DEVICETREE}" ] ; then
machine_dts=`cd ${S} && ls ${MACHINE_PREFIX}[_-]*.dts 2>/dev/null || true`
- common_dts=`cd ${S} && ls *.dts 2>/dev/null | grep -v -e 'imx[6-8]' -e 'tk1' | xargs || true`
- all_dts="$machine_dts $common_dts"
+ all_dts="$machine_dts"
else
for dtbo in ${TEZI_EXTERNAL_KERNEL_DEVICETREE}; do
dtbo_ext=${dtbo##*.}
@@ -67,7 +68,7 @@ do_collect_overlays[cleandirs] = "${DT_FILES_PATH}"
addtask collect_overlays after do_patch before do_configure
-do_deploy_append () {
+do_deploy:append () {
install -d ${DEPLOYDIR}/overlays
if [ -d ${DEPLOYDIR}/devicetree ]; then
cp ${DEPLOYDIR}/devicetree/* ${DEPLOYDIR}/overlays
diff --git a/classes/toradex-fitimage.bbclass b/classes/toradex-fitimage.bbclass
deleted file mode 100644
index 7d74d63..0000000
--- a/classes/toradex-fitimage.bbclass
+++ /dev/null
@@ -1,149 +0,0 @@
-# Toradex kernel-fitimage.bbclass extension
-#
-# This bbclass extends OE's kernel-fitimage.bbclass by overridding
-# some functions according to Toradex specific requirements.
-#
-# Copyright 2021 (C) Toradex AG
-
-inherit kernel-fitimage
-
-#
-# Override fitimage_assemble in kernel-fitimage.bbclass
-#
-# To support devicetree overlays, we need handle both
-# ${KERNEL_DEVICETREE} and ${EXTERNAL_KERNEL_DEVICETREE} at
-# meanwhile.
-#
-# Assemble fitImage
-#
-# $1 ... .its filename
-# $2 ... fitImage name
-# $3 ... include ramdisk
-fitimage_assemble() {
- kernelcount=1
- dtbcount=""
- DTBS=""
- ramdiskcount=${3}
- setupcount=""
- rm -f ${1} arch/${ARCH}/boot/${2}
-
- fitimage_emit_fit_header ${1}
-
- #
- # Step 1: Prepare a kernel image section.
- #
- fitimage_emit_section_maint ${1} imagestart
-
- uboot_prep_kimage
- fitimage_emit_section_kernel ${1} "${kernelcount}" linux.bin "${linux_comp}"
-
- #
- # Step 2: Prepare a DTB image section
- #
-
- if [ -n "${KERNEL_DEVICETREE}" ]; then
- dtbcount=1
- for DTB in ${KERNEL_DEVICETREE}; do
- if echo ${DTB} | grep -q '/dts/'; then
- bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
- DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
- fi
- DTB_PATH="arch/${ARCH}/boot/dts/${DTB}"
- if [ ! -e "${DTB_PATH}" ]; then
- DTB_PATH="arch/${ARCH}/boot/${DTB}"
- fi
-
- DTB=$(echo "$(basename ${DTB})" | tr '/' '_')
- DTBS="${DTBS} ${DTB}"
- fitimage_emit_section_dtb ${1} ${DTB} ${DTB_PATH}
- done
- fi
-
- if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ]; then
- dtbcount=1
- for DTB in $(find "${EXTERNAL_KERNEL_DEVICETREE}" \( -name '*.dtb' -o -name '*.dtbo' \) -printf '%P\n' | sort); do
- DTB=$(echo "${DTB}" | tr '/' '_')
- DTBS="${DTBS} ${DTB}"
- fitimage_emit_section_dtb ${1} ${DTB} "${EXTERNAL_KERNEL_DEVICETREE}/${DTB}"
- done
- fi
-
- #
- # Step 3: Prepare a setup section. (For x86)
- #
- if [ -e arch/${ARCH}/boot/setup.bin ]; then
- setupcount=1
- fitimage_emit_section_setup ${1} "${setupcount}" arch/${ARCH}/boot/setup.bin
- fi
-
- #
- # Step 4: Prepare a ramdisk section.
- #
- if [ "x${ramdiskcount}" = "x1" ] ; then
- # Find and use the first initramfs image archive type we find
- for img in cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.gz ext2.gz cpio; do
- initramfs_path="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.${img}"
- echo "Using $initramfs_path"
- if [ -e "${initramfs_path}" ]; then
- fitimage_emit_section_ramdisk ${1} "${ramdiskcount}" "${initramfs_path}"
- break
- fi
- done
- fi
-
- fitimage_emit_section_maint ${1} sectend
-
- # Force the first Kernel and DTB in the default config
- kernelcount=1
- if [ -n "${dtbcount}" ]; then
- dtbcount=1
- fi
-
- #
- # Step 5: Prepare a configurations section
- #
- fitimage_emit_section_maint ${1} confstart
-
- if [ -n "${DTBS}" ]; then
- i=1
- for DTB in ${DTBS}; do
- dtb_ext=${DTB##*.}
- if [ "${dtb_ext}" = "dtbo" ]; then
- fitimage_emit_section_config ${1} "" "${DTB}" "" "" "`expr ${i} = ${dtbcount}`"
- else
- fitimage_emit_section_config ${1} "${kernelcount}" "${DTB}" "${ramdiskcount}" "${setupcount}" "`expr ${i} = ${dtbcount}`"
- fi
- i=`expr ${i} + 1`
- done
- fi
-
- fitimage_emit_section_maint ${1} sectend
-
- fitimage_emit_section_maint ${1} fitend
-
- #
- # Step 6: Assemble the image
- #
- uboot-mkimage \
- ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
- -f ${1} \
- arch/${ARCH}/boot/${2}
-
- #
- # Step 7: Sign the image and add public key to U-Boot dtb
- #
- if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
- add_key_to_u_boot=""
- if [ -n "${UBOOT_DTB_BINARY}" ]; then
- # The u-boot.dtb is a symlink to UBOOT_DTB_IMAGE, so we need copy
- # both of them, and don't dereference the symlink.
- cp -P ${STAGING_DATADIR}/u-boot*.dtb ${B}
- add_key_to_u_boot="-K ${B}/${UBOOT_DTB_BINARY}"
- fi
- uboot-mkimage \
- ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
- -F -k "${UBOOT_SIGN_KEYDIR}" \
- $add_key_to_u_boot \
- -r arch/${ARCH}/boot/${2}
- fi
-}
diff --git a/classes/toradex-kernel-config.bbclass b/classes/toradex-kernel-config.bbclass
index 8c3ad71..4b7aa13 100644
--- a/classes/toradex-kernel-config.bbclass
+++ b/classes/toradex-kernel-config.bbclass
@@ -1,17 +1,26 @@
-# Assign a config variable in ${B}/.config.
-# Should be called in do_configure_append only.
-#
+# Assign/change a config variable
# $1 - config variable to be set
# $2 - value [n/y/value]
+# $3 - config file
#
-kernel_configure_variable() {
+kconfig_configure_variable() {
# Remove the original config, to avoid reassigning it.
- sed -i -e "/CONFIG_$1[ =]/d" ${B}/.config
+ sed -i -e "/CONFIG_$1[ =]/d" $3
# Assign the config value
if [ "$2" = "n" ]; then
- echo "# CONFIG_$1 is not set" >> ${B}/.config
+ echo "# CONFIG_$1 is not set" >> $3
else
- echo "CONFIG_$1=$2" >> ${B}/.config
+ echo "CONFIG_$1=$2" >> $3
fi
}
+
+# Assign a config variable in ${B}/.config.
+# Should be called in do_configure:append only.
+#
+# $1 - config variable to be set
+# $2 - value [n/y/value]
+#
+kernel_configure_variable() {
+ kconfig_configure_variable $1 $2 ${B}/.config
+}
diff --git a/classes/toradex-kernel-deploy-config.bbclass b/classes/toradex-kernel-deploy-config.bbclass
new file mode 100644
index 0000000..644c731
--- /dev/null
+++ b/classes/toradex-kernel-deploy-config.bbclass
@@ -0,0 +1,8 @@
+# This deploys the actual used kernel .config file as kernel-config
+
+KERNEL_CONFIG_NAME ?= "${KERNEL_PACKAGE_NAME}-config-${KERNEL_ARTIFACT_NAME}"
+KERNEL_CONFIG_LINK_NAME ?= "${KERNEL_PACKAGE_NAME}-config"
+do_deploy:append() {
+ cp -a ${B}/.config ${DEPLOYDIR}/${KERNEL_CONFIG_NAME}
+ ln -sf ${KERNEL_CONFIG_NAME} ${DEPLOYDIR}/${KERNEL_CONFIG_LINK_NAME}
+}
diff --git a/classes/toradex-kernel-localversion.bbclass b/classes/toradex-kernel-localversion.bbclass
index 319ba96..d17dcd5 100644
--- a/classes/toradex-kernel-localversion.bbclass
+++ b/classes/toradex-kernel-localversion.bbclass
@@ -4,8 +4,8 @@
#
# The following options are supported:
#
-# SCMVERSION Puts the Git hash in kernel local version
-# LOCALVERSION Value used in LOCALVERSION
+# SCMVERSION Puts the Git hash in kernel local version
+# KERNEL_LOCALVERSION Value used in LOCALVERSION by the oe kernel classes
#
# Copyright 2014, 2015 (C) O.S. Systems Software LTDA.
# Copyright 2019 (C) Toradex AG
@@ -14,11 +14,12 @@ inherit toradex-kernel-config
TDX_VERSION ??= "0"
SCMVERSION ??= "y"
-LOCALVERSION ?= "-${TDX_VERSION}"
-
-kernel_do_configure_append() {
- kernel_configure_variable LOCALVERSION "\"${LOCALVERSION}\""
+KERNEL_LOCALVERSION ?= "-${TDX_VERSION}"
+# mute the meta-freescale/classes/fsl-kernel-localversion setting, otherwise
+# with latest master we get -${TDX_VERSION} twice in the resulting version.
+LINUX_VERSION_EXTENSION = ""
+kernel_do_configure:append() {
if [ "${SCMVERSION}" = "y" ]; then
# Add GIT revision to the local version
# SRCREV_machine is used in kernel recipes using kernel-yocto.bbclass,
diff --git a/classes/toradex-sanity.bbclass b/classes/toradex-sanity.bbclass
new file mode 100644
index 0000000..bfb95f3
--- /dev/null
+++ b/classes/toradex-sanity.bbclass
@@ -0,0 +1,65 @@
+# Sanity check the Toradex setup for common misconfigurations
+
+TORADEX_SANITY_ABIFILE ?= "${DEPLOY_DIR}/abi_version"
+
+#
+# Check the 'ABI' of DEPLOY_DIR
+#
+def toradex_check_abichanges(status, d):
+ current_abi = d.getVar('OELAYOUT_ABI')
+ abifile = d.getVar('TORADEX_SANITY_ABIFILE')
+ if os.path.exists(abifile):
+ with open(abifile, "r") as f:
+ abi = f.read().strip()
+ if not abi.isdigit():
+ with open(abifile, "w") as f:
+ f.write(current_abi)
+ elif (abi != current_abi):
+ # Code to convert from one ABI to another could go here if possible.
+ status.addresult("Error, DEPLOY_DIR has changed its layout version number (%s to %s) and you need to either rebuild, revert or adjust it at your own risk.\n" % (abi, current_abi))
+ else:
+ bb.utils.mkdirhier(os.path.dirname(abifile))
+ with open(abifile, "w") as f:
+ f.write(current_abi)
+
+def toradex_raise_sanity_error(msg, d):
+ if d.getVar("SANITY_USE_EVENTS") == "1":
+ bb.event.fire(bb.event.SanityCheckFailed(msg), d)
+ return
+
+ bb.fatal("Toradex' config sanity checker detected a potential misconfiguration.\n"
+ "Please fix the cause of this error then you can continue to build.\n"
+ "Following is the list of potential problems / advisories:\n"
+ "\n%s" % msg)
+
+def toradex_check_sanity(sanity_data):
+ class SanityStatus(object):
+ def __init__(self):
+ self.messages = ""
+ self.reparse = False
+
+ def addresult(self, message):
+ if message:
+ self.messages = self.messages + message
+
+ status = SanityStatus()
+
+ toradex_check_abichanges(status, sanity_data)
+
+ if status.messages != "":
+ toradex_raise_sanity_error(sanity_data.expand(status.messages), sanity_data)
+
+addhandler toradex_check_sanity_eventhandler
+toradex_check_sanity_eventhandler[eventmask] = "bb.event.SanityCheck"
+
+python toradex_check_sanity_eventhandler() {
+ if bb.event.getName(e) == "SanityCheck":
+ sanity_data = bb.data.createCopy(e.data)
+ if e.generateevents:
+ sanity_data.setVar("SANITY_USE_EVENTS", "1")
+ reparse = toradex_check_sanity(sanity_data)
+ e.data.setVar("BB_INVALIDCONF", reparse)
+ bb.event.fire(bb.event.SanityCheckPassed(), e.data)
+
+ return
+}
diff --git a/classes/toradex-u-boot-localversion.bbclass b/classes/toradex-u-boot-localversion.bbclass
index 3ad86db..844cb0e 100644
--- a/classes/toradex-u-boot-localversion.bbclass
+++ b/classes/toradex-u-boot-localversion.bbclass
@@ -17,7 +17,7 @@ LOCALVERSION ??= "-${TDX_VERSION}"
UBOOT_LOCALVERSION = "${LOCALVERSION}"
-do_compile_prepend() {
+do_compile:prepend() {
if [ "${SCMVERSION}" = "y" ]; then
head=`cd ${S} ; git rev-parse --verify --short=12 HEAD 2> /dev/null`
printf "%s+git.%s" "${UBOOT_LOCALVERSION}" $head > ${S}/.scmversion
diff --git a/conf/layer.conf b/conf/layer.conf
index b3b323b..80230e5 100644
--- a/conf/layer.conf
+++ b/conf/layer.conf
@@ -17,6 +17,6 @@ BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bb' % layer \
for layer in BBFILE_COLLECTIONS.split())}"
LAYERDEPENDS_toradex-bsp-common-layer = "core"
-LAYERSERIES_COMPAT_toradex-bsp-common-layer = "gatesgarth hardknott"
+LAYERSERIES_COMPAT_toradex-bsp-common-layer = "nanbield scarthgap"
BB_DANGLINGAPPENDS_WARNONLY = "true"
diff --git a/recipes-bsp/btnxpuartconf/btnxpuartconf/btnxpuart.conf b/recipes-bsp/btnxpuartconf/btnxpuartconf/btnxpuart.conf
new file mode 100644
index 0000000..41ff853
--- /dev/null
+++ b/recipes-bsp/btnxpuartconf/btnxpuartconf/btnxpuart.conf
@@ -0,0 +1 @@
+install btnxpuart /sbin/modprobe mwifiex_sdio; sleep 1; /sbin/modprobe --ignore-install btnxpuart
diff --git a/recipes-bsp/btnxpuartconf/btnxpuartconf_1.0.bb b/recipes-bsp/btnxpuartconf/btnxpuartconf_1.0.bb
new file mode 100644
index 0000000..c5f9adf
--- /dev/null
+++ b/recipes-bsp/btnxpuartconf/btnxpuartconf_1.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Bluetooth NXP UART (btnxpuart) Configuration"
+
+DESCRIPTION = "As the power-down pin (PD#) is shared and handled by \
+mmc-pwrseq for mwifiex_sdio, make sure mwifiex gets loaded first."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://btnxpuart.conf"
+
+do_install () {
+ install -d ${D}/etc/modprobe.d/
+ install -m 0755 ${WORKDIR}/btnxpuart.conf ${D}/etc/modprobe.d/btnxpuart.conf
+}
diff --git a/recipes-bsp/gpio-export/files/COPYING b/recipes-bsp/gpio-export/files/COPYING
deleted file mode 100644
index 040e990..0000000
--- a/recipes-bsp/gpio-export/files/COPYING
+++ /dev/null
@@ -1,5 +0,0 @@
-This piece is software is provided by Toradex AG as sample code.
-There is no warranty for the program.
-Toradex AG put this program in public domain, uncopyrighted.
-
-Renens, Swizterland, 2008-10-23
diff --git a/recipes-bsp/gpio-export/files/apalis-imx6/gpio-export.sh b/recipes-bsp/gpio-export/files/apalis-imx6/gpio-export.sh
deleted file mode 100644
index ec259a6..0000000
--- a/recipes-bsp/gpio-export/files/apalis-imx6/gpio-export.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-#export gpios to userspace
-
-case "$1" in
- start)
- CTRL=/sys/class/gpio/export
- ;;
-
- stop)
- CTRL=/sys/class/gpio/unexport
- ;;
-
- *)
- echo "usage: '$0 start' '$0 stop'"
- exit 1
- ;;
-esac
-
-#Apalis GPIO - i.MX6 Ball name - GPIO#
-
-#GPIO1 NAND_DATA04 36
-#used by OV5640 kernel module
-#echo 36 > $CTRL
-#cat /sys/class/gpio/gpio36/value
-#echo low > /sys/class/gpio/gpio36/direction
-#echo 1 > /sys/class/gpio/gpio36/value
-
-#GPIO2 NAND_DATA05 37
-#used by OV5640 kernel module
-#echo 37 > $CTRL
-
-#GPIO3 NAND_DATA06 38
-echo 38 > $CTRL
-
-#GPIO4 NAND_DATA07 39
-echo 39 > $CTRL
-
-#GPIO5 NAND_READY 170
-#used by optional fusion_F0710A kernel module
-#echo 170 > $CTRL
-
-#GPIO6 NAND_WP_B 169
-#used by optional fusion_F0710A kernel module
-#echo 169 > $CTRL
-
-#GPIO7 GPIO02 2
-#used by PCIe for reset of switch on the Apalis Evaluation Board
-#echo 2 > $CTRL
-
-#GPIO8 GPIO06 6
-echo 6 > $CTRL
diff --git a/recipes-bsp/gpio-export/files/gpio-export.service b/recipes-bsp/gpio-export/files/gpio-export.service
deleted file mode 100644
index 2dba716..0000000
--- a/recipes-bsp/gpio-export/files/gpio-export.service
+++ /dev/null
@@ -1,12 +0,0 @@
-[Unit]
-Description=Export GPIOs to user space
-DefaultDependencies=no
-
-[Service]
-Type=oneshot
-RemainAfterExit=yes
-ExecStart=/usr/bin/gpio-export.sh start
-ExecStop=/usr/bin/gpio-export.sh stop
-
-[Install]
-WantedBy=basic.target
diff --git a/recipes-bsp/gpio-export/files/gpio-export.sh b/recipes-bsp/gpio-export/files/gpio-export.sh
deleted file mode 100644
index 6a477c6..0000000
--- a/recipes-bsp/gpio-export/files/gpio-export.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-#empty placeholder for machines not using that feature
-
-:
diff --git a/recipes-bsp/gpio-export/gpio-export_1.0.bb b/recipes-bsp/gpio-export/gpio-export_1.0.bb
deleted file mode 100644
index 392382a..0000000
--- a/recipes-bsp/gpio-export/gpio-export_1.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "Scripts and systemd service file to export unused GPIO to Userspace"
-LICENSE = "PD"
-PR = "r2"
-
-inherit systemd
-
-SRC_URI = " \
- file://gpio-export.sh \
- file://gpio-export.service \
- file://COPYING \
-"
-
-LIC_FILES_CHKSUM = "file://${WORKDIR}/COPYING;md5=1c3a7fb45253c11c74434676d84fe7dd"
-
-do_install () {
- install -d ${D}/${bindir}
- install -m 0755 ${WORKDIR}/*.sh ${D}/${bindir}
-
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/gpio-export.service ${D}${systemd_unitdir}/system
-}
-
-SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE_${PN} = "gpio-export.service"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/recipes-bsp/mwifiexap/mwifiexap_1.0.bb b/recipes-bsp/mwifiexap/mwifiexap_1.0.bb
deleted file mode 100644
index 43bb386..0000000
--- a/recipes-bsp/mwifiexap/mwifiexap_1.0.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "MWiFiEx AP mode"
-DESCRIPTION = "Currently wifi chip fw \
-doesn't support mode changes, this creates\
-multiple interfaces on boot"
-
-inherit systemd
-
-LICENSE = "CLOSED"
-
-SRC_URI = "file://mwifiex.conf \
- "
-
-do_install () {
- install -d ${D}/etc/modprobe.d/
- install -m 0755 ${WORKDIR}/mwifiex.conf ${D}/etc/modprobe.d/mwifiex.conf
-}
-
diff --git a/recipes-bsp/mwifiexap/mwifiexap/mwifiex.conf b/recipes-bsp/mwifiexconf/mwifiexconf/mwifiex.conf
index ccbeae4..ccbeae4 100644
--- a/recipes-bsp/mwifiexap/mwifiexap/mwifiex.conf
+++ b/recipes-bsp/mwifiexconf/mwifiexconf/mwifiex.conf
diff --git a/recipes-bsp/mwifiexconf/mwifiexconf/verdin-am62/mwifiex.conf b/recipes-bsp/mwifiexconf/mwifiexconf/verdin-am62/mwifiex.conf
new file mode 100644
index 0000000..7413f0e
--- /dev/null
+++ b/recipes-bsp/mwifiexconf/mwifiexconf/verdin-am62/mwifiex.conf
@@ -0,0 +1 @@
+options mwifiex disable_auto_ds=1 driver_mode=0x3
diff --git a/recipes-bsp/mwifiexconf/mwifiexconf_1.0.bb b/recipes-bsp/mwifiexconf/mwifiexconf_1.0.bb
new file mode 100644
index 0000000..303e5a6
--- /dev/null
+++ b/recipes-bsp/mwifiexconf/mwifiexconf_1.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Marvell WiFi Extensions (mwifiex) Configuration"
+DESCRIPTION = "AP mode: Currently wifi chip fw doesn't support mode \
+changes, this creates multiple interfaces on boot; \
+Power saving disable: Currently IW416 on Verdin AM62 is not stable \
+with power saving enabled, so disable it."
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+# For backwards compatibility
+PROVIDES += "mwifiexap"
+RREPLACES:${PN} = "mwifiexap"
+RPROVIDES:${PN} = "mwifiexap"
+RCONFLICTS:${PN} = "mwifiexap"
+
+SRC_URI = "file://mwifiex.conf"
+
+do_install () {
+ install -d ${D}/etc/modprobe.d/
+ install -m 0755 ${WORKDIR}/mwifiex.conf ${D}/etc/modprobe.d/mwifiex.conf
+}
diff --git a/recipes-bsp/tezi-metadata/files/LA_OPT_NXP_SW.html b/recipes-bsp/tezi-metadata/files/LA_OPT_NXP_SW.html
new file mode 100644
index 0000000..b49bc72
--- /dev/null
+++ b/recipes-bsp/tezi-metadata/files/LA_OPT_NXP_SW.html
@@ -0,0 +1,168 @@
+<p class="MsoNormal" style="margin: 0in 0in 14.2pt; line-height: 11.25pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span class="SpellE"><span style="font-size: 10pt;">LA_OPT_NXP_Software_License</span></span><span style="font-size: 10pt;">&nbsp;v20 March 2021&nbsp;</span></p>
+<p class="MsoNormal" style="margin: 0in; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;"><a name="_Hlk522799761"></a><a name="_Hlk522800910"></a><a name="_Hlk522802608"></a><strong>IMPORTANT. &nbsp;Read the following NXP Software License Agreement ("Agreement") completely. By selecting the "I Accept" button at the end of this page,&nbsp;</strong><strong>or by downloading, installing, or using the Licensed Software,&nbsp;</strong><strong>you indicate that you accept the terms of the Agreement and you&nbsp;</strong><strong>acknowledge that you have the authority, for yourself or on behalf of your company, to bind your company to these terms. You may then download or install the file.&nbsp;</strong><tt style="font-family: 'Courier New';"><strong><span style="font-family: Calibri, sans-serif;">In the event of a conflict between the terms of this Agreement and any license terms and conditions for&nbsp;</span></strong></tt><strong>NXP's proprietary software<tt style="font-family: 'Courier New';"><span style="font-family: Calibri, sans-serif;">&nbsp;embedded anywhere in the Licensed Software file, the terms of this Agreement shall control.&nbsp; If a separate license agreement for the Licensed Software has been signed by you and NXP, then that agreement shall govern your use of the Licensed Software and shall supersede this Agreement.</span></tt></strong><tt style="font-family: 'Courier New';"></tt></p>
+<p class="MsoNormal" style="margin: 0in; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif; text-align: center;" align="center"><span style="text-decoration: underline;">NXP SOFTWARE LICENSE AGREEMENT</span></p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;"><a name="_Hlk522802629"></a>This is a legal agreement between&nbsp;<a name="_Hlk522800939"></a>your employer, of which you are an authorized representative, or, if you have no employer, you as an individual&nbsp;("you" or "Licensee"), and NXP B.V. ("NXP").&nbsp; It concerns your rights to use the software provided to you in binary or source code form and any accompanying written materials (the "Licensed Software"). The Licensed Software may include any updates or error corrections or documentation relating to the Licensed Software provided to you by NXP under this Agreement. In consideration for NXP allowing you to access the Licensed Software, you are agreeing to be bound by the terms of this Agreement. If you do not agree to all of the terms of this Agreement, do not download or install the Licensed Software. If you change your mind later, stop using the Licensed Software and delete all copies of the Licensed Software in your possession or control. Any copies of the Licensed Software that you have already distributed, where permitted, and do not destroy will continue to be governed by this Agreement. Your prior use will also continue to be governed by this Agreement.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">DEFINITIONS</span></p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Affiliate" means, with respect to a party, any corporation or other legal entity that now or hereafter Controls, is Controlled by or is under common Control with such party; where "Control" means the direct or indirect ownership of greater than fifty percent (50%) of the shares or similar interests entitled to vote for the election of directors or other persons performing similar functions. An entity is considered an Affiliate only so long as such Control exists.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Authorized System" means either (<span class="SpellE">i</span>) Licensee's hardware product which incorporates an NXP Product or (ii) Licensee's software program which is used exclusively in connection with an NXP Product and with which the Licensed Software will be integrated.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Derivative Work" means a work based upon one or more pre-existing works.&nbsp;&nbsp;A work consisting of editorial revisions, annotations, elaborations, or other modifications which, as a whole, represent an original work of authorship, is a Derivative Work.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Intellectual Property Rights" means any and all rights under statute, common law or equity in and&nbsp;under copyrights, trade secrets, and patents (including utility models), and analogous rights throughout the world,&nbsp;including any applications for and the right to apply for, any of the foregoing.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"NXP Product" means&nbsp;a hardware product (<span class="GramE">e.g.</span>&nbsp;a microprocessor, microcontroller, sensor or digital signal processor) supplied directly or indirectly from NXP or an NXP Affiliate, unless there is a product specified in the Software Content Register, in which case this definition is limited to such product.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Software Content Register" means the documentation which may accompany the Licensed Software which identifies the contents of the Licensed Software, including but not limited to identification of any&nbsp;<span class="GramE">Third Party</span>&nbsp;Software, if any, and may also contain other related information as whether the license in 2.3 is applicable.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">1.7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Third Party Software" means, any software included in the Licensed Software that is not&nbsp;<a name="_Hlk520188745"></a>NXP proprietary software, and is not&nbsp;<span class="GramE">open source</span>&nbsp;software, and to which different license terms may apply.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">LICENSE GRANT</span>.&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10.2pt; line-height: 16.1333px; font-size: 11pt; font-family: Calibri, sans-serif;">2.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If you are not expressly granted the distribution license in Section 2.3 in the Software Content Register, then you are only granted the rights in Section 2.2 and not in 2.3.&nbsp;&nbsp;If you are expressly granted the distribution license in Section 2.3 in the Software Content Register, then you are granted the rights in both Section 2.2 and 2.3.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">2.2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Standard License.&nbsp;&nbsp;Subject to the terms and conditions of this Agreement, NXP grants you a worldwide, personal, non-transferable, non-exclusive, non-sublicensable license,&nbsp;<a name="_Hlk520197097"></a>solely for the development of an Authorized System:</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt 1in; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif; text-indent: -0.5in;">(a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to use and reproduce the Licensed Software (and its Derivative Works prepared under the license in Section 2.2(b))&nbsp;solely in combination with a NXP Product; and</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt 1in; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif; text-indent: -0.5in;">(b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for Licensed Software provided to you in source code form (human readable), to prepare Derivative Works of the Licensed Software&nbsp;solely for use in combination with a NXP Product.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">You may not distribute or sublicense the Licensed Software to others under the license granted in this Section 2.2.&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10.2pt; line-height: 16.1333px; font-size: 11pt; font-family: Calibri, sans-serif;">2.3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Additional Distribution License.&nbsp;&nbsp;If expressly authorized in the Software Content Register, subject to the terms and conditions of this Agreement,&nbsp;NXP grants you a worldwide, personal, non-transferable, non-exclusive, non-sublicensable license&nbsp;solely&nbsp;in connection with your manufacturing and distribution of an Authorized System:</p>
+<p class="MsoNormal" style="margin: 0in 0in 0.5pt 1in; line-height: 16.1333px; font-size: 11pt; font-family: Calibri, sans-serif; text-indent: -0.5in;"><span style="border: 1pt none windowtext; padding: 0in;">(a)<span style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>to manufacture (or have manufactured), distribute, and market the Licensed Software (and its Derivative Works prepared under the license in 2.2(b)) in object code (machine readable format) only as part of, or embedded within, Authorized Systems and not on a standalone basis&nbsp;solely for use in combination with a NXP Product.&nbsp;&nbsp;Notwithstanding the foregoing, those files marked as .h files ("Header files") may be distributed in source or object code form, but only as part of, or embedded within Authorized Systems; and&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 12pt 1in; line-height: 16.1333px; font-size: 11pt; font-family: Calibri, sans-serif; text-indent: -0.5in;"><span style="border: 1pt none windowtext; padding: 0in;">(b)<span style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>to copy and distribute as needed, solely in connection with an Authorized System&nbsp;and for use in combination with a NXP Product, non-confidential NXP information provided as part of the Licensed Software for the purpose of maintaining and supporting Authorized Systems with which the Licensed Software is integrated.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">2.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Separate license grants to Third Party Software, or other terms applicable to the Licensed Software if different from those granted in this Section 2, are contained in Appendix A. The Licensed Software may be accompanied by a Software Content Register which will identify that portion of the Licensed Software, if any, that is subject to the different terms in Appendix A.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">2.5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You may use subcontractors on your premises to exercise your rights under Section 2.2 and Section 2.3, if any, so long as you have an agreement in place with the subcontractor containing confidentiality restrictions no less stringent than those contained in this Agreement. You will remain liable for your subcontractors' adherence to the terms of this Agreement and for any and all acts and omissions of such subcontractors with respect to this Agreement and the Licensed Software.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">LICENSE&nbsp;LIMITATIONS AND RESTRICTIONS</span>.&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The licenses granted above in Section 2 only extend to NXP Intellectual Property Rights that would be infringed by the unmodified Licensed Software prior to your preparation of any Derivative Work.&nbsp;&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The Licensed Software is licensed to you, not sold. Title to Licensed Software delivered hereunder remains vested in NXP or NXP's licensor and cannot be assigned or transferred. You are expressly forbidden from selling or otherwise distributing the Licensed Software, or any portion thereof, except as expressly permitted herein. This Agreement does not grant to you any implied rights under any NXP or&nbsp;<span class="GramE">third party</span>&nbsp;Intellectual Property Rights.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You may not translate, reverse engineer, decompile, or disassemble the Licensed Software except to the extent applicable law specifically prohibits such restriction. You must prohibit your subcontractors or customers (if distribution is permitted) from translating, reverse engineering, decompiling, or disassembling the Licensed Software except to the extent applicable law specifically prohibits such restriction.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You must reproduce any and all of NXP's (or its third-party licensor's) copyright notices and other proprietary legends on copies of Licensed Software.&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If you distribute the Licensed Software to the United States Government, then the Licensed Software is "restricted computer software" and is subject to FAR 52.227-19.&nbsp;&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You grant to NXP a non-exclusive, non-transferable, irrevocable, perpetual, worldwide, royalty-free, sub-licensable license under your Intellectual Property Rights to use without restriction and for any purpose any suggestion, comment or other feedback related to the Licensed Software (including, but not limited to, error corrections and bug fixes).</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You will not take or fail to take any action that could subject the Licensed Software to an Excluded License. An Excluded License means any license that requires, as a condition of use, modification or distribution of software subject to the Excluded License, that such software or other software combined and/or distributed with the software be (<span class="SpellE">i</span>) disclosed or distributed in source code form; (ii) licensed for the purpose of making Derivative Works; or (iii) redistributable at no charge.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">3.8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You may not publish or distribute reports associated with the use of the Licensed Software to anyone other than NXP.&nbsp;&nbsp;You may advise NXP of any results obtained from your use of the Licensed Software, including any problems or suggested improvements thereof, and NXP retains the right to use such results and related information in any manner it deems appropriate.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">4<a name="_Hlk522796075"></a>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a name="_Hlk522799572"></a><a name="_Hlk522800824"></a><a name="_Hlk522799883"></a><a name="_Hlk522795826"></a><span style="text-decoration: underline;">OPEN SOURCE</span>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="GramE">Open source</span>&nbsp;software included in the Licensed Software is not licensed under the terms of this Agreement but is instead licensed under the terms of the applicable open source license(s), such as the BSD License, Apache License or the GNU Lesser General Public License. Your use of the&nbsp;<span class="GramE">open source</span>&nbsp;software is subject to the terms of each applicable license. You must agree to the terms of each applicable license, or you cannot use the&nbsp;<span class="GramE">open source</span>&nbsp;software.&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">INTELLECTUAL PROPERTY RIGHTS</span>. &nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">Upon request, you must provide NXP the source code of any derivative of the Licensed Software.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">Unless prohibited by law, the following paragraph shall apply.&nbsp;&nbsp;Your modifications to the Licensed Software, and all intellectual property rights associated with, and title thereto, will be the property of NXP.&nbsp;&nbsp;You agree to assign all, and hereby do assign all rights, title, and interest to any such modifications to the Licensed Software to NXP and agree to provide all assistance reasonably requested by NXP to establish, preserve or enforce such right.&nbsp;&nbsp;Further, you agree to waive all moral rights relating to your modifications to the Licensed Software, including, without limitation, all rights of identification of authorship and all rights of approval, restriction, or limitation on use or subsequent modification.&nbsp;&nbsp;Notwithstanding the foregoing, you will have the license rights granted in Section 2 hereto to any such modifications made by you or your licensees.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">Otherwise, you agree to grant an irrevocable, worldwide, and perpetual license to NXP to make, have made, use, sell, offer to sell, import, commercialize, sublicense and reproduce your modifications or derivative works to the Licensed Software without any payment to Licensee. You agree to provide all assistance reasonably requested by NXP to establish, preserve or enforce such right.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">ESSENTIAL PATENTS</span>.&nbsp; &nbsp;&nbsp;<a name="_Hlk522804634"></a>NXP has no obligation to identify or obtain any license to any Intellectual Property Right of a third-party that may be necessary for use in connection with technology that is incorporated into the Authorized System (whether or not as part of the Licensed Software).</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">TERM AND TERMINATION</span>.&nbsp;&nbsp; This Agreement will remain in effect unless terminated as provided in this Section.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">7.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You may terminate this Agreement immediately upon written notice to NXP at the address provided below.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">7.2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Either party may terminate this Agreement if the other party is in default of any of the terms and conditions of this Agreement, and termination is effective if the defaulting party fails to correct such default within 30 days after written notice thereof by the non-defaulting party to the defaulting party at the address below.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">7.3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Notwithstanding the foregoing, NXP may terminate this Agreement immediately upon written notice if you: breach any of your confidentiality obligations or the license restrictions under this Agreement; &nbsp;become bankrupt, insolvent, or file a petition for bankruptcy or insolvency; make an assignment for the benefit of its creditors; enter proceedings for winding up or dissolution; are dissolved; or are nationalized or become subject to the expropriation of all or substantially all of your business or assets.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">7.4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Upon termination of this Agreement, all licenses granted under Section 2 will expire.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">7.5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; After termination of this Agreement by either party&nbsp;&nbsp;&nbsp;you will destroy all parts of Licensed Software and its Derivative Works (if any) and will provide to NXP a statement certifying the same.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">7.6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Notwithstanding the termination of this Agreement for any reason, the terms of Sections 1 and 3 through 24 will survive.&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">8. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">SUPPORT</span>.&nbsp; NXP is not obligated to provide any support, upgrades or new releases of the Licensed Software under this Agreement. If you wish, you may contact NXP and report problems and provide suggestions regarding the Licensed Software. NXP has no obligation to respond to such a problem report or suggestion. NXP may make changes to the Licensed Software at any time, without any obligation to notify or provide updated versions of the Licensed Software to you.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">9.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">NO WARRANTY</span>.&nbsp; To the maximum extent permitted by law, NXP expressly disclaims any warranty for the Licensed Software. The Licensed Software is provided "AS IS", without warranty of any kind, either express or implied, including without limitation the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. You assume the entire risk arising out of the use or performance of the licensed software, or any systems you design using the licensed software (if any).</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">10. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">INDEMNITY</span>. You agree to fully defend and indemnify NXP from all claims, liabilities, and costs (including reasonable attorney's fees) related to (1) your use (including your subcontractor's or&nbsp;<span class="SpellE">distributee's</span>&nbsp;use, if permitted) of the Licensed Software or (2) your violation of the terms and conditions of this Agreement.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">11. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">LIMITATION OF LIABILITY</span>.&nbsp; EXCLUDING LIABILITY FOR A BREACH OF SECTION&nbsp;2 (LICENSE GRANTS), SECTION 3 (LICENSE&nbsp;LIMITATIONS AND RESTRICTIONS), SECTION 16 (CONFIDENTIAL INFORMATION), OR CLAIMS UNDER SECTION 10 (INDEMNITY), IN NO EVENT WILL EITHER PARTY BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR ANY INCIDENTAL, SPECIAL, INDIRECT, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR ANY LOSS OF USE, LOSS OF TIME, INCONVENIENCE, COMMERCIAL LOSS, OR LOST PROFITS, SAVINGS, OR REVENUES, TO THE FULL EXTENT SUCH MAY BE DISCLAIMED BY LAW. NXP'S TOTAL LIABILITY FOR ALL COSTS, DAMAGES, CLAIMS, OR LOSSES WHATSOEVER ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT OR PRODUCT(S) SUPPLIED UNDER THIS AGREEMENT IS LIMITED TO THE AGGREGATE AMOUNT PAID BY YOU TO NXP IN CONNECTION WITH THE LICENSED SOFTWARE PROVIDED UNDER THIS AGREEMENT TO WHICH LOSSES OR DAMAGES ARE CLAIMED.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">12. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">EXPORT COMPLIANCE</span>. Each party shall comply with all applicable export and import control laws and regulations including but not limited to the US Export Administration Regulation (including restrictions on certain military end uses and military end users as specified in Section 15 C.F.R. &sect; 744.21 and prohibited party lists issued by other federal governments), Catch-all regulations and all national and international embargoes. Each party further agrees that it will not knowingly transfer, divert, export or re-export, directly or indirectly, any product, software, including software source code, or technology restricted by such regulations or by other applicable national regulations, received from the other party under this Agreement, or any direct product of such software or technical data to any person, firm, entity, country or destination to which such transfer, diversion, export or re-export is restricted or prohibited, without obtaining prior written authorization from the applicable competent government authorities to the extent required by those laws.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">13.&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">GOVERNMENT CONTRACT COMPLIANCE</span></p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">13.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If you sell Authorized Systems directly to any government or public entity, including U.S., state, local, foreign or international governments or public entities, or indirectly via a prime contractor or subcontractor of such governments or entities, NXP makes no representations, certifications, or warranties whatsoever about compliance with government or public entity acquisition statutes or regulations, including, without limitation, statutes or regulations that may relate to pricing, quality, origin or content.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">13.2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The Licensed Software has been developed at private expense and is a "Commercial Item" as defined in 48 C.F.R. Section 2.101, consisting of "Commercial Computer Software", and/or "Commercial Computer Software Documentation," as such terms are used in 48 C.F.R. Section 12.212 (or 48 C.F.R. Section 227.7202, as applicable) and may only be licensed to or shared with U.S. Government end users in object code form as part of, or embedded within, Authorized Systems. Any agreement pursuant to which you share the Licensed Software will include a provision that reiterates the limitations of this document and requires all sub-agreements to similarly contain such limitations.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">14. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">CRITICAL APPLICATIONS</span>.&nbsp;&nbsp;<a name="_Hlk522804770"></a>In some cases, NXP may promote certain software for use in the development of, or for incorporation into, products or services (a) used in applications requiring fail-safe performance or (b) in which failure could lead to death, personal injury, or severe physical or environmental damage (these products and services are referred to as "Critical Applications"). NXP's goal is to educate customers so that they can design their own end-product solutions to meet applicable functional safety standards and requirements. Licensee makes the ultimate design decisions regarding its products and is solely responsible for compliance with all legal, regulatory, safety, and security related requirements concerning its products, regardless of any information or support that may be provided by NXP. As such, Licensee assumes all risk related to use of the Licensed Software in Critical Applications and NXP SHALL NOT BE LIABLE FOR ANY SUCH USE IN CRITICAL APPLICATIONS BY LICENSEE. Accordingly, Licensee will indemnify and hold NXP harmless from any claims, liabilities, damages and associated costs and expenses (including attorneys' fees) that NXP may incur related to Licensee&rsquo;s incorporation of the Licensed Software in a Critical Application.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">15. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">CHOICE OF LAW; VENUE.</span>&nbsp;&nbsp;<a name="_Hlk522800784"></a><a name="_Hlk522793564"></a>This Agreement will be governed by, construed, and enforced in accordance with the laws of The Netherlands, without regard to conflicts of laws principles, will apply to all matters relating to this Agreement or the Licensed Software, and you agree that any litigation will be subject to the exclusive jurisdiction of the courts of Amsterdam, The Netherlands. The United Nations Convention on Contracts for the International Sale of Goods will not apply to this document.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">16. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">CONFIDENTIAL INFORMATION</span>.&nbsp;&nbsp;<a name="_Hlk522804824"></a>Subject to the license grants and restrictions contained herein, you must treat the Licensed Software as confidential information and you agree to retain the Licensed Software in confidence perpetually. You may not disclose any part of the Licensed Software to anyone other than&nbsp;<span class="SpellE">distributees</span>&nbsp;in accordance with Section 2.3 and employees, or subcontractors in accordance with Section 2.5, who have a need to know of the Licensed Software and who have executed written agreements obligating them to protect such Licensed Software to at least the same degree of confidentiality as in this Agreement. You agree to use the same degree of care, but no less than a reasonable degree of care, with the Licensed Software as you do with your own confidential information. You may disclose Licensed Software to the extent required by a court or under operation of law or order provided that you notify NXP of such requirement prior to disclosure, which you only disclose the minimum of the required information, and that you allow NXP the opportunity to object to such court or other legal body requiring such disclosure.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">17. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">TRADEMARKS</span>.&nbsp; You are not authorized to use any NXP trademarks, brand names, or logos.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">18. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">ENTIRE AGREEMENT</span>.&nbsp; This Agreement constitutes the entire agreement between you and NXP regarding the subject matter of this Agreement, and supersedes all prior communications, negotiations, understandings, agreements or representations, either written or oral, if any. This Agreement may only be amended in written form, signed by you and NXP.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">19. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">SEVERABILITY</span>.&nbsp; If any provision of this Agreement is held for any reason to be invalid or unenforceable, then the remaining provisions of this Agreement will be unimpaired and, unless a modification or replacement of the invalid or unenforceable provision is further held to deprive you or NXP of a material benefit, in which case the Agreement will immediately terminate, the invalid or unenforceable provision will be replaced with a provision that is valid and enforceable and that comes closest to the intention underlying the invalid or unenforceable provision.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">20. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">NO WAIVER</span>.&nbsp; The waiver by NXP of any breach of any provision of this Agreement will not operate or be construed as a waiver of any other or a subsequent breach of the same or a different provision.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">21. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">AUDIT</span>.&nbsp; You will keep full, clear and accurate records with respect to your compliance with the limited license rights granted under this Agreement for three years following expiration or termination of this Agreement. NXP will have the right, either itself or through an independent certified public accountant to examine and audit, at NXP<a name="OLE_LINK3"></a><a name="OLE_LINK4"></a>'s expense, not more than once a year, and during normal business hours, all such records that may bear upon your compliance with the limited license rights granted above. You must make prompt adjustment to compensate for any errors and/or omissions disclosed by such examination or audit.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">22. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">NOTICES</span>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; All notices and&nbsp;communications under this Agreement will be made in writing, and will be effective when received at the following addresses:&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif; text-align: justify; text-indent: 0.5in;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NXP:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 12pt;">NXP B.V.</span></p>
+<p class="MsoNormal" style="margin: 0in; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif; text-align: justify; text-indent: 0.5in;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;High Tech Campus 60</p>
+<p class="MsoNormal" style="margin: 0in; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif; text-align: justify; text-indent: 0.5in;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5656 AG Eindhoven</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif; text-align: justify; text-indent: 0.5in;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Netherlands</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif; text-indent: 56.05pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ATTN: Legal Department</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The address provided at registration will be used.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">23. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">RELATIONSHIP OF THE PARTIES</span>.&nbsp;&nbsp;&nbsp;&nbsp; The parties are independent contractors. Nothing in this Agreement will be construed to create any partnership, joint venture, or similar relationship. Neither party is authorized to bind the other to any obligations with third parties.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">24. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">SUCCESSION AND ASSIGNMENT</span>.&nbsp;&nbsp; This Agreement will be binding upon and inure to the benefit of the parties and their permitted successors and assigns.&nbsp; You may not assign this Agreement, or any part of this Agreement, without the prior written approval of NXP, which approval will not be unreasonably withheld or delayed. NXP may assign this Agreement, or any part of this Agreement, in its sole discretion.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;"><a name="_Hlk53659524"></a><a name="OLE_LINK9"></a>25.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="text-decoration: underline;">PRIVACY</span>. By agreeing to this Agreement and/or utilizing the Licensed Software, Licensee consents to use of certain personal information, including but not limited to name, email address, and location, for the purpose of NXP&rsquo;s internal analysis regarding future software offerings.&nbsp;&nbsp;NXP&rsquo;s complete Privacy Statement can be found at:&nbsp;<a style="color: blue;" href="https://www.nxp.com/company/our-company/about-nxp/privacy-statement:PRIVACYPRACTICES">https://www.nxp.com/company/our-company/about-nxp/privacy-statement:PRIVACYPRACTICES</a>.</p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 13.5pt; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: 12pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span style="font-size: 10pt; font-family: 'Times New Roman', serif;">&nbsp;</span></p>
+<p class="MsoNormal" style="margin: 0in 0in 14.2pt; line-height: 11.25pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span style="font-size: 10pt;">&nbsp;</span></p>
+<p class="MsoNormal" style="margin: 0in 0in 10pt; line-height: 11.25pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span style="font-size: 10pt;">&nbsp;</span></p>
+<p><span style="font-size: 10pt; line-height: 14px; font-family: Calibri, sans-serif;">&nbsp;</span></p>
+<p class="MsoNormal" style="margin: 0in 0in 8pt; line-height: 15.4px; font-size: 11pt; font-family: Calibri, sans-serif;"><span style="font-size: 10pt; line-height: 14px;">&nbsp;</span></p>
+<p class="MsoNormal" style="margin: 0in 0in 14.2pt; line-height: 11.25pt; font-size: 11pt; font-family: Calibri, sans-serif; text-align: center;" align="center">APPENDIX A</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><span style="text-decoration: underline;">Other License Grants and Restrictions:</span></p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><strong>&nbsp;</strong></p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><strong>The Licensed Software may include some or all of the following software, which is either 1) Third Party Software or 2) NXP proprietary software subject to different terms than those in the Agreement. If the Software Content Register that accompanies the Licensed Software identifies any of the following&nbsp;<span class="GramE">Third Party</span>&nbsp;Software or specific components of the NXP proprietary software, the following terms apply to the extent they deviate from the terms in the Agreement:</strong></p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><a name="OLE_LINK7"></a><a name="OLE_LINK8"></a>Amazon: Use of the Amazon software constitutes your acceptance of the terms of the Amazon Program Materials License Agreement (including the AVS Component Schedule, if applicable), located at&nbsp;<a style="color: blue;" href="https://developer.amazon.com/support/legal/pml">https://developer.amazon.com/support/legal/pml</a>.&nbsp;&nbsp;All Amazon software is hereby designated "Amazon confidential".&nbsp;&nbsp;<span class="SpellE"><span lang="DE">With</span></span><span lang="DE">&nbsp;<span class="SpellE">the</span>&nbsp;<span class="SpellE">exception</span>&nbsp;<span class="SpellE">of</span>&nbsp;<span class="SpellE">the</span>&nbsp;<span class="SpellE">binary</span>&nbsp;<span class="SpellE">library</span>&nbsp;<span class="SpellE">of</span>&nbsp;<span class="SpellE">the</span>&nbsp;Amazon Wake Word Engine&nbsp;<span class="SpellE">for</span>&nbsp;&ldquo;Alexa&rdquo;, all Amazon&nbsp;<span class="SpellE">software</span>&nbsp;<span class="SpellE">is</span>&nbsp;also&nbsp;<span class="SpellE">hereby</span>&nbsp;<span class="SpellE">designated</span>&nbsp;<span class="SpellE">as</span>&nbsp;&ldquo;<span class="SpellE">Restricted</span>&nbsp;<span class="SpellE">Program</span>&nbsp;Materials&rdquo;.<em>&nbsp;</em></span>Amazon is a third-party beneficiary to this Agreement with respect to the Amazon software.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">A<a name="OLE_LINK10"></a><a name="OLE_LINK11"></a>mazon Web Services, Inc.: AWS is an intended third-party beneficiary to this Agreement with respect to the Greengrass software. If you have an account with AWS that is not in good standing, you may not download, install, use or distribute the Greengrass software. You will comply with all instructions and requirements in any integration documents, guidelines, or other documentation AWS provides. The license to the Greengrass software will immediately terminate without notice if you (a) fail to comply with this Agreement or any other agreement with AWS, (b) fail to make timely payment for any AWS service, (c) fail to implement AWS updates, or (d) bring any action for intellectual property infringement against AWS or any AWS customer utilizing AWS services.&nbsp;&nbsp;Any dispute or claim relating to your use of the Greengrass software will be resolved by binding arbitration, rather than in court, except that you may assert claims in small claims court if your claims qualify.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Amphion Semiconductor Ltd.: Distribution of Amphion software must be a part of, or embedded within, Authorized Systems that include an Amphion Video Decoder.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><a name="OLE_LINK5"></a><a name="OLE_LINK6"></a><span class="SpellE">Aquantia</span>&nbsp;Corp.: You may use&nbsp;<span class="SpellE">Aquantia's</span>&nbsp;API binaries solely to flash the API software to an NXP Product which mates with an&nbsp;<span class="SpellE">Aquantia</span>&nbsp;device.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Atheros: Use of Atheros software is limited to evaluation and demonstration only.&nbsp;&nbsp;Permitted distributions must be similarly limited. Further rights must be obtained directly from Atheros.&nbsp;&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">ATI (AMD): Distribution of ATI software must be a part of, or embedded within, Authorized Systems that include&nbsp;<span class="GramE">a</span>&nbsp;ATI graphics processor core.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Broadcom Corporation: Your use of Broadcom Corporation software is restricted to Authorized Systems that incorporate a compatible integrated circuit device manufactured or sold by Broadcom.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Cadence Design Systems: Use of Cadence audio codec software is limited to distribution only of one copy per single NXP Product. The license granted herein to the Cadence Design Systems HiFi&nbsp;<span class="SpellE">aacPlus</span>&nbsp;Audio Decoder software does not include a license to the AAC family of technologies which you or your customer may need to obtain. Configuration tool outputs may only be distributed by licensees of the relevant Cadence SDK and distribution is limited to distribution of one copy embedded in a single NXP Product.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Cirque Corporation: Use of Cirque Corporation technology is limited to evaluation, demonstration, or certification testing only. Permitted distributions must be similarly limited. Further rights, including but not limited to ANY commercial distribution rights, must be obtained directly from Cirque Corporation.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Coding Technologies (Dolby Labs): Use of CTS software is limited to evaluation and demonstration only.&nbsp;&nbsp;Permitted distributions must be similarly limited. Further rights must be obtained from Dolby Laboratories.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">CSR: Use of Cambridge Silicon Radio, Inc. ("CSR") software is limited to evaluation and demonstration only.&nbsp;&nbsp;Permitted distributions must be similarly limited.&nbsp;&nbsp;Further rights must be obtained directly from CSR.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Crank: Use of Crank Software Inc. software is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from Crank Software Inc.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Cypress Semiconductor Corporation: WWD RTOS source code may only be used in accordance with the Cypress IOT Community License Agreement&nbsp;<a name="OLE_LINK12"></a><a name="OLE_LINK13"></a>obtained directly from Cypress Semiconductor Corporation.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-GB">Embedded Systems Academy GmbH (<span class="SpellE">EmSA</span>):&nbsp;&nbsp;Any use of Micro&nbsp;<span class="SpellE">CANopen</span>&nbsp;Plus is subject to the acceptance of the license conditions described in the LICENSE.INFO file distributed with all example projects and in the documentation and the additional clause described below.</span></p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-GB">Clause 1: Micro&nbsp;<span class="SpellE">CANopen</span>&nbsp;Plus may not be used for any competitive or comparative purpose, including the publication of any form of run time or compile time metric, without the express permission of&nbsp;<span class="SpellE">EmSA</span>.</span></p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Future Technology Devices International Ltd.: Future Technology Devices International software must be used consistent with the terms found here: http://www.ftdichip.com/Drivers/FTDriverLicenceTerms.htm</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Global Locate (Broadcom Corporation): Use of Global Locate, Inc. software is limited to evaluation and demonstration only.&nbsp;&nbsp;Permitted distributions must be similarly limited.&nbsp;&nbsp;Further rights must be obtained from Global Locate.&nbsp;&nbsp;&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Microsoft: Except for Microsoft PlayReady software, if the Licensed Software includes software owned by Microsoft Corporation ("Microsoft"), it is subject to the terms of your license with Microsoft (the "Microsoft Underlying Licensed Software") and as such, NXP grants no license to you, beyond evaluation and demonstration in connection with NXP processors, in the Microsoft Underlying Licensed Software.&nbsp;&nbsp;You must separately obtain rights beyond evaluation and demonstration in connection with the Microsoft Underlying Licensed Software from Microsoft. Microsoft does not provide support services for the components provided to you through this Agreement.&nbsp;&nbsp;If you have any questions or require technical assistance, please contact NXP.&nbsp;&nbsp;Microsoft Corporation is a&nbsp;<span class="GramE">third party</span>&nbsp;beneficiary to this Agreement with the right to enforce the terms of this Agreement.&nbsp;&nbsp;TO THE MAXIMUM EXTENT PERMITTED BY LAW, MICROSOFT AND ITS AFFILIATES DISCLAIM ANY WARRANTIES FOR THE MICROSOFT UNDERLYING LICENSED SOFTWARE.&nbsp;&nbsp;TO THE MAXIMUM EXTENT PERMITTED BY LAW, NEITHER MICROSOFT NOR ITS AFFILIATES WILL BE LIABLE, WHETHER IN CONTRACT, TORT, OR OTHERWISE, FOR ANY DIRECT, INCIDENTAL, SPECIAL, INDIRECT, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR ANY LOSS OF USE, LOSS OF TIME, INCONVENIENCE, COMMERCIAL LOSS, OR LOST PROFITS, SAVINGS, OR REVENUES, ARISING FROM THE FROM THE USE OF THE MICROSOFT UNDERLYING LICENSED SOFTWARE.&nbsp;&nbsp;With respect to the Microsoft PlayReady software, you will have the license rights granted in Section 2, provided that you may not use the Microsoft PlayReady software unless you have entered into a Microsoft PlayReady Master Agreement and license directly with Microsoft.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><span class="SpellE">MindTree</span>: Notwithstanding the terms contained in Section 2.3 (a), if the Licensed Software includes proprietary software of&nbsp;<span class="SpellE">MindTree</span>&nbsp;in source code format, Licensee may make modifications and create derivative works only to the extent necessary for debugging of the Licensed Software.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">MM SOLUTIONS AD:&nbsp;&nbsp;Use of MM SOLUTIONS AEC (Auto Exposure Control) and AWB (Auto White Balance) software is limited to demonstration, testing, and evaluation only.&nbsp;&nbsp;In no event may Licensee distribute or sublicense the MM SOLUTIONS software. Further rights must be obtained directly from MM SOLUTIONS.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">MPEG LA: Use of MPEG LA audio or video codec technology is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from MPEG LA.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">MQX RTOS Code: MQX RTOS source code may not be re-distributed by any NXP Licensee under any circumstance, even by a signed written amendment to this Agreement.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">NXP Wireless Charging Library: License to the Software is limited to use in inductive coupling or wireless charging applications</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Opus: Use of Opus software must be consistent with the terms of the Opus license which can be found at: http://www.opus-codec.org/license/</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Oracle JRE (Java): The Oracle JRE must be used consistent with terms found here: http://java.com/license</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">P&amp;E Micro: P&amp;E Software must be used consistent with the terms found here: http://www.pemicro.com/licenses/gdbserver/license_gdb.pdf</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Pro Design Electronic: Licensee may not modify, create derivative works based on, or copy the Pro Design software, documentation, hardware execution key or the accompanying materials.&nbsp;&nbsp;Licensee shall not use Pro Design's or any of its licensors names, logos or trademarks to market the Authorized System.&nbsp;&nbsp;Only NXP customers and distributors are permitted to further redistribute the Pro Design software and only as part of an Authorized System which contains the Pro Design software.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Qualcomm Atheros, Inc.: Notwithstanding anything in this Agreement, Qualcomm Atheros, Inc. Wi-Fi software must be used strictly in accordance with the Qualcomm Atheros, Inc. Technology License Agreement that accompanies such software.&nbsp;&nbsp;Any other use is expressly prohibited.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Real Networks -&nbsp;<span class="SpellE">GStreamer</span>&nbsp;Optimized Real Format Client Code implementation or&nbsp;<span class="SpellE">OpenMax</span>&nbsp;Optimized Real Format Client Code: Use of the&nbsp;<span class="SpellE">GStreamer</span>&nbsp;Optimized Real Format Client Code, or&nbsp;<span class="SpellE">OpenMax</span>&nbsp;Optimized Real Format Client code is restricted to applications in the automotive market.&nbsp;&nbsp;Licensee must be a final manufacturer in good standing with a current license with Real Networks for the commercial use and distribution of products containing the&nbsp;<span class="SpellE">GStreamer</span>&nbsp;Optimized Real Format Client Code implementation or&nbsp;<span class="SpellE">OpenMax</span>&nbsp;Optimized Real Format Client Code</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><span class="SpellE">RivieraWaves</span>&nbsp;SAS (a member of the CEVA, Inc. family of companies): You may not use the&nbsp;<span class="SpellE">RivieraWaves</span>&nbsp;intellectual property licensed under this Agreement if you develop, market, and/or license products similar to such&nbsp;<span class="SpellE">RivieraWaves</span>&nbsp;intellectual property.&nbsp;&nbsp;Such use constitutes a breach of this Agreement.&nbsp;&nbsp;Any such use rights must be obtained directly from&nbsp;<span class="SpellE">RivieraWaves</span>.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">SanDisk Corporation: If the Licensed Software includes software developed by SanDisk Corporation ("SanDisk"), you must separately obtain the rights to reproduce and distribute this software in source code form from SanDisk.&nbsp;&nbsp;Please follow these easy steps to obtain the license and software:&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">(1) Contact your local SanDisk sales representative to obtain the SanDisk License Agreement.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">(2) Sign the license agreement.&nbsp;&nbsp;Fax the signed agreement to SanDisk USA marketing department at 408-542-0403.&nbsp;&nbsp;The license will be valid when fully executed by SanDisk.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">(3) If you have specific questions, please send an email to sales@sandisk.com</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">You may only use the SanDisk Corporation Licensed Software on products compatible with a SanDisk Secure Digital Card.&nbsp;&nbsp;You may not use the SanDisk Corporation Licensed Software on any memory device product.&nbsp;&nbsp;SanDisk retains all rights to any modifications or derivative works to the SanDisk Corporation Licensed Software that you may create.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">SEGGER Microcontroller<a name="OLE_LINK1"></a><a name="OLE_LINK2"></a>&nbsp;-&nbsp;<span class="SpellE">emWin</span>&nbsp;Software: Your use of SEGGER&nbsp;<span class="SpellE">emWin</span>&nbsp;software and components is restricted for development of NXP ARM7, ARM9, Cortex-M0, Cortex-M3, Cortex-M4, Cortex-M33, Cortex-M7, and Cortex-A7 based products only.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">SEGGER Microcontroller - J-Link/J-Trace Software:&nbsp;<span class="SpellE">Segger</span>&nbsp;software must be used consistent with the terms found here: http://www.segger.com/jlink-software.html</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Synopsys/Target Compiler Technologies: Your use of the Synopsys/Target Compiler Technologies Licensed Software and related documentation is subject to the following:</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">(1) Duration of the license for the Licensed Software is limited to 12 months, unless otherwise specified in the license file.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">(2) The Licensed Software is usable by one user at a time on a single designated computer, unless otherwise agreed by Synopsys.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">(3) Licensed Software and documentation are to be used only on a designated computer at the designated physical address provided by you on the APEX license form.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">(4) The Licensed Software is not sub-licensable.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">TARA Systems: Use of TARA Systems GUI technology Embedded Wizard is limited to evaluation and demonstration only. Permitted distributions must be similarly limited. Further rights must be obtained directly from TARA Systems.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">Texas Instruments: Your use of Texas Instruments Inc. WiLink8 Licensed Software is restricted to NXP SoC based systems that include a compatible connectivity device manufactured by TI.&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">TES Electronic Solutions Germany (TES):&nbsp;&nbsp;TES 3D Surround View software and associated data and documentation may only be used for evaluation purposes and for demonstration to third parties in integrated form on a board package containing an NXP S32V234 device. Licensee may not distribute or sublicense the TES software. Your license to the TES software may be terminated at any time upon notice.</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;">&nbsp;</p>
+<p>&nbsp;</p>
+<p class="MsoNormal" style="margin: 0in; line-height: normal; font-size: 11pt; font-family: Calibri, sans-serif;"><span class="SpellE">Vivante</span>: Distribution of&nbsp;<span class="SpellE">Vivante</span>&nbsp;software must be a part of, or embedded within, Authorized Systems that include a&nbsp;<span class="SpellE">Viva<a name="_Hlk521923832"></a>nte</span>&nbsp;Graphics Processing Unit.&nbsp;</p> \ No newline at end of file
diff --git a/recipes-bsp/tezi-metadata/files/TI-TFL.txt b/recipes-bsp/tezi-metadata/files/TI-TFL.txt
new file mode 100644
index 0000000..925cfe5
--- /dev/null
+++ b/recipes-bsp/tezi-metadata/files/TI-TFL.txt
@@ -0,0 +1,127 @@
+TEXAS INSTRUMENTS TEXT FILE LICENSE
+
+
+Copyright (c) 2018 Texas Instruments Incorporated
+
+All rights reserved not granted herein.
+
+Limited License.
+
+Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive license
+under copyrights and patents it now or hereafter owns or controls to make, have made, use,
+import, offer to sell and sell ("Utilize") this software subject to the terms herein. With
+respect to the foregoing patent license, such license is granted solely to the extent that
+any such patent is necessary to Utilize the software alone. The patent license shall not
+apply to any combinations which include this software, other than combinations with devices
+manufactured by or for TI (TI Devices). No hardware patent is licensed hereunder.
+
+Redistributions must preserve existing copyright notices and reproduce this license (including
+the above copyright notice and the disclaimer and (if applicable) source code license
+limitations below) in the documentation and/or other materials provided with the distribution.
+
+Redistribution and use in binary form, without modification, are permitted provided that the
+following conditions are met:
+
+* No reverse engineering, decompilation, or disassembly of this software is permitted with
+respect to any software provided in binary form.
+
+* any redistribution and use are licensed by TI for use only with TI Devices.
+
+* Nothing shall obligate TI to provide you with source code for the software licensed and
+provided to you in object code.
+
+If software source code is provided to you, modification and redistribution of the source code
+are permitted provided that the following conditions are met:
+
+* any redistribution and use of the source code, including any resulting derivative works,
+are licensed by TI for use only with TI Devices.
+
+* any redistribution and use of any object code compiled from the source code and any resulting
+derivative works, are licensed by TI for use only with TI Devices.
+
+Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to
+endorse or promote products derived from this software without specific prior written permission.
+
+DISCLAIMER.
+
+THIS SOFTWARE IS PROVIDED BY TI AND TIâ„¢S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TI AND TI’S LICENSORS 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.
+
+Certain third party licenses not included:
+
+Certain software may (a) require patent licenses from third parties
+claiming patent rights covering implementation of the software or (b) be
+based on industry recognized standards or software programs published by
+industry recognized standards bodies and certain third parties may claim
+to own patents or copyrights that cover implementation of those standards.
+You acknowledge and agree that (i) this License does not convey a license
+to any such third party patents and copyrights, (ii) you are responsible
+for any fees or royalties that may be payable to any third party based on
+such third party's interests in such software and (iii) you will indemnify
+TI against your failure to make any such payments and will defend any
+claim, suit or proceeding brought against TI insofar as such claim, suit
+or proceeding is based on or arises from such failure.
+
+-----------------------------------------------------------------------------
+
+Additional legal notices pertaining to portions of included software:
+
+
+Copyright (c) 2007-2009 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+
+
+--------
+
+SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+
+Copyright (C) 2006 Silicon Graphics, Inc. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice including the dates of first publication and
+either this permission notice or a reference to
+http://oss.sgi.com/projects/FreeB/ shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+Except as contained in this notice, the name of Silicon Graphics, Inc.
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+from Silicon Graphics, Inc.
diff --git a/recipes-bsp/tezi-metadata/tezi-metadata_0.3.bb b/recipes-bsp/tezi-metadata/tezi-metadata_0.3.bb
index e951d58..b8e29d9 100644
--- a/recipes-bsp/tezi-metadata/tezi-metadata_0.3.bb
+++ b/recipes-bsp/tezi-metadata/tezi-metadata_0.3.bb
@@ -2,13 +2,23 @@ DESCRIPTION = "Toradex Easy Installer Metadata"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+TEZI_EULA_FILE ?= "LA_OPT_NXP_SW.html"
+TEZI_EULA_FILE:ti-soc ?= "TI-TFL.txt"
+
SRC_URI = " \
file://prepare.sh \
file://wrapup.sh \
file://toradexlinux.png \
file://marketing.tar;unpack=false \
+ file://${TEZI_EULA_FILE} \
"
+# We want to always check the latest EULA file in image_type_tezi.bbclass
+# So we put ${TEZI_EULA_FILE} to sstate allow overlap files, this
+# ensures it could be deployed to ${DEPLOY_DIR_IMAGE} as a backup even
+# it already existed.
+SSTATE_ALLOW_OVERLAP_FILES:prepend = "${DEPLOY_DIR_IMAGE}/${TEZI_EULA_FILE} "
+
inherit deploy nopackages
do_deploy () {
@@ -16,6 +26,7 @@ do_deploy () {
install -m 644 ${WORKDIR}/wrapup.sh ${DEPLOYDIR}
install -m 644 ${WORKDIR}/toradexlinux.png ${DEPLOYDIR}
install -m 644 ${WORKDIR}/marketing.tar ${DEPLOYDIR}
+ install -m 644 ${WORKDIR}/${TEZI_EULA_FILE} ${DEPLOYDIR}
}
addtask deploy before do_build after do_install
diff --git a/recipes-bsp/u-boot/libubootenv/colibri-imx6ull/fw_env.config b/recipes-bsp/u-boot/libubootenv/colibri-imx6ull/fw_env.config
new file mode 100644
index 0000000..930bcee
--- /dev/null
+++ b/recipes-bsp/u-boot/libubootenv/colibri-imx6ull/fw_env.config
@@ -0,0 +1,10 @@
+# Configuration file for fw_(printenv/setenv) utility.
+# Up to two entries are valid, in this case the redundant
+# environment sector is assumed present.
+# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
+# Futhermore, if the Flash sector size is ommitted, this value is assumed to
+# be the same as the Environment size, which is valid for NOR and SPI-dataflash
+
+# MTD device name Device offset Env. size Flash sector size Number of sectors
+# Colibri iMX6ULL
+/dev/mtd3 0x00000000 0x00020000 0x20000 4
diff --git a/recipes-bsp/u-boot/libubootenv/colibri-imx7/fw_env.config b/recipes-bsp/u-boot/libubootenv/colibri-imx7/fw_env.config
new file mode 100644
index 0000000..b59116d
--- /dev/null
+++ b/recipes-bsp/u-boot/libubootenv/colibri-imx7/fw_env.config
@@ -0,0 +1,10 @@
+# Configuration file for fw_(printenv/setenv) utility.
+# Up to two entries are valid, in this case the redundant
+# environment sector is assumed present.
+# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
+# Futhermore, if the Flash sector size is ommitted, this value is assumed to
+# be the same as the Environment size, which is valid for NOR and SPI-dataflash
+
+# MTD device name Device offset Env. size Flash sector size Number of sectors
+# Colibri iMX7
+/dev/mtd3 0x00000000 0x00020000 0x20000 4
diff --git a/recipes-bsp/u-boot/libubootenv/fw_env.config b/recipes-bsp/u-boot/libubootenv/fw_env.config
new file mode 100644
index 0000000..d22acde
--- /dev/null
+++ b/recipes-bsp/u-boot/libubootenv/fw_env.config
@@ -0,0 +1,18 @@
+# Configuration file for fw_(printenv/setenv) utility.
+# Up to two entries are valid, in this case the redundant
+# environment sector is assumed present.
+# Device offset must be prefixed with 0x to be parsed as a hexadecimal value.
+# On a block device a negative offset is treated as a backwards offset from the
+# end of the device/partition, rather than a forwards offset from the start.
+
+# Toradex modules with eMMC
+# The U-Boot environment is stored at the end of the first eMMC boot partition
+# hence use a negative value. The environment is just in front of the config
+# block which occupies the last sector (hence -0x200)
+# Note that the eMMC boot areas (e.g. /dev/mmcblk0boot0) by default is read
+# only. To make it writeable, execute on the cmdline e.g.
+# $ echo 0 > /sys/block/mmcblk0boot0/force_ro
+# The fw_setenv tool provided by libubootenv does this automatically.
+
+# Block device name Device offset Env. size
+/dev/emmc-boot0 -0x2200 0x2000
diff --git a/recipes-bsp/u-boot/libubootenv_%.bbappend b/recipes-bsp/u-boot/libubootenv_%.bbappend
new file mode 100644
index 0000000..3f8a71b
--- /dev/null
+++ b/recipes-bsp/u-boot/libubootenv_%.bbappend
@@ -0,0 +1,12 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
+
+SRC_URI:append = " file://fw_env.config"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+RRECOMMENDS:${PN} += "u-boot-default-env"
+
+do_install:append() {
+ install -d ${D}/${sysconfdir}
+ install -m 0644 ${WORKDIR}/fw_env.config ${D}/${sysconfdir}/
+}
diff --git a/recipes-bsp/u-boot/u-boot-distro-boot.bb b/recipes-bsp/u-boot/u-boot-distro-boot.bb
index 97fa88f..4aa80fa 100644
--- a/recipes-bsp/u-boot/u-boot-distro-boot.bb
+++ b/recipes-bsp/u-boot/u-boot-distro-boot.bb
@@ -9,13 +9,15 @@ SRC_URI = " \
file://boot.cmd.in \
"
-KERNEL_BOOTCMD ??= "${@'bootm' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'bootz'}"
-KERNEL_BOOTCMD_aarch64 ?= "${@'bootm' if d.getVar('KERNEL_IMAGETYPE') == 'fitImage' else 'booti'}"
+KERNEL_BOOTCMD ??= "bootz"
+KERNEL_BOOTCMD:aarch64 ?= "booti"
+
+DTB_PREFIX ??= "${@d.getVar('KERNEL_DTB_PREFIX').replace("/", "_") if d.getVar('KERNEL_DTB_PREFIX') else ''}"
inherit deploy
do_deploy() {
- sed -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/;s/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
+ sed -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/;s/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/;s/@@KERNEL_DTB_PREFIX@@/${DTB_PREFIX}/' \
"${WORKDIR}/boot.cmd.in" > boot.cmd
mkimage -T script -C none -n "Distro boot script" -d boot.cmd boot.scr
diff --git a/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in b/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
index b3e15a5..6969a55 100644
--- a/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
+++ b/recipes-bsp/u-boot/u-boot-distro-boot/boot.cmd.in
@@ -70,33 +70,38 @@ fi
if test -n ${setup}; then
run setup
else
- env set setupargs 'console=${console},${baudrate} console=tty1 consoleblank=0'
+ env set setupargs console=tty1 console=${console},${baudrate} consoleblank=0
fi
-if test ${kernel_image} = "Image.gz"
-then
- env set kernel_addr_load ${loadaddr}
- env set bootcmd_unzip 'unzip ${kernel_addr_load} ${kernel_addr_r}'
-else
+if test ${kernel_image} = "fitImage"; then
+ env set kernel_addr_load ${ramdisk_addr_r}
env set bootcmd_unzip ';'
- if test ${kernel_image} = "fitImage"
- then
- env set kernel_addr_load ${ramdisk_addr_r}
+else
+ if test -n ${kernel_comp_addr_r}; then
+ # use booti automatic decompression
+ env set kernel_addr_load ${loadaddr}
+ env set bootcmd_unzip ';'
else
- env set kernel_addr_load ${kernel_addr_r}
+ if test ${kernel_image} = "Image.gz"; then
+ env set kernel_addr_load ${loadaddr}
+ env set bootcmd_unzip 'unzip ${kernel_addr_load} ${kernel_addr_r}'
+ else
+ env set kernel_addr_load ${kernel_addr_r}
+ env set bootcmd_unzip ';'
+ fi
fi
fi
# Set dynamic commands
env set set_bootcmd_kernel 'env set bootcmd_kernel "${load_cmd} \\${kernel_addr_load} \\${kernel_image}"'
-env set set_load_overlays_file 'env set load_overlays_file "${load_cmd} \\${loadaddr} \\${overlays_file}; env import -t \\${loadaddr} \\${filesize}"'
+env set set_load_overlays_file 'env set load_overlays_file "${load_cmd} \\${loadaddr} \\${overlays_file} && env import -t \\${loadaddr} \\${filesize}"'
if test ${kernel_image} = "fitImage"
then
env set fdt_high
env set fdt_resize true
env set set_bootcmd_dtb 'env set bootcmd_dtb "true"'
- env set set_apply_overlays 'env set apply_overlays "for overlay_file in \"\\${fdt_overlays}\"; do env set fitconf_fdt_overlays \"\\"\\${fitconf_fdt_overlays}#conf@\\${overlay_file}\\"\"; env set overlay_file; done; true"'
- env set bootcmd_boot 'echo "Bootargs: \${bootargs}" && @@KERNEL_BOOTCMD@@ ${ramdisk_addr_r}#conf@\${fdtfile}\${fitconf_fdt_overlays}'
+ env set set_apply_overlays 'env set apply_overlays "for overlay_file in \"\\${fdt_overlays}\"; do env set fitconf_fdt_overlays \"\\"\\${fitconf_fdt_overlays}#conf-\\${overlay_file}\\"\"; env set overlay_file; done; true"'
+ env set bootcmd_boot 'echo "Bootargs: \${bootargs}" && bootm ${kernel_addr_load}#conf-@@KERNEL_DTB_PREFIX@@\${fdtfile}\${fitconf_fdt_overlays}'
else
env set fdt_resize 'fdt addr ${fdt_addr_r} && fdt resize 0x20000'
env set set_bootcmd_dtb 'env set bootcmd_dtb "echo Loading DeviceTree: \\${fdtfile}; ${load_cmd} \\${fdt_addr_r} \\${fdtfile}"'
@@ -106,10 +111,10 @@ fi
# Set static commands
if test ${root_devtype} = "nfs-dhcp"; then
- env set rootfsargs_set 'env set rootfsargs "root=/dev/nfs ip=dhcp nfsroot=${rootpath}"'
+ env set rootfsargs_set 'env set rootfsargs "root=/dev/nfs ip=dhcp"'
else
if test ${root_devtype} = "nfs-static"; then
- env set rootfsargs_set 'env set rootfsargs "root=/dev/nfs nfsroot=${serverip}:${rootpath}"'
+ env set rootfsargs_set 'env set rootfsargs "root=/dev/nfs nfsroot=${serverip}:/${rootpath}"'
else
env set uuid_set 'part uuid ${root_devtype} ${root_devnum}:${root_part} uuid'
env set rootfsargs_set 'run uuid_set && env set rootfsargs root=PARTUUID=${uuid} ro rootwait'
diff --git a/recipes-bsp/u-boot/u-boot-toradex-common.inc b/recipes-bsp/u-boot/u-boot-toradex-common.inc
new file mode 100644
index 0000000..d41426a
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex-common.inc
@@ -0,0 +1,26 @@
+require recipes-bsp/u-boot/u-boot-common.inc
+require recipes-bsp/u-boot/u-boot.inc
+SOC_HANDLING = ""
+SOC_HANDLING:imx-generic-bsp = "recipes-bsp/u-boot/u-boot-toradex-imx.inc"
+SOC_HANDLING:ti-soc = "recipes-bsp/u-boot/u-boot-toradex-ti.inc"
+require ${SOC_HANDLING}
+
+LIC_FILES_CHKSUM = "file://Licenses/README;md5=2ca5f2c35c8cc335f0a19756634782f1"
+DEPENDS += " \
+ bc-native \
+ dtc-native \
+ python3-jsonschema-native \
+ python3-pyelftools-native \
+ python3-pyyaml-native \
+ python3-yamllint-native \
+"
+PROVIDES += "u-boot"
+
+SRC_URI = " \
+ git://source.denx.de/u-boot/u-boot.git;protocol=https;branch=master \
+ ${TDX_PATCHES} \
+"
+
+inherit toradex-u-boot-localversion
+
+UBOOT_INITIAL_ENV = "u-boot-initial-env"
diff --git a/recipes-bsp/u-boot/u-boot-toradex-imx.inc b/recipes-bsp/u-boot/u-boot-toradex-imx.inc
new file mode 100644
index 0000000..b872191
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex-imx.inc
@@ -0,0 +1,24 @@
+# build imx-boot from within U-Boot
+inherit ${@oe.utils.ifelse(d.getVar('UBOOT_PROVIDES_BOOT_CONTAINER') == '1', 'imx-boot-container', '')}
+
+BOOT_TOOLS = "imx-boot-tools"
+do_deploy:append:mx8m-generic-bsp() {
+ # Deploy u-boot-nodtb.bin and fsl-imx8m*-XX.dtb for mkimage to generate boot binary
+ if [ -n "${UBOOT_CONFIG}" ]
+ then
+ for config in ${UBOOT_MACHINE}; do
+ i=$(expr $i + 1);
+ for type in ${UBOOT_CONFIG}; do
+ j=$(expr $j + 1);
+ if [ $j -eq $i ]
+ then
+ install -d ${DEPLOYDIR}/${BOOT_TOOLS}
+ install -m 0777 ${B}/${config}/arch/arm/dts/${UBOOT_DTB_NAME} ${DEPLOYDIR}/${BOOT_TOOLS}
+ install -m 0777 ${B}/${config}/u-boot-nodtb.bin ${DEPLOYDIR}/${BOOT_TOOLS}/u-boot-nodtb.bin-${MACHINE}-${type}
+ fi
+ done
+ unset j
+ done
+ unset i
+ fi
+}
diff --git a/recipes-bsp/u-boot/u-boot-toradex-ti.inc b/recipes-bsp/u-boot/u-boot-toradex-ti.inc
new file mode 100644
index 0000000..b8e9a39
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex-ti.inc
@@ -0,0 +1,66 @@
+# SYSFW/TIFS Firmware
+DEPENDS:append:k3 = " python3-jsonschema-native python3-pyelftools-native python3-pyyaml-native"
+DEPENDS:append:k3r5 = " python3-jsonschema-native python3-pyelftools-native python3-pyyaml-native ti-sci-fw"
+
+DM_FIRMWARE = "ipc_echo_testb_mcu1_0_release_strip.xer5f"
+
+PLAT_SFX = ""
+PLAT_SFX:j721e = "j721e"
+PLAT_SFX:j7200 = "j7200"
+PLAT_SFX:j721s2 = "j721s2"
+PLAT_SFX:j784s4 = "j784s4"
+PLAT_SFX:am65xx = "am65xx"
+PLAT_SFX:am64xx = "am64xx"
+PLAT_SFX:am62xx = "am62xx"
+PLAT_SFX:am62axx = "am62axx"
+
+PACKAGECONFIG[atf] = "BL31=${STAGING_DIR_HOST}/firmware/bl31.bin,,trusted-firmware-a"
+PACKAGECONFIG[optee] = "TEE=${STAGING_DIR_HOST}${nonarch_base_libdir}/firmware/bl32.bin,,optee-os"
+PACKAGECONFIG[dm] = "DM=${STAGING_DIR_HOST}${nonarch_base_libdir}/firmware/ti-dm/${PLAT_SFX}/${DM_FIRMWARE},,ti-dm-fw"
+
+PACKAGECONFIG:append:aarch64 = " atf optee"
+PACKAGECONFIG:append:j721e = " dm"
+PACKAGECONFIG:append:j7200 = " dm"
+PACKAGECONFIG:append:j721s2 = " dm"
+PACKAGECONFIG:append:j784s4 = " dm"
+PACKAGECONFIG:append:am62xx = " dm"
+PACKAGECONFIG:append:am62axx = " dm"
+
+BINMAN_INDIRS = "${STAGING_DIR_HOST}${nonarch_base_libdir}/firmware"
+
+EXTRA_OEMAKE:append = " ${PACKAGECONFIG_CONFARGS} BINMAN_INDIRS=${BINMAN_INDIRS}"
+
+do_deploy:append:k3r5 () {
+ if [ -n "${UBOOT_CONFIG}" ]
+ then
+ for config in ${UBOOT_MACHINE}; do
+ if [ x${config} = "xverdin-am62_r5_usbdfu_defconfig" ]
+ then
+ TARGETSUFFIX="-dfu"
+ else
+ TARGETSUFFIX=""
+ fi
+ i=$(expr $i + 1);
+ for type in ${UBOOT_CONFIG}; do
+ j=$(expr $j + 1);
+ if [ $j -eq $i ]
+ then
+ for f in ${B}/${config}/tiboot3-*.bin; do
+ if [ -f "$f" ]; then
+ TARGET=$(basename $f)${TARGETSUFFIX}
+ install -m 644 $f ${DEPLOYDIR}/${TARGET}
+ fi
+ done
+
+ for f in ${B}/${config}/sysfw*.itb; do
+ if [ -f "$f" ]; then
+ install -m 644 $f ${DEPLOYDIR}/
+ fi
+ done
+ fi
+ done
+ unset j
+ done
+ unset i
+ fi
+}
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-ARM-imx8mp-verdin-imx8mp-Add-memory-size-detection.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-ARM-imx8mp-verdin-imx8mp-Add-memory-size-detection.patch
new file mode 100644
index 0000000..b3adb66
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-ARM-imx8mp-verdin-imx8mp-Add-memory-size-detection.patch
@@ -0,0 +1,40 @@
+From dea2132a615a744f7f00ebbc551c53867c7537dc Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Tue, 6 Sep 2022 17:12:17 +0200
+Subject: [PATCH] ARM: imx8mp: verdin-imx8mp: Add memory size detection
+
+Add RAM auto-sizing, without this change memory size for all SKU is set
+to 8GB and the system will crash on SKU with less memory as soon as the
+non existent memory addresses are accessed.
+
+Upstream-Status: Submitted [https://lore.kernel.org/u-boot/20220907095105.21630-1-francesco.dolcini@toradex.com/]
+Fixes: 2bc2f817cea7 ("board: toradex: add verdin imx8m plus support")
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/verdin-imx8mp/verdin-imx8mp.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/board/toradex/verdin-imx8mp/verdin-imx8mp.c b/board/toradex/verdin-imx8mp/verdin-imx8mp.c
+index e3c1a1201daa..743e00bf9c46 100644
+--- a/board/toradex/verdin-imx8mp/verdin-imx8mp.c
++++ b/board/toradex/verdin-imx8mp/verdin-imx8mp.c
+@@ -121,6 +121,16 @@ int board_late_init(void)
+ return 0;
+ }
+
++int board_phys_sdram_size(phys_size_t *size)
++{
++ if (!size)
++ return -EINVAL;
++
++ *size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE + PHYS_SDRAM_2_SIZE);
++
++ return 0;
++}
++
+ #if IS_ENABLED(CONFIG_OF_LIBFDT) && IS_ENABLED(CONFIG_OF_BOARD_SETUP)
+ int ft_board_setup(void *blob, struct bd_info *bd)
+ {
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri-imx6-imx6ull-imx7-defconfig-Enable-fa.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri-imx6-imx6ull-imx7-defconfig-Enable-fa.patch
new file mode 100644
index 0000000..5a5b78b
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri-imx6-imx6ull-imx7-defconfig-Enable-fa.patch
@@ -0,0 +1,112 @@
+From f52289095544611a0f58050d2890ab9c61d77196 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Mon, 30 Oct 2023 15:16:20 -0300
+Subject: [PATCH 1/2] apalis/colibri imx6/imx6ull/imx7: defconfig: Enable
+ fastboot support
+
+Add fastboot support for Apalis iMX6, Colibri iMX6, Colibri iMX6ULL and
+Colibri iMX7 boards. Remove CONFIG_FASTBOOT_BUF_SIZE from
+colibri_imx7_emmc_defconfig to get the default value of 0x7000000 instead
+of 0x10000000, to make it consistent with the other boards.
+
+Upstream-Status: Submitted [https://lore.kernel.org/u-boot/20231109162401.38941-1-hiago.franco@toradex.com/T/#t]
+
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+---
+ configs/apalis_imx6_defconfig | 3 +++
+ configs/colibri-imx6ull-emmc_defconfig | 3 +++
+ configs/colibri-imx6ull_defconfig | 3 +++
+ configs/colibri_imx6_defconfig | 3 +++
+ configs/colibri_imx7_defconfig | 3 +++
+ configs/colibri_imx7_emmc_defconfig | 4 ++--
+ 6 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/configs/apalis_imx6_defconfig b/configs/apalis_imx6_defconfig
+index ea4ad276e7..13cbbb58bd 100644
+--- a/configs/apalis_imx6_defconfig
++++ b/configs/apalis_imx6_defconfig
+@@ -77,6 +77,9 @@ CONFIG_BOUNCE_BUFFER=y
+ CONFIG_DWC_AHSATA=y
+ CONFIG_BOOTCOUNT_LIMIT=y
+ CONFIG_BOOTCOUNT_ENV=y
++CONFIG_USB_FUNCTION_FASTBOOT=y
++CONFIG_FASTBOOT_BUF_ADDR=0x14420000
++CONFIG_FASTBOOT_UUU_SUPPORT=y
+ CONFIG_DM_I2C=y
+ CONFIG_SPL_SYS_I2C_LEGACY=y
+ CONFIG_SYS_I2C_MXC=y
+diff --git a/configs/colibri-imx6ull-emmc_defconfig b/configs/colibri-imx6ull-emmc_defconfig
+index eb4b6a79ea..f0d32b3623 100644
+--- a/configs/colibri-imx6ull-emmc_defconfig
++++ b/configs/colibri-imx6ull-emmc_defconfig
+@@ -54,6 +54,9 @@ CONFIG_TFTP_TSIZE=y
+ CONFIG_BOUNCE_BUFFER=y
+ CONFIG_BOOTCOUNT_LIMIT=y
+ CONFIG_BOOTCOUNT_ENV=y
++CONFIG_USB_FUNCTION_FASTBOOT=y
++CONFIG_FASTBOOT_BUF_ADDR=0x81100000
++CONFIG_FASTBOOT_UUU_SUPPORT=y
+ CONFIG_DM_I2C=y
+ CONFIG_SYS_I2C_MXC=y
+ CONFIG_SUPPORT_EMMC_BOOT=y
+diff --git a/configs/colibri-imx6ull_defconfig b/configs/colibri-imx6ull_defconfig
+index d0825472b2..deba619376 100644
+--- a/configs/colibri-imx6ull_defconfig
++++ b/configs/colibri-imx6ull_defconfig
+@@ -64,6 +64,9 @@ CONFIG_BOOTCOUNT_LIMIT=y
+ CONFIG_BOOTCOUNT_ENV=y
+ CONFIG_DFU_NAND=y
+ CONFIG_SYS_DFU_DATA_BUF_SIZE=0x1000000
++CONFIG_USB_FUNCTION_FASTBOOT=y
++CONFIG_FASTBOOT_BUF_ADDR=0x81100000
++CONFIG_FASTBOOT_UUU_SUPPORT=y
+ CONFIG_DM_I2C=y
+ CONFIG_SYS_I2C_MXC=y
+ CONFIG_FSL_USDHC=y
+diff --git a/configs/colibri_imx6_defconfig b/configs/colibri_imx6_defconfig
+index 4f38d5cb48..0b2997198b 100644
+--- a/configs/colibri_imx6_defconfig
++++ b/configs/colibri_imx6_defconfig
+@@ -76,6 +76,9 @@ CONFIG_TFTP_BLOCKSIZE=16352
+ CONFIG_BOUNCE_BUFFER=y
+ CONFIG_BOOTCOUNT_LIMIT=y
+ CONFIG_BOOTCOUNT_ENV=y
++CONFIG_USB_FUNCTION_FASTBOOT=y
++CONFIG_FASTBOOT_BUF_ADDR=0x14420000
++CONFIG_FASTBOOT_UUU_SUPPORT=y
+ CONFIG_DM_I2C=y
+ CONFIG_SPL_SYS_I2C_LEGACY=y
+ CONFIG_SYS_I2C_MXC=y
+diff --git a/configs/colibri_imx7_defconfig b/configs/colibri_imx7_defconfig
+index 973afc1a2b..7532848ca2 100644
+--- a/configs/colibri_imx7_defconfig
++++ b/configs/colibri_imx7_defconfig
+@@ -62,6 +62,9 @@ CONFIG_BOUNCE_BUFFER=y
+ CONFIG_BOOTCOUNT_LIMIT=y
+ CONFIG_BOOTCOUNT_ENV=y
+ CONFIG_DFU_NAND=y
++CONFIG_USB_FUNCTION_FASTBOOT=y
++CONFIG_FASTBOOT_BUF_ADDR=0x81100000
++CONFIG_FASTBOOT_UUU_SUPPORT=y
+ CONFIG_DM_I2C=y
+ CONFIG_SYS_I2C_MXC=y
+ CONFIG_FSL_USDHC=y
+diff --git a/configs/colibri_imx7_emmc_defconfig b/configs/colibri_imx7_emmc_defconfig
+index 01b1cb8b55..b5485669c6 100644
+--- a/configs/colibri_imx7_emmc_defconfig
++++ b/configs/colibri_imx7_emmc_defconfig
+@@ -53,9 +53,9 @@ CONFIG_TFTP_BLOCKSIZE=16352
+ CONFIG_BOOTCOUNT_LIMIT=y
+ CONFIG_BOOTCOUNT_ENV=y
+ CONFIG_USB_FUNCTION_FASTBOOT=y
+-CONFIG_FASTBOOT_BUF_ADDR=0x82000000
+-CONFIG_FASTBOOT_BUF_SIZE=0x10000000
++CONFIG_FASTBOOT_BUF_ADDR=0x81100000
+ CONFIG_FASTBOOT_FLASH=y
++CONFIG_FASTBOOT_UUU_SUPPORT=y
+ CONFIG_FASTBOOT_FLASH_MMC_DEV=0
+ CONFIG_FASTBOOT_CMD_OEM_FORMAT=y
+ CONFIG_DM_I2C=y
+--
+2.42.0
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri_imx6-imx6ull-_imx7-update-env-memory-.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri_imx6-imx6ull-_imx7-update-env-memory-.patch
new file mode 100644
index 0000000..b59a8c1
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-apalis-colibri_imx6-imx6ull-_imx7-update-env-memory-.patch
@@ -0,0 +1,197 @@
+From d45b56346476caee8d182e4a335fc8b5764a8483 Mon Sep 17 00:00:00 2001
+From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Date: Mon, 26 Sep 2022 11:27:57 +0200
+Subject: [PATCH v2] apalis/colibri_imx6/-imx6ull/_imx7: update env memory layout
+
+Update the distro config env memory layout for the Apalis iMX6,
+Colibri iMX6, Colibri iMX6ULL and Colibri iMX7:
+
+- loadaddr=0x84200000 (resp. 0x14200000 on them i.MX 6) allows for 64MB
+ area for uncompressing (ie FIT images)
+- fdt_addr_r = loadaddr + 64MB : allows for 64MB kernel
+- scriptaddr = fdt_addr_r + 512KB : allows for 512KB fdt
+- pxefile_addr_r = scriptaddr + 512KB : allows for 512KB script
+- ramdisk_addr_r = pxefile_addr_r + 512KB : allows for 1MB extlinux.conf
+
+Memory layout analogous to 64-bit one from commit fd5c7173ade4
+("imx8m{m,n}_venice: update env memory layout") but left pxefile_addr_r
+updated according to doc/develop/distro.rst.
+
+This fixes a potential issue caused by the compressed kernel being
+relocated on top of the ramdisk causing its corruption.
+
+Upstream-Status: Submitted [https://lore.kernel.org/all/20220927155052.40056-1-marcel@ziswiler.com/]
+Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+---
+
+ configs/apalis_imx6_defconfig | 1 +
+ configs/colibri-imx6ull-emmc_defconfig | 1 +
+ configs/colibri-imx6ull_defconfig | 1 +
+ configs/colibri_imx6_defconfig | 1 +
+ configs/colibri_imx7_defconfig | 1 +
+ configs/colibri_imx7_emmc_defconfig | 1 +
+ include/configs/apalis_imx6.h | 10 +++++-----
+ include/configs/colibri-imx6ull.h | 10 +++++-----
+ include/configs/colibri_imx6.h | 10 +++++-----
+ include/configs/colibri_imx7.h | 10 +++++-----
+ 10 files changed, 26 insertions(+), 20 deletions(-)
+
+diff --git a/configs/apalis_imx6_defconfig b/configs/apalis_imx6_defconfig
+index ea4ad276e7f..aa033a4bca8 100644
+--- a/configs/apalis_imx6_defconfig
++++ b/configs/apalis_imx6_defconfig
+@@ -21,6 +21,7 @@ CONFIG_SPL_MMC=y
+ CONFIG_SPL_SERIAL=y
+ CONFIG_SPL=y
+ CONFIG_CMD_HDMIDETECT=y
++CONFIG_SYS_LOAD_ADDR=0x14200000
+ CONFIG_AHCI=y
+ CONFIG_SYS_MEMTEST_START=0x10000000
+ CONFIG_SYS_MEMTEST_END=0x10010000
+diff --git a/configs/colibri-imx6ull-emmc_defconfig b/configs/colibri-imx6ull-emmc_defconfig
+index eb4b6a79eaa..e83262efc82 100644
+--- a/configs/colibri-imx6ull-emmc_defconfig
++++ b/configs/colibri-imx6ull-emmc_defconfig
+@@ -21,6 +21,7 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+ # CONFIG_DISPLAY_BOARDINFO is not set
+ CONFIG_DISPLAY_BOARDINFO_LATE=y
+ CONFIG_SYS_PROMPT="Colibri iMX6ULL # "
++CONFIG_SYS_LOAD_ADDR=0x84200000
+ # CONFIG_BOOTM_PLAN9 is not set
+ # CONFIG_BOOTM_RTEMS is not set
+ # CONFIG_CMD_ELF is not set
+diff --git a/configs/colibri-imx6ull_defconfig b/configs/colibri-imx6ull_defconfig
+index d0825472b2f..97f8d2e0fa9 100644
+--- a/configs/colibri-imx6ull_defconfig
++++ b/configs/colibri-imx6ull_defconfig
+@@ -23,6 +23,7 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+ # CONFIG_DISPLAY_BOARDINFO is not set
+ CONFIG_DISPLAY_BOARDINFO_LATE=y
+ CONFIG_SYS_PROMPT="Colibri iMX6ULL # "
++CONFIG_SYS_LOAD_ADDR=0x84200000
+ # CONFIG_BOOTM_PLAN9 is not set
+ # CONFIG_BOOTM_RTEMS is not set
+ # CONFIG_CMD_ELF is not set
+diff --git a/configs/colibri_imx6_defconfig b/configs/colibri_imx6_defconfig
+index 4f38d5cb483..80cba8f8a1e 100644
+--- a/configs/colibri_imx6_defconfig
++++ b/configs/colibri_imx6_defconfig
+@@ -21,6 +21,7 @@ CONFIG_SPL_MMC=y
+ CONFIG_SPL_SERIAL=y
+ CONFIG_SPL=y
+ CONFIG_CMD_HDMIDETECT=y
++CONFIG_SYS_LOAD_ADDR=0x14200000
+ CONFIG_SYS_MEMTEST_START=0x10000000
+ CONFIG_SYS_MEMTEST_END=0x10010000
+ CONFIG_DISTRO_DEFAULTS=y
+diff --git a/configs/colibri_imx7_defconfig b/configs/colibri_imx7_defconfig
+index e0de7f1ab18..64dd93237e1 100644
+--- a/configs/colibri_imx7_defconfig
++++ b/configs/colibri_imx7_defconfig
+@@ -10,6 +10,7 @@ CONFIG_TARGET_COLIBRI_IMX7=y
+ CONFIG_IMX_RDC=y
+ CONFIG_IMX_BOOTAUX=y
+ CONFIG_IMX_HAB=y
++CONFIG_SYS_LOAD_ADDR=0x84200000
+ CONFIG_OF_BOARD_FIXUP=y
+ CONFIG_SYS_MEMTEST_START=0x80000000
+ CONFIG_SYS_MEMTEST_END=0x8c000000
+diff --git a/configs/colibri_imx7_emmc_defconfig b/configs/colibri_imx7_emmc_defconfig
+index e4083b55c3a..c4f9058140a 100644
+--- a/configs/colibri_imx7_emmc_defconfig
++++ b/configs/colibri_imx7_emmc_defconfig
+@@ -11,6 +11,7 @@ CONFIG_ARMV7_BOOT_SEC_DEFAULT=y
+ CONFIG_IMX_RDC=y
+ CONFIG_IMX_BOOTAUX=y
+ CONFIG_IMX_HAB=y
++CONFIG_SYS_LOAD_ADDR=0x84200000
+ CONFIG_SYS_MEMTEST_START=0x80000000
+ CONFIG_SYS_MEMTEST_END=0x8c000000
+ CONFIG_DISTRO_DEFAULTS=y
+diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h
+index aa93d10f852..6eee23b7cf2 100644
+--- a/include/configs/apalis_imx6.h
++++ b/include/configs/apalis_imx6.h
+@@ -83,11 +83,11 @@
+
+ #define MEM_LAYOUT_ENV_SETTINGS \
+ "bootm_size=0x20000000\0" \
+- "fdt_addr_r=0x12100000\0" \
+- "kernel_addr_r=0x11000000\0" \
+- "pxefile_addr_r=0x17100000\0" \
+- "ramdisk_addr_r=0x12200000\0" \
+- "scriptaddr=0x17000000\0"
++ "fdt_addr_r=0x18200000\0" \
++ "kernel_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
++ "pxefile_addr_r=0x18300000\0" \
++ "ramdisk_addr_r=0x18400000\0" \
++ "scriptaddr=0x18280000\0"
+
+ #define CONFIG_EXTRA_ENV_SETTINGS \
+ BOOTENV \
+diff --git a/include/configs/colibri-imx6ull.h b/include/configs/colibri-imx6ull.h
+index 9e5212acb2e..1722966de3b 100644
+--- a/include/configs/colibri-imx6ull.h
++++ b/include/configs/colibri-imx6ull.h
+@@ -43,11 +43,11 @@
+
+ #define MEM_LAYOUT_ENV_SETTINGS \
+ "bootm_size=0x10000000\0" \
+- "fdt_addr_r=0x82100000\0" \
+- "kernel_addr_r=0x81000000\0" \
+- "pxefile_addr_r=0x87100000\0" \
+- "ramdisk_addr_r=0x82200000\0" \
+- "scriptaddr=0x87000000\0"
++ "fdt_addr_r=0x88200000\0" \
++ "kernel_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
++ "pxefile_addr_r=0x88300000\0" \
++ "ramdisk_addr_r=0x88400000\0" \
++ "scriptaddr=0x88280000\0"
+
+ #define UBI_BOOTCMD \
+ "ubiargs=ubi.mtd=ubi root=ubi0:rootfs rw rootfstype=ubifs " \
+diff --git a/include/configs/colibri_imx6.h b/include/configs/colibri_imx6.h
+index 9ca6bef192f..e5031eb42f1 100644
+--- a/include/configs/colibri_imx6.h
++++ b/include/configs/colibri_imx6.h
+@@ -72,11 +72,11 @@
+
+ #define MEM_LAYOUT_ENV_SETTINGS \
+ "bootm_size=0x10000000\0" \
+- "fdt_addr_r=0x12100000\0" \
+- "kernel_addr_r=0x11000000\0" \
+- "pxefile_addr_r=0x17100000\0" \
+- "ramdisk_addr_r=0x12200000\0" \
+- "scriptaddr=0x17000000\0"
++ "fdt_addr_r=0x18200000\0" \
++ "kernel_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
++ "pxefile_addr_r=0x18300000\0" \
++ "ramdisk_addr_r=0x18400000\0" \
++ "scriptaddr=0x18280000\0"
+
+ #define CONFIG_EXTRA_ENV_SETTINGS \
+ BOOTENV \
+diff --git a/include/configs/colibri_imx7.h b/include/configs/colibri_imx7.h
+index 3dba7bcef25..fd156819993 100644
+--- a/include/configs/colibri_imx7.h
++++ b/include/configs/colibri_imx7.h
+@@ -83,11 +83,11 @@
+
+ #define MEM_LAYOUT_ENV_SETTINGS \
+ "bootm_size=0x10000000\0" \
+- "fdt_addr_r=0x82000000\0" \
+- "kernel_addr_r=0x81000000\0" \
+- "pxefile_addr_r=0x87100000\0" \
+- "ramdisk_addr_r=0x82100000\0" \
+- "scriptaddr=0x87000000\0"
++ "fdt_addr_r=0x88200000\0" \
++ "kernel_addr_r=" __stringify(CONFIG_SYS_LOAD_ADDR) "\0" \
++ "pxefile_addr_r=0x88300000\0" \
++ "ramdisk_addr_r=0x88400000\0" \
++ "scriptaddr=0x88280000\0"
+
+ #define UBI_BOOTCMD \
+ "ubiargs=ubi.mtd=ubi root=ubi0:rootfs rootfstype=ubifs " \
+--
+2.35.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-arm-dts-Makefile-Prevent-build-errors-from-other-imx.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-arm-dts-Makefile-Prevent-build-errors-from-other-imx.patch
new file mode 100644
index 0000000..a92a4dd
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-arm-dts-Makefile-Prevent-build-errors-from-other-imx.patch
@@ -0,0 +1,53 @@
+From 27242a1feb7946c08b932f2562bc513313ec7f65 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Thu, 21 Sep 2023 10:08:32 -0300
+Subject: [PATCH] arm: dts: Makefile: Prevent build errors from other imx7 dts
+
+This commit addresses a build error in the arch/arm/dts/Makefile.
+
+The error occurred because of the following device tree files:
+- imx7d-pico-pi.dtb
+- imx7d-pico-hobbit.dtb
+
+This happend after enabling the DEVICE_TREE_INCLUDES configuration in
+order to check for the "recovery_tezi" environment variable.
+
+Error: arch/arm/dts/.imx7d-pico-pi.dtb.pre.tmp:93.3-11 syntax error
+FATAL ERROR: Unable to parse input tree
+Error: arch/arm/dts/.imx7d-pico-hobbit.dtb.pre.tmp:105.3-11 syntax error
+FATAL ERROR: Unable to parse input tree
+make[2]: *** [scripts/Makefile.lib:335: arch/arm/dts/imx7d-pico-hobbit.dtb] Error 1
+make[1]: *** [dts/Makefile:44: arch-dtbs] Error 2
+make: *** [Makefile:1164: dts/dt.dtb] Error 2
+
+Since we don't need these files for our binary target, remove them to
+prevent this failure.
+
+Upstream-Status: Inappropriate [Other]
+
+This problem has been resolved in U-Boot v2022.10. Although there is no
+specific commit addressing this issue, this patch removes the problematic
+files causing errors to facilitate the resolution process. This patch can
+be removed once we move to a newer U-Boot.
+
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+---
+ arch/arm/dts/Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
+index a7e0d9f6c0..3eed3dc84f 100644
+--- a/arch/arm/dts/Makefile
++++ b/arch/arm/dts/Makefile
+@@ -907,8 +907,6 @@ dtb-$(CONFIG_MX7) += imx7d-sdb.dtb \
+ imx7-colibri-rawnand.dtb \
+ imx7s-warp.dtb \
+ imx7d-meerkat96.dtb \
+- imx7d-pico-pi.dtb \
+- imx7d-pico-hobbit.dtb \
+ imx7d-smegw01.dtb
+
+ dtb-$(CONFIG_ARCH_MX7ULP) += imx7ulp-com.dtb \
+--
+2.40.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-arm-imx-add-u-boot-nand.imx-to-boot-from-NAND-withou.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-arm-imx-add-u-boot-nand.imx-to-boot-from-NAND-withou.patch
new file mode 100644
index 0000000..6dd2d99
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-arm-imx-add-u-boot-nand.imx-to-boot-from-NAND-withou.patch
@@ -0,0 +1,61 @@
+From 444331b1b1c8a94e5cdcfaddb447f8e718793ec4 Mon Sep 17 00:00:00 2001
+From: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Date: Fri, 10 Mar 2023 11:07:52 +0100
+Subject: [PATCH] arm: imx: add u-boot-nand.imx to boot from NAND without SPL
+
+U-Boot can be booted from NAND without SPL by prepending the DCD header to
+the actual U-Boot binary. However this requires prepending 1024 bytes to
+u-boot.imx (DCD + u-boot.bin).
+
+There is already a similar target to build spl/u-boot-nand-spl.imx, add the
+same option for no-SPL boot.
+
+Tested on i.MX6ULL.
+
+The resulting layout of u-boot-nand.imx is:
+
+ - Offset 0x0000 (0 KiB): padding
+ - Offset 0x0400 (1 KiB): DCD header
+ - Offset 0x1000 (4 KiB): u-boot.bin
+
+Upstream-Status: Backport [95942f99a7057359c07bf383214d57154e2466fe]
+Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
+---
+ Makefile | 3 +++
+ arch/arm/mach-imx/Makefile | 6 ++++++
+ 2 files changed, 9 insertions(+)
+
+diff --git a/Makefile b/Makefile
+index 98867fbe06..402adbe26c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1562,6 +1562,9 @@ endif
+ u-boot.uim: u-boot.bin FORCE
+ $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
+
++u-boot-nand.imx: u-boot.imx FORCE
++ $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
++
+ u-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL $(if $(CONFIG_OF_SEPARATE),u-boot.img,u-boot.uim) FORCE
+ $(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
+
+diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
+index aa0b6447f1..e9b484fa9b 100644
+--- a/arch/arm/mach-imx/Makefile
++++ b/arch/arm/mach-imx/Makefile
+@@ -132,6 +132,12 @@ u-boot.imx: MKIMAGEOUTPUT = u-boot.imx.log
+ u-boot.imx: u-boot.bin u-boot.cfgout $(PLUGIN).bin FORCE
+ $(call if_changed,mkimage)
+
++quiet_cmd_u-boot-nand_imx = GEN $@
++cmd_u-boot-nand_imx = (dd bs=1024 count=1 if=/dev/zero 2>/dev/null) | cat - $< > $@
++
++u-boot-nand.imx: u-boot.imx FORCE
++ $(call if_changed,u-boot-nand_imx)
++
+ ifeq ($(CONFIG_MULTI_DTB_FIT),y)
+ MKIMAGEFLAGS_u-boot-dtb.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) \
+ -T $(IMAGE_TYPE) -e $(CONFIG_SYS_TEXT_BASE)
+--
+2.42.0
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-arm-mach-imx-Makefile-Extend-u-boot-nand.imx-padding.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-arm-mach-imx-Makefile-Extend-u-boot-nand.imx-padding.patch
new file mode 100644
index 0000000..95878a2
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-arm-mach-imx-Makefile-Extend-u-boot-nand.imx-padding.patch
@@ -0,0 +1,43 @@
+From 7dede4033bd0391d240914b3e54ec49a984d39b2 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Tue, 3 Oct 2023 18:26:54 -0300
+Subject: [PATCH] arm: mach-imx: Makefile: Extend u-boot-nand.imx padding
+
+Extend the padding process of u-boot-nand.imx target by adding 10k bytes
+of zeros to the end of the binary using the 'dd' command.
+
+The existing padding method did not generate a functional binary,
+as discussed in more detail in this thread [1]. Instead, we adopt the
+end-padding calculation method documented in 'board/doc/colibri_imx7.rst'
+as a reference, which is relevant for iMX7 with NAND storage.
+
+Adding 10k bytes of zeros provides an approximate value that makes the
+proper padding for these NAND devices.
+
+[1] https://lore.kernel.org/all/CAC4tdFUqffQzRQFv5AGe_xtbFy1agr2SEpn_FzEdexhwjdryyw@mail.gmail.com/
+
+Upstream-Status: Backport [7dede4033bd0391d240914b3e54ec49a984d39b2]
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Reviewed-by: Fabio Estevam <festevam@gmail.com>
+---
+ arch/arm/mach-imx/Makefile | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
+index aebfa6517b..6904cf3880 100644
+--- a/arch/arm/mach-imx/Makefile
++++ b/arch/arm/mach-imx/Makefile
+@@ -142,7 +142,9 @@ u-boot.imx: u-boot.bin u-boot.cfgout $(PLUGIN).bin FORCE
+ $(call if_changed,mkimage)
+
+ quiet_cmd_u-boot-nand_imx = GEN $@
+-cmd_u-boot-nand_imx = (dd bs=1024 count=1 if=/dev/zero 2>/dev/null) | cat - $< > $@
++cmd_u-boot-nand_imx = (dd bs=1024 count=1 if=/dev/zero 2>/dev/null) | cat - $< > $@.zero-padded ; \
++ (dd bs=10k count=1 if=/dev/zero 2>/dev/null) | cat $@.zero-padded - > $@ ; \
++ rm -f $@.zero-padded
+
+ u-boot-nand.imx: u-boot.imx FORCE
+ $(call if_changed,u-boot-nand_imx)
+--
+2.42.0
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-colibri-imx7-Call-fdt_increase_size.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-colibri-imx7-Call-fdt_increase_size.patch
new file mode 100644
index 0000000..723e903
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-colibri-imx7-Call-fdt_increase_size.patch
@@ -0,0 +1,66 @@
+From 92be5e4f74130f704357b8f96d62ae92eb79a2f2 Mon Sep 17 00:00:00 2001
+From: Fabio Estevam <festevam@denx.de>
+Date: Tue, 4 Jul 2023 14:09:45 -0300
+Subject: [PATCH] colibri-imx7: Call fdt_increase_size()
+
+For changing the USB OTG node status from "okay" to "disabled" more
+space is needed, so call fdt_increase_size() to avoid the following
+error:
+
+```
+ U-Boot 2023.07-rc5-0.0.0-devel+git.580eb31199be (Jun 27 2023 - 13:39:58 +0000)
+ CPU: Freescale i.MX7S rev1.2 800 MHz (running at 792 MHz)
+ CPU: Extended Commercial temperature grade (-20C to 105C) at 30C
+ Reset cause: POR
+ DRAM: initcall sequence 8786eafc failed at call 8781b351 (err=-3)
+ ### ERROR ### Please RESET the board ###
+```
+
+Ideally, fdt_status_disabled() should call fdt_increase_size() internally,
+so that there would be no need for manually calling it in board code.
+
+Do it manually for now to fix the regression.
+
+Based on the code from board/CZ.NIC/turris_omnia/turris_omnia.c.
+
+Upstream-Status: Backport [92be5e4f74130f704357b8f96d62ae92eb79a2f2]
+
+Reported-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com> # Toradex Colibri iMX7S
+---
+ board/toradex/colibri_imx7/colibri_imx7.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/board/toradex/colibri_imx7/colibri_imx7.c b/board/toradex/colibri_imx7/colibri_imx7.c
+index 3e79ab93a9..119e67b47f 100644
+--- a/board/toradex/colibri_imx7/colibri_imx7.c
++++ b/board/toradex/colibri_imx7/colibri_imx7.c
+@@ -311,10 +311,23 @@ int ft_board_setup(void *blob, struct bd_info *bd)
+ #ifdef CONFIG_USB_EHCI_MX7
+ int board_fix_fdt(void *rw_fdt_blob)
+ {
++ int ret;
++
+ /* i.MX 7Solo has only one single USB OTG1 but no USB host port */
+ if (is_cpu_type(MXC_CPU_MX7S)) {
+ int offset = fdt_path_offset(rw_fdt_blob, "/soc/bus@30800000/usb@30b20000");
+
++ /*
++ * We're changing from status = "okay" to status = "disabled".
++ * In this case we'll need more space, so increase the size
++ * a little bit.
++ */
++ ret = fdt_increase_size(rw_fdt_blob, 32);
++ if (ret < 0) {
++ printf("Cannot increase FDT size: %d\n", ret);
++ return ret;
++ }
++
+ return fdt_status_disabled(rw_fdt_blob, offset);
+ }
+
+--
+2.42.0
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-colibri_imx6-fix-RALAT-and-WALAT-values.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-colibri_imx6-fix-RALAT-and-WALAT-values.patch
new file mode 100644
index 0000000..3db4695
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-colibri_imx6-fix-RALAT-and-WALAT-values.patch
@@ -0,0 +1,51 @@
+From ea6fc42a58b92c5771a881a268d2dd5ce602d79e Mon Sep 17 00:00:00 2001
+From: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Date: Wed, 14 Jun 2023 09:12:47 +0200
+Subject: [PATCH] colibri_imx6: fix RALAT and WALAT values
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Running a memtest in U-Boot and Linux shows that some Colibri iMX6
+produce bitflips at temperatures above 60°C. This happens because the
+RALAT and WALAT values on the Colibri iMX6 are too low. The problems
+were introduced by commit 09dbac8174c4 ("mx6: ddr: Restore ralat/walat
+in write level calibration") before the calibration process overwrote
+the values and set them to the maximum value. With this commit, we make
+sure that the RALAT and WALAT values are set to the maximum values
+again. This has been proven to work for years.
+
+Upstream-Status: Submitted [https://lore.kernel.org/all/20230614090137.17626-1-francesco@dolcini.it/]
+Fixes: 09dbac8174c4 ("mx6: ddr: Restore ralat/walat in write level calibration")
+Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+---
+ board/toradex/colibri_imx6/colibri_imx6.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/board/toradex/colibri_imx6/colibri_imx6.c b/board/toradex/colibri_imx6/colibri_imx6.c
+index ab2ab587ff..a1e7ec3838 100644
+--- a/board/toradex/colibri_imx6/colibri_imx6.c
++++ b/board/toradex/colibri_imx6/colibri_imx6.c
+@@ -767,8 +767,7 @@ MX6_MMDC_P1_MPRDDQBY3DL, 0x33333333,
+ /*
+ * MDMISC mirroring interleaved (row/bank/col)
+ */
+-/* TODO: check what the RALAT field does */
+-MX6_MMDC_P0_MDMISC, 0x00081740,
++MX6_MMDC_P0_MDMISC, 0x000b17c0,
+
+ /*
+ * MDSCR con_req
+@@ -900,8 +899,7 @@ MX6_MMDC_P1_MPRDDQBY3DL, 0x33333333,
+ /*
+ * MDMISC mirroring interleaved (row/bank/col)
+ */
+-/* TODO: check what the RALAT field does */
+-MX6_MMDC_P0_MDMISC, 0x00081740,
++MX6_MMDC_P0_MDMISC, 0x000b17c0,
+
+ /*
+ * MDSCR con_req
+--
+2.39.2
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-configs-colibri-imx7-Fix-bad-block-table-in-flash-co.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-configs-colibri-imx7-Fix-bad-block-table-in-flash-co.patch
new file mode 100644
index 0000000..1c9dc08
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-configs-colibri-imx7-Fix-bad-block-table-in-flash-co.patch
@@ -0,0 +1,35 @@
+From 4bb9265b21bcd6dfa2c2aee04540ab69fc5c3c07 Mon Sep 17 00:00:00 2001
+From: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Date: Wed, 8 Feb 2023 16:11:49 +0100
+Subject: [PATCH] configs: colibri-imx7: Fix bad block table in flash
+ configuration
+
+Make sure that the bad block table in flash is used on Colibri iMX7.
+Without this configuration enabled U-Boot corrupts the bad block table
+and Linux will update the table on each reboot. The corruption occurs
+because if CONFIG_SYS_NAND_USE_FLASH_BBT is not set, U-boot will store
+bad blocks out of band, while the Linux driver for the iMX7 will store
+them in band in a bad block table.
+
+Upstream-Status: Submitted [https://lore.kernel.org/all/20230210103351.22907-1-francesco@dolcini.it/]
+Fixes: fd8c1fc9430 ("arm: dts: imx7: colibri: add raw NAND support")
+Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+---
+ configs/colibri_imx7_defconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configs/colibri_imx7_defconfig b/configs/colibri_imx7_defconfig
+index 64dd93237e..d8afe3ef6f 100644
+--- a/configs/colibri_imx7_defconfig
++++ b/configs/colibri_imx7_defconfig
+@@ -68,6 +68,7 @@ CONFIG_FSL_USDHC=y
+ CONFIG_MTD=y
+ CONFIG_DM_MTD=y
+ CONFIG_MTD_RAW_NAND=y
++CONFIG_SYS_NAND_USE_FLASH_BBT=y
+ CONFIG_NAND_MXS_DT=y
+ CONFIG_SYS_NAND_ONFI_DETECTION=y
+ CONFIG_MTD_UBI_FASTMAP=y
+--
+2.37.2
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-toradex-colibri_imx7-Enable-nand-emmc-detection-and-.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-toradex-colibri_imx7-Enable-nand-emmc-detection-and-.patch
new file mode 100644
index 0000000..1adba8e
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-toradex-colibri_imx7-Enable-nand-emmc-detection-and-.patch
@@ -0,0 +1,82 @@
+From a3554a151aa9c9ab2affd289458269273b08dfcf Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Wed, 27 Sep 2023 13:22:25 -0300
+Subject: [PATCH] toradex: colibri_imx7: Enable nand/emmc detection and set
+ boot variant
+
+Add detection of eMMC vs NAND devices on the Colibri iMX7
+board. A GPIO is configured to detect the presence of an on-board resistor
+that is configured differently based on the flash memory used. Depending on
+the detection result, the 'variant' environment variable is set to '-emmc'
+or cleared, indicating the type of storage device.
+
+This enhancement improves variant detection during system initialization
+through USB recovery mode, where U-Boot is loaded directly to RAM. This
+allows variant detection for an accurate device tree selection.
+
+Upstream-Status: Submitted [https://lore.kernel.org/u-boot/20231002115749.15160-1-hiagofranco@gmail.com/]
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+
+---
+ board/toradex/colibri_imx7/colibri_imx7.c | 24 +++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/board/toradex/colibri_imx7/colibri_imx7.c b/board/toradex/colibri_imx7/colibri_imx7.c
+index 119e67b47f..f0356af008 100644
+--- a/board/toradex/colibri_imx7/colibri_imx7.c
++++ b/board/toradex/colibri_imx7/colibri_imx7.c
+@@ -53,6 +53,11 @@ DECLARE_GLOBAL_DATA_PTR;
+
+ #define USB_CDET_GPIO IMX_GPIO_NR(7, 14)
+
++#define FLASH_DETECTION_CTRL (PAD_CTL_HYS | PAD_CTL_PUE)
++#define FLASH_DET_GPIO IMX_GPIO_NR(6, 11)
++
++static bool is_emmc;
++
+ int dram_init(void)
+ {
+ gd->ram_size = get_ram_size((void *)PHYS_SDRAM, imx_ddr_size());
+@@ -60,6 +65,10 @@ int dram_init(void)
+ return 0;
+ }
+
++static iomux_v3_cfg_t const flash_detection_pads[] = {
++ MX7D_PAD_SD3_RESET_B__GPIO6_IO11 | MUX_PAD_CTRL(FLASH_DETECTION_CTRL),
++};
++
+ static iomux_v3_cfg_t const uart1_pads[] = {
+ MX7D_PAD_UART1_RX_DATA__UART1_DTE_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
+ MX7D_PAD_UART1_TX_DATA__UART1_DTE_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
+@@ -183,6 +192,16 @@ int board_init(void)
+ /* address of boot parameters */
+ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
++ /*
++ * Enable GPIO on NAND_WE_B/eMMC_RST with 100k pull-down. eMMC_RST
++ * is pulled high with 4.7k for eMMC devices. This allows to reliably
++ * detect eMMC/NAND flash
++ */
++ imx_iomux_v3_setup_multiple_pads(flash_detection_pads, ARRAY_SIZE(flash_detection_pads));
++ gpio_request(FLASH_DET_GPIO, "flash-detection-gpio");
++ is_emmc = gpio_get_value(FLASH_DET_GPIO);
++ gpio_free(FLASH_DET_GPIO);
++
+ #ifdef CONFIG_FEC_MXC
+ setup_fec();
+ #endif
+@@ -348,6 +367,11 @@ int board_late_init(void)
+ env_set("bootcmd", "sdp 0");
+ }
+ #endif
++ if (is_emmc)
++ env_set("variant", "-emmc");
++ else
++ env_set("variant", "");
++
+ return 0;
+ }
+ #endif /* CONFIG_BOARD_LATE_INIT */
+--
+2.40.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0001-toradex-tdx-cfg-block-use-only-snprintf.patch b/recipes-bsp/u-boot/u-boot-toradex/0001-toradex-tdx-cfg-block-use-only-snprintf.patch
new file mode 100644
index 0000000..bd03630
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0001-toradex-tdx-cfg-block-use-only-snprintf.patch
@@ -0,0 +1,71 @@
+From e97bff4bdac99b0ba5251275551741f4039b23e0 Mon Sep 17 00:00:00 2001
+From: Philippe Schenker <philippe.schenker@toradex.com>
+Date: Mon, 13 Jun 2022 19:35:21 +0200
+Subject: [PATCH 1/5] toradex: tdx-cfg-block: use only snprintf
+
+Prevent memory issues that could appear with sprintf. Replace all
+sprintf occurences with snprintf.
+
+Upstream-Status: Backport [39ff0624bc5ad287fced0f60be9b977d07b1813a]
+Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+---
+ board/toradex/common/tdx-common.c | 27 +++++++++++++++------------
+ 1 file changed, 15 insertions(+), 12 deletions(-)
+
+diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
+index 9db4553e0f7..2207818447a 100644
+--- a/board/toradex/common/tdx-common.c
++++ b/board/toradex/common/tdx-common.c
+@@ -89,11 +89,13 @@ int show_board_info(void)
+ tdx_eth_addr.nic = htonl(tdx_serial << 8);
+ checkboard();
+ } else {
+- sprintf(tdx_serial_str, "%08u", tdx_serial);
+- sprintf(tdx_board_rev_str, "V%1d.%1d%c",
+- tdx_hw_tag.ver_major,
+- tdx_hw_tag.ver_minor,
+- (char)tdx_hw_tag.ver_assembly + 'A');
++ snprintf(tdx_serial_str, sizeof(tdx_serial_str),
++ "%08u", tdx_serial);
++ snprintf(tdx_board_rev_str, sizeof(tdx_board_rev_str),
++ "V%1d.%1d%c",
++ tdx_hw_tag.ver_major,
++ tdx_hw_tag.ver_minor,
++ (char)tdx_hw_tag.ver_assembly + 'A');
+
+ env_set("serial#", tdx_serial_str);
+
+@@ -109,12 +111,13 @@ int show_board_info(void)
+ tdx_carrier_board_name = (char *)
+ toradex_carrier_boards[tdx_car_hw_tag.prodid];
+
+- sprintf(tdx_car_serial_str, "%08u", tdx_car_serial);
+- sprintf(tdx_car_rev_str, "V%1d.%1d%c",
+- tdx_car_hw_tag.ver_major,
+- tdx_car_hw_tag.ver_minor,
+- (char)tdx_car_hw_tag.ver_assembly +
+- 'A');
++ snprintf(tdx_car_serial_str, sizeof(tdx_car_serial_str),
++ "%08u", tdx_car_serial);
++ snprintf(tdx_car_rev_str, sizeof(tdx_car_rev_str),
++ "V%1d.%1d%c",
++ tdx_car_hw_tag.ver_major,
++ tdx_car_hw_tag.ver_minor,
++ (char)tdx_car_hw_tag.ver_assembly + 'A');
+
+ env_set("carrier_serial#", tdx_car_serial_str);
+ printf("Carrier: Toradex %s %s, Serial# %s\n",
+@@ -170,7 +173,7 @@ int ft_common_board_setup(void *blob, struct bd_info *bd)
+ if (tdx_hw_tag.ver_major) {
+ char prod_id[5];
+
+- sprintf(prod_id, "%04u", tdx_hw_tag.prodid);
++ snprintf(prod_id, sizeof(prod_id), "%04u", tdx_hw_tag.prodid);
+ fdt_setprop(blob, 0, "toradex,product-id", prod_id, 5);
+
+ fdt_setprop(blob, 0, "toradex,board-rev", tdx_board_rev_str,
+--
+2.20.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0002-board-apalis-colibri-imx6-imx6ull-imx7-Add-fastboot-.patch b/recipes-bsp/u-boot/u-boot-toradex/0002-board-apalis-colibri-imx6-imx6ull-imx7-Add-fastboot-.patch
new file mode 100644
index 0000000..d46cbfc
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0002-board-apalis-colibri-imx6-imx6ull-imx7-Add-fastboot-.patch
@@ -0,0 +1,133 @@
+From c0ee1a5b26f9cddc55c86740fae7b7e658281640 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Tue, 7 Nov 2023 09:43:34 -0300
+Subject: [PATCH 2/2] board: apalis/colibri imx6/imx6ull/imx7: Add fastboot
+ bootcmd support
+
+This commit adds support for Fastboot boot commands by checking both
+CONFIG_CMD_USB_SDP and CONFIG_USB_FUNCTION_FASTBOOT. If either of these
+configurations is set, it indicates that the board is in recovery mode
+and can use either SDP or Fastboot.
+
+The default option remains the SDP command, but if
+CONFIG_CMD_FASTBOOT is set, it changes to 'fastboot usb 0' as
+the boot command.
+
+Upstream-Status: Submitted [https://lore.kernel.org/u-boot/20231109162401.38941-1-hiago.franco@toradex.com/T/#t]
+
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+---
+ board/toradex/apalis_imx6/apalis_imx6.c | 13 ++++++++-----
+ board/toradex/colibri-imx6ull/colibri-imx6ull.c | 13 ++++++++-----
+ board/toradex/colibri_imx6/colibri_imx6.c | 13 ++++++++-----
+ board/toradex/colibri_imx7/colibri_imx7.c | 14 +++++++++-----
+ 4 files changed, 33 insertions(+), 20 deletions(-)
+
+diff --git a/board/toradex/apalis_imx6/apalis_imx6.c b/board/toradex/apalis_imx6/apalis_imx6.c
+index 8d2642f25d..da6b20607d 100644
+--- a/board/toradex/apalis_imx6/apalis_imx6.c
++++ b/board/toradex/apalis_imx6/apalis_imx6.c
+@@ -700,13 +700,16 @@ int board_late_init(void)
+ env_set("board_rev", env_str);
+ #endif /* CONFIG_BOARD_LATE_INIT */
+
+-#ifdef CONFIG_CMD_USB_SDP
+- if (is_boot_from_usb()) {
+- printf("Serial Downloader recovery mode, using sdp command\n");
++ if (IS_ENABLED(CONFIG_USB) && is_boot_from_usb()) {
+ env_set("bootdelay", "0");
+- env_set("bootcmd", "sdp 0");
++ if (IS_ENABLED(CONFIG_CMD_USB_SDP)) {
++ printf("Serial Downloader recovery mode, using sdp command\n");
++ env_set("bootcmd", "sdp 0");
++ } else if (IS_ENABLED(CONFIG_CMD_FASTBOOT)) {
++ printf("Fastboot recovery mode, using fastboot command\n");
++ env_set("bootcmd", "fastboot usb 0");
++ }
+ }
+-#endif /* CONFIG_CMD_USB_SDP */
+
+ return 0;
+ }
+diff --git a/board/toradex/colibri-imx6ull/colibri-imx6ull.c b/board/toradex/colibri-imx6ull/colibri-imx6ull.c
+index ba4e0df2c2..982618e248 100644
+--- a/board/toradex/colibri-imx6ull/colibri-imx6ull.c
++++ b/board/toradex/colibri-imx6ull/colibri-imx6ull.c
+@@ -187,13 +187,16 @@ int board_late_init(void)
+ add_board_boot_modes(board_boot_modes);
+ #endif
+
+-#ifdef CONFIG_CMD_USB_SDP
+- if (is_boot_from_usb()) {
+- printf("Serial Downloader recovery mode, using sdp command\n");
++ if (IS_ENABLED(CONFIG_USB) && is_boot_from_usb()) {
+ env_set("bootdelay", "0");
+- env_set("bootcmd", "sdp 0");
++ if (IS_ENABLED(CONFIG_CMD_USB_SDP)) {
++ printf("Serial Downloader recovery mode, using sdp command\n");
++ env_set("bootcmd", "sdp 0");
++ } else if (IS_ENABLED(CONFIG_CMD_FASTBOOT)) {
++ printf("Fastboot recovery mode, using fastboot command\n");
++ env_set("bootcmd", "fastboot usb 0");
++ }
+ }
+-#endif /* CONFIG_CMD_USB_SDP */
+
+ #if defined(CONFIG_DM_VIDEO)
+ setup_lcd();
+diff --git a/board/toradex/colibri_imx6/colibri_imx6.c b/board/toradex/colibri_imx6/colibri_imx6.c
+index ab2ab587ff..923999a120 100644
+--- a/board/toradex/colibri_imx6/colibri_imx6.c
++++ b/board/toradex/colibri_imx6/colibri_imx6.c
+@@ -620,13 +620,16 @@ int board_late_init(void)
+ env_set("board_rev", env_str);
+ #endif
+
+-#ifdef CONFIG_CMD_USB_SDP
+- if (is_boot_from_usb()) {
+- printf("Serial Downloader recovery mode, using sdp command\n");
++ if (IS_ENABLED(CONFIG_USB) && is_boot_from_usb()) {
+ env_set("bootdelay", "0");
+- env_set("bootcmd", "sdp 0");
++ if (IS_ENABLED(CONFIG_CMD_USB_SDP)) {
++ printf("Serial Downloader recovery mode, using sdp command\n");
++ env_set("bootcmd", "sdp 0");
++ } else if (IS_ENABLED(CONFIG_CMD_FASTBOOT)) {
++ printf("Fastboot recovery mode, using fastboot command\n");
++ env_set("bootcmd", "fastboot usb 0");
++ }
+ }
+-#endif /* CONFIG_CMD_USB_SDP */
+
+ return 0;
+ }
+diff --git a/board/toradex/colibri_imx7/colibri_imx7.c b/board/toradex/colibri_imx7/colibri_imx7.c
+index 53c0b44152..df03cf7cf3 100644
+--- a/board/toradex/colibri_imx7/colibri_imx7.c
++++ b/board/toradex/colibri_imx7/colibri_imx7.c
+@@ -357,13 +357,17 @@ int board_late_init(void)
+ setup_lcd();
+ #endif
+
+-#if defined(CONFIG_CMD_USB_SDP)
+- if (is_boot_from_usb()) {
+- printf("Serial Downloader recovery mode, using sdp command\n");
++ if (IS_ENABLED(CONFIG_USB) && is_boot_from_usb()) {
+ env_set("bootdelay", "0");
+- env_set("bootcmd", "sdp 0");
++ if (IS_ENABLED(CONFIG_CMD_USB_SDP)) {
++ printf("Serial Downloader recovery mode, using sdp command\n");
++ env_set("bootcmd", "sdp 0");
++ } else if (IS_ENABLED(CONFIG_CMD_FASTBOOT)) {
++ printf("Fastboot recovery mode, using fastboot command\n");
++ env_set("bootcmd", "fastboot usb 0");
++ }
+ }
+-#endif
++
+ if (is_emmc)
+ env_set("variant", "-emmc");
+ else
+--
+2.42.0
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0002-toradex-tdx-cfg-block-use-defines-for-string-length.patch b/recipes-bsp/u-boot/u-boot-toradex/0002-toradex-tdx-cfg-block-use-defines-for-string-length.patch
new file mode 100644
index 0000000..4a6fd83
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0002-toradex-tdx-cfg-block-use-defines-for-string-length.patch
@@ -0,0 +1,45 @@
+From 44c266438be85e0431a490a60a4ab3f174ecca77 Mon Sep 17 00:00:00 2001
+From: Philippe Schenker <philippe.schenker@toradex.com>
+Date: Mon, 13 Jun 2022 19:35:22 +0200
+Subject: [PATCH 2/5] toradex: tdx-cfg-block: use defines for string length
+
+With those defines the length can be reused and is in one place
+extendable.
+
+Upstream-Status: Backport [494ef10c3bf7859e7d21d9e1d608dc0b634451c2]
+Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+---
+ board/toradex/common/tdx-common.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
+index 2207818447a..94e603c14f4 100644
+--- a/board/toradex/common/tdx-common.c
++++ b/board/toradex/common/tdx-common.c
+@@ -22,13 +22,17 @@
+
+ #define TORADEX_OUI 0x00142dUL
+
++#define SERIAL_STR_LEN 8
++#define MODULE_VER_STR_LEN 4 // V1.1
++#define MODULE_REV_STR_LEN 1 // [A-Z]
++
+ #ifdef CONFIG_TDX_CFG_BLOCK
+-static char tdx_serial_str[9];
+-static char tdx_board_rev_str[6];
++static char tdx_serial_str[SERIAL_STR_LEN + 1];
++static char tdx_board_rev_str[MODULE_VER_STR_LEN + MODULE_REV_STR_LEN + 1];
+
+ #ifdef CONFIG_TDX_CFG_BLOCK_EXTRA
+-static char tdx_car_serial_str[9];
+-static char tdx_car_rev_str[6];
++static char tdx_car_serial_str[SERIAL_STR_LEN + 1];
++static char tdx_car_rev_str[MODULE_VER_STR_LEN + MODULE_REV_STR_LEN + 1];
+ static char *tdx_carrier_board_name;
+ #endif
+
+--
+2.20.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0003-toradex-tdx-cfg-block-extend-assembly-version.patch b/recipes-bsp/u-boot/u-boot-toradex/0003-toradex-tdx-cfg-block-extend-assembly-version.patch
new file mode 100644
index 0000000..a92a535
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0003-toradex-tdx-cfg-block-extend-assembly-version.patch
@@ -0,0 +1,181 @@
+From a7021f904505da69155257612c8cb011be735290 Mon Sep 17 00:00:00 2001
+From: Philippe Schenker <philippe.schenker@toradex.com>
+Date: Mon, 13 Jun 2022 19:35:23 +0200
+Subject: [PATCH 3/5] toradex: tdx-cfg-block: extend assembly version
+
+There are two decimal digits reserved to encode the module version and
+revision. This code so far implemented A-Z which used 0-25 of this
+range.
+This commit extends the range to make use of all 99 numbers. After
+capital letters the form with a hashtag and number (e.g. #26) is used.
+
+Examples:
+
+If the assembly version is between zero and 25 the numbering is as follows,
+as it also has been before this commit:
+0: V0.0A
+1: V0.0B
+...
+25: V0.0Z
+
+New numbering of assembly version:
+If the number is between 26 and 99 the new assembly version name is:
+26: V0.0#26
+27: V0.0#27
+...
+99: V0.0#99
+
+Upstream-Status: Backport [7e27ce16c5d289e5b9712a179e798ea4eb831816]
+Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+---
+ board/toradex/common/tdx-cfg-block.c | 32 ++++++++++++++++++++++++----
+ board/toradex/common/tdx-common.c | 25 +++++++++++++++++-----
+ 2 files changed, 48 insertions(+), 9 deletions(-)
+
+diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c
+index 6c8cf4592d1..678d4e07c21 100644
+--- a/board/toradex/common/tdx-cfg-block.c
++++ b/board/toradex/common/tdx-cfg-block.c
+@@ -354,6 +354,18 @@ out:
+ return ret;
+ }
+
++static int parse_assembly_string(char *string_to_parse, u16 *assembly)
++{
++ if (string_to_parse[3] >= 'A' && string_to_parse[3] <= 'Z')
++ *assembly = string_to_parse[3] - 'A';
++ else if (string_to_parse[3] == '#')
++ *assembly = dectoul(&string_to_parse[4], NULL);
++ else
++ return -EINVAL;
++
++ return 0;
++}
++
+ static int get_cfgblock_interactive(void)
+ {
+ char message[CONFIG_SYS_CBSIZE];
+@@ -362,6 +374,7 @@ static int get_cfgblock_interactive(void)
+ char wb = 'n';
+ char mem8g = 'n';
+ int len = 0;
++ int ret = 0;
+
+ /* Unknown module by default */
+ tdx_hw_tag.prodid = 0;
+@@ -545,13 +558,18 @@ static int get_cfgblock_interactive(void)
+ }
+
+ while (len < 4) {
+- sprintf(message, "Enter the module version (e.g. V1.1B): V");
++ sprintf(message, "Enter the module version (e.g. V1.1B or V1.1#26): V");
+ len = cli_readline(message);
+ }
+
+ tdx_hw_tag.ver_major = console_buffer[0] - '0';
+ tdx_hw_tag.ver_minor = console_buffer[2] - '0';
+- tdx_hw_tag.ver_assembly = console_buffer[3] - 'A';
++
++ ret = parse_assembly_string(console_buffer, &tdx_hw_tag.ver_assembly);
++ if (ret) {
++ printf("Parsing module version failed\n");
++ return ret;
++ }
+
+ while (len < 8) {
+ sprintf(message, "Enter module serial number: ");
+@@ -754,6 +772,7 @@ static int get_cfgblock_carrier_interactive(void)
+ {
+ char message[CONFIG_SYS_CBSIZE];
+ int len;
++ int ret = 0;
+
+ printf("Supported carrier boards:\n");
+ printf("CARRIER BOARD NAME\t\t [ID]\n");
+@@ -767,13 +786,18 @@ static int get_cfgblock_carrier_interactive(void)
+ tdx_car_hw_tag.prodid = dectoul(console_buffer, NULL);
+
+ do {
+- sprintf(message, "Enter carrier board version (e.g. V1.1B): V");
++ sprintf(message, "Enter carrier board version (e.g. V1.1B or V1.1#26): V");
+ len = cli_readline(message);
+ } while (len < 4);
+
+ tdx_car_hw_tag.ver_major = console_buffer[0] - '0';
+ tdx_car_hw_tag.ver_minor = console_buffer[2] - '0';
+- tdx_car_hw_tag.ver_assembly = console_buffer[3] - 'A';
++
++ ret = parse_assembly_string(console_buffer, &tdx_car_hw_tag.ver_assembly);
++ if (ret) {
++ printf("Parsing module version failed\n");
++ return ret;
++ }
+
+ while (len < 8) {
+ sprintf(message, "Enter carrier board serial number: ");
+diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
+index 94e603c14f4..5ad5d00a0d9 100644
+--- a/board/toradex/common/tdx-common.c
++++ b/board/toradex/common/tdx-common.c
+@@ -24,7 +24,7 @@
+
+ #define SERIAL_STR_LEN 8
+ #define MODULE_VER_STR_LEN 4 // V1.1
+-#define MODULE_REV_STR_LEN 1 // [A-Z]
++#define MODULE_REV_STR_LEN 3 // [A-Z] or #[26-99]
+
+ #ifdef CONFIG_TDX_CFG_BLOCK
+ static char tdx_serial_str[SERIAL_STR_LEN + 1];
+@@ -83,6 +83,21 @@ void get_board_serial(struct tag_serialnr *serialnr)
+ }
+ #endif /* CONFIG_SERIAL_TAG */
+
++static const char *get_board_assembly(u16 ver_assembly)
++{
++ static char ver_name[MODULE_REV_STR_LEN + 1];
++
++ if (ver_assembly < 26) {
++ ver_name[0] = (char)ver_assembly + 'A';
++ ver_name[1] = '\0';
++ } else {
++ snprintf(ver_name, sizeof(ver_name),
++ "#%u", ver_assembly);
++ }
++
++ return ver_name;
++}
++
+ int show_board_info(void)
+ {
+ unsigned char ethaddr[6];
+@@ -96,10 +111,10 @@ int show_board_info(void)
+ snprintf(tdx_serial_str, sizeof(tdx_serial_str),
+ "%08u", tdx_serial);
+ snprintf(tdx_board_rev_str, sizeof(tdx_board_rev_str),
+- "V%1d.%1d%c",
++ "V%1d.%1d%s",
+ tdx_hw_tag.ver_major,
+ tdx_hw_tag.ver_minor,
+- (char)tdx_hw_tag.ver_assembly + 'A');
++ get_board_assembly(tdx_hw_tag.ver_assembly));
+
+ env_set("serial#", tdx_serial_str);
+
+@@ -118,10 +133,10 @@ int show_board_info(void)
+ snprintf(tdx_car_serial_str, sizeof(tdx_car_serial_str),
+ "%08u", tdx_car_serial);
+ snprintf(tdx_car_rev_str, sizeof(tdx_car_rev_str),
+- "V%1d.%1d%c",
++ "V%1d.%1d%s",
+ tdx_car_hw_tag.ver_major,
+ tdx_car_hw_tag.ver_minor,
+- (char)tdx_car_hw_tag.ver_assembly + 'A');
++ get_board_assembly(tdx_car_hw_tag.ver_assembly));
+
+ env_set("carrier_serial#", tdx_car_serial_str);
+ printf("Carrier: Toradex %s %s, Serial# %s\n",
+--
+2.20.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0004-toradex-tdx-cfg-block-add-new-toradex-oui-range.patch b/recipes-bsp/u-boot/u-boot-toradex/0004-toradex-tdx-cfg-block-add-new-toradex-oui-range.patch
new file mode 100644
index 0000000..a7f0ba3
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0004-toradex-tdx-cfg-block-add-new-toradex-oui-range.patch
@@ -0,0 +1,129 @@
+From 7a969112a87c8c6037f07e952213e8696af41c35 Mon Sep 17 00:00:00 2001
+From: Philippe Schenker <philippe.schenker@toradex.com>
+Date: Mon, 20 Jun 2022 16:57:45 +0200
+Subject: [PATCH 4/5] toradex: tdx-cfg-block: add new toradex oui range
+
+Add new Toradex MAC OUI (8c:06:cb), to the config block. With this change
+we extend the possible serial-numbers as follows:
+
+For serial-numbers 00000000-16777215 OUI 00:14:2d is taken
+For serial-numbers 16777216-33554431 OUI 8c:06:cb is taken
+
+Lower 24-bit of the serial number are used in the NIC part of the
+MAC address, the complete serial number can be calculated using the OUI.
+
+Upstream-Status: Backport [1cf4e79f5776e9cc451b7f4affec7e47db9533f9]
+Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Reviewed-by: Fabio Estevam <festevam@denx.de>
+Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+---
+ board/toradex/common/tdx-cfg-block.c | 42 +++++++++++++++++++++++++---
+ board/toradex/common/tdx-cfg-block.h | 2 ++
+ board/toradex/common/tdx-common.c | 5 +---
+ 3 files changed, 41 insertions(+), 8 deletions(-)
+
+diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c
+index 678d4e07c21..9305709a3c0 100644
+--- a/board/toradex/common/tdx-cfg-block.c
++++ b/board/toradex/common/tdx-cfg-block.c
+@@ -159,6 +159,42 @@ const char * const toradex_display_adapters[] = {
+ [159] = "Verdin DSI to LVDS Adapter",
+ };
+
++const u32 toradex_ouis[] = {
++ [0] = 0x00142dUL,
++ [1] = 0x8c06cbUL,
++};
++
++static u32 get_serial_from_mac(struct toradex_eth_addr *eth_addr)
++{
++ int i;
++ u32 oui = ntohl(eth_addr->oui) >> 8;
++ u32 nic = ntohl(eth_addr->nic) >> 8;
++
++ for (i = 0; i < ARRAY_SIZE(toradex_ouis); i++) {
++ if (toradex_ouis[i] == oui)
++ break;
++ }
++
++ return (u32)((i << 24) + nic);
++}
++
++void get_mac_from_serial(u32 tdx_serial, struct toradex_eth_addr *eth_addr)
++{
++ u8 oui_index = tdx_serial >> 24;
++ u32 nic = tdx_serial & GENMASK(23, 0);
++ u32 oui;
++
++ if (oui_index >= ARRAY_SIZE(toradex_ouis)) {
++ puts("Can't find OUI for this serial#\n");
++ oui_index = 0;
++ }
++
++ oui = toradex_ouis[oui_index];
++
++ eth_addr->oui = htonl(oui << 8);
++ eth_addr->nic = htonl(nic << 8);
++}
++
+ #ifdef CONFIG_TDX_CFG_BLOCK_IS_IN_MMC
+ static int tdx_cfg_block_mmc_storage(u8 *config_block, int write)
+ {
+@@ -331,8 +367,7 @@ int read_tdx_cfg_block(void)
+ memcpy(&tdx_eth_addr, config_block + offset,
+ 6);
+
+- /* NIC part of MAC address is serial number */
+- tdx_serial = ntohl(tdx_eth_addr.nic) >> 8;
++ tdx_serial = get_serial_from_mac(&tdx_eth_addr);
+ break;
+ case TAG_HW:
+ memcpy(&tdx_hw_tag, config_block + offset, 8);
+@@ -974,8 +1009,7 @@ static int do_cfgblock_create(struct cmd_tbl *cmdtp, int flag, int argc,
+ }
+
+ /* Convert serial number to MAC address (the storage format) */
+- tdx_eth_addr.oui = htonl(0x00142dUL << 8);
+- tdx_eth_addr.nic = htonl(tdx_serial << 8);
++ get_mac_from_serial(tdx_serial, &tdx_eth_addr);
+
+ /* Valid Tag */
+ write_tag(config_block, &offset, TAG_VALID, NULL, 0);
+diff --git a/board/toradex/common/tdx-cfg-block.h b/board/toradex/common/tdx-cfg-block.h
+index 43e662e41da..17906984863 100644
+--- a/board/toradex/common/tdx-cfg-block.h
++++ b/board/toradex/common/tdx-cfg-block.h
+@@ -114,4 +114,6 @@ int read_tdx_cfg_block_carrier(void);
+
+ int try_migrate_tdx_cfg_block_carrier(void);
+
++void get_mac_from_serial(u32 tdx_serial, struct toradex_eth_addr *eth_addr);
++
+ #endif /* _TDX_CFG_BLOCK_H */
+diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
+index 5ad5d00a0d9..3798bf95378 100644
+--- a/board/toradex/common/tdx-common.c
++++ b/board/toradex/common/tdx-common.c
+@@ -20,8 +20,6 @@
+ #include <asm/setup.h>
+ #include "tdx-common.h"
+
+-#define TORADEX_OUI 0x00142dUL
+-
+ #define SERIAL_STR_LEN 8
+ #define MODULE_VER_STR_LEN 4 // V1.1
+ #define MODULE_REV_STR_LEN 3 // [A-Z] or #[26-99]
+@@ -104,8 +102,7 @@ int show_board_info(void)
+
+ if (read_tdx_cfg_block()) {
+ printf("MISSING TORADEX CONFIG BLOCK\n");
+- tdx_eth_addr.oui = htonl(TORADEX_OUI << 8);
+- tdx_eth_addr.nic = htonl(tdx_serial << 8);
++ get_mac_from_serial(tdx_serial, &tdx_eth_addr);
+ checkboard();
+ } else {
+ snprintf(tdx_serial_str, sizeof(tdx_serial_str),
+--
+2.20.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0005-toradex-tdx-cfg-block-add-0068-i.mx-8m-mini-sku.patch b/recipes-bsp/u-boot/u-boot-toradex/0005-toradex-tdx-cfg-block-add-0068-i.mx-8m-mini-sku.patch
new file mode 100644
index 0000000..3a597ac
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0005-toradex-tdx-cfg-block-add-0068-i.mx-8m-mini-sku.patch
@@ -0,0 +1,96 @@
+From a2da29a4e2a0adac38dba2ebbb539ce52898d078 Mon Sep 17 00:00:00 2001
+From: Philippe Schenker <philippe.schenker@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:31 +0200
+Subject: [PATCH 05/12] toradex: tdx-cfg-block: add 0068 i.mx 8m mini sku
+
+Add new i.MX 8M Mini SKU to ConfigBlock handling.
+
+0068: Verdin iMX8M Mini Quad 2GB WB IT No CAN
+
+This SKU is identical to 0055 but without CAN. Mention this in the name
+so those modules can be distinguished.
+
+Upstream-Status: Backport [a2da29a4e2a0adac38dba2ebbb539ce52898d078]
+Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-cfg-block.c | 13 ++++++++++++-
+ board/toradex/common/tdx-cfg-block.h | 1 +
+ board/toradex/verdin-imx8mm/verdin-imx8mm.c | 3 ++-
+ 3 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c
+index 9305709a3c0d..53302925dc24 100644
+--- a/board/toradex/common/tdx-cfg-block.c
++++ b/board/toradex/common/tdx-cfg-block.c
+@@ -145,6 +145,7 @@ const char * const toradex_modules[] = {
+ [65] = "Verdin iMX8M Plus QuadLite 1GB IT",
+ [66] = "Verdin iMX8M Plus Quad 8GB Wi-Fi / BT",
+ [67] = "Apalis iMX8 QuadMax 8GB Wi-Fi / BT IT",
++ [68] = "Verdin iMX8M Mini Quad 2GB WB IT No CAN",
+ };
+
+ const char * const toradex_carrier_boards[] = {
+@@ -408,6 +409,7 @@ static int get_cfgblock_interactive(void)
+ char it = 'n';
+ char wb = 'n';
+ char mem8g = 'n';
++ char can = 'y';
+ int len = 0;
+ int ret = 0;
+
+@@ -435,6 +437,13 @@ static int get_cfgblock_interactive(void)
+ mem8g = console_buffer[0];
+ }
+ #endif
++#if defined(CONFIG_TARGET_VERDIN_IMX8MM)
++ if (is_cpu_type(MXC_CPU_IMX8MM) && (wb == 'y' || wb == 'Y')) {
++ sprintf(message, "Does your module have CAN? [y/N] ");
++ len = cli_readline(message);
++ can = console_buffer[0];
++ }
++#endif
+ #endif
+
+ soc = env_get("soc");
+@@ -522,7 +531,9 @@ static int get_cfgblock_interactive(void)
+ else
+ tdx_hw_tag.prodid = VERDIN_IMX8MMDL;
+ } else if (is_cpu_type(MXC_CPU_IMX8MM)) {
+- if (wb == 'y' || wb == 'Y')
++ if (can == 'n' || can == 'N')
++ tdx_hw_tag.prodid = VERDIN_IMX8MMQ_WIFI_BT_IT_NO_CAN;
++ else if (wb == 'y' || wb == 'Y')
+ tdx_hw_tag.prodid = VERDIN_IMX8MMQ_WIFI_BT_IT;
+ else
+ tdx_hw_tag.prodid = VERDIN_IMX8MMQ_IT;
+diff --git a/board/toradex/common/tdx-cfg-block.h b/board/toradex/common/tdx-cfg-block.h
+index 179069848639..79cd09c78d00 100644
+--- a/board/toradex/common/tdx-cfg-block.h
++++ b/board/toradex/common/tdx-cfg-block.h
+@@ -88,6 +88,7 @@ enum {
+ VERDIN_IMX8MPQL_IT, /* 65 */
+ VERDIN_IMX8MPQ_8GB_WIFI_BT,
+ APALIS_IMX8QM_8GB_WIFI_BT_IT,
++ VERDIN_IMX8MMQ_WIFI_BT_IT_NO_CAN,
+ };
+
+ enum {
+diff --git a/board/toradex/verdin-imx8mm/verdin-imx8mm.c b/board/toradex/verdin-imx8mm/verdin-imx8mm.c
+index c51c99b5156c..7597cd81f945 100644
+--- a/board/toradex/verdin-imx8mm/verdin-imx8mm.c
++++ b/board/toradex/verdin-imx8mm/verdin-imx8mm.c
+@@ -83,7 +83,8 @@ static void select_dt_from_module_version(void)
+ * device tree.
+ */
+ is_wifi = (tdx_hw_tag.prodid == VERDIN_IMX8MMQ_WIFI_BT_IT) ||
+- (tdx_hw_tag.prodid == VERDIN_IMX8MMDL_WIFI_BT_IT);
++ (tdx_hw_tag.prodid == VERDIN_IMX8MMDL_WIFI_BT_IT) ||
++ (tdx_hw_tag.prodid == VERDIN_IMX8MMQ_WIFI_BT_IT_NO_CAN);
+ }
+
+ switch (get_pcb_revision()) {
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0006-toradex-common-Remove-stale-comments-about-modules-a.patch b/recipes-bsp/u-boot/u-boot-toradex/0006-toradex-common-Remove-stale-comments-about-modules-a.patch
new file mode 100644
index 0000000..1ac7a3e
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0006-toradex-common-Remove-stale-comments-about-modules-a.patch
@@ -0,0 +1,63 @@
+From ea1dc32f318903340a5ddaa8dc655503d1b4599e Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:32 +0200
+Subject: [PATCH 06/12] toradex: common: Remove stale comments about modules
+ availability
+
+Remove comment "not currently on sale" on specific SKUs, this
+information does not belong to the code and will never be accurate.
+
+Upstream-Status: Backport [ea1dc32f318903340a5ddaa8dc655503d1b4599e]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-cfg-block.c | 4 ++--
+ board/toradex/common/tdx-cfg-block.h | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c
+index 53302925dc24..67d007827be6 100644
+--- a/board/toradex/common/tdx-cfg-block.c
++++ b/board/toradex/common/tdx-cfg-block.c
+@@ -87,7 +87,7 @@ const char * const toradex_modules[] = {
+ [7] = "Colibri PXA300 208MHz XT",
+ [8] = "Colibri PXA270 312MHz",
+ [9] = "Colibri PXA270 520MHz",
+- [10] = "Colibri VF50 128MB", /* not currently on sale */
++ [10] = "Colibri VF50 128MB",
+ [11] = "Colibri VF61 256MB",
+ [12] = "Colibri VF61 256MB IT",
+ [13] = "Colibri VF50 128MB IT",
+@@ -133,7 +133,7 @@ const char * const toradex_modules[] = {
+ [53] = "Apalis iMX8 QuadXPlus 2GB ECC IT",
+ [54] = "Apalis iMX8 DualXPlus 1GB",
+ [55] = "Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT",
+- [56] = "Verdin iMX8M Nano Quad 1GB Wi-Fi / BT", /* not currently on sale */
++ [56] = "Verdin iMX8M Nano Quad 1GB Wi-Fi / BT",
+ [57] = "Verdin iMX8M Mini DualLite 1GB",
+ [58] = "Verdin iMX8M Plus Quad 4GB Wi-Fi / BT IT",
+ [59] = "Verdin iMX8M Mini Quad 2GB IT",
+diff --git a/board/toradex/common/tdx-cfg-block.h b/board/toradex/common/tdx-cfg-block.h
+index 79cd09c78d00..028e6b12735f 100644
+--- a/board/toradex/common/tdx-cfg-block.h
++++ b/board/toradex/common/tdx-cfg-block.h
+@@ -31,7 +31,7 @@ enum {
+ COLIBRI_PXA270_312MHZ,
+ COLIBRI_PXA270_520MHZ,
+ COLIBRI_VF50, /* 10 */
+- COLIBRI_VF61, /* not currently on sale */
++ COLIBRI_VF61,
+ COLIBRI_VF61_IT,
+ COLIBRI_VF50_IT,
+ COLIBRI_IMX6S,
+@@ -62,7 +62,7 @@ enum {
+ COLIBRI_IMX7D_EMMC,
+ COLIBRI_IMX6ULL_WIFI_BT_IT, /* 40 */
+ COLIBRI_IMX7D_EPDC,
+- APALIS_TK1_4GB, /* not currently on sale */
++ APALIS_TK1_4GB,
+ COLIBRI_T20_512MB_IT_SETEK,
+ COLIBRI_IMX6ULL_IT,
+ COLIBRI_IMX6ULL_WIFI_BT, /* 45 */
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0007-toradex-common-Use-ARRAY_SIZE-macro.patch b/recipes-bsp/u-boot/u-boot-toradex/0007-toradex-common-Use-ARRAY_SIZE-macro.patch
new file mode 100644
index 0000000..cb7fea8
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0007-toradex-common-Use-ARRAY_SIZE-macro.patch
@@ -0,0 +1,41 @@
+From cdc39c6aaea33a9a47657f7798090ca973053a2f Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:33 +0200
+Subject: [PATCH 07/12] toradex: common: Use ARRAY_SIZE macro
+
+Use generally available ARRAY_SIZE macro, instead of hand-coding it
+every time is needed.
+
+Upstream-Status: Backport [cdc39c6aaea33a9a47657f7798090ca973053a2f]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-cfg-block.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c
+index 67d007827be6..26596199a381 100644
+--- a/board/toradex/common/tdx-cfg-block.c
++++ b/board/toradex/common/tdx-cfg-block.c
+@@ -381,8 +381,7 @@ int read_tdx_cfg_block(void)
+ }
+
+ /* Cap product id to avoid issues with a yet unknown one */
+- if (tdx_hw_tag.prodid >= (sizeof(toradex_modules) /
+- sizeof(toradex_modules[0])))
++ if (tdx_hw_tag.prodid >= ARRAY_SIZE(toradex_modules))
+ tdx_hw_tag.prodid = 0;
+
+ out:
+@@ -822,8 +821,7 @@ static int get_cfgblock_carrier_interactive(void)
+
+ printf("Supported carrier boards:\n");
+ printf("CARRIER BOARD NAME\t\t [ID]\n");
+- for (int i = 0; i < sizeof(toradex_carrier_boards) /
+- sizeof(toradex_carrier_boards[0]); i++)
++ for (int i = 0; i < ARRAY_SIZE(toradex_carrier_boards); i++)
+ if (toradex_carrier_boards[i])
+ printf("%s \t\t [%d]\n", toradex_carrier_boards[i], i);
+
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0008-toradex-tdx-cfg-block-Cleanup-interactive-cfg-block-.patch b/recipes-bsp/u-boot/u-boot-toradex/0008-toradex-tdx-cfg-block-Cleanup-interactive-cfg-block-.patch
new file mode 100644
index 0000000..7668e83
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0008-toradex-tdx-cfg-block-Cleanup-interactive-cfg-block-.patch
@@ -0,0 +1,451 @@
+From 8b6dc5d3943c269892acb2a426ad4a46a7f7fc49 Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:34 +0200
+Subject: [PATCH 08/12] toradex: tdx-cfg-block: Cleanup interactive cfg block
+ creation
+
+Simplify interactive config block creation code, instead of having a
+a long list of questions and a complex tree of preprocessor directive to
+guess the exact SKU, just ask the user to select it from a list.
+
+The modules list is filtered out to include only SKUs that are supported
+by the specific u-boot binary in execution.
+
+Upstream-Status: Backport [8b6dc5d3943c269892acb2a426ad4a46a7f7fc49]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-cfg-block.c | 355 +++++++--------------------
+ board/toradex/common/tdx-cfg-block.h | 7 +-
+ board/toradex/common/tdx-common.c | 2 +-
+ 3 files changed, 92 insertions(+), 272 deletions(-)
+
+diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c
+index 26596199a381..b7c7301af8f7 100644
+--- a/board/toradex/common/tdx-cfg-block.c
++++ b/board/toradex/common/tdx-cfg-block.c
+@@ -11,17 +11,6 @@
+ #include <command.h>
+ #include <asm/cache.h>
+
+-#if defined(CONFIG_TARGET_APALIS_IMX6) || \
+- defined(CONFIG_TARGET_APALIS_IMX8) || \
+- defined(CONFIG_TARGET_COLIBRI_IMX6) || \
+- defined(CONFIG_TARGET_COLIBRI_IMX8X) || \
+- defined(CONFIG_TARGET_VERDIN_IMX8MM) || \
+- defined(CONFIG_TARGET_VERDIN_IMX8MN) || \
+- defined(CONFIG_TARGET_VERDIN_IMX8MP)
+-#include <asm/arch/sys_proto.h>
+-#else
+-#define is_cpu_type(cpu) (0)
+-#endif
+ #include <cli.h>
+ #include <console.h>
+ #include <env.h>
+@@ -76,76 +65,78 @@ bool valid_cfgblock_carrier;
+ struct toradex_hw tdx_car_hw_tag;
+ #endif
+
+-const char * const toradex_modules[] = {
+- [0] = "UNKNOWN MODULE",
+- [1] = "Colibri PXA270 312MHz",
+- [2] = "Colibri PXA270 520MHz",
+- [3] = "Colibri PXA320 806MHz",
+- [4] = "Colibri PXA300 208MHz",
+- [5] = "Colibri PXA310 624MHz",
+- [6] = "Colibri PXA320 806MHz IT",
+- [7] = "Colibri PXA300 208MHz XT",
+- [8] = "Colibri PXA270 312MHz",
+- [9] = "Colibri PXA270 520MHz",
+- [10] = "Colibri VF50 128MB",
+- [11] = "Colibri VF61 256MB",
+- [12] = "Colibri VF61 256MB IT",
+- [13] = "Colibri VF50 128MB IT",
+- [14] = "Colibri iMX6 Solo 256MB",
+- [15] = "Colibri iMX6 DualLite 512MB",
+- [16] = "Colibri iMX6 Solo 256MB IT",
+- [17] = "Colibri iMX6 DualLite 512MB IT",
+- [18] = "UNKNOWN MODULE",
+- [19] = "UNKNOWN MODULE",
+- [20] = "Colibri T20 256MB",
+- [21] = "Colibri T20 512MB",
+- [22] = "Colibri T20 512MB IT",
+- [23] = "Colibri T30 1GB",
+- [24] = "Colibri T20 256MB IT",
+- [25] = "Apalis T30 2GB",
+- [26] = "Apalis T30 1GB",
+- [27] = "Apalis iMX6 Quad 1GB",
+- [28] = "Apalis iMX6 Quad 2GB IT",
+- [29] = "Apalis iMX6 Dual 512MB",
+- [30] = "Colibri T30 1GB IT",
+- [31] = "Apalis T30 1GB IT",
+- [32] = "Colibri iMX7 Solo 256MB",
+- [33] = "Colibri iMX7 Dual 512MB",
+- [34] = "Apalis TK1 2GB",
+- [35] = "Apalis iMX6 Dual 1GB IT",
+- [36] = "Colibri iMX6ULL 256MB",
+- [37] = "Apalis iMX8 QuadMax 4GB Wi-Fi / BT IT",
+- [38] = "Colibri iMX8 QuadXPlus 2GB Wi-Fi / BT IT",
+- [39] = "Colibri iMX7 Dual 1GB (eMMC)",
+- [40] = "Colibri iMX6ULL 512MB Wi-Fi / BT IT",
+- [41] = "Colibri iMX7 Dual 512MB EPDC",
+- [42] = "Apalis TK1 4GB",
+- [43] = "Colibri T20 512MB IT SETEK",
+- [44] = "Colibri iMX6ULL 512MB IT",
+- [45] = "Colibri iMX6ULL 512MB Wi-Fi / Bluetooth",
+- [46] = "Apalis iMX8 QuadXPlus 2GB Wi-Fi / BT IT",
+- [47] = "Apalis iMX8 QuadMax 4GB IT",
+- [48] = "Apalis iMX8 QuadPlus 2GB Wi-Fi / BT",
+- [49] = "Apalis iMX8 QuadPlus 2GB",
+- [50] = "Colibri iMX8 QuadXPlus 2GB IT",
+- [51] = "Colibri iMX8 DualX 1GB Wi-Fi / Bluetooth",
+- [52] = "Colibri iMX8 DualX 1GB",
+- [53] = "Apalis iMX8 QuadXPlus 2GB ECC IT",
+- [54] = "Apalis iMX8 DualXPlus 1GB",
+- [55] = "Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT",
+- [56] = "Verdin iMX8M Nano Quad 1GB Wi-Fi / BT",
+- [57] = "Verdin iMX8M Mini DualLite 1GB",
+- [58] = "Verdin iMX8M Plus Quad 4GB Wi-Fi / BT IT",
+- [59] = "Verdin iMX8M Mini Quad 2GB IT",
+- [60] = "Verdin iMX8M Mini DualLite 1GB WB IT",
+- [61] = "Verdin iMX8M Plus Quad 2GB",
+- [62] = "Colibri iMX6ULL 1GB IT (eMMC)",
+- [63] = "Verdin iMX8M Plus Quad 4GB IT",
+- [64] = "Verdin iMX8M Plus Quad 2GB Wi-Fi / BT IT",
+- [65] = "Verdin iMX8M Plus QuadLite 1GB IT",
+- [66] = "Verdin iMX8M Plus Quad 8GB Wi-Fi / BT",
+- [67] = "Apalis iMX8 QuadMax 8GB Wi-Fi / BT IT",
+- [68] = "Verdin iMX8M Mini Quad 2GB WB IT No CAN",
++#define TARGET_IS_ENABLED(x) IS_ENABLED(CONFIG_TARGET_ ## x)
++
++const struct toradex_som toradex_modules[] = {
++ [0] = { "UNKNOWN MODULE", 0 },
++ [1] = { "Colibri PXA270 312MHz", 0 },
++ [2] = { "Colibri PXA270 520MHz", 0 },
++ [3] = { "Colibri PXA320 806MHz", 0 },
++ [4] = { "Colibri PXA300 208MHz", 0 },
++ [5] = { "Colibri PXA310 624MHz", 0 },
++ [6] = { "Colibri PXA320 806MHz IT", 0 },
++ [7] = { "Colibri PXA300 208MHz XT", 0 },
++ [8] = { "Colibri PXA270 312MHz", 0 },
++ [9] = { "Colibri PXA270 520MHz", 0 },
++ [10] = { "Colibri VF50 128MB", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [11] = { "Colibri VF61 256MB", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [12] = { "Colibri VF61 256MB IT", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [13] = { "Colibri VF50 128MB IT", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [14] = { "Colibri iMX6 Solo 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [15] = { "Colibri iMX6 DualLite 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [16] = { "Colibri iMX6 Solo 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [17] = { "Colibri iMX6 DualLite 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [18] = { "UNKNOWN MODULE", 0 },
++ [19] = { "UNKNOWN MODULE", 0 },
++ [20] = { "Colibri T20 256MB", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [21] = { "Colibri T20 512MB", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [22] = { "Colibri T20 512MB IT", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [23] = { "Colibri T30 1GB", TARGET_IS_ENABLED(COLIBRI_T30) },
++ [24] = { "Colibri T20 256MB IT", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [25] = { "Apalis T30 2GB", TARGET_IS_ENABLED(APALIS_T30) },
++ [26] = { "Apalis T30 1GB", TARGET_IS_ENABLED(APALIS_T30) },
++ [27] = { "Apalis iMX6 Quad 1GB", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [28] = { "Apalis iMX6 Quad 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [29] = { "Apalis iMX6 Dual 512MB", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [30] = { "Colibri T30 1GB IT", TARGET_IS_ENABLED(COLIBRI_T30) },
++ [31] = { "Apalis T30 1GB IT", TARGET_IS_ENABLED(APALIS_T30) },
++ [32] = { "Colibri iMX7 Solo 256MB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [33] = { "Colibri iMX7 Dual 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [34] = { "Apalis TK1 2GB", TARGET_IS_ENABLED(APALIS_TK1) },
++ [35] = { "Apalis iMX6 Dual 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [36] = { "Colibri iMX6ULL 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [37] = { "Apalis iMX8 QuadMax 4GB Wi-Fi / BT IT", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [38] = { "Colibri iMX8 QuadXPlus 2GB Wi-Fi / BT IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [39] = { "Colibri iMX7 Dual 1GB (eMMC)", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [40] = { "Colibri iMX6ULL 512MB Wi-Fi / BT IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [41] = { "Colibri iMX7 Dual 512MB EPDC", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [42] = { "Apalis TK1 4GB", TARGET_IS_ENABLED(APALIS_TK1) },
++ [43] = { "Colibri T20 512MB IT SETEK", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [44] = { "Colibri iMX6ULL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [45] = { "Colibri iMX6ULL 512MB Wi-Fi / Bluetooth", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [46] = { "Apalis iMX8 QuadXPlus 2GB Wi-Fi / BT IT", 0 },
++ [47] = { "Apalis iMX8 QuadMax 4GB IT", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [48] = { "Apalis iMX8 QuadPlus 2GB Wi-Fi / BT", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [49] = { "Apalis iMX8 QuadPlus 2GB", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [50] = { "Colibri iMX8 QuadXPlus 2GB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [51] = { "Colibri iMX8 DualX 1GB Wi-Fi / Bluetooth", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [52] = { "Colibri iMX8 DualX 1GB", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [53] = { "Apalis iMX8 QuadXPlus 2GB ECC IT", 0 },
++ [54] = { "Apalis iMX8 DualXPlus 1GB", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [55] = { "Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [56] = { "Verdin iMX8M Nano Quad 1GB Wi-Fi / BT", 0 },
++ [57] = { "Verdin iMX8M Mini DualLite 1GB", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [58] = { "Verdin iMX8M Plus Quad 4GB Wi-Fi / BT IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [59] = { "Verdin iMX8M Mini Quad 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [60] = { "Verdin iMX8M Mini DualLite 1GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [61] = { "Verdin iMX8M Plus Quad 2GB", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [62] = { "Colibri iMX6ULL 1GB IT (eMMC)", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [63] = { "Verdin iMX8M Plus Quad 4GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [64] = { "Verdin iMX8M Plus Quad 2GB Wi-Fi / BT IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [65] = { "Verdin iMX8M Plus QuadLite 1GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [66] = { "Verdin iMX8M Plus Quad 8GB Wi-Fi / BT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [67] = { "Apalis iMX8 QuadMax 8GB Wi-Fi / BT IT", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [68] = { "Verdin iMX8M Mini Quad 2GB WB IT No CAN", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
+ };
+
+ const char * const toradex_carrier_boards[] = {
+@@ -404,204 +395,28 @@ static int parse_assembly_string(char *string_to_parse, u16 *assembly)
+ static int get_cfgblock_interactive(void)
+ {
+ char message[CONFIG_SYS_CBSIZE];
+- char *soc;
+- char it = 'n';
+- char wb = 'n';
+- char mem8g = 'n';
+- char can = 'y';
+ int len = 0;
+ int ret = 0;
++ unsigned int prodid;
++ int i;
+
+- /* Unknown module by default */
+- tdx_hw_tag.prodid = 0;
+-
+- sprintf(message, "Is the module an IT version? [y/N] ");
+-
+- len = cli_readline(message);
+- it = console_buffer[0];
+-
+-#if defined(CONFIG_TARGET_APALIS_IMX8) || \
+- defined(CONFIG_TARGET_COLIBRI_IMX6ULL) || \
+- defined(CONFIG_TARGET_COLIBRI_IMX8X) || \
+- defined(CONFIG_TARGET_VERDIN_IMX8MM) || \
+- defined(CONFIG_TARGET_VERDIN_IMX8MP)
+- sprintf(message, "Does the module have Wi-Fi / Bluetooth? [y/N] ");
+- len = cli_readline(message);
+- wb = console_buffer[0];
+-
+-#if defined(CONFIG_TARGET_APALIS_IMX8)
+- if ((wb == 'y' || wb == 'Y') && (it == 'y' || it == 'Y')) {
+- sprintf(message, "Does your module have 8GB of RAM? [y/N] ");
+- len = cli_readline(message);
+- mem8g = console_buffer[0];
++ printf("Enabled modules:\n");
++ for (i = 0; i < ARRAY_SIZE(toradex_modules); i++) {
++ if (toradex_modules[i].is_enabled)
++ printf(" %04d %s\n", i, toradex_modules[i].name);
+ }
+-#endif
+-#if defined(CONFIG_TARGET_VERDIN_IMX8MM)
+- if (is_cpu_type(MXC_CPU_IMX8MM) && (wb == 'y' || wb == 'Y')) {
+- sprintf(message, "Does your module have CAN? [y/N] ");
+- len = cli_readline(message);
+- can = console_buffer[0];
+- }
+-#endif
+-#endif
+
+- soc = env_get("soc");
+- if (!strcmp("mx6", soc)) {
+-#ifdef CONFIG_TARGET_APALIS_IMX6
+- if (it == 'y' || it == 'Y') {
+- if (is_cpu_type(MXC_CPU_MX6Q))
+- tdx_hw_tag.prodid = APALIS_IMX6Q_IT;
+- else
+- tdx_hw_tag.prodid = APALIS_IMX6D_IT;
+- } else {
+- if (is_cpu_type(MXC_CPU_MX6Q))
+- tdx_hw_tag.prodid = APALIS_IMX6Q;
+- else
+- tdx_hw_tag.prodid = APALIS_IMX6D;
+- }
+-#elif CONFIG_TARGET_COLIBRI_IMX6
+- if (it == 'y' || it == 'Y') {
+- if (is_cpu_type(MXC_CPU_MX6DL))
+- tdx_hw_tag.prodid = COLIBRI_IMX6DL_IT;
+- else if (is_cpu_type(MXC_CPU_MX6SOLO))
+- tdx_hw_tag.prodid = COLIBRI_IMX6S_IT;
+- } else {
+- if (is_cpu_type(MXC_CPU_MX6DL))
+- tdx_hw_tag.prodid = COLIBRI_IMX6DL;
+- else if (is_cpu_type(MXC_CPU_MX6SOLO))
+- tdx_hw_tag.prodid = COLIBRI_IMX6S;
+- }
+-#elif CONFIG_TARGET_COLIBRI_IMX6ULL
+- if (it == 'y' || it == 'Y') {
+- if (wb == 'y' || wb == 'Y')
+- tdx_hw_tag.prodid = COLIBRI_IMX6ULL_WIFI_BT_IT;
+- else
+- if (gd->ram_size == 0x20000000)
+- tdx_hw_tag.prodid = COLIBRI_IMX6ULL_IT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_IMX6ULL_IT_EMMC;
+- } else {
+- if (wb == 'y' || wb == 'Y')
+- tdx_hw_tag.prodid = COLIBRI_IMX6ULL_WIFI_BT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_IMX6ULL;
+- }
+-#endif
+- } else if (!strcmp("imx7d", soc))
+- if (gd->ram_size == 0x20000000)
+- tdx_hw_tag.prodid = COLIBRI_IMX7D;
+- else
+- tdx_hw_tag.prodid = COLIBRI_IMX7D_EMMC;
+- else if (!strcmp("imx7s", soc))
+- tdx_hw_tag.prodid = COLIBRI_IMX7S;
+- else if (is_cpu_type(MXC_CPU_IMX8QM)) {
+- if (it == 'y' || it == 'Y') {
+- if (wb == 'y' || wb == 'Y') {
+- if (mem8g == 'y' || mem8g == 'Y')
+- tdx_hw_tag.prodid = APALIS_IMX8QM_8GB_WIFI_BT_IT;
+- else
+- tdx_hw_tag.prodid = APALIS_IMX8QM_WIFI_BT_IT;
+- }
+- else
+- tdx_hw_tag.prodid = APALIS_IMX8QM_IT;
+- } else {
+- if (wb == 'y' || wb == 'Y')
+- tdx_hw_tag.prodid = APALIS_IMX8QP_WIFI_BT;
+- else
+- tdx_hw_tag.prodid = APALIS_IMX8QP;
+- }
+- } else if (is_cpu_type(MXC_CPU_IMX8QXP)) {
+-#ifdef CONFIG_TARGET_COLIBRI_IMX8X
+- if (it == 'y' || it == 'Y') {
+- if (wb == 'y' || wb == 'Y')
+- tdx_hw_tag.prodid = COLIBRI_IMX8QXP_WIFI_BT_IT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_IMX8QXP_IT;
+- } else {
+- if (wb == 'y' || wb == 'Y')
+- tdx_hw_tag.prodid = COLIBRI_IMX8DX_WIFI_BT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_IMX8DX;
+- }
+-#endif
+- } else if (is_cpu_type(MXC_CPU_IMX8MMDL)) {
+- if (wb == 'y' || wb == 'Y')
+- tdx_hw_tag.prodid = VERDIN_IMX8MMDL_WIFI_BT_IT;
+- else
+- tdx_hw_tag.prodid = VERDIN_IMX8MMDL;
+- } else if (is_cpu_type(MXC_CPU_IMX8MM)) {
+- if (can == 'n' || can == 'N')
+- tdx_hw_tag.prodid = VERDIN_IMX8MMQ_WIFI_BT_IT_NO_CAN;
+- else if (wb == 'y' || wb == 'Y')
+- tdx_hw_tag.prodid = VERDIN_IMX8MMQ_WIFI_BT_IT;
+- else
+- tdx_hw_tag.prodid = VERDIN_IMX8MMQ_IT;
+- } else if (is_cpu_type(MXC_CPU_IMX8MN)) {
+- tdx_hw_tag.prodid = VERDIN_IMX8MNQ_WIFI_BT;
+- } else if (is_cpu_type(MXC_CPU_IMX8MPL)) {
+- tdx_hw_tag.prodid = VERDIN_IMX8MPQL_IT;
+- } else if (is_cpu_type(MXC_CPU_IMX8MP)) {
+- if (wb == 'y' || wb == 'Y')
+- if (gd->ram_size == 0x80000000)
+- tdx_hw_tag.prodid = VERDIN_IMX8MPQ_2GB_WIFI_BT_IT;
+- else if (gd->ram_size == 0x200000000)
+- tdx_hw_tag.prodid = VERDIN_IMX8MPQ_8GB_WIFI_BT;
+- else
+- tdx_hw_tag.prodid = VERDIN_IMX8MPQ_WIFI_BT_IT;
+- else
+- if (it == 'y' || it == 'Y')
+- tdx_hw_tag.prodid = VERDIN_IMX8MPQ_IT;
+- else
+- tdx_hw_tag.prodid = VERDIN_IMX8MPQ;
+- } else if (!strcmp("tegra20", soc)) {
+- if (it == 'y' || it == 'Y')
+- if (gd->ram_size == 0x10000000)
+- tdx_hw_tag.prodid = COLIBRI_T20_256MB_IT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_T20_512MB_IT;
+- else
+- if (gd->ram_size == 0x10000000)
+- tdx_hw_tag.prodid = COLIBRI_T20_256MB;
+- else
+- tdx_hw_tag.prodid = COLIBRI_T20_512MB;
+- }
+-#if defined(CONFIG_TARGET_APALIS_T30) || defined(CONFIG_TARGET_COLIBRI_T30)
+- else if (!strcmp("tegra30", soc)) {
+-#ifdef CONFIG_TARGET_APALIS_T30
+- if (it == 'y' || it == 'Y')
+- tdx_hw_tag.prodid = APALIS_T30_IT;
+- else
+- if (gd->ram_size == 0x40000000)
+- tdx_hw_tag.prodid = APALIS_T30_1GB;
+- else
+- tdx_hw_tag.prodid = APALIS_T30_2GB;
+-#else
+- if (it == 'y' || it == 'Y')
+- tdx_hw_tag.prodid = COLIBRI_T30_IT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_T30;
+-#endif
+- }
+-#endif /* CONFIG_TARGET_APALIS_T30 || CONFIG_TARGET_COLIBRI_T30 */
+- else if (!strcmp("tegra124", soc)) {
+- tdx_hw_tag.prodid = APALIS_TK1_2GB;
+- } else if (!strcmp("vf500", soc)) {
+- if (it == 'y' || it == 'Y')
+- tdx_hw_tag.prodid = COLIBRI_VF50_IT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_VF50;
+- } else if (!strcmp("vf610", soc)) {
+- if (it == 'y' || it == 'Y')
+- tdx_hw_tag.prodid = COLIBRI_VF61_IT;
+- else
+- tdx_hw_tag.prodid = COLIBRI_VF61;
+- }
++ sprintf(message, "Enter the module ID: ");
++ len = cli_readline(message);
+
+- if (!tdx_hw_tag.prodid) {
+- printf("Module type not detectable due to unknown SoC\n");
++ prodid = dectoul(console_buffer, NULL);
++ if (prodid >= ARRAY_SIZE(toradex_modules) || !toradex_modules[prodid].is_enabled) {
++ printf("Parsing module id failed\n");
+ return -1;
+ }
++ tdx_hw_tag.prodid = prodid;
+
++ len = 0;
+ while (len < 4) {
+ sprintf(message, "Enter the module version (e.g. V1.1B or V1.1#26): V");
+ len = cli_readline(message);
+diff --git a/board/toradex/common/tdx-cfg-block.h b/board/toradex/common/tdx-cfg-block.h
+index 028e6b12735f..32e4c6f6879f 100644
+--- a/board/toradex/common/tdx-cfg-block.h
++++ b/board/toradex/common/tdx-cfg-block.h
+@@ -20,6 +20,11 @@ struct toradex_eth_addr {
+ u32 nic:24;
+ } __attribute__((__packed__));
+
++struct toradex_som {
++ const char *name;
++ int is_enabled;
++};
++
+ enum {
+ COLIBRI_PXA270_V1_312MHZ = 1,
+ COLIBRI_PXA270_V1_520MHZ,
+@@ -101,7 +106,7 @@ enum {
+ VERDIN_DSI_TO_LVDS_ADAPTER = 159,
+ };
+
+-extern const char * const toradex_modules[];
++extern const struct toradex_som toradex_modules[];
+ extern const char * const toradex_carrier_boards[];
+ extern bool valid_cfgblock;
+ extern struct toradex_hw tdx_hw_tag;
+diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
+index 3798bf95378e..3643ebbb1632 100644
+--- a/board/toradex/common/tdx-common.c
++++ b/board/toradex/common/tdx-common.c
+@@ -116,7 +116,7 @@ int show_board_info(void)
+ env_set("serial#", tdx_serial_str);
+
+ printf("Model: Toradex %s %s, Serial# %s\n",
+- toradex_modules[tdx_hw_tag.prodid],
++ toradex_modules[tdx_hw_tag.prodid].name,
+ tdx_board_rev_str,
+ tdx_serial_str);
+ #ifdef CONFIG_TDX_CFG_BLOCK_EXTRA
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0009-toradex-common-Remove-stale-function-declaration.patch b/recipes-bsp/u-boot/u-boot-toradex/0009-toradex-common-Remove-stale-function-declaration.patch
new file mode 100644
index 0000000..d0a49a4
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0009-toradex-common-Remove-stale-function-declaration.patch
@@ -0,0 +1,30 @@
+From 0d4b692c807881253ec6954970ccbb0f717ae10a Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:35 +0200
+Subject: [PATCH 09/12] toradex: common: Remove stale function declaration
+
+Remove stale show_boot_logo() declaration, not used anywhere.
+
+Upstream-Status: Backport [0d4b692c807881253ec6954970ccbb0f717ae10a]
+Fixes: e6fd30dd9eef ("toradex: drop legacy show_boot_logo function and use splashscreen")
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-common.h | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/board/toradex/common/tdx-common.h b/board/toradex/common/tdx-common.h
+index c96e8754e9e2..d446e9f1d5ca 100644
+--- a/board/toradex/common/tdx-common.h
++++ b/board/toradex/common/tdx-common.h
+@@ -12,8 +12,4 @@
+ int ft_common_board_setup(void *blob, struct bd_info *bd);
+ u32 get_board_revision(void);
+
+-#if defined(CONFIG_DM_VIDEO)
+-int show_boot_logo(void);
+-#endif
+-
+ #endif /* _TDX_COMMON_H */
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0010-toradex-common-Remove-ifdef-usage-for-2nd-ethaddr.patch b/recipes-bsp/u-boot/u-boot-toradex/0010-toradex-common-Remove-ifdef-usage-for-2nd-ethaddr.patch
new file mode 100644
index 0000000..af02b2b
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0010-toradex-common-Remove-ifdef-usage-for-2nd-ethaddr.patch
@@ -0,0 +1,40 @@
+From 9762fbeea451f4d81ec88788e7680e37a1ee5beb Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:36 +0200
+Subject: [PATCH 10/12] toradex: common: Remove #ifdef usage for 2nd ethaddr
+
+Fix checkpatch warn, use `IS_ENABLED(CONFIG_TDX_CFG_BLOCK_2ND_ETHADDR)`
+instead of `#ifdef CONFIG_TDX_CFG_BLOCK_2ND_ETHADDR`.
+
+Upstream-Status: Backport [9762fbeea451f4d81ec88788e7680e37a1ee5beb]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-common.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
+index 3643ebbb1632..2284fcddb510 100644
+--- a/board/toradex/common/tdx-common.c
++++ b/board/toradex/common/tdx-common.c
+@@ -151,8 +151,8 @@ int show_board_info(void)
+ if (!eth_env_get_enetaddr("ethaddr", ethaddr))
+ eth_env_set_enetaddr("ethaddr", (u8 *)&tdx_eth_addr);
+
+-#ifdef CONFIG_TDX_CFG_BLOCK_2ND_ETHADDR
+- if (!eth_env_get_enetaddr("eth1addr", ethaddr)) {
++ if (IS_ENABLED(CONFIG_TDX_CFG_BLOCK_2ND_ETHADDR) &&
++ !eth_env_get_enetaddr("eth1addr", ethaddr)) {
+ /*
+ * Secondary MAC address is allocated from block
+ * 0x100000 higher then the first MAC address
+@@ -161,7 +161,6 @@ int show_board_info(void)
+ ethaddr[3] += 0x10;
+ eth_env_set_enetaddr("eth1addr", ethaddr);
+ }
+-#endif
+
+ return 0;
+ }
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0011-toradex-tdx-cfg-block-Use-official-SKU-names.patch b/recipes-bsp/u-boot/u-boot-toradex/0011-toradex-tdx-cfg-block-Use-official-SKU-names.patch
new file mode 100644
index 0000000..e74877e
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0011-toradex-tdx-cfg-block-Use-official-SKU-names.patch
@@ -0,0 +1,171 @@
+From 4f0c33c46d946beb5e3430ce694d86ff86adbfcd Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:37 +0200
+Subject: [PATCH 11/12] toradex: tdx-cfg-block: Use official SKU names
+
+Up to now in the code we named Toradex SKUs in a slightly different way
+compared to the official product name, start using the official names
+from now on to avoid misunderstanding.
+
+This has also the nice benefit of the string being shorter, allowing
+to fit nicely in 80 columns even adding the product ID when printing
+the hardware information.
+
+Upstream-Status: Backport [4f0c33c46d946beb5e3430ce694d86ff86adbfcd]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-cfg-block.c | 138 +++++++++++++--------------
+ 1 file changed, 69 insertions(+), 69 deletions(-)
+
+diff --git a/board/toradex/common/tdx-cfg-block.c b/board/toradex/common/tdx-cfg-block.c
+index b7c7301af8f7..7cf2dfae9746 100644
+--- a/board/toradex/common/tdx-cfg-block.c
++++ b/board/toradex/common/tdx-cfg-block.c
+@@ -68,75 +68,75 @@ struct toradex_hw tdx_car_hw_tag;
+ #define TARGET_IS_ENABLED(x) IS_ENABLED(CONFIG_TARGET_ ## x)
+
+ const struct toradex_som toradex_modules[] = {
+- [0] = { "UNKNOWN MODULE", 0 },
+- [1] = { "Colibri PXA270 312MHz", 0 },
+- [2] = { "Colibri PXA270 520MHz", 0 },
+- [3] = { "Colibri PXA320 806MHz", 0 },
+- [4] = { "Colibri PXA300 208MHz", 0 },
+- [5] = { "Colibri PXA310 624MHz", 0 },
+- [6] = { "Colibri PXA320 806MHz IT", 0 },
+- [7] = { "Colibri PXA300 208MHz XT", 0 },
+- [8] = { "Colibri PXA270 312MHz", 0 },
+- [9] = { "Colibri PXA270 520MHz", 0 },
+- [10] = { "Colibri VF50 128MB", TARGET_IS_ENABLED(COLIBRI_VF) },
+- [11] = { "Colibri VF61 256MB", TARGET_IS_ENABLED(COLIBRI_VF) },
+- [12] = { "Colibri VF61 256MB IT", TARGET_IS_ENABLED(COLIBRI_VF) },
+- [13] = { "Colibri VF50 128MB IT", TARGET_IS_ENABLED(COLIBRI_VF) },
+- [14] = { "Colibri iMX6 Solo 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
+- [15] = { "Colibri iMX6 DualLite 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
+- [16] = { "Colibri iMX6 Solo 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
+- [17] = { "Colibri iMX6 DualLite 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
+- [18] = { "UNKNOWN MODULE", 0 },
+- [19] = { "UNKNOWN MODULE", 0 },
+- [20] = { "Colibri T20 256MB", TARGET_IS_ENABLED(COLIBRI_T20) },
+- [21] = { "Colibri T20 512MB", TARGET_IS_ENABLED(COLIBRI_T20) },
+- [22] = { "Colibri T20 512MB IT", TARGET_IS_ENABLED(COLIBRI_T20) },
+- [23] = { "Colibri T30 1GB", TARGET_IS_ENABLED(COLIBRI_T30) },
+- [24] = { "Colibri T20 256MB IT", TARGET_IS_ENABLED(COLIBRI_T20) },
+- [25] = { "Apalis T30 2GB", TARGET_IS_ENABLED(APALIS_T30) },
+- [26] = { "Apalis T30 1GB", TARGET_IS_ENABLED(APALIS_T30) },
+- [27] = { "Apalis iMX6 Quad 1GB", TARGET_IS_ENABLED(APALIS_IMX6) },
+- [28] = { "Apalis iMX6 Quad 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
+- [29] = { "Apalis iMX6 Dual 512MB", TARGET_IS_ENABLED(APALIS_IMX6) },
+- [30] = { "Colibri T30 1GB IT", TARGET_IS_ENABLED(COLIBRI_T30) },
+- [31] = { "Apalis T30 1GB IT", TARGET_IS_ENABLED(APALIS_T30) },
+- [32] = { "Colibri iMX7 Solo 256MB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
+- [33] = { "Colibri iMX7 Dual 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
+- [34] = { "Apalis TK1 2GB", TARGET_IS_ENABLED(APALIS_TK1) },
+- [35] = { "Apalis iMX6 Dual 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
+- [36] = { "Colibri iMX6ULL 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
+- [37] = { "Apalis iMX8 QuadMax 4GB Wi-Fi / BT IT", TARGET_IS_ENABLED(APALIS_IMX8) },
+- [38] = { "Colibri iMX8 QuadXPlus 2GB Wi-Fi / BT IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
+- [39] = { "Colibri iMX7 Dual 1GB (eMMC)", TARGET_IS_ENABLED(COLIBRI_IMX7) },
+- [40] = { "Colibri iMX6ULL 512MB Wi-Fi / BT IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
+- [41] = { "Colibri iMX7 Dual 512MB EPDC", TARGET_IS_ENABLED(COLIBRI_IMX7) },
+- [42] = { "Apalis TK1 4GB", TARGET_IS_ENABLED(APALIS_TK1) },
+- [43] = { "Colibri T20 512MB IT SETEK", TARGET_IS_ENABLED(COLIBRI_T20) },
+- [44] = { "Colibri iMX6ULL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
+- [45] = { "Colibri iMX6ULL 512MB Wi-Fi / Bluetooth", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
+- [46] = { "Apalis iMX8 QuadXPlus 2GB Wi-Fi / BT IT", 0 },
+- [47] = { "Apalis iMX8 QuadMax 4GB IT", TARGET_IS_ENABLED(APALIS_IMX8) },
+- [48] = { "Apalis iMX8 QuadPlus 2GB Wi-Fi / BT", TARGET_IS_ENABLED(APALIS_IMX8) },
+- [49] = { "Apalis iMX8 QuadPlus 2GB", TARGET_IS_ENABLED(APALIS_IMX8) },
+- [50] = { "Colibri iMX8 QuadXPlus 2GB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
+- [51] = { "Colibri iMX8 DualX 1GB Wi-Fi / Bluetooth", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
+- [52] = { "Colibri iMX8 DualX 1GB", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
+- [53] = { "Apalis iMX8 QuadXPlus 2GB ECC IT", 0 },
+- [54] = { "Apalis iMX8 DualXPlus 1GB", TARGET_IS_ENABLED(APALIS_IMX8) },
+- [55] = { "Verdin iMX8M Mini Quad 2GB Wi-Fi / BT IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
+- [56] = { "Verdin iMX8M Nano Quad 1GB Wi-Fi / BT", 0 },
+- [57] = { "Verdin iMX8M Mini DualLite 1GB", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
+- [58] = { "Verdin iMX8M Plus Quad 4GB Wi-Fi / BT IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
+- [59] = { "Verdin iMX8M Mini Quad 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
+- [60] = { "Verdin iMX8M Mini DualLite 1GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
+- [61] = { "Verdin iMX8M Plus Quad 2GB", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
+- [62] = { "Colibri iMX6ULL 1GB IT (eMMC)", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
+- [63] = { "Verdin iMX8M Plus Quad 4GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
+- [64] = { "Verdin iMX8M Plus Quad 2GB Wi-Fi / BT IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
+- [65] = { "Verdin iMX8M Plus QuadLite 1GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
+- [66] = { "Verdin iMX8M Plus Quad 8GB Wi-Fi / BT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
+- [67] = { "Apalis iMX8 QuadMax 8GB Wi-Fi / BT IT", TARGET_IS_ENABLED(APALIS_IMX8) },
+- [68] = { "Verdin iMX8M Mini Quad 2GB WB IT No CAN", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [0] = { "UNKNOWN MODULE", 0 },
++ [1] = { "Colibri PXA270 312MHz", 0 },
++ [2] = { "Colibri PXA270 520MHz", 0 },
++ [3] = { "Colibri PXA320 806MHz", 0 },
++ [4] = { "Colibri PXA300 208MHz", 0 },
++ [5] = { "Colibri PXA310 624MHz", 0 },
++ [6] = { "Colibri PXA320IT 806MHz", 0 },
++ [7] = { "Colibri PXA300 208MHz XT", 0 },
++ [8] = { "Colibri PXA270 312MHz", 0 },
++ [9] = { "Colibri PXA270 520MHz", 0 },
++ [10] = { "Colibri VF50 128MB", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [11] = { "Colibri VF61 256MB", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [12] = { "Colibri VF61 256MB IT", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [13] = { "Colibri VF50 128MB IT", TARGET_IS_ENABLED(COLIBRI_VF) },
++ [14] = { "Colibri iMX6S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [15] = { "Colibri iMX6DL 512MB", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [16] = { "Colibri iMX6S 256MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [17] = { "Colibri iMX6DL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6) },
++ [18] = { "UNKNOWN MODULE", 0 },
++ [19] = { "UNKNOWN MODULE", 0 },
++ [20] = { "Colibri T20 256MB", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [21] = { "Colibri T20 512MB", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [22] = { "Colibri T20 512MB IT", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [23] = { "Colibri T30 1GB", TARGET_IS_ENABLED(COLIBRI_T30) },
++ [24] = { "Colibri T20 256MB IT", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [25] = { "Apalis T30 2GB", TARGET_IS_ENABLED(APALIS_T30) },
++ [26] = { "Apalis T30 1GB", TARGET_IS_ENABLED(APALIS_T30) },
++ [27] = { "Apalis iMX6Q 1GB", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [28] = { "Apalis iMX6Q 2GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [29] = { "Apalis iMX6D 512MB", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [30] = { "Colibri T30 1GB IT", TARGET_IS_ENABLED(COLIBRI_T30) },
++ [31] = { "Apalis T30 1GB IT", TARGET_IS_ENABLED(APALIS_T30) },
++ [32] = { "Colibri iMX7S 256MB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [33] = { "Colibri iMX7D 512MB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [34] = { "Apalis TK1 2GB", TARGET_IS_ENABLED(APALIS_TK1) },
++ [35] = { "Apalis iMX6D 1GB IT", TARGET_IS_ENABLED(APALIS_IMX6) },
++ [36] = { "Colibri iMX6ULL 256MB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [37] = { "Apalis iMX8QM 4GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [38] = { "Colibri iMX8QXP 2GB WB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [39] = { "Colibri iMX7D 1GB", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [40] = { "Colibri iMX6ULL 512MB WB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [41] = { "Colibri iMX7D 512MB EPDC", TARGET_IS_ENABLED(COLIBRI_IMX7) },
++ [42] = { "Apalis TK1 4GB", TARGET_IS_ENABLED(APALIS_TK1) },
++ [43] = { "Colibri T20 512MB IT SETEK", TARGET_IS_ENABLED(COLIBRI_T20) },
++ [44] = { "Colibri iMX6ULL 512MB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [45] = { "Colibri iMX6ULL 512MB WB", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [46] = { "Apalis iMX8QXP 2GB WB IT", 0 },
++ [47] = { "Apalis iMX8QM 4GB IT", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [48] = { "Apalis iMX8QP 2GB WB", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [49] = { "Apalis iMX8QP 2GB", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [50] = { "Colibri iMX8QXP 2GB IT", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [51] = { "Colibri iMX8DX 1GB WB", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [52] = { "Colibri iMX8DX 1GB", TARGET_IS_ENABLED(COLIBRI_IMX8X) },
++ [53] = { "Apalis iMX8QXP 2GB ECC IT", 0 },
++ [54] = { "Apalis iMX8DXP 1GB", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [55] = { "Verdin iMX8M Mini Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [56] = { "Verdin iMX8M Nano Quad 1GB WB", 0 },
++ [57] = { "Verdin iMX8M Mini DualLite 1GB", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [58] = { "Verdin iMX8M Plus Quad 4GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [59] = { "Verdin iMX8M Mini Quad 2GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [60] = { "Verdin iMX8M Mini DualLite 1GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
++ [61] = { "Verdin iMX8M Plus Quad 2GB", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [62] = { "Colibri iMX6ULL 1GB IT", TARGET_IS_ENABLED(COLIBRI_IMX6ULL) },
++ [63] = { "Verdin iMX8M Plus Quad 4GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [64] = { "Verdin iMX8M Plus Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [65] = { "Verdin iMX8M Plus QuadLite 1GB IT", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [66] = { "Verdin iMX8M Plus Quad 8GB WB", TARGET_IS_ENABLED(VERDIN_IMX8MP) },
++ [67] = { "Apalis iMX8QM 8GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) },
++ [68] = { "Verdin iMX8M Mini Quad 2GB WB IT", TARGET_IS_ENABLED(VERDIN_IMX8MM) },
+ };
+
+ const char * const toradex_carrier_boards[] = {
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0012-toradex-common-Improve-product-serial-print-during-b.patch b/recipes-bsp/u-boot/u-boot-toradex/0012-toradex-common-Improve-product-serial-print-during-b.patch
new file mode 100644
index 0000000..f9bdeab
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0012-toradex-common-Improve-product-serial-print-during-b.patch
@@ -0,0 +1,41 @@
+From abe52f58bc54efa9a9849ad4246666ae0be94d38 Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Thu, 21 Jul 2022 15:17:38 +0200
+Subject: [PATCH 12/12] toradex: common: Improve product/serial print during
+ boot
+
+Add product id print in show_board_info(), with an increasing number of
+Toradex SKUs available with small differences it makes sense to print it.
+
+Move serial number print to a dedicated line, this prevents the previous
+line with the product name to overflow the 80 columns with any
+reasonable product name length.
+
+Upstream-Status: Backport [abe52f58bc54efa9a9849ad4246666ae0be94d38]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ board/toradex/common/tdx-common.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/board/toradex/common/tdx-common.c b/board/toradex/common/tdx-common.c
+index 2284fcddb510..fadbe455419c 100644
+--- a/board/toradex/common/tdx-common.c
++++ b/board/toradex/common/tdx-common.c
+@@ -115,10 +115,11 @@ int show_board_info(void)
+
+ env_set("serial#", tdx_serial_str);
+
+- printf("Model: Toradex %s %s, Serial# %s\n",
++ printf("Model: Toradex %04d %s %s\n",
++ tdx_hw_tag.prodid,
+ toradex_modules[tdx_hw_tag.prodid].name,
+- tdx_board_rev_str,
+- tdx_serial_str);
++ tdx_board_rev_str);
++ printf("Serial#: %s\n", tdx_serial_str);
+ #ifdef CONFIG_TDX_CFG_BLOCK_EXTRA
+ if (read_tdx_cfg_block_carrier()) {
+ printf("MISSING TORADEX CARRIER CONFIG BLOCKS\n");
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/0013-configs-colibri-imx7-Enable-bootd-command.patch b/recipes-bsp/u-boot/u-boot-toradex/0013-configs-colibri-imx7-Enable-bootd-command.patch
new file mode 100644
index 0000000..c7b17c2
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/0013-configs-colibri-imx7-Enable-bootd-command.patch
@@ -0,0 +1,44 @@
+From 76cc934ba0ee5e374b673f62a3442daca74e6f44 Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Wed, 27 Jul 2022 17:40:46 +0200
+Subject: [PATCH] configs: colibri-imx7: Enable bootd command
+
+Enable boot/bootd command in toradex colibri-imx7 defconfig,
+it's just convenient to have it in and every other toradex board
+already includes it.
+
+Upstream-Status: Submitted [https://lore.kernel.org/all/20220803112009.271563-1-francesco.dolcini@toradex.com/]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+---
+ configs/colibri_imx7_defconfig | 1 -
+ configs/colibri_imx7_emmc_defconfig | 1 -
+ 2 files changed, 2 deletions(-)
+
+diff --git a/configs/colibri_imx7_defconfig b/configs/colibri_imx7_defconfig
+index 973afc1a2b4b..e0de7f1ab18d 100644
+--- a/configs/colibri_imx7_defconfig
++++ b/configs/colibri_imx7_defconfig
+@@ -25,7 +25,6 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+ CONFIG_DISPLAY_BOARDINFO_LATE=y
+ CONFIG_BOARD_LATE_INIT=y
+ CONFIG_SYS_PROMPT="Colibri iMX7 # "
+-# CONFIG_CMD_BOOTD is not set
+ # CONFIG_BOOTM_PLAN9 is not set
+ # CONFIG_BOOTM_RTEMS is not set
+ # CONFIG_CMD_IMI is not set
+diff --git a/configs/colibri_imx7_emmc_defconfig b/configs/colibri_imx7_emmc_defconfig
+index 01b1cb8b5520..e4083b55c3a8 100644
+--- a/configs/colibri_imx7_emmc_defconfig
++++ b/configs/colibri_imx7_emmc_defconfig
+@@ -24,7 +24,6 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+ CONFIG_DISPLAY_BOARDINFO_LATE=y
+ CONFIG_BOARD_LATE_INIT=y
+ CONFIG_SYS_PROMPT="Colibri iMX7 # "
+-# CONFIG_CMD_BOOTD is not set
+ # CONFIG_BOOTM_PLAN9 is not set
+ # CONFIG_BOOTM_RTEMS is not set
+ # CONFIG_CMD_IMI is not set
+--
+2.25.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/use-head-next/0001-colibri_imx7-boot-linux-kernel-in-secure-mode.patch b/recipes-bsp/u-boot/u-boot-toradex/use-head-next/0001-colibri_imx7-boot-linux-kernel-in-secure-mode.patch
new file mode 100644
index 0000000..dbcfa32
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/use-head-next/0001-colibri_imx7-boot-linux-kernel-in-secure-mode.patch
@@ -0,0 +1,31 @@
+From a936c63690098b19c12acb7a9f106e023129ed99 Mon Sep 17 00:00:00 2001
+From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Date: Wed, 30 Sep 2020 16:37:54 +0200
+Subject: [PATCH] colibri_imx7: boot linux kernel in secure mode
+
+While NXP i.MX 7 downstream requires the Linux kernel to boot in secure
+mode mainline/upstream requires non-secure mode instead, as it properly
+uses PSCI to control further cores.
+
+Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
+Reworked for mainline U-Boot.
+Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
+---
+ include/configs/colibri_imx7.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/configs/colibri_imx7.h b/include/configs/colibri_imx7.h
+index 9543e0233e..e33d066328 100644
+--- a/include/configs/colibri_imx7.h
++++ b/include/configs/colibri_imx7.h
+@@ -130,6 +130,7 @@
+ UBOOT_UPDATE \
+ "boot_file=zImage\0" \
+ "boot_script_dhcp=boot.scr\0" \
++ "bootm_boot_mode=sec\0" \
+ "console=ttymxc0\0" \
+ "defargs=\0" \
+ "fdt_board=eval-v3\0" \
+--
+2.20.1
+
diff --git a/recipes-bsp/u-boot/u-boot-toradex/use_hash_old_parser.cfg b/recipes-bsp/u-boot/u-boot-toradex/use_hash_old_parser.cfg
new file mode 100644
index 0000000..b5f407b
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex/use_hash_old_parser.cfg
@@ -0,0 +1,2 @@
+CONFIG_HUSH_OLD_PARSER=y
+CONFIG_HUSH_MODERN_PARSER=n \ No newline at end of file
diff --git a/recipes-bsp/u-boot/u-boot-toradex_2022.07.bb b/recipes-bsp/u-boot/u-boot-toradex_2022.07.bb
new file mode 100644
index 0000000..313dc7b
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex_2022.07.bb
@@ -0,0 +1,31 @@
+require u-boot-toradex-common.inc
+
+# hash of release v2022.07"
+SRCREV = "e092e3250270a1016c877da7bdd9384f14b1321e"
+# patches which are not in the used stable version
+TDX_PATCHES = " \
+ file://0001-toradex-tdx-cfg-block-use-only-snprintf.patch \
+ file://0002-toradex-tdx-cfg-block-use-defines-for-string-length.patch \
+ file://0003-toradex-tdx-cfg-block-extend-assembly-version.patch \
+ file://0004-toradex-tdx-cfg-block-add-new-toradex-oui-range.patch \
+ file://0005-toradex-tdx-cfg-block-add-0068-i.mx-8m-mini-sku.patch \
+ file://0006-toradex-common-Remove-stale-comments-about-modules-a.patch \
+ file://0007-toradex-common-Use-ARRAY_SIZE-macro.patch \
+ file://0008-toradex-tdx-cfg-block-Cleanup-interactive-cfg-block-.patch \
+ file://0009-toradex-common-Remove-stale-function-declaration.patch \
+ file://0010-toradex-common-Remove-ifdef-usage-for-2nd-ethaddr.patch \
+ file://0011-toradex-tdx-cfg-block-Use-official-SKU-names.patch \
+ file://0012-toradex-common-Improve-product-serial-print-during-b.patch \
+ file://0013-configs-colibri-imx7-Enable-bootd-command.patch \
+ file://0001-ARM-imx8mp-verdin-imx8mp-Add-memory-size-detection.patch \
+ file://0001-apalis-colibri_imx6-imx6ull-_imx7-update-env-memory-.patch \
+ file://0001-configs-colibri-imx7-Fix-bad-block-table-in-flash-co.patch \
+ file://0001-colibri_imx6-fix-RALAT-and-WALAT-values.patch \
+ file://0001-toradex-colibri_imx7-Enable-nand-emmc-detection-and-.patch \
+ file://0001-arm-imx-add-u-boot-nand.imx-to-boot-from-NAND-withou.patch \
+ file://0001-arm-mach-imx-Makefile-Extend-u-boot-nand.imx-padding.patch \
+ file://0001-arm-dts-Makefile-Prevent-build-errors-from-other-imx.patch \
+ file://0001-apalis-colibri-imx6-imx6ull-imx7-defconfig-Enable-fa.patch \
+ file://0002-board-apalis-colibri-imx6-imx6ull-imx7-Add-fastboot-.patch \
+ file://0001-colibri-imx7-Call-fdt_increase_size.patch \
+"
diff --git a/recipes-bsp/u-boot/u-boot-toradex_mainline.bb b/recipes-bsp/u-boot/u-boot-toradex_mainline.bb
new file mode 100644
index 0000000..a151efc
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-toradex_mainline.bb
@@ -0,0 +1,15 @@
+# This builds latest head of U-Boot denx master
+# Do not use this recipe for production, it is not reproducible
+# and you don't know what git hash is built from just looking
+# at the metadata
+
+require u-boot-toradex-common.inc
+
+SRCREV = "${AUTOREV}"
+# patches which are not (yet) in the latest master
+TDX_PATCHES = " \
+ file://use_hash_old_parser.cfg \
+"
+
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes-core/fs-init/fs-init.bb b/recipes-core/fs-init/fs-init.bb
index 023f347..bb9b1b8 100644
--- a/recipes-core/fs-init/fs-init.bb
+++ b/recipes-core/fs-init/fs-init.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "Script to expand the rootfs to the full size of its partion, star
LICENSE = "PD"
PR = "r3"
-RRECOMMENDS_${PN} = "e2fsprogs-resize2fs"
+RRECOMMENDS:${PN} = "e2fsprogs-resize2fs"
SRC_URI = " \
file://resizefs.sh \
@@ -22,6 +22,6 @@ do_install () {
}
SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE_${PN} = "resizefs.service"
+SYSTEMD_SERVICE:${PN} = "resizefs.service"
inherit allarch systemd
diff --git a/recipes-core/set-hostname/files/set-hostname.service b/recipes-core/set-hostname/files/set-hostname.service
index 306528b..9bd2a63 100644
--- a/recipes-core/set-hostname/files/set-hostname.service
+++ b/recipes-core/set-hostname/files/set-hostname.service
@@ -1,5 +1,5 @@
[Unit]
-ConditionPathExists=|!/etc/hostname
+ConditionFileNotEmpty=|!/etc/hostname
Wants=network-pre.target
Before=network-pre.target
After=local-fs.target
diff --git a/recipes-core/set-hostname/set-hostname_1.0.bb b/recipes-core/set-hostname/set-hostname_1.0.bb
index 15fa66b..b39abdb 100644
--- a/recipes-core/set-hostname/set-hostname_1.0.bb
+++ b/recipes-core/set-hostname/set-hostname_1.0.bb
@@ -10,12 +10,12 @@ SRC_URI += " \
file://set-hostname.service \
"
-FILES_${PN} = " \
+FILES:${PN} = " \
${bindir} \
${systemd_system_unitdir} \
"
-SYSTEMD_SERVICE_${PN} = " \
+SYSTEMD_SERVICE:${PN} = " \
set-hostname.service \
"
diff --git a/recipes-core/systemd/systemd-conf/journald.conf b/recipes-core/systemd/systemd-conf/journald.conf
new file mode 100644
index 0000000..ed945e1
--- /dev/null
+++ b/recipes-core/systemd/systemd-conf/journald.conf
@@ -0,0 +1,3 @@
+[Journal]
+ForwardToSyslog=yes
+RuntimeMaxUse=16M
diff --git a/recipes-core/systemd/systemd-conf_%.bbappend b/recipes-core/systemd/systemd-conf_%.bbappend
index 77ab59d..34e18d6 100644
--- a/recipes-core/systemd/systemd-conf_%.bbappend
+++ b/recipes-core/systemd/systemd-conf_%.bbappend
@@ -1 +1 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/systemd-conf:"
+FILESEXTRAPATHS:prepend:tdx := "${THISDIR}/systemd-conf:"
diff --git a/recipes-core/systemd/systemd_%.bbappend b/recipes-core/systemd/systemd_%.bbappend
index ea40849..5bd3016 100644
--- a/recipes-core/systemd/systemd_%.bbappend
+++ b/recipes-core/systemd/systemd_%.bbappend
@@ -1,4 +1,4 @@
# This allows for udevd automounting with mounts accessible to all.
-do_configure_prepend () {
+do_configure:prepend:tdx () {
sed -i '/PrivateMounts=yes/d' ${S}/units/systemd-udevd.service.in
-} \ No newline at end of file
+}
diff --git a/recipes-core/udev/files/apalis-imx6/99-toradex.rules b/recipes-core/udev/files/apalis-imx6/99-toradex.rules
index f29daae..26b240f 100644
--- a/recipes-core/udev/files/apalis-imx6/99-toradex.rules
+++ b/recipes-core/udev/files/apalis-imx6/99-toradex.rules
@@ -1,16 +1,29 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a0000.i2c", SYMLINK+="apalis-i2c1"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="i2c@0", SYMLINK+="apalis-i2c2"
-ACTION=="add", SUBSYSTEM=="i2c-dev", KERNELS=="120000.hdmi", SYMLINK+="apalis-i2c2"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a8000.i2c", SYMLINK+="apalis-i2c3"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a4000.i2c", SYMLINK+="apalis-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x2020000", SYMLINK+="apalis-uart1"
-ACTION=="add", ATTRS{iomem_base}=="0x21E8000", SYMLINK+="apalis-uart2"
-ACTION=="add", ATTRS{iomem_base}=="0x21F0000", SYMLINK+="apalis-uart3"
-ACTION=="add", ATTRS{iomem_base}=="0x21F4000", SYMLINK+="apalis-uart4"
-ACTION=="add", KERNELS=="20bc000.wdog", SYMLINK+="apalis-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="2008000.*spi", SYMLINK+="apalis-spi1-cs%n"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="200c000.*spi", SYMLINK+="apalis-spi2-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a0000.i2c", SYMLINK+="apalis-i2c1"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="i2c@0", SYMLINK+="apalis-i2c2"
+ACTION=="add|change", SUBSYSTEM=="i2c-dev", KERNELS=="120000.hdmi", SYMLINK+="apalis-i2c2"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a8000.i2c", SYMLINK+="apalis-i2c3"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a4000.i2c", SYMLINK+="apalis-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x2020000", SYMLINK+="apalis-uart1"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21E8000", SYMLINK+="apalis-uart2"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21F0000", SYMLINK+="apalis-uart3"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21F4000", SYMLINK+="apalis-uart4"
+ACTION=="add|change", KERNELS=="20bc000.wdog", SYMLINK+="apalis-watchdog"
+ACTION=="add|change", KERNELS=="20bc000.watchdog", SYMLINK+="apalis-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="soc*", SYMLINK+="apalis-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="2008000.*spi", SYMLINK+="apalis-spi1-cs%n"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="200c000.*spi", SYMLINK+="apalis-spi2-cs%n"
KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.usdhc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.mmc", SYMLINK+="emmc"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.usdhc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.mmc", SYMLINK+="emmc-boot%n"
KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2198000.usdhc", SYMLINK+="emmc-part%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2198000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2194000.usdhc", SYMLINK+="apalis-sd4bit"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2194000.mmc", SYMLINK+="apalis-sd4bit"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2194000.usdhc", SYMLINK+="apalis-sd4bit-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2194000.mmc", SYMLINK+="apalis-sd4bit-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.usdhc", SYMLINK+="apalis-mmc8bit"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.mmc", SYMLINK+="apalis-mmc8bit"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.usdhc", SYMLINK+="apalis-mmc8bit-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.mmc", SYMLINK+="apalis-mmc8bit-part%n"
diff --git a/recipes-core/udev/files/apalis-imx8/99-toradex.rules b/recipes-core/udev/files/apalis-imx8/99-toradex.rules
index 266acc3..566f57d 100644
--- a/recipes-core/udev/files/apalis-imx8/99-toradex.rules
+++ b/recipes-core/udev/files/apalis-imx8/99-toradex.rules
@@ -1,14 +1,19 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a820000.i2c", SYMLINK+="apalis-i2c1"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a830000.i2c", SYMLINK+="apalis-i2c3"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a810000.i2c", SYMLINK+="apalis-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x5A070010", SYMLINK+="apalis-uart1"
-ACTION=="add", ATTRS{iomem_base}=="0x5A090010", SYMLINK+="apalis-uart2"
-ACTION=="add", ATTRS{iomem_base}=="0x5A060010", SYMLINK+="apalis-uart3"
-ACTION=="add", ATTRS{iomem_base}=="0x5A080010", SYMLINK+="apalis-uart4"
-ACTION=="add", KERNELS=="watchdog", SYMLINK+="apalis-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="5a000000.spi", SYMLINK+="apalis-spi1-cs%n"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="5a020000.spi", SYMLINK+="apalis-spi2-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a820000.i2c", SYMLINK+="apalis-i2c1"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a830000.i2c", SYMLINK+="apalis-i2c3"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a810000.i2c", SYMLINK+="apalis-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x5A070010", SYMLINK+="apalis-uart1"
+ACTION=="add|change", ATTRS{iomem_base}=="0x5A090010", SYMLINK+="apalis-uart2"
+ACTION=="add|change", ATTRS{iomem_base}=="0x5A060010", SYMLINK+="apalis-uart3"
+ACTION=="add|change", ATTRS{iomem_base}=="0x5A080010", SYMLINK+="apalis-uart4"
+ACTION=="add|change", KERNELS=="watchdog", SYMLINK+="apalis-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="scu*", SYMLINK+="apalis-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="5a000000.spi", SYMLINK+="apalis-spi1-cs%n"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="5a020000.spi", SYMLINK+="apalis-spi2-cs%n"
KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="5b010000.mmc", SYMLINK+="emmc"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="5b010000.mmc", SYMLINK+="emmc-boot%n"
KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="5b010000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="5b030000.mmc", SYMLINK+="apalis-sd4bit"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="5b030000.mmc", SYMLINK+="apalis-sd4bit-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="5b020000.mmc", SYMLINK+="apalis-mmc8bit"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="5b020000.mmc", SYMLINK+="apalis-mmc8bit-part%n"
diff --git a/recipes-core/udev/files/apalis-imx8x/99-toradex.rules b/recipes-core/udev/files/apalis-imx8x/99-toradex.rules
deleted file mode 100644
index 20e4533..0000000
--- a/recipes-core/udev/files/apalis-imx8x/99-toradex.rules
+++ /dev/null
@@ -1,15 +0,0 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a810000.i2c", SYMLINK+="apalis-i2c1"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="56246000.i2c", SYMLINK+="apalis-i2c2"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a830000.i2c", SYMLINK+="apalis-i2c3"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a800000.i2c", SYMLINK+="apalis-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x5A070010", SYMLINK+="apalis-uart1"
-ACTION=="add", ATTRS{iomem_base}=="0x5A060010", SYMLINK+="apalis-uart2"
-ACTION=="add", ATTRS{iomem_base}=="0x5A080010", SYMLINK+="apalis-uart3"
-ACTION=="add", ATTRS{iomem_base}=="0x5A090010", SYMLINK+="apalis-uart4"
-ACTION=="add", KERNELS=="watchdog", SYMLINK+="apalis-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="5a000000.spi", SYMLINK+="apalis-spi1-cs%n"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="5a020000.spi", SYMLINK+="apalis-spi2-cs%n"
-KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="5b010000.mmc", SYMLINK+="emmc"
-KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="5b010000.mmc", SYMLINK+="emmc-boot%n"
-KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="5b010000.mmc", SYMLINK+="emmc-part%n"
-SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
diff --git a/recipes-core/udev/files/apalis-imx8x/toradex-adc.sh b/recipes-core/udev/files/apalis-imx8x/toradex-adc.sh
deleted file mode 100755
index 43aae6d..0000000
--- a/recipes-core/udev/files/apalis-imx8x/toradex-adc.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env sh
-#
-# Called from udev. Compatible to apalis-imx8x.
-#
-# Create/remove symlinks to/from the files with raw ain data.
-
-# Map the ADC lines:
-# apalis-adc{0..3} -> ADMA.ADC.IN{0,1,4,5}
-
-if [ "$ACTION" = "add" ]; then
- ln -s "/sys$DEVPATH/in_voltage0_raw" /dev/apalis-adc0
- ln -s "/sys$DEVPATH/in_voltage1_raw" /dev/apalis-adc1
- ln -s "/sys$DEVPATH/in_voltage4_raw" /dev/apalis-adc2
- ln -s "/sys$DEVPATH/in_voltage5_raw" /dev/apalis-adc3
-elif [ "$ACTION" = "remove" ]; then
- rm -f /dev/apalis-adc0
- rm -f /dev/apalis-adc1
- rm -f /dev/apalis-adc2
- rm -f /dev/apalis-adc3
-fi
-
diff --git a/recipes-core/udev/files/apalis-tk1/99-toradex.rules b/recipes-core/udev/files/apalis-tk1/99-toradex.rules
deleted file mode 100644
index 68cd9a8..0000000
--- a/recipes-core/udev/files/apalis-tk1/99-toradex.rules
+++ /dev/null
@@ -1,3 +0,0 @@
-KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="700b0600.sdhci", SYMLINK+="emmc"
-KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="700b0600.sdhci", SYMLINK+="emmc-boot%n"
-KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="700b0600.sdhci", SYMLINK+="emmc-part%n"
diff --git a/recipes-core/udev/files/bootpart-automount.rules b/recipes-core/udev/files/bootpart-automount.rules
new file mode 100644
index 0000000..8b02dec
--- /dev/null
+++ b/recipes-core/udev/files/bootpart-automount.rules
@@ -0,0 +1,6 @@
+# Toradex specific, to bind mount boot partition to /boot.
+#
+# To be noticed: Be careful if you want to change the rule file name, it must be loaded
+# by udevd after automount.rules, otherwise, the original mount point might be not present.
+#
+ACTION=="add", KERNEL=="mmcblk[0-9]p[0-9]*", RUN+="/etc/udev/scripts/toradex-mount-bootpart.sh"
diff --git a/recipes-core/udev/files/colibri-imx6/99-toradex.rules b/recipes-core/udev/files/colibri-imx6/99-toradex.rules
index 59cf815..7ac9fda 100644
--- a/recipes-core/udev/files/colibri-imx6/99-toradex.rules
+++ b/recipes-core/udev/files/colibri-imx6/99-toradex.rules
@@ -1,13 +1,22 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a8000.i2c", SYMLINK+="colibri-i2c"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="i2c@0", SYMLINK+="colibri-i2c-ddc"
-ACTION=="add", SUBSYSTEM=="i2c-dev", KERNELS=="120000.hdmi", SYMLINK+="colibri-i2c-ddc"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a4000.i2c", SYMLINK+="colibri-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x2020000", SYMLINK+="colibri-uarta"
-ACTION=="add", ATTRS{iomem_base}=="0x21E8000", SYMLINK+="colibri-uartb"
-ACTION=="add", ATTRS{iomem_base}=="0x21EC000", SYMLINK+="colibri-uartc"
-ACTION=="add", KERNELS=="20bc000.wdog", SYMLINK+="colibri-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="2014000.*spi", SYMLINK+="colibri-spi-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a8000.i2c", SYMLINK+="colibri-i2c"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="i2c@0", SYMLINK+="colibri-i2c-ddc"
+ACTION=="add|change", SUBSYSTEM=="i2c-dev", KERNELS=="120000.hdmi", SYMLINK+="colibri-i2c-ddc"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a4000.i2c", SYMLINK+="colibri-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x2020000", SYMLINK+="colibri-uarta"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21E8000", SYMLINK+="colibri-uartb"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21EC000", SYMLINK+="colibri-uartc"
+ACTION=="add|change", KERNELS=="20bc000.wdog", SYMLINK+="colibri-watchdog"
+ACTION=="add|change", KERNELS=="20bc000.watchdog", SYMLINK+="colibri-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="soc*", SYMLINK+="colibri-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="2014000.*spi", SYMLINK+="colibri-spi-cs%n"
KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.usdhc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.mmc", SYMLINK+="emmc"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.usdhc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2198000.mmc", SYMLINK+="emmc-boot%n"
KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2198000.usdhc", SYMLINK+="emmc-part%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2198000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.usdhc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.mmc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.usdhc", SYMLINK+="colibri-sd-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.mmc", SYMLINK+="colibri-sd-part%n"
diff --git a/recipes-core/udev/files/colibri-imx6ull-emmc/99-toradex.rules b/recipes-core/udev/files/colibri-imx6ull-emmc/99-toradex.rules
new file mode 100644
index 0000000..b97986c
--- /dev/null
+++ b/recipes-core/udev/files/colibri-imx6ull-emmc/99-toradex.rules
@@ -0,0 +1,20 @@
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a0000.i2c", SYMLINK+="colibri-i2c"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a4000.i2c", SYMLINK+="colibri-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x2020000", SYMLINK+="colibri-uarta"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21E8000", SYMLINK+="colibri-uartb"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21F4000", SYMLINK+="colibri-uartc"
+ACTION=="add|change", KERNELS=="20bc000.wdog", SYMLINK+="colibri-watchdog"
+ACTION=="add|change", KERNELS=="20bc000.watchdog", SYMLINK+="colibri-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="soc*", SYMLINK+="colibri-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="2008000.*spi", SYMLINK+="colibri-spi-cs%n"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.usdhc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.mmc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.usdhc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.mmc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2194000.usdhc", SYMLINK+="emmc-part%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2194000.mmc", SYMLINK+="emmc-part%n"
+SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.usdhc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.mmc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.usdhc", SYMLINK+="colibri-sd-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.mmc", SYMLINK+="colibri-sd-part%n"
diff --git a/recipes-core/udev/files/colibri-imx6ull-emmc/toradex-adc.sh b/recipes-core/udev/files/colibri-imx6ull-emmc/toradex-adc.sh
new file mode 100755
index 0000000..123e798
--- /dev/null
+++ b/recipes-core/udev/files/colibri-imx6ull-emmc/toradex-adc.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env sh
+#
+# Called from udev. Compatible to colibri-imx6ull.
+#
+# Create/remove symlinks to/from the files with raw ain data.
+
+# Map the ADC lines:
+# colibri-ain{0..3} -> ADCx_IN{0,1,8,9}
+
+if [ "$ACTION" = "add" ]; then
+ ln -s "/sys$DEVPATH/in_voltage0_raw" /dev/colibri-ain0
+ ln -s "/sys$DEVPATH/in_voltage1_raw" /dev/colibri-ain1
+ ln -s "/sys$DEVPATH/in_voltage8_raw" /dev/colibri-ain2
+ ln -s "/sys$DEVPATH/in_voltage9_raw" /dev/colibri-ain3
+elif [ "$ACTION" = "remove" ]; then
+ rm -f /dev/colibri-ain0
+ rm -f /dev/colibri-ain1
+ rm -f /dev/colibri-ain2
+ rm -f /dev/colibri-ain3
+fi
+
diff --git a/recipes-core/udev/files/colibri-imx6ull/99-toradex.rules b/recipes-core/udev/files/colibri-imx6ull/99-toradex.rules
index c91f750..b97986c 100644
--- a/recipes-core/udev/files/colibri-imx6ull/99-toradex.rules
+++ b/recipes-core/udev/files/colibri-imx6ull/99-toradex.rules
@@ -1,8 +1,20 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a0000.i2c", SYMLINK+="colibri-i2c"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a4000.i2c", SYMLINK+="colibri-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x2020000", SYMLINK+="colibri-uarta"
-ACTION=="add", ATTRS{iomem_base}=="0x21E8000", SYMLINK+="colibri-uartb"
-ACTION=="add", ATTRS{iomem_base}=="0x21F4000", SYMLINK+="colibri-uartc"
-ACTION=="add", KERNELS=="20bc000.wdog", SYMLINK+="colibri-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="2008000.*spi", SYMLINK+="colibri-spi-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a0000.i2c", SYMLINK+="colibri-i2c"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="21a4000.i2c", SYMLINK+="colibri-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x2020000", SYMLINK+="colibri-uarta"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21E8000", SYMLINK+="colibri-uartb"
+ACTION=="add|change", ATTRS{iomem_base}=="0x21F4000", SYMLINK+="colibri-uartc"
+ACTION=="add|change", KERNELS=="20bc000.wdog", SYMLINK+="colibri-watchdog"
+ACTION=="add|change", KERNELS=="20bc000.watchdog", SYMLINK+="colibri-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="soc*", SYMLINK+="colibri-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="2008000.*spi", SYMLINK+="colibri-spi-cs%n"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.usdhc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.mmc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.usdhc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="2194000.mmc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2194000.usdhc", SYMLINK+="emmc-part%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="2194000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.usdhc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="2190000.mmc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.usdhc", SYMLINK+="colibri-sd-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="2190000.mmc", SYMLINK+="colibri-sd-part%n"
diff --git a/recipes-core/udev/files/colibri-imx6ull/toradex-adc.sh b/recipes-core/udev/files/colibri-imx6ull/toradex-adc.sh
index b56593f..123e798 100755
--- a/recipes-core/udev/files/colibri-imx6ull/toradex-adc.sh
+++ b/recipes-core/udev/files/colibri-imx6ull/toradex-adc.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env sh
#
-# Called from udev. Compatible to colibri-imx8x.
+# Called from udev. Compatible to colibri-imx6ull.
#
# Create/remove symlinks to/from the files with raw ain data.
diff --git a/recipes-core/udev/files/colibri-imx7-emmc/99-toradex.rules b/recipes-core/udev/files/colibri-imx7-emmc/99-toradex.rules
index 707920e..2d8aff4 100644
--- a/recipes-core/udev/files/colibri-imx7-emmc/99-toradex.rules
+++ b/recipes-core/udev/files/colibri-imx7-emmc/99-toradex.rules
@@ -1,11 +1,19 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="colibri-i2c"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="colibri-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x30860000", SYMLINK+="colibri-uarta"
-ACTION=="add", ATTRS{iomem_base}=="0x30890000", SYMLINK+="colibri-uartb"
-ACTION=="add", ATTRS{iomem_base}=="0x30880000", SYMLINK+="colibri-uartc"
-ACTION=="add", KERNEL=="watchdog", DRIVERS=="rn5t618-wdt", SYMLINK+="colibri-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="30840000.*spi", SYMLINK+="colibri-spi-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="colibri-i2c"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="colibri-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30860000", SYMLINK+="colibri-uarta"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30890000", SYMLINK+="colibri-uartb"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30880000", SYMLINK+="colibri-uartc"
+ACTION=="add|change", SUBSYSTEM=="watchdog", DRIVERS=="rn5t618-wdt", SYMLINK+="colibri-watchdog", SYMLINK+="colibri-watchdog-som"
+ACTION=="add|change", SUBSYSTEM=="watchdog", DRIVERS=="imx2-wdt", SYMLINK+="colibri-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="30840000.*spi", SYMLINK+="colibri-spi-cs%n"
KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.usdhc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.mmc", SYMLINK+="emmc"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.usdhc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.mmc", SYMLINK+="emmc-boot%n"
KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="30b60000.usdhc", SYMLINK+="emmc-part%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="30b60000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="30b40000.usdhc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="30b40000.mmc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="30b40000.usdhc", SYMLINK+="colibri-sd-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="30b40000.mmc", SYMLINK+="colibri-sd-part%n"
diff --git a/recipes-core/udev/files/colibri-imx7/99-toradex.rules b/recipes-core/udev/files/colibri-imx7/99-toradex.rules
index c0f8f23..2d8aff4 100644
--- a/recipes-core/udev/files/colibri-imx7/99-toradex.rules
+++ b/recipes-core/udev/files/colibri-imx7/99-toradex.rules
@@ -1,8 +1,19 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="colibri-i2c"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="colibri-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x30860000", SYMLINK+="colibri-uarta"
-ACTION=="add", ATTRS{iomem_base}=="0x30890000", SYMLINK+="colibri-uartb"
-ACTION=="add", ATTRS{iomem_base}=="0x30880000", SYMLINK+="colibri-uartc"
-ACTION=="add", KERNEL=="watchdog", DRIVERS=="rn5t618-wdt", SYMLINK+="colibri-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="30840000.*spi", SYMLINK+="colibri-spi-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="colibri-i2c"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="colibri-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30860000", SYMLINK+="colibri-uarta"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30890000", SYMLINK+="colibri-uartb"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30880000", SYMLINK+="colibri-uartc"
+ACTION=="add|change", SUBSYSTEM=="watchdog", DRIVERS=="rn5t618-wdt", SYMLINK+="colibri-watchdog", SYMLINK+="colibri-watchdog-som"
+ACTION=="add|change", SUBSYSTEM=="watchdog", DRIVERS=="imx2-wdt", SYMLINK+="colibri-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="30840000.*spi", SYMLINK+="colibri-spi-cs%n"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.usdhc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.mmc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.usdhc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.mmc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="30b60000.usdhc", SYMLINK+="emmc-part%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="30b60000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="30b40000.usdhc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="30b40000.mmc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="30b40000.usdhc", SYMLINK+="colibri-sd-part%n"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="30b40000.mmc", SYMLINK+="colibri-sd-part%n"
diff --git a/recipes-core/udev/files/colibri-imx8x/99-toradex.rules b/recipes-core/udev/files/colibri-imx8x/99-toradex.rules
index 11a1e37..b7afa14 100644
--- a/recipes-core/udev/files/colibri-imx8x/99-toradex.rules
+++ b/recipes-core/udev/files/colibri-imx8x/99-toradex.rules
@@ -1,11 +1,14 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a810000.i2c", SYMLINK+="colibri-i2c"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a800000.i2c", SYMLINK+="colibri-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x5A090010", SYMLINK+="colibri-uarta"
-ACTION=="add", ATTRS{iomem_base}=="0x5A060010", SYMLINK+="colibri-uartb"
-ACTION=="add", ATTRS{iomem_base}=="0x5A080010", SYMLINK+="colibri-uartc"
-ACTION=="add", KERNELS=="watchdog", SYMLINK+="colibri-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="5a020000.spi", SYMLINK+="colibri-spi-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a810000.i2c", SYMLINK+="colibri-i2c"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="5a800000.i2c", SYMLINK+="colibri-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x5A090010", SYMLINK+="colibri-uarta"
+ACTION=="add|change", ATTRS{iomem_base}=="0x5A060010", SYMLINK+="colibri-uartb"
+ACTION=="add|change", ATTRS{iomem_base}=="0x5A080010", SYMLINK+="colibri-uartc"
+ACTION=="add|change", KERNELS=="watchdog", SYMLINK+="colibri-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="scu*", SYMLINK+="colibri-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="5a020000.spi", SYMLINK+="colibri-spi-cs%n"
KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="5b010000.mmc", SYMLINK+="emmc"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="5b010000.mmc", SYMLINK+="emmc-boot%n"
KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="5b010000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="5b020000.mmc", SYMLINK+="colibri-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="5b020000.mmc", SYMLINK+="colibri-sd-part%n"
diff --git a/recipes-core/udev/files/hotplug.rules b/recipes-core/udev/files/hotplug.rules
deleted file mode 100644
index a36a47d..0000000
--- a/recipes-core/udev/files/hotplug.rules
+++ /dev/null
@@ -1,2 +0,0 @@
-# SD card hotplug configuration of read_ahead cache size
-KERNEL=="mmcblk?", ACTION=="add" RUN+="/etc/udev/scripts/hotplug.sh"
diff --git a/recipes-core/udev/files/hotplug.sh b/recipes-core/udev/files/hotplug.sh
deleted file mode 100644
index 9d9fd89..0000000
--- a/recipes-core/udev/files/hotplug.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-#
-# Called from udev
-#
-# Set the read_ahead cache size of SD card on hotplug
-
-SYSNAME=$(uname -n)
-DISKNUM=$(echo $DEVNAME | sed -e 's/\(^.*\)\(.$\)/\2/')
-DISKNAME=$(echo $DEVNAME | sed 's/.*\///g;s/p.*//g')
-CORES=$(cat /proc/cpuinfo | grep processor | wc -l)
-
-set_read_ahead_size () {
- if [ $DISKNUM == "0" ]; then #eMMC
- echo $1 > /sys/block/$DISKNAME/queue/read_ahead_kb
- else #SD card
- echo $2 > /sys/block/$DISKNAME/queue/read_ahead_kb
- fi
-}
-
-if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ "$DEVTYPE" = "disk" ]; then
- #Set read_ahead cache of mmcblk? SD card
- if test -e /sys/block/$DISKNAME/queue/read_ahead_kb
- then
- if [ $SYSNAME == "colibri-imx6" ]; then
- if [ $CORES -eq 1 ]; then #imx6s
- set_read_ahead_size 512 512
- else #imx6dl
- set_read_ahead_size 1024 512
- fi
- elif [ $SYSNAME == "apalis-imx6" ]; then
- if [ $CORES -eq 2 ]; then #imx6d
- set_read_ahead_size 1024 512
- else #imx6q
- set_read_ahead_size 1024 512
- fi
- elif [ $SYSNAME == "apalis-tk1" ]; then
- set_read_ahead_size 4096 1024
- else
- logger "sd_hotplug.sh" "System name not compatible"
- fi
- else
- logger "sd_hotplug" "No read_ahead_kb configuration file found"
- fi
-fi
diff --git a/recipes-core/udev/files/mount.blacklist b/recipes-core/udev/files/mount.blacklist
deleted file mode 100644
index cf2c9bf..0000000
--- a/recipes-core/udev/files/mount.blacklist
+++ /dev/null
@@ -1,6 +0,0 @@
-/dev/loop
-/dev/ram
-/dev/mtdblock
-/dev/md
-/dev/mmcblk0boot0
-/dev/mmcblk0boot1
diff --git a/recipes-core/udev/files/mount.sh b/recipes-core/udev/files/mount.sh
deleted file mode 100644
index 1e8bfa4..0000000
--- a/recipes-core/udev/files/mount.sh
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-#
-# Called from udev
-#
-# Attempt to mount any added block devices and umount any removed devices
-
-# By default we boot from a block device the BSP uses the first partition to
-# store the files used by U-Boot, aka. the bootfs. The second partition of the
-# same block device then contains the rootfs.
-# Read the PARTUUID of the rootfs from /proc/cmdline, check if that device
-# exists and then assume that the first partition on that device is the one
-# with the bootpartion on it.
-# Symlink that partition to /dev/boot-part, that then gets mounted to /boot,
-# compare with /etc/fstab.
-
-# expects 'root=PARTUUID=fe6beb3d-02' in /proc/cmdline
-
-BASEUUID=$(sed -r 's/^.*\broot=PARTUUID=([0-9a-f]+)-02.*$/\1/' /proc/cmdline)
-if [ -b /dev/disk/by-partuuid/${BASEUUID}-02 ]; then
- BOOTPART=$(readlink -f /dev/disk/by-partuuid/${BASEUUID}-01)
- if [ x$DEVNAME = x$BOOTPART ]; then
- logger "$0 creating symlink"
- ln -sf $BOOTPART /dev/boot-part
- fi
-fi
-
-MOUNT="/bin/mount"
-PMOUNT="/usr/bin/pmount"
-UMOUNT="/bin/umount"
-for line in `grep -v ^# /etc/udev/mount.blacklist`
-do
- if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
- then
- logger "udev/mount.sh" "[$DEVNAME] is blacklisted, ignoring"
- exit 0
- fi
-done
-
-automount() {
- name="`basename "$DEVNAME"`"
-
- ! test -d "/media/$name" && mkdir -p "/media/$name"
- # Silent util-linux's version of mounting auto
- if [ "x`readlink $MOUNT`" = "x/bin/mount.util-linux" ] ;
- then
- MOUNT="$MOUNT -o silent"
- fi
-
- # If filesystem type is vfat, change the ownership group to 'disk', and
- # grant it with w/r/x permissions.
- case $ID_FS_TYPE in
- vfat|fat)
- MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print $3}' /etc/group`"
- ;;
- # TODO
- *)
- ;;
- esac
-
- if ! $MOUNT -t auto $DEVNAME "/media/$name"
- then
- #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/media/$name\" failed!"
- rm_dir "/media/$name"
- else
- logger "mount.sh/automount" "Auto-mount of [/media/$name] successful"
- touch "/tmp/.automount-$name"
- fi
-}
-
-rm_dir() {
- # We do not want to rm -r populated directories
- if test "`find "$1" | wc -l | tr -d " "`" -lt 2 -a -d "$1"
- then
- ! test -z "$1" && rm -r "$1"
- else
- logger "mount.sh/automount" "Not removing non-empty directory [$1]"
- fi
-}
-
-# No ID_FS_TYPE for cdrom device, yet it should be mounted
-name="`basename "$DEVNAME"`"
-[ -e /sys/block/$name/device/media ] && media_type=`cat /sys/block/$name/device/media`
-
-if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ -n "$ID_FS_TYPE" -o "$media_type" = "cdrom" ]; then
- if [ -x "$PMOUNT" ]; then
- $PMOUNT $DEVNAME 2> /dev/null
- elif [ -x $MOUNT ]; then
- $MOUNT $DEVNAME 2> /dev/null
- fi
-
- # If the device isn't mounted at this point, it isn't
- # configured in fstab (note the root filesystem can show up as
- # /dev/root in /proc/mounts, so check the device number too)
- if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
- grep -q "^$DEVNAME " /proc/mounts || automount
- fi
-fi
-
-
-if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
- for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
- do
- $UMOUNT $mnt
- done
-
- # Remove empty directories from auto-mounter
- name="`basename "$DEVNAME"`"
- test -e "/tmp/.automount-$name" && rm_dir "/media/$name"
-fi
diff --git a/recipes-core/udev/files/toradex-mount-bootpart.sh b/recipes-core/udev/files/toradex-mount-bootpart.sh
new file mode 100755
index 0000000..8e2e596
--- /dev/null
+++ b/recipes-core/udev/files/toradex-mount-bootpart.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env sh
+#
+# Bind mount boot partition /boot -> /${MOUNT_BASE}/BOOT-PARTITION-MOUNTPOINT
+# in which:
+# MOUNT_BASE is defined in /etc/udev/scripts/mount.sh
+# BOOT-PARTITION-MOUNTPOINT is the mount point of boot partition.
+
+BASEUUID=$(sed -r 's/^.*\broot=PARTUUID=([0-9a-f]+)-02.*$/\1/' /proc/cmdline)
+BOOTPART=$(readlink -f /dev/disk/by-partuuid/"${BASEUUID}-01")
+if [ x"$DEVNAME" = x"$BOOTPART" ]; then
+ MOUNTNAME="$(/sbin/blkid | grep "$DEVNAME:" | grep -o 'LABEL=".*"' | cut -d '"' -f2)-$(basename "$DEVNAME")"
+ MOUNTPOINT="$(sed -n 's/MOUNT_BASE=\"\(.*\)\"/\1/p' /etc/udev/scripts/mount.sh)/$MOUNTNAME"
+ BASE_INIT="$(readlink -f "@base_sbindir@/init")"
+ INIT_SYSTEMD="@systemd_unitdir@/systemd"
+
+ if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
+ # systemd as init uses systemd-mount to mount block devices
+ MOUNT="/usr/bin/systemd-mount --no-block -o silent"
+ UMOUNT="/usr/bin/systemd-umount"
+ else
+ MOUNT="/bin/mount"
+ UMOUNT="/bin/umount"
+
+ # Silent util-linux's version of mounting auto
+ if [ "x$(readlink $MOUNT)" = "x/bin/mount.util-linux" ]; then
+ MOUNT="$MOUNT -o silent"
+ fi
+ fi
+
+ if [ -e /tmp/.automount-"$MOUNTNAME" ]; then
+ $MOUNT -o bind "$MOUNTPOINT" /boot
+ fi
+fi
diff --git a/recipes-core/udev/files/verdin-am62/10-toradex-can0-ifname.link b/recipes-core/udev/files/verdin-am62/10-toradex-can0-ifname.link
new file mode 100644
index 0000000..335da87
--- /dev/null
+++ b/recipes-core/udev/files/verdin-am62/10-toradex-can0-ifname.link
@@ -0,0 +1,6 @@
+[Match]
+Property=ID_PATH=platform-4e08000.can
+
+[Link]
+AlternativeNamesPolicy=
+AlternativeName=verdin-can2
diff --git a/recipes-core/udev/files/verdin-am62/10-toradex-can1-ifname.link b/recipes-core/udev/files/verdin-am62/10-toradex-can1-ifname.link
new file mode 100644
index 0000000..8364480
--- /dev/null
+++ b/recipes-core/udev/files/verdin-am62/10-toradex-can1-ifname.link
@@ -0,0 +1,6 @@
+[Match]
+Property=ID_PATH=platform-20701000.can
+
+[Link]
+AlternativeNamesPolicy=
+AlternativeName=verdin-can1
diff --git a/recipes-core/udev/files/verdin-am62/99-toradex.rules b/recipes-core/udev/files/verdin-am62/99-toradex.rules
new file mode 100644
index 0000000..61714e9
--- /dev/null
+++ b/recipes-core/udev/files/verdin-am62/99-toradex.rules
@@ -0,0 +1,17 @@
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", KERNELS=="20010000.i2c", SYMLINK+="verdin-i2c1"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", KERNELS=="20020000.i2c", SYMLINK+="verdin-i2c2"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", KERNELS=="20030000.i2c", SYMLINK+="verdin-i2c3"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", KERNELS=="4900000.i2c", SYMLINK+="verdin-i2c4"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", KERNELS=="20000000.i2c", SYMLINK+="verdin-i2c-on-module"
+ACTION=="add|change", KERNEL=="ttyS[0-9]*", KERNELS=="2810000.serial", SYMLINK+="verdin-uart1"
+ACTION=="add|change", KERNEL=="ttyS[0-9]*", KERNELS=="2b300000.serial", SYMLINK+="verdin-uart2"
+ACTION=="add|change", KERNEL=="ttyS[0-9]*", KERNELS=="2800000.serial", SYMLINK+="verdin-uart3"
+ACTION=="add|change", KERNEL=="ttyS[0-9]*", KERNELS=="4a00000.serial", SYMLINK+="verdin-uart4"
+ACTION=="add|change", KERNELS=="watchdog", SYMLINK+="verdin-watchdog", SYMLINK+="verdin-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="20110000.*spi", SYMLINK+="verdin-spi-cs%n"
+KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="fa10000.mmc", SYMLINK+="emmc"
+KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="fa10000.mmc", SYMLINK+="emmc-boot%n"
+KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="fa10000.mmc", SYMLINK+="emmc-part%n"
+SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="fa00000.mmc", SYMLINK+="verdin-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="fa00000.mmc", SYMLINK+="verdin-sd-part%n"
diff --git a/recipes-core/udev/files/verdin-am62/toradex-adc.sh b/recipes-core/udev/files/verdin-am62/toradex-adc.sh
new file mode 100755
index 0000000..89c1c92
--- /dev/null
+++ b/recipes-core/udev/files/verdin-am62/toradex-adc.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env sh
+#
+# Called from udev. Compatible to verdin-imx8mm.
+#
+# Create/remove symlinks to/from the files with raw adc data.
+
+# Map the ADC lines:
+# verdin-adc{1..4} -> TLA2024 ADC{3,2,1,0}
+
+if [ "$ACTION" = "add" ]; then
+ ln -s "/sys$DEVPATH/in_voltage0_raw" /dev/verdin-adc4
+ ln -s "/sys$DEVPATH/in_voltage1_raw" /dev/verdin-adc3
+ ln -s "/sys$DEVPATH/in_voltage2_raw" /dev/verdin-adc2
+ ln -s "/sys$DEVPATH/in_voltage3_raw" /dev/verdin-adc1
+elif [ "$ACTION" = "remove" ]; then
+ rm -f /dev/verdin-adc1
+ rm -f /dev/verdin-adc2
+ rm -f /dev/verdin-adc3
+ rm -f /dev/verdin-adc4
+fi
+
diff --git a/recipes-core/udev/files/verdin-imx8mm/10-toradex-can0-ifname.link b/recipes-core/udev/files/verdin-imx8mm/10-toradex-can0-ifname.link
new file mode 100644
index 0000000..f72ad8a
--- /dev/null
+++ b/recipes-core/udev/files/verdin-imx8mm/10-toradex-can0-ifname.link
@@ -0,0 +1,6 @@
+[Match]
+Property=ID_PATH=platform-30840000.spi-cs-0
+
+[Link]
+AlternativeNamesPolicy=
+AlternativeName=verdin-can1
diff --git a/recipes-core/udev/files/verdin-imx8mm/99-toradex.rules b/recipes-core/udev/files/verdin-imx8mm/99-toradex.rules
index 7319430..bd82b12 100644
--- a/recipes-core/udev/files/verdin-imx8mm/99-toradex.rules
+++ b/recipes-core/udev/files/verdin-imx8mm/99-toradex.rules
@@ -1,13 +1,16 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="verdin-i2c1"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a30000.i2c", SYMLINK+="verdin-i2c2"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a40000.i2c", SYMLINK+="verdin-i2c4"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="verdin-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x30890000", SYMLINK+="verdin-uart1"
-ACTION=="add", ATTRS{iomem_base}=="0x30880000", SYMLINK+="verdin-uart2"
-ACTION=="add", ATTRS{iomem_base}=="0x30860000", SYMLINK+="verdin-uart3"
-ACTION=="add", KERNELS=="watchdog", SYMLINK+="verdin-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="30830000.*spi", SYMLINK+="verdin-spi-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="verdin-i2c1"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a30000.i2c", SYMLINK+="verdin-i2c2"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a40000.i2c", SYMLINK+="verdin-i2c4"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="verdin-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30890000", SYMLINK+="verdin-uart1"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30880000", SYMLINK+="verdin-uart2"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30860000", SYMLINK+="verdin-uart3"
+ACTION=="add|change", KERNELS=="watchdog", SYMLINK+="verdin-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="soc*", SYMLINK+="verdin-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="30830000.*spi", SYMLINK+="verdin-spi-cs%n"
KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b40000.mmc", SYMLINK+="emmc"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b40000.mmc", SYMLINK+="emmc-boot%n"
KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="30b40000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="30b50000.mmc", SYMLINK+="verdin-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="30b50000.mmc", SYMLINK+="verdin-sd-part%n"
diff --git a/recipes-core/udev/files/verdin-imx8mm/toradex-adc.sh b/recipes-core/udev/files/verdin-imx8mm/toradex-adc.sh
index 0f5f878..89c1c92 100755
--- a/recipes-core/udev/files/verdin-imx8mm/toradex-adc.sh
+++ b/recipes-core/udev/files/verdin-imx8mm/toradex-adc.sh
@@ -5,13 +5,13 @@
# Create/remove symlinks to/from the files with raw adc data.
# Map the ADC lines:
-# verdin-adc{1..4} -> MAX11607 ADC{0,1,2,3}
+# verdin-adc{1..4} -> TLA2024 ADC{3,2,1,0}
if [ "$ACTION" = "add" ]; then
- ln -s "/sys$DEVPATH/in_voltage0_raw" /dev/verdin-adc1
- ln -s "/sys$DEVPATH/in_voltage1_raw" /dev/verdin-adc2
- ln -s "/sys$DEVPATH/in_voltage2_raw" /dev/verdin-adc3
- ln -s "/sys$DEVPATH/in_voltage3_raw" /dev/verdin-adc4
+ ln -s "/sys$DEVPATH/in_voltage0_raw" /dev/verdin-adc4
+ ln -s "/sys$DEVPATH/in_voltage1_raw" /dev/verdin-adc3
+ ln -s "/sys$DEVPATH/in_voltage2_raw" /dev/verdin-adc2
+ ln -s "/sys$DEVPATH/in_voltage3_raw" /dev/verdin-adc1
elif [ "$ACTION" = "remove" ]; then
rm -f /dev/verdin-adc1
rm -f /dev/verdin-adc2
diff --git a/recipes-core/udev/files/verdin-imx8mp/10-toradex-can0-ifname.link b/recipes-core/udev/files/verdin-imx8mp/10-toradex-can0-ifname.link
new file mode 100644
index 0000000..0db2fc6
--- /dev/null
+++ b/recipes-core/udev/files/verdin-imx8mp/10-toradex-can0-ifname.link
@@ -0,0 +1,6 @@
+[Match]
+Property=ID_PATH=platform-308c0000.can
+
+[Link]
+AlternativeNamesPolicy=
+AlternativeName=verdin-can1
diff --git a/recipes-core/udev/files/verdin-imx8mp/10-toradex-can1-ifname.link b/recipes-core/udev/files/verdin-imx8mp/10-toradex-can1-ifname.link
new file mode 100644
index 0000000..a9a410f
--- /dev/null
+++ b/recipes-core/udev/files/verdin-imx8mp/10-toradex-can1-ifname.link
@@ -0,0 +1,6 @@
+[Match]
+Property=ID_PATH=platform-308d0000.can
+
+[Link]
+AlternativeNamesPolicy=
+AlternativeName=verdin-can2
diff --git a/recipes-core/udev/files/verdin-imx8mp/99-toradex.rules b/recipes-core/udev/files/verdin-imx8mp/99-toradex.rules
index 49df8f7..33c1dc8 100644
--- a/recipes-core/udev/files/verdin-imx8mp/99-toradex.rules
+++ b/recipes-core/udev/files/verdin-imx8mp/99-toradex.rules
@@ -1,13 +1,17 @@
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="verdin-i2c1"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a30000.i2c", SYMLINK+="verdin-i2c2"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a40000.i2c", SYMLINK+="verdin-i2c4"
-ACTION=="add", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="verdin-i2c-on-module"
-ACTION=="add", ATTRS{iomem_base}=="0x30860000", SYMLINK+="verdin-uart1"
-ACTION=="add", ATTRS{iomem_base}=="0x30890000", SYMLINK+="verdin-uart2"
-ACTION=="add", ATTRS{iomem_base}=="0x30880000", SYMLINK+="verdin-uart3"
-ACTION=="add", KERNELS=="watchdog", SYMLINK+="verdin-watchdog"
-ACTION=="add", SUBSYSTEM=="spidev", KERNELS=="30820000.*spi", SYMLINK+="verdin-spi-cs%n"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a50000.i2c", SYMLINK+="verdin-i2c1"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a30000.i2c", SYMLINK+="verdin-i2c2"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="DesignWare HDMI", SYMLINK+="verdin-i2c3"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a40000.i2c", SYMLINK+="verdin-i2c4"
+ACTION=="add|change", KERNEL=="i2c-[0-9]*", ATTRS{name}=="30a20000.i2c", SYMLINK+="verdin-i2c-on-module"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30860000", SYMLINK+="verdin-uart1"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30890000", SYMLINK+="verdin-uart2"
+ACTION=="add|change", ATTRS{iomem_base}=="0x30880000", SYMLINK+="verdin-uart3"
+ACTION=="add|change", KERNELS=="watchdog", SYMLINK+="verdin-watchdog"
+ACTION=="add|change", SUBSYSTEM=="watchdog", KERNELS=="soc*", SYMLINK+="verdin-watchdog-soc"
+ACTION=="add|change", SUBSYSTEM=="spidev", KERNELS=="30820000.*spi", SYMLINK+="verdin-spi-cs%n"
KERNEL=="mmcblk[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.mmc", SYMLINK+="emmc"
KERNEL=="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", KERNELS=="30b60000.mmc", SYMLINK+="emmc-boot%n"
KERNEL=="mmcblk[0-9]p[0-9]", ENV{DEVTYPE}=="partition", KERNELS=="30b60000.mmc", SYMLINK+="emmc-part%n"
SUBSYSTEM=="iio", KERNELS=="iio:device0", RUN+="/etc/udev/scripts/toradex-adc.sh"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]", KERNELS=="30b50000.mmc", SYMLINK+="verdin-sd"
+ACTION=="add|change", KERNEL=="mmcblk[0-9]p[0-9]*", KERNELS=="30b50000.mmc", SYMLINK+="verdin-sd-part%n"
diff --git a/recipes-core/udev/udev-extraconf_%.bbappend b/recipes-core/udev/udev-extraconf_%.bbappend
index 7b03d77..d746f6b 100644
--- a/recipes-core/udev/udev-extraconf_%.bbappend
+++ b/recipes-core/udev/udev-extraconf_%.bbappend
@@ -1,13 +1 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/files/:"
-
-SRC_URI_append = " file://hotplug.rules \
- file://hotplug.sh \
-"
-
-do_install_append() {
- install -d ${D}${sysconfdir}/udev/rules.d
- install -m 0644 ${WORKDIR}/hotplug.rules ${D}${sysconfdir}/udev/rules.d/hotplug.rules
-
- install -d ${D}${sysconfdir}/udev/scripts/
- install -m 0755 ${WORKDIR}/hotplug.sh ${D}${sysconfdir}/udev/scripts/hotplug.sh
-}
+MOUNT_BASE = "/media"
diff --git a/recipes-core/udev/udev-toradex-rules.bb b/recipes-core/udev/udev-toradex-rules.bb
index a4833ca..b1cf46b 100644
--- a/recipes-core/udev/udev-toradex-rules.bb
+++ b/recipes-core/udev/udev-toradex-rules.bb
@@ -1,17 +1,44 @@
+DESCRIPTION = "udev rules for Toradex SOCs"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "\
- file://99-toradex.rules \
file://10-toradex-wifi-ifnames.link \
+ file://99-toradex.rules \
+ file://bootpart-automount.rules \
file://toradex-adc.sh \
+ file://toradex-mount-bootpart.sh \
+"
+
+SRC_URI:append:verdin-am62 = " \
+ file://10-toradex-can0-ifname.link \
+ file://10-toradex-can1-ifname.link \
+"
+SRC_URI:append:verdin-imx8mm = " \
+ file://10-toradex-can0-ifname.link \
+"
+SRC_URI:append:verdin-imx8mp = " \
+ file://10-toradex-can0-ifname.link \
+ file://10-toradex-can1-ifname.link \
"
do_install () {
install -d ${D}${sysconfdir}/udev/rules.d
install -d ${D}${sysconfdir}/udev/scripts
install -d ${D}${sysconfdir}/systemd/network
+ # 10-toradex-can*-ifname.link files are only available for the Verdin family
+ if [ -f ${WORKDIR}/10-toradex-can0-ifname.link ]; then
+ install -m 0644 ${WORKDIR}/10-toradex-can0-ifname.link ${D}${sysconfdir}/systemd/network/
+ fi
+ if [ -f ${WORKDIR}/10-toradex-can1-ifname.link ]; then
+ install -m 0644 ${WORKDIR}/10-toradex-can1-ifname.link ${D}${sysconfdir}/systemd/network/
+ fi
+ install -m 0644 ${WORKDIR}/10-toradex-wifi-ifnames.link ${D}${sysconfdir}/systemd/network/
install -m 0644 ${WORKDIR}/99-toradex.rules ${D}${sysconfdir}/udev/rules.d/
+ install -m 0644 ${WORKDIR}/bootpart-automount.rules ${D}${sysconfdir}/udev/rules.d/
install -m 0755 ${WORKDIR}/toradex-adc.sh ${D}${sysconfdir}/udev/scripts/
- install -m 0644 ${WORKDIR}/10-toradex-wifi-ifnames.link ${D}${sysconfdir}/systemd/network/
+ install -m 0755 ${WORKDIR}/toradex-mount-bootpart.sh ${D}${sysconfdir}/udev/scripts/
+
+ sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/toradex-mount-bootpart.sh
+ sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/toradex-mount-bootpart.sh
}
diff --git a/recipes-core/util-linux/util-linux/fstrim.service b/recipes-core/util-linux/util-linux/fstrim.service
new file mode 100644
index 0000000..5c89027
--- /dev/null
+++ b/recipes-core/util-linux/util-linux/fstrim.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Discard unused blocks
+ConditionVirtualization=!container
+
+[Service]
+Type=oneshot
+ExecStart=@SBINDIR@/fstrim -av
diff --git a/recipes-core/util-linux/util-linux/fstrim.timer b/recipes-core/util-linux/util-linux/fstrim.timer
new file mode 100644
index 0000000..df6bef2
--- /dev/null
+++ b/recipes-core/util-linux/util-linux/fstrim.timer
@@ -0,0 +1,11 @@
+[Unit]
+Description=Discard unused blocks once a week
+ConditionVirtualization=!container
+
+[Timer]
+OnCalendar=weekly
+AccuracySec=1h
+Persistent=true
+
+[Install]
+WantedBy=timers.target
diff --git a/recipes-core/util-linux/util-linux_%.bbappend b/recipes-core/util-linux/util-linux_%.bbappend
new file mode 100644
index 0000000..61b8489
--- /dev/null
+++ b/recipes-core/util-linux/util-linux_%.bbappend
@@ -0,0 +1,18 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+SRC_URI:append = " file://fstrim.service file://fstrim.timer"
+
+inherit systemd
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE:${PN} = "fstrim.service fstrim.timer"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_install:append() {
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/fstrim.service ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/fstrim.timer ${D}${systemd_unitdir}/system/
+ sed -i -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ ${D}${systemd_unitdir}/system/*.service
+}
+
diff --git a/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend b/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend
index f40a663..0169da9 100644
--- a/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend
+++ b/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend
@@ -1,9 +1,10 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/e2fsprogs:"
-SRC_URI += "file://e2fsck.conf"
+FILESEXTRAPATHS:prepend := "${THISDIR}/e2fsprogs:"
-do_install_append() {
+SRC_URI:append:tdx = " file://e2fsck.conf"
+
+do_install:append:tdx () {
install -d ${D}${sysconfdir}
install -m 0644 ${WORKDIR}/e2fsck.conf ${D}${sysconfdir}/e2fsck.conf
}
-FILES_e2fsprogs-e2fsck += "${sysconfdir}/e2fsck.conf"
+FILES:e2fsprogs-e2fsck:append:tdx = " ${sysconfdir}/e2fsck.conf"
diff --git a/recipes-devtools/mtd/mtd-utils_%.bbappend b/recipes-devtools/mtd/mtd-utils_%.bbappend
index 054c939..f3412d0 100644
--- a/recipes-devtools/mtd/mtd-utils_%.bbappend
+++ b/recipes-devtools/mtd/mtd-utils_%.bbappend
@@ -1,13 +1,13 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-SRC_URI_append_ = " file://ubihealthd.service"
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+SRC_URI:append = " file://ubihealthd.service"
inherit systemd
SYSTEMD_PACKAGES = "${PN}"
-SYSTEMD_SERVICE_${PN} = "ubihealthd.service"
+SYSTEMD_SERVICE:${PN} = "ubihealthd.service"
SYSTEMD_AUTO_ENABLE = "disable"
-do_install_append() {
+do_install:append() {
install -d ${D}${systemd_unitdir}/system
install -m 0644 ${WORKDIR}/ubihealthd.service ${D}${systemd_unitdir}/system/
sed -i -e 's,@SBINDIR@,${sbindir},g' \
diff --git a/recipes-devtools/python/python3-docutils/rst2man_using_python3.patch b/recipes-devtools/python/python3-docutils/rst2man_using_python3.patch
deleted file mode 100644
index aa446d2..0000000
--- a/recipes-devtools/python/python3-docutils/rst2man_using_python3.patch
+++ /dev/null
@@ -1,8 +0,0 @@
---- a/tools/rst2man.py 2009-08-18 11:39:39.000000000 -0700
-+++ b/tmp/rst2man.py 2017-04-04 18:25:14.049467561 -0700
-@@ -1,4 +1,4 @@
--#!/usr/bin/env python
-+#!/usr/bin/env python3
-
- # Author:
- # Contact: grubert@users.sf.net
diff --git a/recipes-devtools/python/python3-docutils_%.bbappend b/recipes-devtools/python/python3-docutils_%.bbappend
deleted file mode 100644
index 22f835c..0000000
--- a/recipes-devtools/python/python3-docutils_%.bbappend
+++ /dev/null
@@ -1,6 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/python3-docutils/:"
-
-SRC_URI_append = " \
-file://rst2man_using_python3.patch \
-"
-
diff --git a/recipes-graphics/wayland/weston-init.bbappend b/recipes-graphics/wayland/weston-init.bbappend
new file mode 100644
index 0000000..6baccf4
--- /dev/null
+++ b/recipes-graphics/wayland/weston-init.bbappend
@@ -0,0 +1,22 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://weston.sh"
+
+PACKAGECONFIG:append:upstream:tdx = " no-idle-timeout"
+PACKAGECONFIG:append:am62x = " no-idle-timeout"
+PACKAGECONFIG:append:upstream:colibri-imx6ull = " use-pixman"
+PACKAGECONFIG:append:upstream:colibri-imx6ull-emmc = " use-pixman"
+PACKAGECONFIG:append:upstream:colibri-imx7 = " use-pixman"
+PACKAGECONFIG:append:upstream:colibri-imx7-emmc = " use-pixman"
+
+do_install:append:tdx() {
+ install -Dm0755 ${WORKDIR}/weston.sh ${D}${sysconfdir}/profile.d/weston.sh
+
+ # We need run weston systemd service with root user, or else it could not
+ # access input devices and GPU acceleration hardwares
+ # Reference: https://source.codeaurora.org/external/imx/meta-imx/commit/?h=hardknott-5.10.72-2.2.0&id=9e08be758765d4a991e0a440f8abef225be094e3
+ sed -i "s/User=weston/User=root/" ${D}${systemd_system_unitdir}/weston.service
+ sed -i "s/Group=weston/Group=root/" ${D}${systemd_system_unitdir}/weston.service
+ sed -i "s/SocketUser=weston/SocketUser=root/" ${D}${systemd_system_unitdir}/weston.socket
+ sed -i "s/SocketGroup=wayland/SocketGroup=root/" ${D}${systemd_system_unitdir}/weston.socket
+}
diff --git a/recipes-graphics/wayland/weston-init/weston.sh b/recipes-graphics/wayland/weston-init/weston.sh
new file mode 100644
index 0000000..89b04ec
--- /dev/null
+++ b/recipes-graphics/wayland/weston-init/weston.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# Set WAYLAND_DISPLAY manually.
+# It will cause app failures if this variable is not set for ssh login.
+if test -z "$WAYLAND_DISPLAY"; then
+ export WAYLAND_DISPLAY="/run/wayland-0"
+fi
diff --git a/recipes-kernel/backports/backports_5.4.bb b/recipes-kernel/backports/backports_5.4.bb
index adf0b22..66d3e9f 100644
--- a/recipes-kernel/backports/backports_5.4.bb
+++ b/recipes-kernel/backports/backports_5.4.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Linux Backports"
HOMEPAGE = "https://backports.wiki.kernel.org"
SECTION = "kernel/modules"
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
inherit module-base
@@ -17,7 +17,7 @@ DEPMOD_CONF = "99-backports.conf"
# git:///home/user/linux-backports-generated;protocol=file
SRCREV = "4cb81c29dde242744eccf9f37f2014ea3b37ade2"
-SRCREV_use-head-next = "${AUTOREV}"
+SRCREV:use-head-next = "${AUTOREV}"
SRC_URI = " \
git://git.toradex.com/backports-toradex.git;protocol=https;branch=toradex-${PV} \
file://config \
@@ -63,7 +63,7 @@ do_install() {
done
}
-pkg_postinst_${PN} () {
+pkg_postinst:${PN} () {
if [ -z "$D" ]; then
depmod -a ${KERNEL_VERSION}
else
@@ -73,13 +73,13 @@ pkg_postinst_${PN} () {
fi
}
-pkg_postrm_${PN} () {
+pkg_postrm:${PN} () {
if [ -z "$D" ]; then
depmod -a ${KERNEL_VERSION}
fi
}
-FILES_${PN} = " \
+FILES:${PN} = " \
${sysconfdir}/depmod.d/${DEPMOD_CONF} \
${nonarch_base_libdir}/modules/${KERNEL_VERSION}/backports/ \
"
diff --git a/recipes-kernel/kernel-module-atemsys/kernel-module-atemsys_1.3.08.bb b/recipes-kernel/kernel-module-atemsys/kernel-module-atemsys_1.3.08.bb
index 4fe5bf3..0fd682b 100644
--- a/recipes-kernel/kernel-module-atemsys/kernel-module-atemsys_1.3.08.bb
+++ b/recipes-kernel/kernel-module-atemsys/kernel-module-atemsys_1.3.08.bb
@@ -4,7 +4,7 @@ SUMMARY = "Linux kernel driver allowing usermode access for EtherCAT Master Stac
# The Kernel module under Sources/atemsys/ is licensed differently than the
# rest, this recipe packs the Kernel module only
-LICENSE = "GPLv2"
+LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://atemsys.c;beginline=182;endline=182;md5=7865b9061132c2794f3fb205cda5bdf4"
inherit module
diff --git a/recipes-kernel/kmod/depmodwrapper-cross_%.bbappend b/recipes-kernel/kmod/depmodwrapper-cross_%.bbappend
index a5589ba..ba30c0f 100644
--- a/recipes-kernel/kmod/depmodwrapper-cross_%.bbappend
+++ b/recipes-kernel/kmod/depmodwrapper-cross_%.bbappend
@@ -21,7 +21,7 @@ else
FILESYMS=-F "${PKGDATA_DIR}/kernel-depmod/System.map-\$4"
fi
-exec env depmod -C "\${3}/etc/depmod.d/" "\$1" "\$2" "\$3" ${FILESYMS} "\$4"
+exec env depmod -C "\$3${sysconfdir}/depmod.d" "\$1" "\$2" "\$3" ${FILESYMS} "\$4"
EOF
chmod +x ${D}${bindir_crossscripts}/depmodwrapper
diff --git a/recipes-kernel/linux-firmware/linux-firmware_%.bbappend b/recipes-kernel/linux-firmware/linux-firmware_%.bbappend
new file mode 100644
index 0000000..68251c2
--- /dev/null
+++ b/recipes-kernel/linux-firmware/linux-firmware_%.bbappend
@@ -0,0 +1,71 @@
+IMX_FIRMWARE_SRC ?= "git://github.com/NXP/imx-firmware.git;protocol=https"
+SRCBRANCH_imx-firmware = "lf-6.1.55_2.2.0"
+SRC_URI += " \
+ ${IMX_FIRMWARE_SRC};branch=${SRCBRANCH_imx-firmware};destsuffix=${S}/imx-firmware;name=imx-firmware \
+"
+
+SRCREV_imx-firmware = "7be5a936ce8677962dd7b41c6c9f41dd14350bec"
+
+SRCREV_FORMAT = "default_imx-firmware"
+
+do_install:append () {
+ # Install IMX Firmware EULA/LICENSE license
+ install -d ${D}${nonarch_base_libdir}/firmware
+ install -m 0644 imx-firmware/LICENSE.txt ${D}${nonarch_base_libdir}/firmware/LICENSE.imx
+
+ # Install common IMX firmware files
+ install -d ${D}${nonarch_base_libdir}/firmware/nxp
+ install -m 0644 imx-firmware/nxp/wifi_mod_para.conf ${D}${nonarch_base_libdir}/firmware/nxp
+
+ # Install NXP Connectivity SDIO8997 firmware
+ install -m 0644 imx-firmware/nxp/FwImage_8997_SD/ed_mac_ctrl_V3_8997.conf ${D}${nonarch_base_libdir}/firmware/nxp
+ install -m 0644 imx-firmware/nxp/FwImage_8997_SD/sdiouart8997_combo_v4.bin ${D}${nonarch_base_libdir}/firmware/nxp
+ install -m 0644 imx-firmware/nxp/FwImage_8997_SD/txpwrlimit_cfg_8997.conf ${D}${nonarch_base_libdir}/firmware/nxp
+
+ # Upstream SDIO8997 driver firmware is located elsewhere
+ install -d ${D}${nonarch_base_libdir}/firmware/mrvl
+ ln -frs ${D}${nonarch_base_libdir}/firmware/nxp/sdiouart8997_combo_v4.bin ${D}${nonarch_base_libdir}/firmware/mrvl/sdiouart8997_combo_v4.bin
+
+ # Install IW416 firmware
+ install -m 0644 imx-firmware/nxp/FwImage_IW416_SD/sdiouartiw416_combo_v0.bin ${D}${nonarch_base_libdir}/firmware/nxp
+ ln -frs ${D}${nonarch_base_libdir}/firmware/nxp/sdiouartiw416_combo_v0.bin ${D}${nonarch_base_libdir}/firmware/mrvl/sdiouartiw416_combo_v0.bin
+}
+
+LICENSE += " \
+ & firmware-imx \
+"
+LIC_FILES_CHKSUM += " \
+ file://imx-firmware/LICENSE.txt;md5=2827219e81f28aba7c6a569f7c437fa7 \
+"
+NO_GENERIC_LICENSE[firmware-imx] = "imx-firmware/LICENSE.txt"
+
+PACKAGES =+ " \
+ ${PN}-imx-common \
+ ${PN}-imx-license \
+ ${PN}-iw416 \
+ ${PN}-nxp89xx \
+"
+
+FILES:${PN}-imx-common = "${nonarch_base_libdir}/firmware/nxp/wifi_mod_para.conf"
+
+FILES:${PN}-imx-license = "${nonarch_base_libdir}/firmware/LICENSE.imx"
+
+FILES:${PN}-iw416 = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sdiouartiw416_combo_v0.bin \
+ ${nonarch_base_libdir}/firmware/nxp/sdiouartiw416_combo_v0.bin \
+"
+
+LICENSE:${PN}-iw416 = "firmware-imx"
+
+RDEPENDS:${PN}-iw416 += "${PN}-imx-common ${PN}-imx-license"
+
+FILES:${PN}-nxp89xx = " \
+ ${nonarch_base_libdir}/firmware/mrvl/sdiouart8997_combo_v4.bin \
+ ${nonarch_base_libdir}/firmware/nxp/ed_mac_ctrl_V3_8997.conf \
+ ${nonarch_base_libdir}/firmware/nxp/sdiouart8997_combo_v4.bin \
+ ${nonarch_base_libdir}/firmware/nxp/txpwrlimit_cfg_8997.conf \
+"
+
+LICENSE:${PN}-nxp89xx = "firmware-imx"
+
+RDEPENDS:${PN}-nxp89xx += "${PN}-imx-common ${PN}-imx-license"
diff --git a/recipes-kernel/linux/device-tree-overlays-mainline_git.bb b/recipes-kernel/linux/device-tree-overlays-mainline_git.bb
index cc34553..505b2da 100644
--- a/recipes-kernel/linux/device-tree-overlays-mainline_git.bb
+++ b/recipes-kernel/linux/device-tree-overlays-mainline_git.bb
@@ -1,7 +1,8 @@
inherit toradex-devicetree
-SRCBRANCH = "toradex_5.4.y"
-SRCREV = "b4bc095e8b8c2613c8c9a10c1895b544652f8cf4"
-SRCREV_use-head-next = "${AUTOREV}"
+SRCBRANCH = "master"
+SRCREV = "7f35a26c74084d29244a032bce9a420b1564c116"
+SRCREV:use-head-next = "${AUTOREV}"
-COMPATIBLE_MACHINE = ".*(mx[678]|tegra124).*"
+COMPATIBLE_MACHINE:tdx = ".*"
+COMPATIBLE_MACHINE = "^$"
diff --git a/recipes-kernel/linux/linux-toradex-mainline.inc b/recipes-kernel/linux/linux-toradex-mainline.inc
deleted file mode 100644
index ffee627..0000000
--- a/recipes-kernel/linux/linux-toradex-mainline.inc
+++ /dev/null
@@ -1,27 +0,0 @@
-SUMMARY = "Toradex mainline Linux kernel"
-SUMMARY_preempt-rt = "Toradex mainline real-Time Linux kernel"
-SECTION = "kernel"
-LICENSE = "GPLv2"
-
-LIC_FILES_CHKSUM ?= "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814"
-
-inherit kernel-yocto kernel toradex-kernel-localversion
-
-SRC_URI = " \
- git://git.toradex.com/linux-toradex.git;protocol=https;branch=${KBRANCH};name=machine \
-"
-
-S = "${WORKDIR}/git"
-
-DEPENDS += "coreutils-native lzop-native"
-
-# Additional file deployed by recent mainline kernels
-FILES_${KERNEL_PACKAGE_NAME}-base += "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin.modinfo"
-
-KERNEL_CONFIG_NAME ?= "${KERNEL_PACKAGE_NAME}-config-${KERNEL_ARTIFACT_NAME}"
-KERNEL_CONFIG_LINK_NAME ?= "${KERNEL_PACKAGE_NAME}-config"
-
-do_deploy_append() {
- cp -a ${B}/.config ${DEPLOYDIR}/${KERNEL_CONFIG_NAME}
- ln -sf ${KERNEL_CONFIG_NAME} ${DEPLOYDIR}/${KERNEL_CONFIG_LINK_NAME}
-}
diff --git a/recipes-kernel/linux/linux-toradex-mainline_%.bbappend b/recipes-kernel/linux/linux-toradex-mainline_%.bbappend
deleted file mode 100644
index 760ffc8..0000000
--- a/recipes-kernel/linux/linux-toradex-mainline_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-export DTC_FLAGS = "-@"
diff --git a/recipes-kernel/linux/linux-toradex-mainline_5.4.bb b/recipes-kernel/linux/linux-toradex-mainline_5.4.bb
deleted file mode 100644
index 8c14744..0000000
--- a/recipes-kernel/linux/linux-toradex-mainline_5.4.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-5.4:"
-
-LINUX_VERSION ?= "5.4.77"
-PV = "${LINUX_VERSION}+git${SRCPV}"
-
-SRCREV_machine = "70abc7bf67f40bed3172de3ad73eb9a48ac9e1d3"
-SRCREV_machine_use-head-next = "${AUTOREV}"
-
-KCONFIG_MODE="--alldefconfig"
-
-KBRANCH = "toradex_5.4.y"
-
-require recipes-kernel/linux/linux-toradex-mainline.inc
-
-SRC_URI_append_preempt-rt = " \
- ${KERNELORG_MIRROR}/linux/kernel/projects/rt/5.4/older/patch-5.4.77-rt43.patch.xz;name=rt-patch \
- file://preempt-rt.scc \
- file://preempt-rt-less-latency.scc \
-"
-SRC_URI[rt-patch.md5sum] = "cf96e01e04ec8743e4b24caec76d2c2d"
-SRC_URI[rt-patch.sha256sum] = "a0966fb60ce26f28e4dea5eb9db2e62974e1391470ea1bdb88e2d884a3280dc4"
-
-# Load USB functions configurable through configfs (CONFIG_USB_CONFIGFS)
-KERNEL_MODULE_AUTOLOAD += "${@bb.utils.contains('COMBINED_FEATURES', 'usbgadget', ' libcomposite', '',d)}"
-
-KBUILD_DEFCONFIG ?= "toradex-imx_v6_v7_defconfig"
-KBUILD_DEFCONFIG_apalis-tk1 ?= "tegra_defconfig"
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-ARM-dts-imx6qdl-apalis-Add-usdhc-aliases.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-ARM-dts-imx6qdl-apalis-Add-usdhc-aliases.patch
new file mode 100644
index 0000000..276288a
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-ARM-dts-imx6qdl-apalis-Add-usdhc-aliases.patch
@@ -0,0 +1,38 @@
+From 301d47dae8429cc48cc91a059c2b24a9612b6254 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Mon, 20 Nov 2023 21:58:16 +0100
+Subject: [PATCH 1/3] ARM: dts: imx6qdl-apalis: Add usdhc aliases
+
+Add mmc aliases to ensure a consistent mmc device naming across the
+Toradex SoM family, with this commit mmc0 is the on-module eMMC
+boot device and the not available mmc interfaces are removed.
+
+Upstream-Status: Backport [cdb7389abe3065be80e70e8112afb1f625e7a770]
+
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+---
+ arch/arm/boot/dts/nxp/imx/imx6qdl-apalis.dtsi | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/arch/arm/boot/dts/nxp/imx/imx6qdl-apalis.dtsi b/arch/arm/boot/dts/nxp/imx/imx6qdl-apalis.dtsi
+index 4cc965277c521..dec2a1c9db142 100644
+--- a/arch/arm/boot/dts/nxp/imx/imx6qdl-apalis.dtsi
++++ b/arch/arm/boot/dts/nxp/imx/imx6qdl-apalis.dtsi
+@@ -12,6 +12,13 @@ / {
+ model = "Toradex Apalis iMX6Q/D Module";
+ compatible = "toradex,apalis_imx6q", "fsl,imx6q";
+
++ aliases {
++ mmc0 = &usdhc3; /* eMMC */
++ mmc1 = &usdhc1; /* MMC1 slot */
++ mmc2 = &usdhc2; /* SD1 slot */
++ /delete-property/ mmc3;
++ };
++
+ /* Will be filled by the bootloader */
+ memory@10000000 {
+ device_type = "memory";
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch
new file mode 100644
index 0000000..3405ee4
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch
@@ -0,0 +1,52 @@
+From 07aff3753a49d9c70cd98571a7bf58e61f8d9fed Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Wed, 24 Jan 2024 11:13:19 -0300
+Subject: [PATCH 1/2] dt-bindings: arm: fsl: Add toradex,apalis_imx6q-eval-v1.2
+ board
+
+Add the toradex,apalis_imx6q-eval-v1.2 compatible string for version 1.2
+of the Apalis Evaluation Board.
+
+Version v1.2 includes the following changes compared to v1.1:
+
+- 8-bit MMC connector replaced with a 4-bit uSD connector.
+- Audio codec NAU88C22 added.
+- M24C02 EEPROM i2c added.
+- MIPI-CSI-2 connector directly to the board added.
+- PCIe switch PEX8605 removed and PCIe now is routed directly to Mini
+ PCIe connector.
+- Power measurement IC INA219 added.
+- Replaced DVI with HDMI connector.
+- Single-channel USB to UART converter replaced with four-channel USB
+ to UART/JTAG.
+- Temperature sensor TMP75 added.
+
+Please note that version v1.0 (which reached EOL) is compatible with
+v1.1, therefore toradex,apalis_imx6q-eval compatible string should be
+used for both v1.0 and v1.1.
+
+Upstream-Status: Submitted [https://lore.kernel.org/lkml/20240122123526.43400-1-hiagofranco@gmail.com/]
+
+Acked-by: Conor Dooley <conor.dooley@microchip.com>
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+---
+ Documentation/devicetree/bindings/arm/fsl.yaml | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml
+index 9450b2c8a678f..9a3262ca169e2 100644
+--- a/Documentation/devicetree/bindings/arm/fsl.yaml
++++ b/Documentation/devicetree/bindings/arm/fsl.yaml
+@@ -381,7 +381,8 @@ properties:
+ - toradex,apalis_imx6q-ixora # Apalis iMX6Q/D Module on Ixora Carrier Board
+ - toradex,apalis_imx6q-ixora-v1.1 # Apalis iMX6Q/D Module on Ixora V1.1 Carrier Board
+ - toradex,apalis_imx6q-ixora-v1.2 # Apalis iMX6Q/D Module on Ixora V1.2 Carrier Board
+- - toradex,apalis_imx6q-eval # Apalis iMX6Q/D Module on Apalis Evaluation Board
++ - toradex,apalis_imx6q-eval # Apalis iMX6Q/D Module on Apalis Evaluation Board v1.0/v1.1
++ - toradex,apalis_imx6q-eval-v1.2 # Apalis iMX6Q/D Module on Apalis Evaluation Board v1.2
+ - const: toradex,apalis_imx6q
+ - const: fsl,imx6q
+
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-add-verdin-imx8mm-mallow-board.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-add-verdin-imx8mm-mallow-board.patch
new file mode 100644
index 0000000..7f14070
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-dt-bindings-arm-fsl-add-verdin-imx8mm-mallow-board.patch
@@ -0,0 +1,44 @@
+From b12afbf0aba29a6a5b70c356146e2dc8b530998c Mon Sep 17 00:00:00 2001
+From: Joao Paulo Goncalves <joao.goncalves@toradex.com>
+Date: Fri, 1 Dec 2023 16:07:32 +0100
+Subject: [PATCH 1/2] dt-bindings: arm: fsl: add verdin imx8mm mallow board
+
+Add Mallow carrier board for wifi and nonwifi variants of Toradex Verdin
+IMX8MM SoM. Mallow is a low-cost carrier board in the Verdin family with
+a small form factor and build for volume production making it ideal for
+industrial and embedded applications.
+
+https://www.toradex.com/products/carrier-board/mallow-carrier-board
+
+Upstream-Status: Backport [ffce67b61108aaab6061f122b5cffe6c4e59fee2]
+
+Signed-off-by: Joao Paulo Goncalves <joao.goncalves@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+---
+ Documentation/devicetree/bindings/arm/fsl.yaml | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Documentation/devicetree/bindings/arm/fsl.yaml b/Documentation/devicetree/bindings/arm/fsl.yaml
+index 9450b2c8a678f..beca54b61999b 100644
+--- a/Documentation/devicetree/bindings/arm/fsl.yaml
++++ b/Documentation/devicetree/bindings/arm/fsl.yaml
+@@ -958,6 +958,7 @@ properties:
+ - menlo,mx8menlo # Verdin iMX8M Mini Module on i.MX8MM Menlo board
+ - toradex,verdin-imx8mm-nonwifi-dahlia # Verdin iMX8M Mini Module on Dahlia
+ - toradex,verdin-imx8mm-nonwifi-dev # Verdin iMX8M Mini Module on Verdin Development Board
++ - toradex,verdin-imx8mm-nonwifi-mallow # Verdin iMX8M Mini Module on Mallow
+ - toradex,verdin-imx8mm-nonwifi-yavia # Verdin iMX8M Mini Module on Yavia
+ - const: toradex,verdin-imx8mm-nonwifi # Verdin iMX8M Mini Module without Wi-Fi / BT
+ - const: toradex,verdin-imx8mm # Verdin iMX8M Mini Module
+@@ -968,6 +969,7 @@ properties:
+ - enum:
+ - toradex,verdin-imx8mm-wifi-dahlia # Verdin iMX8M Mini Wi-Fi / BT Module on Dahlia
+ - toradex,verdin-imx8mm-wifi-dev # Verdin iMX8M Mini Wi-Fi / BT M. on Verdin Development B.
++ - toradex,verdin-imx8mm-wifi-mallow # Verdin iMX8M Mini Wi-Fi / BT Module on Mallow
+ - toradex,verdin-imx8mm-wifi-yavia # Verdin iMX8M Mini Wi-Fi / BT Module on Yavia
+ - const: toradex,verdin-imx8mm-wifi # Verdin iMX8M Mini Wi-Fi / BT Module
+ - const: toradex,verdin-imx8mm # Verdin iMX8M Mini Module
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-power-reset-gpio-poweroff-use-a-struct-to-store-the-.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-power-reset-gpio-poweroff-use-a-struct-to-store-the-.patch
new file mode 100644
index 0000000..561091f
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-power-reset-gpio-poweroff-use-a-struct-to-store-the-.patch
@@ -0,0 +1,110 @@
+From 248de784e6db9afc2eb9b01a123ce27324d16457 Mon Sep 17 00:00:00 2001
+From: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Date: Fri, 6 Oct 2023 10:04:25 -0300
+Subject: [PATCH 1/4] power: reset: gpio-poweroff: use a struct to store the
+ module variables
+
+Use a struct to store the module variables. This is required to later
+move to notifier_blocks where we can have several instances.
+
+Upstream-Status: Backport [13b4c6964665cadb9b06c085029710c43a0c662]
+
+Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Link: https://lore.kernel.org/r/20231006130428.11259-2-francesco@dolcini.it
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+---
+ drivers/power/reset/gpio-poweroff.c | 48 +++++++++++++++++++----------
+ 1 file changed, 31 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
+index b28f24da1b3cd..dea550e422f3c 100644
+--- a/drivers/power/reset/gpio-poweroff.c
++++ b/drivers/power/reset/gpio-poweroff.c
+@@ -17,32 +17,37 @@
+ #include <linux/module.h>
+
+ #define DEFAULT_TIMEOUT_MS 3000
++
++struct gpio_poweroff {
++ struct gpio_desc *reset_gpio;
++ u32 timeout_ms;
++ u32 active_delay_ms;
++ u32 inactive_delay_ms;
++};
++
+ /*
+ * Hold configuration here, cannot be more than one instance of the driver
+ * since pm_power_off itself is global.
+ */
+-static struct gpio_desc *reset_gpio;
+-static u32 timeout = DEFAULT_TIMEOUT_MS;
+-static u32 active_delay = 100;
+-static u32 inactive_delay = 100;
++static struct gpio_poweroff *gpio_poweroff;
+
+ static void gpio_poweroff_do_poweroff(void)
+ {
+- BUG_ON(!reset_gpio);
++ BUG_ON(!gpio_poweroff);
+
+ /* drive it active, also inactive->active edge */
+- gpiod_direction_output(reset_gpio, 1);
+- mdelay(active_delay);
++ gpiod_direction_output(gpio_poweroff->reset_gpio, 1);
++ mdelay(gpio_poweroff->active_delay_ms);
+
+ /* drive inactive, also active->inactive edge */
+- gpiod_set_value_cansleep(reset_gpio, 0);
+- mdelay(inactive_delay);
++ gpiod_set_value_cansleep(gpio_poweroff->reset_gpio, 0);
++ mdelay(gpio_poweroff->inactive_delay_ms);
+
+ /* drive it active, also inactive->active edge */
+- gpiod_set_value_cansleep(reset_gpio, 1);
++ gpiod_set_value_cansleep(gpio_poweroff->reset_gpio, 1);
+
+ /* give it some time */
+- mdelay(timeout);
++ mdelay(gpio_poweroff->timeout_ms);
+
+ WARN_ON(1);
+ }
+@@ -60,20 +65,29 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
+ return -EBUSY;
+ }
+
++ gpio_poweroff = devm_kzalloc(&pdev->dev, sizeof(*gpio_poweroff), GFP_KERNEL);
++ if (!gpio_poweroff)
++ return -ENOMEM;
++
+ input = device_property_read_bool(&pdev->dev, "input");
+ if (input)
+ flags = GPIOD_IN;
+ else
+ flags = GPIOD_OUT_LOW;
+
+- device_property_read_u32(&pdev->dev, "active-delay-ms", &active_delay);
++
++ gpio_poweroff->active_delay_ms = 100;
++ gpio_poweroff->inactive_delay_ms = 100;
++ gpio_poweroff->timeout_ms = DEFAULT_TIMEOUT_MS;
++
++ device_property_read_u32(&pdev->dev, "active-delay-ms", &gpio_poweroff->active_delay_ms);
+ device_property_read_u32(&pdev->dev, "inactive-delay-ms",
+- &inactive_delay);
+- device_property_read_u32(&pdev->dev, "timeout-ms", &timeout);
++ &gpio_poweroff->inactive_delay_ms);
++ device_property_read_u32(&pdev->dev, "timeout-ms", &gpio_poweroff->timeout_ms);
+
+- reset_gpio = devm_gpiod_get(&pdev->dev, NULL, flags);
+- if (IS_ERR(reset_gpio))
+- return PTR_ERR(reset_gpio);
++ gpio_poweroff->reset_gpio = devm_gpiod_get(&pdev->dev, NULL, flags);
++ if (IS_ERR(gpio_poweroff->reset_gpio))
++ return PTR_ERR(gpio_poweroff->reset_gpio);
+
+ pm_power_off = &gpio_poweroff_do_poweroff;
+ return 0;
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-thermal-imx-Update-critical-temp-threshold.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-thermal-imx-Update-critical-temp-threshold.patch
new file mode 100644
index 0000000..c09abb9
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-thermal-imx-Update-critical-temp-threshold.patch
@@ -0,0 +1,40 @@
+From 212abec626e1c82616a1cf6e492e467cf79aef23 Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Wed, 20 Apr 2022 11:13:00 +0200
+Subject: [PATCH 1/4] thermal: imx: Update critical temp threshold
+
+Increase the critical temperature threshold to the datasheet defined
+value according to the temperature grade of the SoC, increasing the
+actual critical temperature value of 5 degrees.
+
+Without this change the emergency shutdown will trigger earlier then
+required affecting applications that are expected to be working on this
+close to the limit, but yet valid, temperature range.
+
+Upstream-Status: Denied [https://lore.kernel.org/all/20220420091300.179753-1-francesco.dolcini@toradex.com/]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ drivers/thermal/imx_thermal.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
+index 826358cbe810..4fcbf15b2768 100644
+--- a/drivers/thermal/imx_thermal.c
++++ b/drivers/thermal/imx_thermal.c
+@@ -458,11 +458,11 @@ static void imx_init_temp_grade(struct platform_device *pdev, u32 ocotp_mem0)
+ }
+
+ /*
+- * Set the critical trip point at 5 °C under max
++ * Set the critical trip point at max
+ * Set the passive trip point at 10 °C under max (changeable via sysfs)
+ */
+ trips[IMX_TRIP_PASSIVE].temperature = data->temp_max - (1000 * 10);
+- trips[IMX_TRIP_CRITICAL].temperature = data->temp_max - (1000 * 5);
++ trips[IMX_TRIP_CRITICAL].temperature = data->temp_max;
+ }
+
+ static int imx_init_from_tempmon_data(struct platform_device *pdev)
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch
new file mode 100644
index 0000000..dfdd723
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch
@@ -0,0 +1,68 @@
+From 2147c8ddfaa746cdb8857db070f907fa9abfcb60 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Tue, 19 Dec 2023 11:52:07 -0300
+Subject: [PATCH] usb: gadget: f_ncm: Apply workaround for packet clogging
+
+The existing size of 32 is causing significant slowness and freezing when
+utilizing the NCM protocol with a VNC client. This issue likely arises
+because the VNC protocol relies on sending numerous small packets, which
+accumulate until the 16KB limit is reached, leading to transmission
+delays.
+
+By decreasing TX_MAX_NUM_DPE to 4, we ensure that the NCM driver transmits
+packets at a reduced interval, thereby resolving the VNC performance
+issues. To comprehend how these packets are sent, refer to the code
+snippet below from f_ncm.c:
+
+```
+ /* If the new skb is too big for the current NCM NTB then
+ * set the current stored skb to be sent now and clear it
+ * ready for new data.
+ * NOTE: Assume maximum align for speed of calculation.
+ */
+ if (ncm->skb_tx_data
+ && (ncm->ndp_dgram_count >= TX_MAX_NUM_DPE
+ || (ncm->skb_tx_data->len +
+ div + rem + skb->len +
+ ncm->skb_tx_ndp->len + ndp_align + (2 * dgram_idx_len))
+ > max_size)) {
+ skb2 = package_for_tx(ncm);
+ if (!skb2)
+ goto err;
+ }
+```
+
+This issue is presently under investigation on the Linux kernel mailing
+list, and you can find the entire discussion at [1].
+
+[1] https://lore.kernel.org/all/20231204183751.64202-1-hiagofranco@gmail.com/
+
+Upstream-Status: Inappropriate [other]
+
+There is no proper patch for now, so instead we're using this patch that
+makes VNC work again as a temporarily solution until the mainline code
+gets fixed.
+
+Related-to: TEI-1078
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Signed-off-by: Joao Paulo Goncalves <joao.goncalves@toradex.com>
+---
+ drivers/usb/gadget/function/f_ncm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
+index e0c183234283..5e972d1c1a0c 100644
+--- a/drivers/usb/gadget/function/f_ncm.c
++++ b/drivers/usb/gadget/function/f_ncm.c
+@@ -113,7 +113,7 @@ static inline unsigned ncm_bitrate(struct usb_gadget *g)
+ * Smaller packets are not likely to be trying to maximize the
+ * throughput and will be mstly sending smaller infrequent frames.
+ */
+-#define TX_MAX_NUM_DPE 32
++#define TX_MAX_NUM_DPE 4
+
+ /* Delay for the transmit to wait before sending an unfilled NTB frame. */
+ #define TX_TIMEOUT_NSECS 300000
+--
+2.34.1
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx-Add-support-for-Apalis-Evaluation-Board-.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx-Add-support-for-Apalis-Evaluation-Board-.patch
new file mode 100644
index 0000000..3237bcd
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx-Add-support-for-Apalis-Evaluation-Board-.patch
@@ -0,0 +1,530 @@
+From d01ee78a6990a2bc5572ea7839c0c549386d41d2 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Wed, 24 Jan 2024 11:13:20 -0300
+Subject: [PATCH 2/2] ARM: dts: imx: Add support for Apalis Evaluation Board
+ v1.2
+
+Add support for the new Apalis Evaluation Board v1.2. Because
+only the imx6q-apalis-eval.dts was available, the imx6q-apalis-eval.dtsi
+has been created which has common hardware configurations for v1.0, v1.1
+and v1.2. Both imx6q-apalis-eval.dts and imx6q-apalis-eval-v1.2.dts
+files include imx6q-apalis-eval.dtsi.
+
+Versions 1.0 and 1.1 are compatible with each other and should
+use imx6q-apalis-eval.dts file. Now for v1.2, the new device-tree file
+should be used.
+
+Upstream-Status: Submitted [https://lore.kernel.org/lkml/20240122123526.43400-1-hiagofranco@gmail.com/]
+
+Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+---
+ arch/arm/boot/dts/nxp/imx/Makefile | 1 +
+ .../dts/nxp/imx/imx6q-apalis-eval-v1.2.dts | 200 ++++++++++++++++++
+ .../boot/dts/nxp/imx/imx6q-apalis-eval.dts | 108 +---------
+ .../boot/dts/nxp/imx/imx6q-apalis-eval.dtsi | 120 +++++++++++
+ 4 files changed, 323 insertions(+), 106 deletions(-)
+ create mode 100644 arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval-v1.2.dts
+ create mode 100644 arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dtsi
+
+diff --git a/arch/arm/boot/dts/nxp/imx/Makefile b/arch/arm/boot/dts/nxp/imx/Makefile
+index 3629e343d3225..9c4b2f14fb395 100644
+--- a/arch/arm/boot/dts/nxp/imx/Makefile
++++ b/arch/arm/boot/dts/nxp/imx/Makefile
+@@ -145,6 +145,7 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
+ imx6dl-yapp4-phoenix.dtb \
+ imx6dl-yapp4-ursa.dtb \
+ imx6q-apalis-eval.dtb \
++ imx6q-apalis-eval-v1.2.dtb \
+ imx6q-apalis-ixora.dtb \
+ imx6q-apalis-ixora-v1.1.dtb \
+ imx6q-apalis-ixora-v1.2.dtb \
+diff --git a/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval-v1.2.dts b/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval-v1.2.dts
+new file mode 100644
+index 0000000000000..15d4a98ee9765
+--- /dev/null
++++ b/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval-v1.2.dts
+@@ -0,0 +1,200 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++/*
++ * Copyright 2024 Toradex
++ */
++
++/dts-v1/;
++
++#include "imx6q-apalis-eval.dtsi"
++
++/ {
++ model = "Toradex Apalis iMX6Q/D Module on Apalis Evaluation Board v1.2";
++ compatible = "toradex,apalis_imx6q-eval-v1.2", "toradex,apalis_imx6q",
++ "fsl,imx6q";
++
++ reg_3v3_mmc: regulator-3v3-mmc {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ gpio = <&gpio2 0 GPIO_ACTIVE_HIGH>;
++ off-on-delay-us = <100000>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_enable_3v3_mmc>;
++ regulator-max-microvolt = <3300000>;
++ regulator-min-microvolt = <3300000>;
++ regulator-name = "3.3V_MMC";
++ startup-delay-us = <10000>;
++ };
++
++ reg_3v3_sd: regulator-3v3-sd {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ gpio = <&gpio2 1 GPIO_ACTIVE_HIGH>;
++ off-on-delay-us = <100000>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_enable_3v3_sd>;
++ regulator-max-microvolt = <3300000>;
++ regulator-min-microvolt = <3300000>;
++ regulator-name = "3.3V_SD";
++ startup-delay-us = <10000>;
++ };
++
++ reg_can1: regulator-can1 {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ gpio = <&gpio2 3 GPIO_ACTIVE_HIGH>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_enable_can1_power>;
++ regulator-name = "5V_SW_CAN1";
++ startup-delay-us = <10000>;
++ };
++
++ reg_can2: regulator-can2 {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ gpio = <&gpio2 2 GPIO_ACTIVE_HIGH>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_enable_can2_power>;
++ regulator-name = "5V_SW_CAN2";
++ startup-delay-us = <10000>;
++ };
++
++ sound-carrier {
++ compatible = "simple-audio-card";
++ simple-audio-card,bitclock-master = <&codec_dai>;
++ simple-audio-card,format = "i2s";
++ simple-audio-card,frame-master = <&codec_dai>;
++ simple-audio-card,name = "apalis-nau8822";
++ simple-audio-card,routing =
++ "Headphones", "LHP",
++ "Headphones", "RHP",
++ "Speaker", "LSPK",
++ "Speaker", "RSPK",
++ "Line Out", "AUXOUT1",
++ "Line Out", "AUXOUT2",
++ "LAUX", "Line In",
++ "RAUX", "Line In",
++ "LMICP", "Mic In",
++ "RMICP", "Mic In";
++ simple-audio-card,widgets =
++ "Headphones", "Headphones",
++ "Line Out", "Line Out",
++ "Speaker", "Speaker",
++ "Microphone", "Mic In",
++ "Line", "Line In";
++
++ codec_dai: simple-audio-card,codec {
++ sound-dai = <&nau8822_1a>;
++ system-clock-frequency = <12288000>;
++ };
++
++ simple-audio-card,cpu {
++ sound-dai = <&ssi2>;
++ };
++ };
++};
++
++&can1 {
++ xceiver-supply = <&reg_can1>;
++ status = "okay";
++};
++
++&can2 {
++ xceiver-supply = <&reg_can2>;
++ status = "okay";
++};
++
++/* I2C1_SDA/SCL on MXM3 209/211 */
++&i2c1 {
++ /* Audio Codec */
++ nau8822_1a: audio-codec@1a {
++ compatible = "nuvoton,nau8822";
++ reg = <0x1a>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_nau8822>;
++ #sound-dai-cells = <0>;
++ };
++
++ /* Current measurement into module VCC */
++ hwmon@40 {
++ compatible = "ti,ina219";
++ reg = <0x40>;
++ shunt-resistor = <5000>;
++ };
++
++ /* Temperature Sensor */
++ temperature-sensor@4f {
++ compatible = "ti,tmp75c";
++ reg = <0x4f>;
++ };
++
++ /* EEPROM */
++ eeprom@57 {
++ compatible = "st,24c02", "atmel,24c02";
++ reg = <0x57>;
++ pagesize = <16>;
++ size = <256>;
++ };
++};
++
++&pcie {
++ status = "okay";
++};
++
++&ssi2 {
++ status = "okay";
++};
++
++/* MMC1 */
++&usdhc1 {
++ bus-width = <4>;
++ pinctrl-0 = <&pinctrl_usdhc1_4bit &pinctrl_mmc_cd>;
++ vmmc-supply = <&reg_3v3_mmc>;
++ status = "okay";
++};
++
++/* SD1 */
++&usdhc2 {
++ cd-gpios = <&gpio6 14 GPIO_ACTIVE_LOW>;
++ pinctrl-0 = <&pinctrl_usdhc2 &pinctrl_sd_cd>;
++ vmmc-supply = <&reg_3v3_sd>;
++ status = "okay";
++};
++
++&iomuxc {
++ pinctrl_enable_3v3_mmc: enable3v3mmcgrp {
++ fsl,pins = <
++ /* MMC1_PWR_CTRL */
++ MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x1b0b0
++ >;
++ };
++
++ pinctrl_enable_3v3_sd: enable3v3sdgrp {
++ fsl,pins = <
++ /* SD1_PWR_CTRL */
++ MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x1b0b0
++ >;
++ };
++
++ pinctrl_enable_can1_power: enablecan1powergrp {
++ fsl,pins = <
++ /* CAN1_PWR_EN */
++ MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x1b0b0
++ >;
++ };
++
++ pinctrl_enable_can2_power: enablecan2powergrp {
++ fsl,pins = <
++ /* CAN2_PWR_EN */
++ MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x1b0b0
++ >;
++ };
++
++ pinctrl_nau8822: nau8822grp {
++ fsl,pins = <
++ MX6QDL_PAD_DISP0_DAT16__AUD5_TXC 0x130b0
++ MX6QDL_PAD_DISP0_DAT17__AUD5_TXD 0x130b0
++ MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS 0x130b0
++ MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x130b0
++ >;
++ };
++};
+diff --git a/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dts b/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dts
+index 3fc079dfd61ee..e1077e2da5f42 100644
+--- a/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dts
++++ b/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dts
+@@ -7,29 +7,13 @@
+
+ /dts-v1/;
+
+-#include <dt-bindings/gpio/gpio.h>
+-#include <dt-bindings/input/input.h>
+-#include <dt-bindings/interrupt-controller/irq.h>
+-#include "imx6q.dtsi"
+-#include "imx6qdl-apalis.dtsi"
++#include "imx6q-apalis-eval.dtsi"
+
+ / {
+ model = "Toradex Apalis iMX6Q/D Module on Apalis Evaluation Board";
+ compatible = "toradex,apalis_imx6q-eval", "toradex,apalis_imx6q",
+ "fsl,imx6q";
+
+- aliases {
+- i2c0 = &i2c1;
+- i2c1 = &i2c3;
+- i2c2 = &i2c2;
+- rtc0 = &rtc_i2c;
+- rtc1 = &snvs_rtc;
+- };
+-
+- chosen {
+- stdout-path = "serial0:115200n8";
+- };
+-
+ reg_pcie_switch: regulator-pcie-switch {
+ compatible = "regulator-fixed";
+ enable-active-high;
+@@ -40,14 +24,6 @@ reg_pcie_switch: regulator-pcie-switch {
+ startup-delay-us = <100000>;
+ status = "okay";
+ };
+-
+- reg_3v3_sw: regulator-3v3-sw {
+- compatible = "regulator-fixed";
+- regulator-always-on;
+- regulator-max-microvolt = <3300000>;
+- regulator-min-microvolt = <3300000>;
+- regulator-name = "3.3V_SW";
+- };
+ };
+
+ &can1 {
+@@ -62,102 +38,22 @@ &can2 {
+
+ /* I2C1_SDA/SCL on MXM3 209/211 (e.g. RTC on carrier board) */
+ &i2c1 {
+- status = "okay";
+-
++ /* PCIe Switch */
+ pcie-switch@58 {
+ compatible = "plx,pex8605";
+ reg = <0x58>;
+ };
+-
+- /* M41T0M6 real time clock on carrier board */
+- rtc_i2c: rtc@68 {
+- compatible = "st,m41t0";
+- reg = <0x68>;
+- };
+-};
+-
+-/*
+- * I2C3_SDA/SCL (CAM) on MXM3 pin 201/203 (e.g. camera sensor on carrier
+- * board)
+- */
+-&i2c3 {
+- status = "okay";
+ };
+
+ &pcie {
+- pinctrl-names = "default";
+- pinctrl-0 = <&pinctrl_reset_moci>;
+- /* active-high meaning opposite of regular PERST# active-low polarity */
+- reset-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
+- reset-gpio-active-high;
+ vpcie-supply = <&reg_pcie_switch>;
+ status = "okay";
+ };
+
+-&pwm1 {
+- status = "okay";
+-};
+-
+-&pwm2 {
+- status = "okay";
+-};
+-
+-&pwm3 {
+- status = "okay";
+-};
+-
+-&pwm4 {
+- status = "okay";
+-};
+-
+-&reg_usb_host_vbus {
+- status = "okay";
+-};
+-
+-&reg_usb_otg_vbus {
+- status = "okay";
+-};
+-
+-&sata {
+- status = "okay";
+-};
+-
+ &sound_spdif {
+ status = "okay";
+ };
+
+-&spdif {
+- status = "okay";
+-};
+-
+-&uart1 {
+- status = "okay";
+-};
+-
+-&uart2 {
+- status = "okay";
+-};
+-
+-&uart4 {
+- status = "okay";
+-};
+-
+-&uart5 {
+- status = "okay";
+-};
+-
+-&usbh1 {
+- disable-over-current;
+- vbus-supply = <&reg_usb_host_vbus>;
+- status = "okay";
+-};
+-
+-&usbotg {
+- disable-over-current;
+- vbus-supply = <&reg_usb_otg_vbus>;
+- status = "okay";
+-};
+-
+ /* MMC1 */
+ &usdhc1 {
+ status = "okay";
+diff --git a/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dtsi b/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dtsi
+new file mode 100644
+index 0000000000000..b6c45ad3f4304
+--- /dev/null
++++ b/arch/arm/boot/dts/nxp/imx/imx6q-apalis-eval.dtsi
+@@ -0,0 +1,120 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++/*
++ * Copyright 2014-2024 Toradex
++ */
++
++#include <dt-bindings/gpio/gpio.h>
++#include <dt-bindings/input/input.h>
++#include <dt-bindings/interrupt-controller/irq.h>
++#include "imx6q.dtsi"
++#include "imx6qdl-apalis.dtsi"
++
++/ {
++ aliases {
++ i2c0 = &i2c1;
++ i2c1 = &i2c3;
++ i2c2 = &i2c2;
++ rtc0 = &rtc_i2c;
++ rtc1 = &snvs_rtc;
++ };
++
++ chosen {
++ stdout-path = "serial0:115200n8";
++ };
++
++ reg_3v3_sw: regulator-3v3-sw {
++ compatible = "regulator-fixed";
++ regulator-always-on;
++ regulator-max-microvolt = <3300000>;
++ regulator-min-microvolt = <3300000>;
++ regulator-name = "3.3V_SW";
++ };
++};
++
++&i2c1 {
++ #address-cells = <1>;
++ #size-cells = <0>;
++ status = "okay";
++
++ /* M41T0M6 real time clock on carrier board */
++ rtc_i2c: rtc@68 {
++ compatible = "st,m41t0";
++ reg = <0x68>;
++ };
++};
++
++/*
++ * I2C3_SDA/SCL (CAM) on MXM3 pin 201/203 (e.g. camera sensor on carrier
++ * board)
++ */
++&i2c3 {
++ status = "okay";
++};
++
++&pcie {
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_reset_moci>;
++ /* active-high meaning opposite of regular PERST# active-low polarity */
++ reset-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
++ reset-gpio-active-high;
++};
++
++&pwm1 {
++ status = "okay";
++};
++
++&pwm2 {
++ status = "okay";
++};
++
++&pwm3 {
++ status = "okay";
++};
++
++&pwm4 {
++ status = "okay";
++};
++
++&reg_usb_host_vbus {
++ status = "okay";
++};
++
++&reg_usb_otg_vbus {
++ status = "okay";
++};
++
++&sata {
++ status = "okay";
++};
++
++&spdif {
++ status = "okay";
++};
++
++&uart1 {
++ status = "okay";
++};
++
++&uart2 {
++ status = "okay";
++};
++
++&uart4 {
++ status = "okay";
++};
++
++&uart5 {
++ status = "okay";
++};
++
++&usbh1 {
++ disable-over-current;
++ vbus-supply = <&reg_usb_host_vbus>;
++ status = "okay";
++};
++
++&usbotg {
++ disable-over-current;
++ vbus-supply = <&reg_usb_otg_vbus>;
++ status = "okay";
++};
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx6qdl-colibri-Add-usdhc-aliases.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx6qdl-colibri-Add-usdhc-aliases.patch
new file mode 100644
index 0000000..8923abb
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-ARM-dts-imx6qdl-colibri-Add-usdhc-aliases.patch
@@ -0,0 +1,38 @@
+From 0fd10dbe5a88a882340d604bf55affeb7dbe03b7 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Mon, 20 Nov 2023 21:58:17 +0100
+Subject: [PATCH 2/3] ARM: dts: imx6qdl-colibri: Add usdhc aliases
+
+Add mmc aliases to ensure a consistent mmc device naming across the
+Toradex SoM family, with this commit mmc0 is the on-module eMMC
+boot device and the not available mmc interfaces are removed.
+
+Upstream-Status: Backport [265f56542a936fa2edac21ee2cd45f0d331707a6]
+
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+---
+ arch/arm/boot/dts/nxp/imx/imx6qdl-colibri.dtsi | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/arch/arm/boot/dts/nxp/imx/imx6qdl-colibri.dtsi b/arch/arm/boot/dts/nxp/imx/imx6qdl-colibri.dtsi
+index 11d9c7a2dacb1..55c90f6393ad5 100644
+--- a/arch/arm/boot/dts/nxp/imx/imx6qdl-colibri.dtsi
++++ b/arch/arm/boot/dts/nxp/imx/imx6qdl-colibri.dtsi
+@@ -12,6 +12,13 @@ / {
+ model = "Toradex Colibri iMX6DL/S Module";
+ compatible = "toradex,colibri_imx6dl", "fsl,imx6dl";
+
++ aliases {
++ mmc0 = &usdhc3; /* eMMC */
++ mmc1 = &usdhc1; /* MMC/SD Slot */
++ /delete-property/ mmc2;
++ /delete-property/ mmc3;
++ };
++
+ backlight: backlight {
+ compatible = "pwm-backlight";
+ brightness-levels = <0 45 63 88 119 158 203 255>;
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch
new file mode 100644
index 0000000..5067258
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch
@@ -0,0 +1,61 @@
+From fdd0972a24818dc336b2235ce93000ee7b88240e Mon Sep 17 00:00:00 2001
+From: Max Krummenacher <max.krummenacher@toradex.com>
+Date: Thu, 1 Sep 2022 14:04:50 +0200
+Subject: [PATCH 2/4] Revert "drm/panel-simple: drop use of data-mapping
+ property"
+
+This reverts commit d021d751c14752a0266865700f6f212fab40a18c.
+
+Re-enable the data-mapping property which was already used in the
+5.4-2.3.0 downstream kernel.
+
+In addition to the revert set bpc from the data-mapping value
+as a WARN_ON is printed if missing.
+In addition to the revert have mapping pointing to the empty string to
+prevent a kernel panic if data-mapping can not be read from the dt and
+then an uninitialized pointer is used in strcmp.
+
+Upstream-Status: denied [Alternative solution being discused]
+https://lore.kernel.org/all/20220628181838.2031-1-max.oss.09@gmail.com/
+Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
+---
+ drivers/gpu/drm/panel/panel-simple.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
+index 95959dcc6e0e..4518eb5d7acb 100644
+--- a/drivers/gpu/drm/panel/panel-simple.c
++++ b/drivers/gpu/drm/panel/panel-simple.c
+@@ -464,6 +464,7 @@ static int panel_dpi_probe(struct device *dev,
+ struct panel_desc *desc;
+ unsigned int bus_flags;
+ struct videomode vm;
++ const char *mapping = "";
+ int ret;
+
+ np = dev->of_node;
+@@ -488,6 +489,21 @@ static int panel_dpi_probe(struct device *dev,
+ of_property_read_u32(np, "width-mm", &desc->size.width);
+ of_property_read_u32(np, "height-mm", &desc->size.height);
+
++ of_property_read_string(np, "data-mapping", &mapping);
++ if (!strcmp(mapping, "rgb24")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
++ desc->bpc = 8;
++ } else if (!strcmp(mapping, "rgb565")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB565_1X16;
++ desc->bpc = 6;
++ } else if (!strcmp(mapping, "bgr666")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB666_1X18;
++ desc->bpc = 6;
++ } else if (!strcmp(mapping, "lvds666")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB666_1X24_CPADHI;
++ desc->bpc = 6;
++ }
++
+ /* Extract bus_flags from display_timing */
+ bus_flags = 0;
+ vm.flags = timing->flags;
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-arm64-dts-freescale-verdin-imx8mm-add-support-to-mal.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-arm64-dts-freescale-verdin-imx8mm-add-support-to-mal.patch
new file mode 100644
index 0000000..95c8ea4
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-arm64-dts-freescale-verdin-imx8mm-add-support-to-mal.patch
@@ -0,0 +1,273 @@
+From 4d6ab01eaa1065bda3446736d265f113ca168c02 Mon Sep 17 00:00:00 2001
+From: Joao Paulo Goncalves <joao.goncalves@toradex.com>
+Date: Fri, 1 Dec 2023 16:07:33 +0100
+Subject: [PATCH 2/2] arm64: dts: freescale: verdin-imx8mm: add support to
+ mallow board
+
+Add Toradex Verdin IMX8MM Mallow carrier board support. Mallow is a
+low-cost carrier board in the Verdin family with a small form factor and
+build for volume production making it ideal for industrial and embedded
+applications.
+
+https://www.toradex.com/products/carrier-board/mallow-carrier-board
+
+Upstream-Status: Backport [eb9348865fabe4e0bc0b0453813dba8ecbfd9deb]
+
+Signed-off-by: Joao Paulo Goncalves <joao.goncalves@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+---
+ arch/arm64/boot/dts/freescale/Makefile | 2 +
+ .../dts/freescale/imx8mm-verdin-mallow.dtsi | 173 ++++++++++++++++++
+ .../imx8mm-verdin-nonwifi-mallow.dts | 18 ++
+ .../freescale/imx8mm-verdin-wifi-mallow.dts | 18 ++
+ 4 files changed, 211 insertions(+)
+ create mode 100644 arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi
+ create mode 100644 arch/arm64/boot/dts/freescale/imx8mm-verdin-nonwifi-mallow.dts
+ create mode 100644 arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-mallow.dts
+
+diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
+index 89aee6c925760..2c2a76dff875d 100644
+--- a/arch/arm64/boot/dts/freescale/Makefile
++++ b/arch/arm64/boot/dts/freescale/Makefile
+@@ -79,9 +79,11 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mm-venice-gw7904.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mm-venice-gw7905-0x.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-nonwifi-dahlia.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-nonwifi-dev.dtb
++dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-nonwifi-mallow.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-nonwifi-yavia.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dahlia.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-dev.dtb
++dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-mallow.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mm-verdin-wifi-yavia.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mn-beacon-kit.dtb
+ dtb-$(CONFIG_ARCH_MXC) += imx8mn-bsh-smm-s2.dtb
+diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi
+new file mode 100644
+index 0000000000000..4a0799d63446c
+--- /dev/null
++++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin-mallow.dtsi
+@@ -0,0 +1,173 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++/*
++ * Copyright 2023 Toradex
++ *
++ * Common dtsi for Verdin IMX8MM SoM on Mallow carrier board
++ *
++ * https://www.toradex.com/computer-on-modules/verdin-arm-family/nxp-imx-8m-mini-nano
++ * https://www.toradex.com/products/carrier-board/mallow-carrier-board
++ */
++
++#include <dt-bindings/leds/common.h>
++
++/ {
++ leds {
++ compatible = "gpio-leds";
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_leds>;
++
++ /* SODIMM 52 - USER_LED_1_RED */
++ led-0 {
++ color = <LED_COLOR_ID_RED>;
++ function = LED_FUNCTION_DEBUG;
++ function-enumerator = <1>;
++ gpios = <&gpio3 0 GPIO_ACTIVE_HIGH>;
++ };
++
++ /* SODIMM 54 - USER_LED_1_GREEN */
++ led-1 {
++ color = <LED_COLOR_ID_GREEN>;
++ function = LED_FUNCTION_DEBUG;
++ function-enumerator = <1>;
++ gpios = <&gpio3 1 GPIO_ACTIVE_HIGH>;
++ };
++
++ /* SODIMM 56 - USER_LED_2_RED */
++ led-2 {
++ color = <LED_COLOR_ID_RED>;
++ function = LED_FUNCTION_DEBUG;
++ function-enumerator = <2>;
++ gpios = <&gpio3 6 GPIO_ACTIVE_HIGH>;
++ };
++
++ /* SODIMM 58 - USER_LED_2_GREEN */
++ led-3 {
++ color = <LED_COLOR_ID_GREEN>;
++ function = LED_FUNCTION_DEBUG;
++ function-enumerator = <2>;
++ gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>;
++ };
++ };
++};
++
++/* Verdin SPI_1 */
++&ecspi2 {
++ pinctrl-0 = <&pinctrl_ecspi2>, <&pinctrl_tpm_cs>;
++ cs-gpios = <&gpio5 13 GPIO_ACTIVE_LOW>, <&gpio3 2 GPIO_ACTIVE_LOW>;
++ status = "okay";
++
++ tpm@1 {
++ compatible = "infineon,slb9670", "tcg,tpm_tis-spi";
++ reg = <1>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_tpm_irq>;
++ interrupt-parent = <&gpio3>;
++ interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
++ spi-max-frequency = <18500000>;
++ };
++};
++
++/* EEPROM on Mallow */
++&eeprom_carrier_board {
++ status = "okay";
++};
++
++/* Verdin ETH_1 */
++&fec1 {
++ status = "okay";
++};
++
++/* Temperature sensor on Mallow */
++&hwmon_temp {
++ compatible = "ti,tmp1075";
++ status = "okay";
++};
++
++/* Verdin I2C_2_DSI */
++&i2c2 {
++ status = "okay";
++};
++
++/* Verdin I2C_4_CSI */
++&i2c3 {
++ status = "okay";
++};
++
++/* Verdin I2C_1 */
++&i2c4 {
++ status = "okay";
++};
++
++/* Verdin PCIE_1 */
++&pcie0 {
++ status = "okay";
++};
++
++&pcie_phy {
++ status = "okay";
++};
++
++/* Verdin PWM_3_DSI */
++&pwm1 {
++ status = "okay";
++};
++
++/* Verdin PWM_1 */
++&pwm2 {
++ status = "okay";
++};
++
++/* Verdin PWM_2 */
++&pwm3 {
++ status = "okay";
++};
++
++/* Verdin UART_3 */
++&uart1 {
++ status = "okay";
++};
++
++/* Verdin UART_1 */
++&uart2 {
++ status = "okay";
++};
++
++/* Verdin UART_2 */
++&uart3 {
++ status = "okay";
++};
++
++/* Verdin USB_1 */
++&usbotg1 {
++ status = "okay";
++};
++
++/* Verdin USB_2 */
++&usbotg2 {
++ status = "okay";
++};
++
++/* Verdin SD_1 */
++&usdhc2 {
++ status = "okay";
++};
++
++&iomuxc {
++ pinctrl_leds: ledsgrp {
++ fsl,pins =
++ <MX8MM_IOMUXC_NAND_ALE_GPIO3_IO0 0x106>, /* SODIMM 52 */
++ <MX8MM_IOMUXC_NAND_CE0_B_GPIO3_IO1 0x106>, /* SODIMM 54 */
++ <MX8MM_IOMUXC_NAND_DATA00_GPIO3_IO6 0x106>, /* SODIMM 56 */
++ <MX8MM_IOMUXC_NAND_DATA01_GPIO3_IO7 0x106>; /* SODIMM 58 */
++ };
++
++ pinctrl_tpm_cs: tpmcsgrp {
++ fsl,pins =
++ <MX8MM_IOMUXC_NAND_CE1_B_GPIO3_IO2 0x146>; /* SODIMM 64 */
++ };
++
++ pinctrl_tpm_irq: tpmirqgrp {
++ fsl,pins =
++ <MX8MM_IOMUXC_NAND_DQS_GPIO3_IO14 0x141>; /* SODIMM 66 */
++ };
++};
+diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin-nonwifi-mallow.dts b/arch/arm64/boot/dts/freescale/imx8mm-verdin-nonwifi-mallow.dts
+new file mode 100644
+index 0000000000000..1b1999f3a80e8
+--- /dev/null
++++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin-nonwifi-mallow.dts
+@@ -0,0 +1,18 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++/*
++ * Copyright 2023 Toradex
++ */
++
++/dts-v1/;
++
++#include "imx8mm-verdin.dtsi"
++#include "imx8mm-verdin-nonwifi.dtsi"
++#include "imx8mm-verdin-mallow.dtsi"
++
++/ {
++ model = "Toradex Verdin iMX8M Mini on Mallow";
++ compatible = "toradex,verdin-imx8mm-nonwifi-mallow",
++ "toradex,verdin-imx8mm-nonwifi",
++ "toradex,verdin-imx8mm",
++ "fsl,imx8mm";
++};
+diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-mallow.dts b/arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-mallow.dts
+new file mode 100644
+index 0000000000000..2916145f31bbe
+--- /dev/null
++++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-mallow.dts
+@@ -0,0 +1,18 @@
++// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
++/*
++ * Copyright 2023 Toradex
++ */
++
++/dts-v1/;
++
++#include "imx8mm-verdin.dtsi"
++#include "imx8mm-verdin-wifi.dtsi"
++#include "imx8mm-verdin-mallow.dtsi"
++
++/ {
++ model = "Toradex Verdin iMX8M Mini WB on Mallow";
++ compatible = "toradex,verdin-imx8mm-wifi-mallow",
++ "toradex,verdin-imx8mm-wifi",
++ "toradex,verdin-imx8mm",
++ "fsl,imx8mm";
++};
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-power-reset-gpio-poweroff-use-sys-off-handler-API.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-power-reset-gpio-poweroff-use-sys-off-handler-API.patch
new file mode 100644
index 0000000..f42a3ca
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-power-reset-gpio-poweroff-use-sys-off-handler-API.patch
@@ -0,0 +1,103 @@
+From 7db43d423bda4566732b04a2535346c5eaea0be1 Mon Sep 17 00:00:00 2001
+From: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Date: Fri, 6 Oct 2023 10:04:26 -0300
+Subject: [PATCH 2/4] power: reset: gpio-poweroff: use sys-off handler API
+
+Use the new sys-off handler API for gpio-poweroff. This allows us to
+have more than one poweroff handler and prioritise them.
+
+Upstream-Status: Backport [b16d9f49735f3d26e23f0ba4a2cf21668fc6b66]
+
+Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Link: https://lore.kernel.org/r/20231006130428.11259-3-francesco@dolcini.it
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+---
+ drivers/power/reset/gpio-poweroff.c | 37 ++++++++++-------------------
+ 1 file changed, 12 insertions(+), 25 deletions(-)
+
+diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
+index dea550e422f3c..0deb293eb2d66 100644
+--- a/drivers/power/reset/gpio-poweroff.c
++++ b/drivers/power/reset/gpio-poweroff.c
+@@ -15,6 +15,7 @@
+ #include <linux/gpio/consumer.h>
+ #include <linux/mod_devicetable.h>
+ #include <linux/module.h>
++#include <linux/reboot.h>
+
+ #define DEFAULT_TIMEOUT_MS 3000
+
+@@ -25,15 +26,9 @@ struct gpio_poweroff {
+ u32 inactive_delay_ms;
+ };
+
+-/*
+- * Hold configuration here, cannot be more than one instance of the driver
+- * since pm_power_off itself is global.
+- */
+-static struct gpio_poweroff *gpio_poweroff;
+-
+-static void gpio_poweroff_do_poweroff(void)
++static int gpio_poweroff_do_poweroff(struct sys_off_data *data)
+ {
+- BUG_ON(!gpio_poweroff);
++ struct gpio_poweroff *gpio_poweroff = data->cb_data;
+
+ /* drive it active, also inactive->active edge */
+ gpiod_direction_output(gpio_poweroff->reset_gpio, 1);
+@@ -50,20 +45,16 @@ static void gpio_poweroff_do_poweroff(void)
+ mdelay(gpio_poweroff->timeout_ms);
+
+ WARN_ON(1);
++
++ return NOTIFY_DONE;
+ }
+
+ static int gpio_poweroff_probe(struct platform_device *pdev)
+ {
++ struct gpio_poweroff *gpio_poweroff;
+ bool input = false;
+ enum gpiod_flags flags;
+-
+- /* If a pm_power_off function has already been added, leave it alone */
+- if (pm_power_off != NULL) {
+- dev_err(&pdev->dev,
+- "%s: pm_power_off function already registered\n",
+- __func__);
+- return -EBUSY;
+- }
++ int ret;
+
+ gpio_poweroff = devm_kzalloc(&pdev->dev, sizeof(*gpio_poweroff), GFP_KERNEL);
+ if (!gpio_poweroff)
+@@ -89,14 +80,11 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
+ if (IS_ERR(gpio_poweroff->reset_gpio))
+ return PTR_ERR(gpio_poweroff->reset_gpio);
+
+- pm_power_off = &gpio_poweroff_do_poweroff;
+- return 0;
+-}
+-
+-static int gpio_poweroff_remove(struct platform_device *pdev)
+-{
+- if (pm_power_off == &gpio_poweroff_do_poweroff)
+- pm_power_off = NULL;
++ ret = devm_register_sys_off_handler(&pdev->dev, SYS_OFF_MODE_POWER_OFF,
++ SYS_OFF_PRIO_DEFAULT, gpio_poweroff_do_poweroff,
++ gpio_poweroff);
++ if (ret)
++ return dev_err_probe(&pdev->dev, ret, "Cannot register poweroff handler\n");
+
+ return 0;
+ }
+@@ -109,7 +97,6 @@ MODULE_DEVICE_TABLE(of, of_gpio_poweroff_match);
+
+ static struct platform_driver gpio_poweroff_driver = {
+ .probe = gpio_poweroff_probe,
+- .remove = gpio_poweroff_remove,
+ .driver = {
+ .name = "poweroff-gpio",
+ .of_match_table = of_gpio_poweroff_match,
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-ARM-dts-imx7d-colibri-emmc-Add-usdhc-aliases.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-ARM-dts-imx7d-colibri-emmc-Add-usdhc-aliases.patch
new file mode 100644
index 0000000..bdd44eb
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-ARM-dts-imx7d-colibri-emmc-Add-usdhc-aliases.patch
@@ -0,0 +1,35 @@
+From dfddfac32dd5854b2b05e66abbedbddf6814485f Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Mon, 20 Nov 2023 21:58:18 +0100
+Subject: [PATCH 3/3] ARM: dts: imx7d-colibri-emmc: Add usdhc aliases
+
+Add mmc aliases to ensure a consistent mmc device naming across the
+Toradex SoM family, with this commit mmc0 is the on-module eMMC
+boot device and the not available mmc interfaces are removed.
+
+Upstream-Status: Backport [d53314dd068e782ba0fa808405026f37dbedeb1e]
+
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+---
+ arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc.dtsi | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc.dtsi b/arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc.dtsi
+index 3740e34ef99f1..9670f45eab3ba 100644
+--- a/arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc.dtsi
++++ b/arch/arm/boot/dts/nxp/imx/imx7d-colibri-emmc.dtsi
+@@ -11,6 +11,10 @@ aliases {
+ /* Required to properly pass MAC addresses from bootloader. */
+ ethernet0 = &fec1;
+ ethernet1 = &fec2;
++ mmc0 = &usdhc3; /* eMMC */
++ mmc1 = &usdhc1; /* MMC/SD slot */
++ /delete-property/ mmc2;
++ /delete-property/ mmc3;
+ };
+
+ memory@80000000 {
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch
new file mode 100644
index 0000000..4f5e2c0
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch
@@ -0,0 +1,39 @@
+From 070e2b7b7c3ef6e640e13aeb120c958e09accbb1 Mon Sep 17 00:00:00 2001
+From: Philippe Schenker <philippe.schenker@toradex.com>
+Date: Wed, 2 Nov 2022 14:25:56 +0100
+Subject: [PATCH 3/4] drivers: chipidea: disable runtime-pm for imx6ul
+
+Colibri iMX6ULL does not properly work with runtime-pm enabled. We see
+two issues with that enabled:
+
+1. Runtime PM disconnects the line as it thinks there is no VBUS -
+ because this signal is not hooked up in hardware. The driver gets a
+ wakeup signal from the attached hub after about 2s which leads to a
+ reset loop.
+2. In Dual-Role switching mode usb-device is not detected when plugged
+ in. The reason was never fully understood.
+
+Upstream-Status: Inappropriate [Configuration for colibri-imx6ull]
+
+Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
+---
+ drivers/usb/chipidea/ci_hdrc_imx.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
+index e28bb2f2612d..4da4aa4ee70d 100644
+--- a/drivers/usb/chipidea/ci_hdrc_imx.c
++++ b/drivers/usb/chipidea/ci_hdrc_imx.c
+@@ -57,8 +57,7 @@ static const struct ci_hdrc_imx_platform_flag imx6sx_usb_data = {
+ };
+
+ static const struct ci_hdrc_imx_platform_flag imx6ul_usb_data = {
+- .flags = CI_HDRC_SUPPORTS_RUNTIME_PM |
+- CI_HDRC_TURN_VBUS_EARLY_ON |
++ .flags = CI_HDRC_TURN_VBUS_EARLY_ON |
+ CI_HDRC_DISABLE_DEVICE_STREAMING,
+ };
+
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-dt-bindings-power-reset-gpio-poweroff-Add-priority-p.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-dt-bindings-power-reset-gpio-poweroff-Add-priority-p.patch
new file mode 100644
index 0000000..2544c32
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0003-dt-bindings-power-reset-gpio-poweroff-Add-priority-p.patch
@@ -0,0 +1,45 @@
+From 30569e1ff44369f9d1aec5987cdcc0cedba7cc71 Mon Sep 17 00:00:00 2001
+From: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Date: Fri, 6 Oct 2023 10:04:27 -0300
+Subject: [PATCH 3/4] dt-bindings: power: reset: gpio-poweroff: Add priority
+ property
+
+Add the priority property to the gpio-poweroff bindings description.
+
+Upstream-Status: Backport [4ee17bd30788496a279ceaabc7ecaaf39f61cfc4]
+
+Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://lore.kernel.org/r/20231006130428.11259-4-francesco@dolcini.it
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+---
+ .../devicetree/bindings/power/reset/gpio-poweroff.yaml | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/Documentation/devicetree/bindings/power/reset/gpio-poweroff.yaml b/Documentation/devicetree/bindings/power/reset/gpio-poweroff.yaml
+index b54ec003a1e03..a4b437fce37cf 100644
+--- a/Documentation/devicetree/bindings/power/reset/gpio-poweroff.yaml
++++ b/Documentation/devicetree/bindings/power/reset/gpio-poweroff.yaml
+@@ -18,6 +18,9 @@ description: >
+ Finally the operating system assumes the power off failed if
+ the system is still running after waiting some time (timeout-ms).
+
++allOf:
++ - $ref: restart-handler.yaml#
++
+ properties:
+ compatible:
+ const: gpio-poweroff
+@@ -40,6 +43,9 @@ properties:
+ default: 100
+ description: Delay to wait after driving gpio inactive
+
++ priority:
++ default: 0
++
+ timeout-ms:
+ default: 3000
+ description: Time to wait before assuming the power off sequence failed.
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0004-media-i2c-ov5640-Implement-get_mbus_config.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0004-media-i2c-ov5640-Implement-get_mbus_config.patch
new file mode 100644
index 0000000..7205135
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0004-media-i2c-ov5640-Implement-get_mbus_config.patch
@@ -0,0 +1,54 @@
+From 3317d3298cd06213d457ad7090ec0fd56eefc5d2 Mon Sep 17 00:00:00 2001
+From: Aishwarya Kothari <aishwarya.kothari@toradex.com>
+Date: Wed, 25 Jan 2023 13:09:15 +0100
+Subject: [PATCH 4/4] media: i2c: ov5640: Implement get_mbus_config
+
+Implement the introduced get_mbus_config operation to report the
+config of the MIPI CSI-2, BT.656 and Parallel interface.
+
+Signed-off-by: Aishwarya Kothari <aishwarya.kothari@toradex.com>
+Upstream-Status: Submitted [https://lore.kernel.org/all/20230306063649.7387-1-marcel@ziswiler.com/]
+---
+ drivers/media/i2c/ov5640.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
+index 5fe85aa2d2ec..8cb966fb1b79 100644
+--- a/drivers/media/i2c/ov5640.c
++++ b/drivers/media/i2c/ov5640.c
+@@ -3755,6 +3755,24 @@ static int ov5640_init_cfg(struct v4l2_subdev *sd,
+ return 0;
+ }
+
++static int ov5640_get_mbus_config(struct v4l2_subdev *sd,
++ unsigned int pad,
++ struct v4l2_mbus_config *cfg)
++{
++ struct ov5640_dev *sensor = to_ov5640_dev(sd);
++
++ cfg->type = sensor->ep.bus_type;
++ if (ov5640_is_csi2(sensor)) {
++ cfg->bus.mipi_csi2.num_data_lanes =
++ sensor->ep.bus.mipi_csi2.num_data_lanes;
++ cfg->bus.mipi_csi2.flags = sensor->ep.bus.mipi_csi2.flags;
++ } else {
++ cfg->bus.parallel.flags = sensor->ep.bus.parallel.flags;
++ }
++
++ return 0;
++}
++
+ static const struct v4l2_subdev_core_ops ov5640_core_ops = {
+ .log_status = v4l2_ctrl_subdev_log_status,
+ .subscribe_event = v4l2_ctrl_subdev_subscribe_event,
+@@ -3775,6 +3793,7 @@ static const struct v4l2_subdev_pad_ops ov5640_pad_ops = {
+ .get_selection = ov5640_get_selection,
+ .enum_frame_size = ov5640_enum_frame_size,
+ .enum_frame_interval = ov5640_enum_frame_interval,
++ .get_mbus_config = ov5640_get_mbus_config,
+ };
+
+ static const struct v4l2_subdev_ops ov5640_subdev_ops = {
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0004-power-reset-gpio-poweroff-make-sys-handler-priority-.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0004-power-reset-gpio-poweroff-make-sys-handler-priority-.patch
new file mode 100644
index 0000000..6b94e1a
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0004-power-reset-gpio-poweroff-make-sys-handler-priority-.patch
@@ -0,0 +1,54 @@
+From 0af4e07ee7510a04d0ba3fba26a0675068c43780 Mon Sep 17 00:00:00 2001
+From: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Date: Fri, 6 Oct 2023 10:04:28 -0300
+Subject: [PATCH 4/4] power: reset: gpio-poweroff: make sys handler priority
+ configurable
+
+Add a priority property equal to gpio-restart to allow increasing the
+priority of the gpio-poweroff handler.
+
+Upstream-Status: Backport [d03d2a8cdefe86f04cfb53934a708620e7dfbfcb]
+
+Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+Link: https://lore.kernel.org/r/20231006130428.11259-5-francesco@dolcini.it
+Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+---
+ drivers/power/reset/gpio-poweroff.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/power/reset/gpio-poweroff.c b/drivers/power/reset/gpio-poweroff.c
+index 0deb293eb2d66..52cfeee2cb284 100644
+--- a/drivers/power/reset/gpio-poweroff.c
++++ b/drivers/power/reset/gpio-poweroff.c
+@@ -54,6 +54,7 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
+ struct gpio_poweroff *gpio_poweroff;
+ bool input = false;
+ enum gpiod_flags flags;
++ int priority = SYS_OFF_PRIO_DEFAULT;
+ int ret;
+
+ gpio_poweroff = devm_kzalloc(&pdev->dev, sizeof(*gpio_poweroff), GFP_KERNEL);
+@@ -75,14 +76,18 @@ static int gpio_poweroff_probe(struct platform_device *pdev)
+ device_property_read_u32(&pdev->dev, "inactive-delay-ms",
+ &gpio_poweroff->inactive_delay_ms);
+ device_property_read_u32(&pdev->dev, "timeout-ms", &gpio_poweroff->timeout_ms);
++ device_property_read_u32(&pdev->dev, "priority", &priority);
++ if (priority > 255) {
++ dev_err(&pdev->dev, "Invalid priority property: %u\n", priority);
++ return -EINVAL;
++ }
+
+ gpio_poweroff->reset_gpio = devm_gpiod_get(&pdev->dev, NULL, flags);
+ if (IS_ERR(gpio_poweroff->reset_gpio))
+ return PTR_ERR(gpio_poweroff->reset_gpio);
+
+ ret = devm_register_sys_off_handler(&pdev->dev, SYS_OFF_MODE_POWER_OFF,
+- SYS_OFF_PRIO_DEFAULT, gpio_poweroff_do_poweroff,
+- gpio_poweroff);
++ priority, gpio_poweroff_do_poweroff, gpio_poweroff);
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret, "Cannot register poweroff handler\n");
+
+--
+2.34.1
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/defconfig b/recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/defconfig
new file mode 100644
index 0000000..6fc8118
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/defconfig
@@ -0,0 +1,1025 @@
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_AUDIT=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_NUMA_BALANCING=y
+CONFIG_MEMCG=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_HUGETLB=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_PERF=y
+CONFIG_CGROUP_BPF=y
+CONFIG_USER_NS=y
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_PROFILING=y
+CONFIG_KEXEC_FILE=y
+CONFIG_CRASH_DUMP=y
+CONFIG_ARCH_K3=y
+CONFIG_ARCH_NXP=y
+CONFIG_ARCH_MXC=y
+CONFIG_ARM64_VA_BITS_48=y
+CONFIG_SCHED_MC=y
+CONFIG_SCHED_SMT=y
+CONFIG_NUMA=y
+CONFIG_XEN=y
+CONFIG_COMPAT=y
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_HIBERNATION=y
+CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
+CONFIG_ENERGY_MODEL=y
+CONFIG_ARM_PSCI_CPUIDLE=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPUFREQ_DT=y
+CONFIG_ACPI_CPPC_CPUFREQ=m
+CONFIG_ARM_SCPI_CPUFREQ=y
+CONFIG_ARM_IMX_CPUFREQ_DT=m
+CONFIG_ARM_SCMI_CPUFREQ=y
+CONFIG_ACPI=y
+CONFIG_ACPI_HOTPLUG_MEMORY=y
+CONFIG_ACPI_HMAT=y
+CONFIG_ACPI_APEI=y
+CONFIG_ACPI_APEI_GHES=y
+CONFIG_ACPI_APEI_PCIEAER=y
+CONFIG_ACPI_APEI_MEMORY_FAILURE=y
+CONFIG_ACPI_APEI_EINJ=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=y
+CONFIG_JUMP_LABEL=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_KSM=y
+CONFIG_MEMORY_FAILURE=y
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IPV6=m
+CONFIG_NETFILTER=y
+CONFIG_BRIDGE_NETFILTER=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NETFILTER_XT_MARK=m
+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
+CONFIG_NETFILTER_XT_TARGET_LOG=m
+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_IP_VS=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_NAT=m
+CONFIG_IP6_NF_TARGET_MASQUERADE=m
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_VLAN_FILTERING=y
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_VLAN_8021Q_MVRP=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBS=m
+CONFIG_NET_SCH_ETF=m
+CONFIG_NET_SCH_TAPRIO=m
+CONFIG_NET_SCH_MQPRIO=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_FLOWER=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_GACT=m
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_GATE=m
+CONFIG_NET_SWITCHDEV=y
+CONFIG_QRTR_SMD=m
+CONFIG_QRTR_TUN=m
+CONFIG_CAN=m
+CONFIG_BT=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_HIDP=m
+# CONFIG_BT_LE is not set
+CONFIG_BT_LEDS=y
+# CONFIG_BT_DEBUGFS is not set
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTUSB_MTK=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_BCM=y
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_BT_HCIUART_MRVL=y
+CONFIG_BT_HCIVHCI=m
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_NXPUART=m
+CONFIG_CFG80211=m
+CONFIG_MAC80211=m
+CONFIG_MAC80211_LEDS=y
+CONFIG_RFKILL=m
+CONFIG_RFKILL_GPIO=m
+CONFIG_NET_9P=y
+CONFIG_NET_9P_VIRTIO=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+CONFIG_PCI_IOV=y
+CONFIG_PCI_PASID=y
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_ACPI=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_PCI_IMX6_HOST=y
+CONFIG_PCI_HISI=y
+CONFIG_PCI_ENDPOINT=y
+CONFIG_PCI_ENDPOINT_CONFIGFS=y
+CONFIG_PCI_EPF_TEST=m
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_BRCMSTB_GISB_ARB=y
+CONFIG_VEXPRESS_CONFIG=y
+CONFIG_MHI_BUS_PCI_GENERIC=m
+CONFIG_ARM_SCMI_PROTOCOL=y
+CONFIG_ARM_SCPI_PROTOCOL=y
+CONFIG_EFI_CAPSULE_LOADER=y
+CONFIG_IMX_DSP=m
+CONFIG_IMX_SCU=y
+CONFIG_IMX_SCU_PD=y
+CONFIG_GNSS=m
+CONFIG_GNSS_MTK_SERIAL=m
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_NBD=m
+CONFIG_VIRTIO_BLK=y
+CONFIG_BLK_DEV_NVME=m
+CONFIG_NVME_VERBOSE_ERRORS=y
+CONFIG_NVME_HWMON=y
+CONFIG_SRAM=y
+CONFIG_PCI_ENDPOINT_TEST=m
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=m
+CONFIG_UACCE=m
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_HISI_SAS=y
+CONFIG_SCSI_HISI_SAS_PCI=y
+CONFIG_MEGARAID_SAS=y
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_ATA=y
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_DWC=m
+CONFIG_AHCI_IMX=m
+CONFIG_AHCI_CEVA=y
+CONFIG_SATA_SIL24=y
+CONFIG_PATA_OF_PLATFORM=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_NETDEVICES=y
+CONFIG_MACVLAN=m
+CONFIG_MACVTAP=m
+CONFIG_TUN=y
+CONFIG_VETH=m
+CONFIG_VIRTIO_NET=y
+CONFIG_MHI_NET=m
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_ADAPTEC is not set
+# CONFIG_NET_VENDOR_AGERE is not set
+# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_NET_VENDOR_ALTEON is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AMD is not set
+# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_ATHEROS is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_CADENCE is not set
+# CONFIG_NET_VENDOR_CAVIUM is not set
+# CONFIG_NET_VENDOR_CHELSIO is not set
+# CONFIG_NET_VENDOR_CISCO is not set
+# CONFIG_NET_VENDOR_CORTINA is not set
+# CONFIG_NET_VENDOR_DEC is not set
+# CONFIG_NET_VENDOR_DLINK is not set
+# CONFIG_NET_VENDOR_EMULEX is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+CONFIG_FEC=y
+CONFIG_FSL_XGMAC_MDIO=y
+CONFIG_FSL_ENETC=y
+CONFIG_FSL_ENETC_VF=y
+CONFIG_FSL_ENETC_QOS=y
+# CONFIG_NET_VENDOR_GOOGLE is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_HUAWEI is not set
+CONFIG_E1000=y
+CONFIG_E1000E=y
+CONFIG_IGB=y
+CONFIG_IGBVF=y
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_MYRI is not set
+# CONFIG_NET_VENDOR_NI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETERION is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
+# CONFIG_NET_VENDOR_NVIDIA is not set
+# CONFIG_NET_VENDOR_OKI is not set
+# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
+# CONFIG_NET_VENDOR_PENSANDO is not set
+# CONFIG_NET_VENDOR_QLOGIC is not set
+# CONFIG_NET_VENDOR_BROCADE is not set
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RDC is not set
+CONFIG_R8169=m
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SILAN is not set
+# CONFIG_NET_VENDOR_SIS is not set
+# CONFIG_NET_VENDOR_SOLARFLARE is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_SOCIONEXT is not set
+CONFIG_STMMAC_ETH=m
+# CONFIG_NET_VENDOR_SUN is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_TEHUTI is not set
+CONFIG_TI_K3_AM65_CPSW_NUSS=y
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_AQUANTIA_PHY=y
+CONFIG_BROADCOM_PHY=m
+CONFIG_BCM54140_PHY=m
+CONFIG_BCM7XXX_PHY=m
+CONFIG_MARVELL_PHY=m
+CONFIG_MARVELL_10G_PHY=y
+CONFIG_MICREL_PHY=y
+CONFIG_MICROSEMI_PHY=y
+CONFIG_AT803X_PHY=y
+CONFIG_REALTEK_PHY=y
+CONFIG_ROCKCHIP_PHY=y
+CONFIG_DP83867_PHY=y
+CONFIG_DP83869_PHY=m
+CONFIG_DP83TD510_PHY=y
+CONFIG_VITESSE_PHY=y
+CONFIG_CAN_FLEXCAN=m
+CONFIG_CAN_M_CAN=m
+CONFIG_CAN_M_CAN_PLATFORM=m
+CONFIG_CAN_MCP251XFD=m
+CONFIG_MDIO_BCM_UNIMAC=y
+CONFIG_MDIO_GPIO=y
+CONFIG_MDIO_THUNDER=y
+CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y
+CONFIG_MDIO_BUS_MUX_MMIOREG=y
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9800=m
+CONFIG_USB_NET_SMSC75XX=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_WLAN_VENDOR_ADMTEK is not set
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_ATH10K_SDIO=m
+CONFIG_WCN36XX=m
+CONFIG_ATH11K=m
+CONFIG_ATH11K_AHB=m
+CONFIG_ATH11K_PCI=m
+# CONFIG_WLAN_VENDOR_ATMEL is not set
+CONFIG_BRCMFMAC=m
+# CONFIG_WLAN_VENDOR_CISCO is not set
+# CONFIG_WLAN_VENDOR_INTEL is not set
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_USB=m
+CONFIG_MT7921E=m
+# CONFIG_WLAN_VENDOR_RALINK is not set
+# CONFIG_WLAN_VENDOR_RSI is not set
+# CONFIG_WLAN_VENDOR_ST is not set
+CONFIG_WL18XX=m
+CONFIG_WLCORE_SDIO=m
+# CONFIG_WLAN_VENDOR_ZYDAS is not set
+# CONFIG_WLAN_VENDOR_QUANTENNA is not set
+CONFIG_WWAN=m
+CONFIG_MHI_WWAN_CTRL=m
+CONFIG_MHI_WWAN_MBIM=m
+CONFIG_INPUT_EVDEV=y
+CONFIG_KEYBOARD_ADC=m
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_SNVS_PWRKEY=m
+CONFIG_KEYBOARD_IMX_SC_KEY=m
+CONFIG_KEYBOARD_CROS_EC=y
+CONFIG_KEYBOARD_MTK_PMIC=m
+CONFIG_MOUSE_ELAN_I2C=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ATMEL_MXT=m
+CONFIG_TOUCHSCREEN_GOODIX=m
+CONFIG_TOUCHSCREEN_ELAN=m
+CONFIG_TOUCHSCREEN_EDT_FT5X06=m
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_BBNSM_PWRKEY=m
+CONFIG_INPUT_TPS65219_PWRBUTTON=y
+CONFIG_INPUT_PWM_BEEPER=m
+CONFIG_INPUT_PWM_VIBRA=m
+CONFIG_INPUT_RK805_PWRKEY=m
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_AMBAKMI=y
+CONFIG_LEGACY_PTY_COUNT=16
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_8250_OMAP=y
+CONFIG_SERIAL_8250_NR_UARTS=6
+CONFIG_SERIAL_8250_RUNTIME_UARTS=6
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_XILINX_PS_UART=y
+CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_SERIAL_FSL_LINFLEXUART=y
+CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
+CONFIG_RPMSG_TTY=m
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_VIRTIO_CONSOLE=y
+CONFIG_IPMI_HANDLER=m
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_VIRTIO=y
+CONFIG_TCG_TPM=y
+CONFIG_TCG_TIS=m
+CONFIG_TCG_TIS_SPI=m
+CONFIG_TCG_TIS_SPI_CR50=y
+CONFIG_TCG_TIS_I2C_CR50=m
+CONFIG_TCG_TIS_I2C_INFINEON=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
+CONFIG_I2C_MUX_PCA954x=y
+CONFIG_I2C_CADENCE=m
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
+CONFIG_I2C_GPIO=m
+CONFIG_I2C_IMX=y
+CONFIG_I2C_IMX_LPI2C=y
+CONFIG_I2C_OMAP=y
+CONFIG_I2C_RK3X=y
+CONFIG_I2C_CROS_EC_TUNNEL=y
+CONFIG_SPI=y
+CONFIG_SPI_CADENCE_QUADSPI=y
+CONFIG_SPI_DESIGNWARE=m
+CONFIG_SPI_DW_DMA=y
+CONFIG_SPI_DW_MMIO=m
+CONFIG_SPI_FSL_LPSPI=y
+CONFIG_SPI_FSL_QUADSPI=y
+CONFIG_SPI_NXP_FLEXSPI=y
+CONFIG_SPI_IMX=m
+CONFIG_SPI_OMAP24XX=m
+CONFIG_SPI_PL022=y
+CONFIG_SPI_SPIDEV=y
+CONFIG_SPMI=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_MAX77620=y
+CONFIG_PINCTRL_RK805=m
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_PINCTRL_IMX8MM=y
+CONFIG_PINCTRL_IMX8MN=y
+CONFIG_PINCTRL_IMX8MP=y
+CONFIG_PINCTRL_IMX8MQ=y
+CONFIG_PINCTRL_IMX8QM=y
+CONFIG_PINCTRL_IMX8QXP=y
+CONFIG_PINCTRL_IMX8DXL=y
+CONFIG_PINCTRL_IMX8ULP=y
+CONFIG_PINCTRL_IMX93=y
+CONFIG_GPIO_ALTERA=m
+CONFIG_GPIO_DAVINCI=y
+CONFIG_GPIO_DWAPB=y
+CONFIG_GPIO_MB86S7X=y
+CONFIG_GPIO_MXC=y
+CONFIG_GPIO_PL061=y
+CONFIG_GPIO_SYSCON=y
+CONFIG_GPIO_WCD934X=m
+CONFIG_GPIO_XGENE=y
+CONFIG_GPIO_MAX732X=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X_IRQ=y
+CONFIG_GPIO_BD9571MWV=m
+CONFIG_GPIO_MAX77620=y
+CONFIG_POWER_RESET_BRCMSTB=y
+CONFIG_POWER_RESET_XGENE=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SYSCON_REBOOT_MODE=y
+CONFIG_NVMEM_REBOOT_MODE=m
+CONFIG_BATTERY_QCOM_BATTMGR=m
+CONFIG_BATTERY_SBS=m
+CONFIG_BATTERY_BQ27XXX=y
+CONFIG_BATTERY_MAX17042=m
+CONFIG_CHARGER_MT6360=m
+CONFIG_CHARGER_BQ25890=m
+CONFIG_CHARGER_BQ25980=m
+CONFIG_CHARGER_RK817=m
+CONFIG_SENSORS_ARM_SCMI=y
+CONFIG_SENSORS_ARM_SCPI=y
+CONFIG_SENSORS_GPIO_FAN=m
+CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_PWM_FAN=m
+CONFIG_SENSORS_INA2XX=m
+CONFIG_SENSORS_INA3221=m
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_THERMAL_EMULATION=y
+CONFIG_IMX_SC_THERMAL=m
+CONFIG_IMX8MM_THERMAL=m
+CONFIG_K3_THERMAL=y
+CONFIG_QORIQ_THERMAL=m
+CONFIG_GENERIC_ADC_THERMAL=m
+CONFIG_WATCHDOG=y
+CONFIG_ARM_SP805_WATCHDOG=y
+CONFIG_ARM_SBSA_WATCHDOG=y
+CONFIG_DW_WATCHDOG=y
+CONFIG_K3_RTI_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_IMX_SC_WDT=m
+CONFIG_IMX7ULP_WDT=m
+CONFIG_ARM_SMC_WATCHDOG=y
+CONFIG_MFD_BD9571MWV=y
+CONFIG_MFD_AXP20X_I2C=y
+CONFIG_MFD_HI6421_PMIC=y
+CONFIG_MFD_MAX77620=y
+CONFIG_MFD_MT6360=y
+CONFIG_MFD_MT6397=y
+CONFIG_MFD_RK8XX_I2C=y
+CONFIG_MFD_RK8XX_SPI=y
+CONFIG_MFD_SEC_CORE=y
+CONFIG_MFD_TI_AM335X_TSCADC=m
+CONFIG_MFD_TPS65219=y
+CONFIG_MFD_ROHM_BD718XX=y
+CONFIG_MFD_WCD934X=m
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_AXP20X=y
+CONFIG_REGULATOR_BD718XX=y
+CONFIG_REGULATOR_BD9571MWV=y
+CONFIG_REGULATOR_CROS_EC=y
+CONFIG_REGULATOR_FAN53555=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_HI6421V530=y
+CONFIG_REGULATOR_MAX77620=y
+CONFIG_REGULATOR_MAX8973=y
+CONFIG_REGULATOR_MP8859=y
+CONFIG_REGULATOR_MT6315=m
+CONFIG_REGULATOR_MT6357=y
+CONFIG_REGULATOR_MT6358=y
+CONFIG_REGULATOR_MT6359=y
+CONFIG_REGULATOR_MT6360=y
+CONFIG_REGULATOR_MT6397=y
+CONFIG_REGULATOR_PCA9450=y
+CONFIG_REGULATOR_PF8X00=y
+CONFIG_REGULATOR_PFUZE100=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_REGULATOR_QCOM_SPMI=y
+CONFIG_REGULATOR_RAA215300=y
+CONFIG_REGULATOR_RK808=y
+CONFIG_REGULATOR_S2MPS11=y
+CONFIG_REGULATOR_TPS65132=m
+CONFIG_REGULATOR_TPS65219=y
+CONFIG_REGULATOR_VCTRL=m
+CONFIG_MEDIA_SUPPORT=m
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_PLATFORM_SUPPORT=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_VIDEO_AMPHION_VPU=m
+CONFIG_VIDEO_IMX7_CSI=m
+CONFIG_VIDEO_IMX8MQ_MIPI_CSI2=m
+CONFIG_VIDEO_IMX_MIPI_CSIS=m
+CONFIG_VIDEO_IMX8_ISI=m
+CONFIG_VIDEO_IMX8_ISI_M2M=y
+CONFIG_VIDEO_IMX8_JPEG=m
+CONFIG_VIDEO_HANTRO=m
+CONFIG_VIDEO_AR0521=m
+CONFIG_VIDEO_IMX219=m
+CONFIG_VIDEO_IMX290=m
+CONFIG_VIDEO_IMX412=m
+CONFIG_VIDEO_OV5640=m
+CONFIG_VIDEO_OV5645=m
+CONFIG_VIDEO_OV5647=m
+CONFIG_VIDEO_OV9282=m
+CONFIG_DRM=m
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_I2C_SIL164=m
+CONFIG_DRM_I2C_NXP_TDA998X=m
+CONFIG_DRM_HDLCD=m
+CONFIG_DRM_MALI_DISPLAY=m
+CONFIG_DRM_KOMEDA=m
+CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m
+CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_SIMPLE=m
+CONFIG_DRM_PANEL_EDP=m
+CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
+CONFIG_DRM_PANEL_RAYDIUM_RM67191=m
+CONFIG_DRM_PANEL_SITRONIX_ST7703=m
+CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
+CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
+CONFIG_DRM_DISPLAY_CONNECTOR=m
+CONFIG_DRM_FSL_LDB=m
+CONFIG_DRM_LONTIUM_LT8912B=m
+CONFIG_DRM_LONTIUM_LT9611=m
+CONFIG_DRM_LONTIUM_LT9611UXC=m
+CONFIG_DRM_ITE_IT66121=m
+CONFIG_DRM_NWL_MIPI_DSI=m
+CONFIG_DRM_PARADE_PS8640=m
+CONFIG_DRM_SAMSUNG_DSIM=m
+CONFIG_DRM_SII902X=m
+CONFIG_DRM_SIMPLE_BRIDGE=m
+CONFIG_DRM_THINE_THC63LVD1024=m
+CONFIG_DRM_TOSHIBA_TC358767=m
+CONFIG_DRM_TOSHIBA_TC358768=m
+CONFIG_DRM_TI_TFP410=m
+CONFIG_DRM_TI_SN65DSI83=m
+CONFIG_DRM_TI_SN65DSI86=m
+CONFIG_DRM_ANALOGIX_ANX7625=m
+CONFIG_DRM_I2C_ADV7511=m
+CONFIG_DRM_I2C_ADV7511_AUDIO=y
+CONFIG_DRM_CDNS_MHDP8546=m
+CONFIG_DRM_IMX8QM_LDB=m
+CONFIG_DRM_IMX8QXP_LDB=m
+CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=m
+CONFIG_DRM_IMX_DCSS=m
+CONFIG_DRM_ETNAVIV=m
+CONFIG_DRM_MXSFB=m
+CONFIG_DRM_IMX_LCDIF=m
+CONFIG_DRM_TIDSS=m
+CONFIG_FB=y
+CONFIG_FB_EFI=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_PWM=m
+CONFIG_BACKLIGHT_LP855X=m
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_ALOOP=m
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_FSL_ASRC=m
+CONFIG_SND_SOC_FSL_MQS=m
+CONFIG_SND_SOC_FSL_MICFIL=m
+CONFIG_SND_SOC_FSL_EASRC=m
+CONFIG_SND_SOC_FSL_XCVR=m
+CONFIG_SND_SOC_FSL_RPMSG=m
+CONFIG_SND_IMX_SOC=m
+CONFIG_SND_SOC_IMX_SGTL5000=m
+CONFIG_SND_SOC_IMX_SPDIF=m
+CONFIG_SND_SOC_FSL_ASOC_CARD=m
+CONFIG_SND_SOC_IMX_AUDMIX=m
+CONFIG_SND_SOC_IMX_HDMI=m
+CONFIG_SND_SOC_J721E_EVM=m
+CONFIG_SND_SOC_ADAU7002=m
+CONFIG_SND_SOC_AK4613=m
+CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CROS_EC_CODEC=m
+CONFIG_SND_SOC_DA7213=m
+CONFIG_SND_SOC_DMIC=m
+CONFIG_SND_SOC_ES7134=m
+CONFIG_SND_SOC_ES7241=m
+CONFIG_SND_SOC_ES8316=m
+CONFIG_SND_SOC_GTM601=m
+CONFIG_SND_SOC_MAX98357A=m
+CONFIG_SND_SOC_MAX98927=m
+CONFIG_SND_SOC_RK817=m
+CONFIG_SND_SOC_RT5640=m
+CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
+CONFIG_SND_SOC_SIMPLE_MUX=m
+CONFIG_SND_SOC_SPDIF=m
+CONFIG_SND_SOC_TAS2552=m
+CONFIG_SND_SOC_TAS571X=m
+CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
+CONFIG_SND_SOC_TLV320AIC3X_I2C=m
+CONFIG_SND_SOC_TS3A227E=m
+CONFIG_SND_SOC_WM8904=m
+CONFIG_SND_SOC_MT6358=m
+CONFIG_SND_SOC_NAU8822=m
+CONFIG_SND_SOC_LPASS_WSA_MACRO=m
+CONFIG_SND_SOC_LPASS_VA_MACRO=m
+CONFIG_SND_SOC_LPASS_RX_MACRO=m
+CONFIG_SND_SOC_LPASS_TX_MACRO=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SND_AUDIO_GRAPH_CARD=m
+CONFIG_SND_AUDIO_GRAPH_CARD2=m
+CONFIG_HID_MULTITOUCH=m
+CONFIG_USB_HIDDEV=y
+CONFIG_I2C_HID_ACPI=m
+CONFIG_I2C_HID_OF=m
+CONFIG_USB_CONN_GPIO=y
+CONFIG_USB=y
+CONFIG_USB_OTG=y
+CONFIG_USB_MON=m
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_PCI_RENESAS=m
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_ACM=m
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CDNS_SUPPORT=m
+CONFIG_USB_CDNS3=m
+CONFIG_USB_CDNS3_GADGET=y
+CONFIG_USB_CDNS3_HOST=y
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_DWC2=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_ISP1760=y
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_HUB_USB251XB=y
+CONFIG_USB_HSIC_USB3503=y
+CONFIG_USB_ONBOARD_HUB=m
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_ULPI=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_SNP_UDC_PLAT=y
+CONFIG_USB_BDC_UDC=y
+CONFIG_USB_CONFIGFS=m
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_TYPEC=m
+CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TCPCI=m
+CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC_UCSI=m
+CONFIG_UCSI_CCG=m
+CONFIG_UCSI_PMIC_GLINK=m
+CONFIG_TYPEC_TPS6598X=m
+CONFIG_TYPEC_HD3SS3220=m
+CONFIG_TYPEC_MUX_FSA4480=m
+CONFIG_TYPEC_MUX_GPIO_SBU=m
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK_MINORS=32
+CONFIG_MMC_ARMMMCI=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ACPI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ARASAN=y
+CONFIG_MMC_SDHCI_OF_ESDHC=y
+CONFIG_MMC_SDHCI_OF_DWCMSHC=y
+CONFIG_MMC_SDHCI_CADENCE=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+CONFIG_MMC_SDHCI_F_SDH30=y
+CONFIG_MMC_SPI=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_DW_EXYNOS=y
+CONFIG_MMC_DW_HI3798CV200=y
+CONFIG_MMC_DW_K3=y
+CONFIG_MMC_MTK=y
+CONFIG_MMC_SDHCI_XENON=y
+CONFIG_MMC_SDHCI_AM654=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFS_BSG=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_CDNS_PLATFORM=m
+CONFIG_SCSI_UFS_TI_J721E=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_MULTICOLOR=m
+CONFIG_LEDS_LM3692X=m
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_PWM=y
+CONFIG_LEDS_SYSCON=y
+CONFIG_LEDS_QCOM_LPG=m
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+CONFIG_LEDS_TRIGGER_PANIC=y
+CONFIG_EDAC=y
+CONFIG_EDAC_GHES=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_HYM8563=m
+CONFIG_RTC_DRV_MAX77686=y
+CONFIG_RTC_DRV_RK808=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_PCF85063=m
+CONFIG_RTC_DRV_PCF85363=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_BQ32K=m
+CONFIG_RTC_DRV_RX8581=m
+CONFIG_RTC_DRV_RV3028=m
+CONFIG_RTC_DRV_RV8803=m
+CONFIG_RTC_DRV_S5M=y
+CONFIG_RTC_DRV_DS3232=y
+CONFIG_RTC_DRV_PCF2127=m
+CONFIG_RTC_DRV_EFI=y
+CONFIG_RTC_DRV_CROS_EC=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_RTC_DRV_SNVS=m
+CONFIG_RTC_DRV_BBNSM=m
+CONFIG_RTC_DRV_IMX_SC=m
+CONFIG_RTC_DRV_MT6397=m
+CONFIG_RTC_DRV_TI_K3=m
+CONFIG_DMADEVICES=y
+CONFIG_BCM_SBA_RAID=m
+CONFIG_FSL_EDMA=y
+CONFIG_IMX_SDMA=m
+CONFIG_MV_XOR_V2=y
+CONFIG_PL330_DMA=y
+CONFIG_QCOM_HIDMA_MGMT=y
+CONFIG_QCOM_HIDMA=y
+CONFIG_TI_K3_UDMA=y
+CONFIG_TI_K3_UDMA_GLUE_LAYER=y
+CONFIG_VFIO=y
+CONFIG_VFIO_PCI=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_VIRTIO_BALLOON=y
+CONFIG_VIRTIO_MMIO=y
+CONFIG_XEN_GNTDEV=y
+CONFIG_XEN_GRANT_DEV_ALLOC=y
+CONFIG_STAGING=y
+CONFIG_STAGING_MEDIA=y
+CONFIG_VIDEO_MAX96712=m
+CONFIG_CHROME_PLATFORMS=y
+CONFIG_CROS_EC=y
+CONFIG_CROS_EC_I2C=y
+CONFIG_CROS_EC_RPMSG=m
+CONFIG_CROS_EC_SPI=y
+CONFIG_CROS_EC_CHARDEV=m
+CONFIG_CLK_VEXPRESS_OSC=y
+CONFIG_COMMON_CLK_RK808=y
+CONFIG_COMMON_CLK_SCMI=y
+CONFIG_COMMON_CLK_SCPI=y
+CONFIG_COMMON_CLK_CS2000_CP=y
+CONFIG_COMMON_CLK_S2MPS11=y
+CONFIG_COMMON_CLK_XGENE=y
+CONFIG_COMMON_CLK_PWM=y
+CONFIG_COMMON_CLK_RS9_PCIE=y
+CONFIG_COMMON_CLK_VC5=y
+CONFIG_COMMON_CLK_BD718XX=m
+CONFIG_CLK_IMX8MM=y
+CONFIG_CLK_IMX8MN=y
+CONFIG_CLK_IMX8MP=y
+CONFIG_CLK_IMX8MQ=y
+CONFIG_CLK_IMX8QXP=y
+CONFIG_CLK_IMX8ULP=y
+CONFIG_CLK_IMX93=y
+CONFIG_TI_SCI_CLK=y
+CONFIG_HWSPINLOCK=y
+CONFIG_ARM_MHU=y
+CONFIG_IMX_MBOX=y
+CONFIG_PLATFORM_MHU=y
+CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
+CONFIG_IOMMU_IO_PGTABLE_DART=y
+CONFIG_ARM_SMMU=y
+CONFIG_ARM_SMMU_V3=y
+CONFIG_REMOTEPROC=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_IMX_REMOTEPROC=y
+CONFIG_IMX_DSP_REMOTEPROC=m
+CONFIG_TI_K3_DSP_REMOTEPROC=m
+CONFIG_TI_K3_R5_REMOTEPROC=m
+CONFIG_RPMSG_CHAR=m
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_QCOM_GLINK_RPM=y
+CONFIG_RPMSG_VIRTIO=y
+CONFIG_SOUNDWIRE=m
+CONFIG_SOUNDWIRE_QCOM=m
+CONFIG_SOC_BRCMSTB=y
+CONFIG_FSL_RCPM=y
+CONFIG_QCOM_PMIC_GLINK=m
+CONFIG_TI_SCI_PM_DOMAINS=y
+CONFIG_TI_PRUSS=m
+CONFIG_DEVFREQ_GOV_PASSIVE=m
+CONFIG_ARM_IMX_BUS_DEVFREQ=y
+CONFIG_ARM_IMX8M_DDRC_DEVFREQ=m
+CONFIG_EXTCON_GPIO=y
+CONFIG_EXTCON_PTN5150=m
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_EXTCON_USBC_CROS_EC=y
+CONFIG_MEMORY=y
+CONFIG_IIO=y
+CONFIG_IMX8QXP_ADC=m
+CONFIG_MAX9611=m
+CONFIG_QCOM_SPMI_VADC=m
+CONFIG_QCOM_SPMI_ADC5=m
+CONFIG_TI_ADS1015=y
+CONFIG_TI_AM335X_ADC=m
+CONFIG_IIO_CROS_EC_SENSORS_CORE=m
+CONFIG_IIO_CROS_EC_SENSORS=m
+CONFIG_IIO_ST_LSM6DSX=m
+CONFIG_IIO_CROS_EC_LIGHT_PROX=m
+CONFIG_SENSORS_ISL29018=m
+CONFIG_VCNL4000=m
+CONFIG_IIO_ST_MAGN_3AXIS=m
+CONFIG_IIO_CROS_EC_BARO=m
+CONFIG_MPL3115=m
+CONFIG_PWM=y
+CONFIG_PWM_CROS_EC=m
+CONFIG_PWM_IMX27=m
+CONFIG_PWM_TIECAP=m
+CONFIG_PWM_TIEHRPWM=m
+CONFIG_RESET_IMX7=y
+CONFIG_RESET_TI_SCI=y
+CONFIG_PHY_CAN_TRANSCEIVER=m
+CONFIG_PHY_CADENCE_TORRENT=m
+CONFIG_PHY_CADENCE_SIERRA=m
+CONFIG_PHY_MIXEL_LVDS_PHY=m
+CONFIG_PHY_MIXEL_MIPI_DPHY=m
+CONFIG_PHY_FSL_IMX8M_PCIE=y
+CONFIG_PHY_QCOM_USB_HS=m
+CONFIG_PHY_SAMSUNG_USB2=y
+CONFIG_PHY_AM654_SERDES=m
+CONFIG_PHY_J721E_WIZ=m
+CONFIG_ARM_CCI_PMU=m
+CONFIG_ARM_CCN=m
+CONFIG_ARM_CMN=m
+CONFIG_ARM_SMMU_V3_PMU=m
+CONFIG_ARM_DSU_PMU=m
+CONFIG_FSL_IMX8_DDR_PMU=m
+CONFIG_ARM_SPE_PMU=m
+CONFIG_ARM_DMC620_PMU=m
+CONFIG_HISI_PMU=y
+CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU=m
+CONFIG_NVMEM_LAYOUT_SL28_VPD=m
+CONFIG_NVMEM_IMX_OCOTP=y
+CONFIG_NVMEM_IMX_OCOTP_ELE=m
+CONFIG_NVMEM_IMX_OCOTP_SCU=y
+CONFIG_NVMEM_RMEM=m
+CONFIG_NVMEM_SNVS_LPGPR=y
+CONFIG_NVMEM_SPMI_SDAM=m
+CONFIG_FPGA=y
+CONFIG_FPGA_MGR_ALTERA_CVP=m
+CONFIG_FPGA_BRIDGE=m
+CONFIG_ALTERA_FREEZE_BRIDGE=m
+CONFIG_FPGA_REGION=m
+CONFIG_OF_FPGA_REGION=m
+CONFIG_TEE=y
+CONFIG_OPTEE=y
+CONFIG_MUX_GPIO=m
+CONFIG_MUX_MMIO=y
+CONFIG_SLIM_QCOM_CTRL=m
+CONFIG_INTERCONNECT=y
+CONFIG_INTERCONNECT_IMX=y
+CONFIG_INTERCONNECT_IMX8MM=m
+CONFIG_INTERCONNECT_IMX8MN=m
+CONFIG_INTERCONNECT_IMX8MQ=m
+CONFIG_INTERCONNECT_IMX8MP=y
+CONFIG_COUNTER=m
+CONFIG_HTE=y
+CONFIG_EXFAT_FS=m
+CONFIG_EXT2_FS=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_BTRFS_FS=m
+CONFIG_BTRFS_FS_POSIX_ACL=y
+CONFIG_FANOTIFY=y
+CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
+CONFIG_QUOTA=y
+CONFIG_AUTOFS_FS=y
+CONFIG_FUSE_FS=m
+CONFIG_CUSE=m
+CONFIG_VFAT_FS=y
+CONFIG_NTFS_FS=m
+CONFIG_NTFS_RW=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_HUGETLBFS=y
+CONFIG_EFIVAR_FS=y
+CONFIG_SQUASHFS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
+CONFIG_ROOT_NFS=y
+CONFIG_9P_FS=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_SECURITY=y
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_ECHAINIV=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_ZSTD=m
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_USER_API_RNG=m
+CONFIG_CRYPTO_CHACHA20_NEON=m
+CONFIG_CRYPTO_GHASH_ARM64_CE=y
+CONFIG_CRYPTO_SHA1_ARM64_CE=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+CONFIG_CRYPTO_SHA512_ARM64_CE=m
+CONFIG_CRYPTO_SHA3_ARM64=m
+CONFIG_CRYPTO_SM3_ARM64_CE=m
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
+CONFIG_CRYPTO_AES_ARM64_BS=m
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
+CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m
+CONFIG_CRYPTO_DEV_FSL_CAAM=m
+CONFIG_CRYPTO_DEV_CCREE=m
+CONFIG_CRYPTO_DEV_HISI_SEC2=m
+CONFIG_CRYPTO_DEV_HISI_ZIP=m
+CONFIG_CRYPTO_DEV_HISI_HPRE=m
+CONFIG_CRYPTO_DEV_HISI_TRNG=m
+CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m
+CONFIG_CRYPTO_DEV_SA2UL=m
+CONFIG_PACKING=y
+CONFIG_INDIRECT_PIO=y
+CONFIG_CRC_CCITT=m
+CONFIG_DMA_RESTRICTED_POOL=y
+CONFIG_CMA_SIZE_MBYTES=1376
+CONFIG_CMA_SIZE_PERCENTAGE=25
+CONFIG_CMA_SIZE_SEL_MIN=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
+CONFIG_DEBUG_INFO_REDUCED=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_FS=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_FTRACE is not set
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
+CONFIG_CORESIGHT=m
+CONFIG_CORESIGHT_LINK_AND_SINK_TMC=m
+CONFIG_CORESIGHT_CATU=m
+CONFIG_CORESIGHT_SINK_TPIU=m
+CONFIG_CORESIGHT_SINK_ETBV10=m
+CONFIG_CORESIGHT_STM=m
+CONFIG_CORESIGHT_CPU_DEBUG=m
+CONFIG_CORESIGHT_CTI=m
+CONFIG_MEMTEST=y
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/toradex_aarch64.config b/recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/toradex_aarch64.config
new file mode 100644
index 0000000..2e57e3e
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/aarch64/toradex_aarch64.config
@@ -0,0 +1,527 @@
+## This file contains the differences to arm64 defconfig
+## it is used to generate toradex defconfig with the following command
+##
+## make defconfig
+## scripts/kconfig/merge_config.sh .config toradex_aarch64.config
+## make savedefconfig
+
+
+##
+## Section to enable kernel features
+##
+
+# CPU Frequency scaling
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+# Usefull for debugging
+CONFIG_DYNAMIC_DEBUG=y
+
+# Filesystems widely used
+CONFIG_EXFAT_FS=m
+CONFIG_NTFS_FS=m
+CONFIG_NTFS_RW=y
+
+# NVMe debugging/features
+CONFIG_NVME_HWMON=y
+CONFIG_NVME_VERBOSE_ERRORS=y
+
+# Systemd, https://github.com/systemd/systemd/blob/main/README
+CONFIG_DEVTMPFS=y
+CONFIG_CGROUPS=y
+CONFIG_INOTIFY_USER=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EPOLL=y
+CONFIG_UNIX=y
+CONFIG_SYSFS=y
+CONFIG_PROC_FS=y
+CONFIG_FHANDLE=y
+CONFIG_SYSFS_DEPRECATED=n
+CONFIG_UEVENT_HELPER=n
+CONFIG_FW_LOADER_USER_HELPER=n
+CONFIG_NET_NS=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_BPF=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_RT_GROUP_SCHED=n
+
+# Spidev, force the driver to be builtin
+CONFIG_SPI_SPIDEV=y
+
+# Extcon used for dual-role USB switching
+CONFIG_EXTCON_GPIO=y
+
+# Gadgetfs is used for RNDIS (Ethernet over USB device)
+CONFIG_USB_GADGETFS=m
+
+# ADC used on Verdin boards
+CONFIG_TI_ADS1015=y
+
+# RTC widely used on Toradex eval-boards
+CONFIG_RTC_DRV_DS1307=y
+
+# Support HID devices
+# This suppresses also the warning "hid-generic: device has no listeners, quitting"
+CONFIG_USB_HIDDEV=y
+
+# USB hub used on modules and or eval-boards
+CONFIG_USB_HUB_USB251XB=y
+
+# Enable usbmon which allows capturing USB traffic using tcpdump
+CONFIG_USB_MON=m
+
+# Thermal emergency poweroff
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+
+# Wi-Fi and Bluetooth used on modules plus related useful settings
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIUART_MRVL=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_NXPUART=m
+CONFIG_BT_MRVL=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT=m
+CONFIG_CFG80211=m
+CONFIG_MAC80211=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_USB=m
+CONFIG_MWIFIEX=m
+CONFIG_R8188EU=m
+CONFIG_RFKILL_GPIO=m
+CONFIG_RFKILL=m
+
+# Verdin DSI Devices
+CONFIG_PWM=y
+CONFIG_DRM_LONTIUM_LT8912B=m
+CONFIG_DRM_TI_SN65DSI83=m
+
+# Verdin EEPROM
+CONFIG_EEPROM_AT24=y
+
+# Verdin Serial 8250 UARTs
+CONFIG_SERIAL_8250_NR_UARTS=6
+CONFIG_SERIAL_8250_RUNTIME_UARTS=6
+
+# Cameras
+CONFIG_VIDEO_AR0521=m
+CONFIG_VIDEO_IMX290=m
+CONFIG_VIDEO_OV5647=m
+CONFIG_VIDEO_OV9282=m
+CONFIG_VIDEO_TC358743=m
+
+# CMA
+CONFIG_CMA_SIZE_MBYTES=1376
+CONFIG_CMA_SIZE_PERCENTAGE=25
+# CONFIG_CMA_SIZE_SEL_MBYTES is not set
+# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
+CONFIG_CMA_SIZE_SEL_MIN=y
+
+# Verdin display adapters
+CONFIG_DRM_LONTIUM_LT8912B=m
+CONFIG_DRM_TI_SN65DSI83=m
+CONFIG_DRM_TOSHIBA_TC358767=m
+
+##
+## Section to enable i.MX aarch64 SoC
+##
+
+# GPU
+CONFIG_DRM_ETNAVIV=m
+
+# RPMsg and RemoteProc for HMP
+CONFIG_IMX_REMOTEPROC=y
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_VIRTIO=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_RPMSG_TTY=m
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
+
+# Enable i.MX PCIe
+CONFIG_PCI_IMX6_HOST=y
+CONFIG_PCI_IMX6_EP=m
+
+# Enable i.MX 8M series SoC drivers
+CONFIG_DRM_FSL_LDB=m
+CONFIG_DRM_IMX_LCDIF=m
+CONFIG_SND_SOC_FSL_AUD2HTX=m
+CONFIG_SND_SOC_FSL_RPMSG=m
+CONFIG_SND_SOC_FSL_XCVR=m
+CONFIG_SND_SOC_IMX_HDMI=m
+
+# Enable i.MX 8/8X series drivers
+CONFIG_AHCI_IMX=m
+CONFIG_DRM_IMX8QM_LDB=m
+CONFIG_DRM_IMX8QXP_LDB=m
+CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=m
+CONFIG_IMX8QXP_ADC=m
+CONFIG_PHY_MIXEL_LVDS_PHY=m
+CONFIG_SND_SOC_FSL_MQS=m
+CONFIG_VIDEO_AMPHION_VPU=m
+CONFIG_VIDEO_IMX8_JPEG=m
+CONFIG_VIDEO_IMX8MQ_MIPI_CSI2=m
+
+# Optional HiFi4 DSP
+CONFIG_IMX_DSP=m
+CONFIG_IMX_DSP_REMOTEPROC=m
+
+
+##
+## Section to enable TI aarch64 SoC
+##
+
+CONFIG_K3_RTI_WATCHDOG=y
+CONFIG_K3_THERMAL=y
+
+# Verdin PMIC
+CONFIG_MFD_TPS65219=y
+CONFIG_REGULATOR_TPS65219=y
+CONFIG_INPUT_TPS65219_PWRBUTTON=y
+
+
+##
+## Section to disable kernel features
+##
+
+# Not used ADC Driver
+CONFIG_IMX93_ADC=n
+
+# Disable architectures and SoCs not used by Toradex
+CONFIG_ARCH_ACTIONS=n
+CONFIG_ARCH_SUNXI=n
+CONFIG_ARCH_ALPINE=n
+CONFIG_ARCH_APPLE=n
+CONFIG_ARCH_BCM=n
+CONFIG_ARCH_BCM2835=n
+CONFIG_ARCH_BCM_IPROC=n
+CONFIG_ARCH_BCMBCA=y
+CONFIG_ARCH_BRCMSTB=n
+CONFIG_ARCH_BERLIN=n
+CONFIG_ARCH_BITMAIN=n
+CONFIG_ARCH_EXYNOS=n
+CONFIG_ARCH_SPARX5=n
+CONFIG_ARCH_LG1K=n
+CONFIG_ARCH_HISI=n
+CONFIG_ARCH_KEEMBAY=n
+CONFIG_ARCH_MEDIATEK=n
+CONFIG_ARCH_MESON=n
+CONFIG_ARCH_MVEBU=n
+CONFIG_ARCH_LAYERSCAPE=n
+CONFIG_ARCH_S32=n
+CONFIG_ARCH_MA35=n
+CONFIG_ARCH_NPCM=n
+CONFIG_ARCH_QCOM=n
+CONFIG_ARCH_REALTEK=n
+CONFIG_ARCH_RENESAS=n
+CONFIG_ARCH_ROCKCHIP=n
+CONFIG_ARCH_SEATTLE=n
+CONFIG_ARCH_INTEL_SOCFPGA=n
+CONFIG_ARCH_STM32=n
+CONFIG_ARCH_SYNQUACER=n
+CONFIG_ARCH_TEGRA=n
+CONFIG_ARCH_TESLA_FSD=n
+CONFIG_ARCH_SPRD=n
+CONFIG_ARCH_THUNDER=n
+CONFIG_ARCH_THUNDER2=n
+CONFIG_ARCH_UNIPHIER=n
+CONFIG_ARCH_VEXPRESS=n
+CONFIG_ARCH_VISCONTI=n
+CONFIG_ARCH_XGENE=n
+CONFIG_ARCH_ZYNQMP=n
+
+# Disable NAND as Toradex uses only eMMC on ARM 64bit boards
+CONFIG_MTD=n
+
+# Disable unnecessary TV stuff
+CONFIG_DRM_NOUVEAU=n
+CONFIG_NET_DSA=n
+CONFIG_NFC=n
+CONFIG_OVERLAY_FS=n
+CONFIG_RC_CORE=n
+CONFIG_MTD_UBI=n
+CONFIG_JFFS2_FS=n
+CONFIG_UBIFS_FS=n
+# Media
+CONFIG_DVB_CORE=n
+CONFIG_DVB_M88DS3103=n
+CONFIG_DVB_MXL5XX=n
+CONFIG_DVB_STB0899=n
+CONFIG_DVB_STB6100=n
+CONFIG_DVB_STV090x=n
+CONFIG_DVB_STV0910=n
+CONFIG_DVB_STV6110x=n
+CONFIG_DVB_STV6111=n
+CONFIG_DVB_DRXK=n
+CONFIG_DVB_MN88472=n
+CONFIG_DVB_MN88473=n
+CONFIG_DVB_SI2165=n
+CONFIG_DVB_TDA18271C2DD=n
+CONFIG_DVB_CX24110=n
+CONFIG_DVB_CX24116=n
+CONFIG_DVB_CX24117=n
+CONFIG_DVB_CX24120=n
+CONFIG_DVB_CX24123=n
+CONFIG_DVB_DS3000=n
+CONFIG_DVB_MB86A16=n
+CONFIG_DVB_MT312=n
+CONFIG_DVB_S5H1420=n
+CONFIG_DVB_SI21XX=n
+CONFIG_DVB_STB6000=n
+CONFIG_DVB_STV0288=n
+CONFIG_DVB_STV0299=n
+CONFIG_DVB_STV0900=n
+CONFIG_DVB_STV6110=n
+CONFIG_DVB_TDA10071=n
+CONFIG_DVB_TDA10086=n
+CONFIG_DVB_TDA8083=n
+CONFIG_DVB_TDA8261=n
+CONFIG_DVB_TDA826X=n
+CONFIG_DVB_TS2020=n
+CONFIG_DVB_TUA6100=n
+CONFIG_DVB_TUNER_CX24113=n
+CONFIG_DVB_TUNER_ITD1000=n
+CONFIG_DVB_VES1X93=n
+CONFIG_DVB_ZL10036=n
+CONFIG_DVB_ZL10039=n
+CONFIG_DVB_AF9013=n
+CONFIG_DVB_CX22700=n
+CONFIG_DVB_CX22702=n
+CONFIG_DVB_CXD2820R=n
+CONFIG_DVB_CXD2841ER=n
+CONFIG_DVB_DIB3000MB=n
+CONFIG_DVB_DIB3000MC=n
+CONFIG_DVB_DIB7000M=n
+CONFIG_DVB_DIB7000P=n
+CONFIG_DVB_DIB9000=n
+CONFIG_DVB_DRXD=n
+CONFIG_DVB_EC100=n
+CONFIG_DVB_L64781=n
+CONFIG_DVB_MT352=n
+CONFIG_DVB_NXT6000=n
+CONFIG_DVB_RTL2830=n
+CONFIG_DVB_RTL2832=n
+CONFIG_DVB_RTL2832_SDR=n
+CONFIG_DVB_S5H1432=n
+CONFIG_DVB_SI2168=n
+CONFIG_DVB_SP887X=n
+CONFIG_DVB_STV0367=n
+CONFIG_DVB_TDA10048=n
+CONFIG_DVB_TDA1004X=n
+CONFIG_DVB_ZD1301_DEMOD=n
+CONFIG_DVB_ZL10353=n
+CONFIG_DVB_CXD2880=n
+CONFIG_DVB_STV0297=n
+CONFIG_DVB_TDA10021=n
+CONFIG_DVB_TDA10023=n
+CONFIG_DVB_VES1820=n
+CONFIG_DVB_AU8522=n
+CONFIG_DVB_AU8522_DTV=n
+CONFIG_DVB_AU8522_V4L=n
+CONFIG_DVB_BCM3510=n
+CONFIG_DVB_LG2160=n
+CONFIG_DVB_LGDT3305=n
+CONFIG_DVB_LGDT3306A=n
+CONFIG_DVB_LGDT330X=n
+CONFIG_DVB_MXL692=n
+CONFIG_DVB_NXT200X=n
+CONFIG_DVB_OR51132=n
+CONFIG_DVB_OR51211=n
+CONFIG_DVB_S5H1409=n
+CONFIG_DVB_S5H1411=n
+CONFIG_DVB_DIB8000=n
+CONFIG_DVB_MB86A20S=n
+CONFIG_DVB_S921=n
+CONFIG_DVB_MN88443X=n
+CONFIG_DVB_TC90522=n
+CONFIG_DVB_PLL=n
+CONFIG_DVB_TUNER_DIB0070=n
+CONFIG_DVB_TUNER_DIB0090=n
+CONFIG_DVB_A8293=n
+CONFIG_DVB_AF9033=n
+CONFIG_DVB_ASCOT2E=n
+CONFIG_DVB_ATBM8830=n
+CONFIG_DVB_HELENE=n
+CONFIG_DVB_HORUS3A=n
+CONFIG_DVB_ISL6405=n
+CONFIG_DVB_ISL6421=n
+CONFIG_DVB_ISL6423=n
+CONFIG_DVB_IX2505V=n
+CONFIG_DVB_LGS8GL5=n
+CONFIG_DVB_LGS8GXX=n
+CONFIG_DVB_LNBH25=n
+CONFIG_DVB_LNBH29=n
+CONFIG_DVB_LNBP21=n
+CONFIG_DVB_LNBP22=n
+CONFIG_DVB_M88RS2000=n
+CONFIG_DVB_TDA665x=n
+CONFIG_DVB_DRX39XYJ=n
+CONFIG_DVB_CXD2099=n
+CONFIG_DVB_SP2=n
+CONFIG_DVB_TUNER_CX24113=n
+CONFIG_DVB_TUNER_ITD1000=n
+CONFIG_DVB_TUNER_DIB0070=n
+CONFIG_DVB_TUNER_DIB0090=n
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=n
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=n
+CONFIG_MEDIA_SDR_SUPPORT=n
+CONFIG_MEDIA_TUNER=n
+CONFIG_MEDIA_TUNER_E4000=n
+CONFIG_MEDIA_TUNER_FC0011=n
+CONFIG_MEDIA_TUNER_FC0012=n
+CONFIG_MEDIA_TUNER_FC0013=n
+CONFIG_MEDIA_TUNER_FC2580=n
+CONFIG_MEDIA_TUNER_IT913X=n
+CONFIG_MEDIA_TUNER_M88RS6000T=n
+CONFIG_MEDIA_TUNER_MAX2165=n
+CONFIG_MEDIA_TUNER_MC44S803=n
+CONFIG_MEDIA_TUNER_MSI001=n
+CONFIG_MEDIA_TUNER_MT2060=n
+CONFIG_MEDIA_TUNER_MT2063=n
+CONFIG_MEDIA_TUNER_MT20XX=n
+CONFIG_MEDIA_TUNER_MT2131=n
+CONFIG_MEDIA_TUNER_MT2266=n
+CONFIG_MEDIA_TUNER_MXL301RF=n
+CONFIG_MEDIA_TUNER_MXL5005S=n
+CONFIG_MEDIA_TUNER_MXL5007T=n
+CONFIG_MEDIA_TUNER_QM1D1B0004=n
+CONFIG_MEDIA_TUNER_QM1D1C0042=n
+CONFIG_MEDIA_TUNER_QT1010=n
+CONFIG_MEDIA_TUNER_R820T=n
+CONFIG_MEDIA_TUNER_SI2157=n
+CONFIG_MEDIA_TUNER_SIMPLE=n
+CONFIG_MEDIA_TUNER_TDA18212=n
+CONFIG_MEDIA_TUNER_TDA18218=n
+CONFIG_MEDIA_TUNER_TDA18250=n
+CONFIG_MEDIA_TUNER_TDA18271=n
+CONFIG_MEDIA_TUNER_TDA827X=n
+CONFIG_MEDIA_TUNER_TDA8290=n
+CONFIG_MEDIA_TUNER_TDA9887=n
+CONFIG_MEDIA_TUNER_TEA5761=n
+CONFIG_MEDIA_TUNER_TEA5767=n
+CONFIG_MEDIA_TUNER_TUA9001=n
+CONFIG_MEDIA_TUNER_XC2028=n
+CONFIG_MEDIA_TUNER_XC4000=n
+CONFIG_MEDIA_TUNER_XC5000=n
+
+# Not used sound drivers
+CONFIG_SND_SOC_MSM8916_WCD_ANALOG=n
+CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=n
+CONFIG_SND_SOC_PCM3168A=n
+CONFIG_SND_SOC_PCM3168A_I2C=n
+CONFIG_SND_SOC_RL6231=n
+CONFIG_SND_SOC_RT5659=n
+CONFIG_SND_SOC_WCD9335=n
+CONFIG_SND_SOC_WCD_MBHC=n
+CONFIG_SND_SOC_WCD934X=n
+CONFIG_SND_SOC_WCD938X=n
+CONFIG_SND_SOC_WCD938X_SDW=n
+CONFIG_SND_SOC_WM8524=n
+CONFIG_SND_SOC_WM8960=n
+CONFIG_SND_SOC_WM8962=n
+CONFIG_SND_SOC_WM8978=n
+CONFIG_SND_SOC_WSA881X=n
+
+# Not used PCI drivers
+CONFIG_PCI_HOST_THUNDER_ECAM=n
+CONFIG_PCI_HOST_THUNDER_PEM=n
+CONFIG_PCI_LAYERSCAPE=n
+CONFIG_PCI_MESON=n
+CONFIG_PCI_XGENE_MSI=n
+CONFIG_PCI_XGENE=n
+CONFIG_PCIE_ALTERA_MSI=n
+CONFIG_PCIE_ALTERA=n
+CONFIG_PCIE_KIRIN=n
+CONFIG_PCIE_MOBIVEIL=n
+
+# Not used Graphic Drivers
+CONFIG_DRM_RCAR_DW_HDMI=n
+CONFIG_DRM_RCAR_LVDS=n
+# Selected by DRM_RCAR_LVDS only
+CONFIG_OF_OVERLAY=n
+CONFIG_DRM_HISI_HIBMC=n
+CONFIG_DRM_HISI_KIRIN=n
+CONFIG_DRM_PL111=n
+CONFIG_DRM_LIMA=n
+CONFIG_DRM_PANFROST=n
+
+# Not used Network and Wifi drivers
+CONFIG_NET_VENDOR_3COM=n
+CONFIG_NET_VENDOR_ADAPTEC=n
+CONFIG_NET_VENDOR_AGERE=n
+CONFIG_NET_VENDOR_ALACRITECH=n
+CONFIG_NET_VENDOR_ALTEON=n
+CONFIG_NET_VENDOR_AMAZON=n
+CONFIG_NET_VENDOR_AMD=n
+CONFIG_NET_VENDOR_AQUANTIA=n
+CONFIG_NET_VENDOR_ARC=n
+CONFIG_NET_VENDOR_ATHEROS=n
+CONFIG_NET_VENDOR_AURORA=n
+CONFIG_NET_VENDOR_BROADCOM=n
+CONFIG_NET_VENDOR_BROCADE=n
+CONFIG_NET_VENDOR_CADENCE=n
+CONFIG_NET_VENDOR_CAVIUM=n
+CONFIG_NET_VENDOR_CHELSIO=n
+CONFIG_NET_VENDOR_CISCO=n
+CONFIG_NET_VENDOR_CORTINA=n
+CONFIG_NET_VENDOR_DEC=n
+CONFIG_NET_VENDOR_DLINK=n
+CONFIG_NET_VENDOR_EMULEX=n
+CONFIG_NET_VENDOR_EZCHIP=n
+CONFIG_NET_VENDOR_GOOGLE=n
+CONFIG_NET_VENDOR_HISILICON=n
+CONFIG_NET_VENDOR_HP=n
+CONFIG_NET_VENDOR_HUAWEI=n
+CONFIG_NET_VENDOR_MARVELL=n
+CONFIG_NET_VENDOR_MELLANOX=n
+CONFIG_NET_VENDOR_MICREL=n
+CONFIG_NET_VENDOR_MICROCHIP=n
+CONFIG_NET_VENDOR_MICROSEMI=n
+CONFIG_NET_VENDOR_MYRI=n
+CONFIG_NET_VENDOR_NATSEMI=n
+CONFIG_NET_VENDOR_NETERION=n
+CONFIG_NET_VENDOR_NETRONOME=n
+CONFIG_NET_VENDOR_NI=n
+CONFIG_NET_VENDOR_NVIDIA=n
+CONFIG_NET_VENDOR_OKI=n
+CONFIG_NET_VENDOR_PACKET_ENGINES=n
+CONFIG_NET_VENDOR_PENSANDO=n
+CONFIG_NET_VENDOR_QLOGIC=n
+CONFIG_NET_VENDOR_QUALCOMM=n
+CONFIG_NET_VENDOR_RDC=n
+CONFIG_NET_VENDOR_RENESAS=n
+CONFIG_NET_VENDOR_ROCKER=n
+CONFIG_NET_VENDOR_SAMSUNG=n
+CONFIG_NET_VENDOR_SEEQ=n
+CONFIG_NET_VENDOR_SILAN=n
+CONFIG_NET_VENDOR_SIS=n
+CONFIG_NET_VENDOR_SMSC=n
+CONFIG_NET_VENDOR_SOCIONEXT=n
+CONFIG_NET_VENDOR_SOLARFLARE=n
+CONFIG_NET_VENDOR_SUN=n
+CONFIG_NET_VENDOR_SYNOPSYS=n
+CONFIG_NET_VENDOR_TEHUTI=n
+CONFIG_NET_VENDOR_VIA=n
+CONFIG_NET_VENDOR_WIZNET=n
+CONFIG_WLAN_VENDOR_ADMTEK=n
+CONFIG_WLAN_VENDOR_ATMEL=n
+CONFIG_WLAN_VENDOR_CISCO=n
+CONFIG_WLAN_VENDOR_INTEL=n
+CONFIG_WLAN_VENDOR_INTERSIL=n
+CONFIG_WLAN_VENDOR_QUANTENNA=n
+CONFIG_WLAN_VENDOR_RALINK=n
+CONFIG_WLAN_VENDOR_RSI=n
+CONFIG_WLAN_VENDOR_ST=n
+CONFIG_WLAN_VENDOR_ZYDAS=n
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/defconfig b/recipes-kernel/linux/linux-toradex-upstream-6.6/defconfig
new file mode 100644
index 0000000..303a479
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/defconfig
@@ -0,0 +1,421 @@
+CONFIG_KERNEL_LZ4=y
+CONFIG_SYSVIPC=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_PREEMPT_VOLUNTARY=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CGROUP_BPF=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_EXPERT=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_PERF_EVENTS=y
+CONFIG_ARCH_MULTI_V6=y
+CONFIG_ARCH_MXC=y
+CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6UL=y
+CONFIG_SOC_IMX7D=y
+CONFIG_SMP=y
+CONFIG_ARM_PSCI=y
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FORCE_MAX_ORDER=14
+CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPUFREQ_DT=y
+CONFIG_ARM_IMX6Q_CPUFREQ=y
+CONFIG_ARM_IMX_CPUFREQ_DT=y
+CONFIG_CPU_IDLE=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_ARM_PSCI_CPUIDLE=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_KPROBES=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_BINFMT_MISC=m
+# CONFIG_SWAP is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_NETFILTER=y
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+CONFIG_CAN=y
+CONFIG_BT=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_CFG80211=m
+CONFIG_CFG80211_WEXT=y
+CONFIG_MAC80211=m
+CONFIG_RFKILL=y
+CONFIG_RFKILL_INPUT=y
+CONFIG_PCI=y
+CONFIG_PCI_MSI=y
+# CONFIG_VGA_ARB is not set
+CONFIG_PCI_IMX6=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+CONFIG_IMX_WEIM=y
+CONFIG_CONNECTOR=y
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_DATAFLASH=y
+CONFIG_MTD_SST25L=y
+CONFIG_MTD_RAW_NAND=y
+CONFIG_MTD_NAND_GPMI_NAND=y
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_FASTMAP=y
+CONFIG_MTD_UBI_BLOCK=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_EEPROM_AT24=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_ATA=y
+# CONFIG_SATA_PMP is not set
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_IMX=y
+# CONFIG_ATA_SFF is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_FARADAY is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+CONFIG_SMC91X=y
+CONFIG_SMC911X=y
+CONFIG_SMSC911X=y
+# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_MICREL_PHY=y
+CONFIG_CAN_FLEXCAN=y
+CONFIG_CAN_MCP251X=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_ZAURUS is not set
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_ATH10K_SDIO=m
+CONFIG_IWLWIFI=m
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_RT2X00=m
+CONFIG_RT2800USB=m
+CONFIG_RT2800USB_RT3573=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
+CONFIG_RT2800USB_UNKNOWN=y
+CONFIG_RTL8192CU=m
+CONFIG_RTL8XXXU=m
+CONFIG_INPUT_EVDEV=y
+# CONFIG_KEYBOARD_ATKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_SNVS_PWRKEY=y
+CONFIG_KEYBOARD_IMX=y
+# CONFIG_MOUSE_PS2 is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_AD7879=y
+CONFIG_TOUCHSCREEN_AD7879_I2C=y
+CONFIG_TOUCHSCREEN_ATMEL_MXT=y
+CONFIG_TOUCHSCREEN_STMPE=y
+CONFIG_INPUT_MISC=y
+# CONFIG_SERIO is not set
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_RPMSG_TTY=m
+CONFIG_SERIAL_DEV_BUS=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_GPIO=y
+CONFIG_I2C_IMX=y
+CONFIG_SPI=y
+CONFIG_SPI_MEM=y
+CONFIG_SPI_GPIO=y
+CONFIG_SPI_IMX=y
+CONFIG_SPI_SPIDEV=y
+# CONFIG_PTP_1588_CLOCK_KVM is not set
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_MXC=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
+CONFIG_SENSORS_GPIO_FAN=y
+CONFIG_SENSORS_IIO_HWMON=y
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_INA2XX=m
+CONFIG_THERMAL_STATISTICS=y
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_CPU_THERMAL=y
+CONFIG_IMX_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_RN5T618_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_MFD_RN5T618=y
+CONFIG_MFD_STMPE=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_ANATOP=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_PFUZE100=y
+CONFIG_REGULATOR_RN5T618=y
+CONFIG_MEDIA_SUPPORT=y
+# CONFIG_DVB_NET is not set
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_VIDEO_MUX=y
+CONFIG_VIDEO_CODA=m
+CONFIG_VIDEO_IMX_PXP=y
+CONFIG_VIDEO_OV5640=m
+CONFIG_VIDEO_ADV7180=m
+CONFIG_VIDEO_TC358743=m
+# CONFIG_CXD2880_SPI_DRV is not set
+CONFIG_IMX_IPUV3_CORE=y
+CONFIG_DRM=y
+CONFIG_DRM_DEBUG_MODESET_LOCK=y
+CONFIG_DRM_PANEL_LVDS=y
+CONFIG_DRM_PANEL_SIMPLE=y
+CONFIG_DRM_PANEL_EDP=y
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=y
+CONFIG_DRM_SIMPLE_BRIDGE=y
+CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
+CONFIG_DRM_DW_HDMI_CEC=y
+CONFIG_DRM_IMX=y
+CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
+CONFIG_DRM_IMX_TVE=y
+CONFIG_DRM_IMX_LDB=y
+CONFIG_DRM_IMX_HDMI=y
+CONFIG_DRM_ETNAVIV=y
+CONFIG_DRM_MXSFB=y
+CONFIG_FB=y
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_MX3 is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_BACKLIGHT_GPIO=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_LOGO=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_FSL_ASRC=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_IMX_SGTL5000=y
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_FSL_ASOC_CARD=y
+CONFIG_SND_SOC_AC97_CODEC=y
+CONFIG_SND_SOC_NAU8822=m
+CONFIG_SND_SIMPLE_CARD=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_CONN_GPIO=y
+CONFIG_USB=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_ACM=m
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_TEST=m
+CONFIG_USB_EHSET_TEST_FIXTURE=m
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MXS_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_LB_SS=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_UAC1=y
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_UVC=y
+CONFIG_USB_CONFIGFS_F_PRINTER=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_AUDIO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_G_NCM=m
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FUNCTIONFS=m
+CONFIG_USB_MASS_STORAGE=m
+CONFIG_USB_G_SERIAL=m
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_PWM=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_ONESHOT=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_MXC=y
+CONFIG_RTC_DRV_SNVS=y
+CONFIG_DMADEVICES=y
+CONFIG_FSL_EDMA=y
+CONFIG_IMX_SDMA=m
+CONFIG_MXS_DMA=y
+CONFIG_DMATEST=m
+CONFIG_STAGING=y
+CONFIG_R8188EU=m
+CONFIG_STAGING_MEDIA=y
+CONFIG_VIDEO_IMX_MEDIA=y
+CONFIG_COMMON_CLK_PWM=y
+CONFIG_IMX_MBOX=m
+CONFIG_REMOTEPROC=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_IMX_REMOTEPROC=m
+CONFIG_RPMSG_CHAR=m
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_VIRTIO=m
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_IIO=y
+CONFIG_IMX7D_ADC=y
+CONFIG_STMPE_ADC=y
+CONFIG_VF610_ADC=y
+CONFIG_PWM=y
+CONFIG_PWM_FSL_FTM=y
+CONFIG_PWM_IMX27=y
+CONFIG_NVMEM_IMX_OCOTP=y
+CONFIG_NVMEM_SNVS_LPGPR=y
+CONFIG_TEE=y
+CONFIG_OPTEE=y
+CONFIG_MUX_MMIO=y
+CONFIG_EXFAT_FS=m
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=m
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_NTFS3_FS=m
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_JFFS2_FS=m
+CONFIG_UBIFS_FS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_UTF8=y
+CONFIG_SECURITYFS=y
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
+CONFIG_CRYPTO_DEV_SAHARA=y
+CONFIG_CRYPTO_DEV_MXS_DCP=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_CMA_SIZE_MBYTES=256
+CONFIG_CMA_SIZE_PERCENTAGE=35
+CONFIG_CMA_SIZE_SEL_MIN=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG=y
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_FS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_FTRACE is not set
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/toradex_imx_v6_v7.config b/recipes-kernel/linux/linux-toradex-upstream-6.6/toradex_imx_v6_v7.config
new file mode 100644
index 0000000..c63dc9d
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/toradex_imx_v6_v7.config
@@ -0,0 +1,299 @@
+## This file contains the differences to imx_v6_v7_defconfig
+## it is used to generate toradex defconfig with the following command
+##
+## make imx_v6_v7_defconfig
+## scripts/kconfig/merge_config.sh .config toradex_imx_v6_v7.config
+## make savedefconfig
+
+# LZ4 support is better than LZO and provide good boot time performance
+CONFIG_KERNEL_LZ4=y
+
+# USB OTG Role Switch
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_USB_CONN_GPIO=y
+
+# Enable i.MX PCIE
+CONFIG_PCI_IMX6_HOST=y
+
+# Usefull for debugging
+CONFIG_DYNAMIC_DEBUG=y
+
+# Systemd, https://github.com/systemd/systemd/blob/main/README
+CONFIG_DEVTMPFS=y
+CONFIG_CGROUPS=y
+CONFIG_INOTIFY_USER=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EPOLL=y
+CONFIG_UNIX=y
+CONFIG_SYSFS=y
+CONFIG_PROC_FS=y
+CONFIG_FHANDLE=y
+CONFIG_SYSFS_DEPRECATED=n
+CONFIG_UEVENT_HELPER=n
+CONFIG_FW_LOADER_USER_HELPER=n
+CONFIG_NET_NS=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_BPF=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_RT_GROUP_SCHED=n
+
+# SPI test and debugging
+CONFIG_SPI_SPIDEV=y
+
+# Support HID devices
+# This suppresses also the warning "hid-generic: device has no listeners, quitting"
+CONFIG_USB_HIDDEV=y
+
+# Apalis Evaluation Board v1.2
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_INA2XX=m
+CONFIG_SND_SOC_NAU8822=m
+
+# Colibri Evaluation Board
+CONFIG_CAN_MCP251X=m
+
+# WiFi/BT used on multiple SOM
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+
+# WiFi modules
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_IWLWIFI=m
+CONFIG_RT2X00=m
+CONFIG_RT2800USB=m
+CONFIG_RT2800USB_RT3573=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
+CONFIG_RT2800USB_UNKNOWN=y
+CONFIG_RTL8192CU=m
+CONFIG_RTL8XXXU=m
+
+# 80211 as modules, so that regulatory.db is available when loading
+CONFIG_CFG80211=m
+CONFIG_MAC80211=m
+
+# Networking
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+
+# CMA, used by the VPU for example
+CONFIG_CMA_SIZE_MBYTES=256
+CONFIG_CMA_SIZE_SEL_MIN=y
+CONFIG_CMA_SIZE_PERCENTAGE=35
+
+# Thermal emergency poweroff
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+
+# Others
+CONFIG_DRM_SIMPLE_BRIDGE=y
+
+# Non rootfs as module to minimize image size
+CONFIG_JFFS2_FS=m
+CONFIG_EXFAT_FS=m
+CONFIG_EXT2_FS=m
+CONFIG_EXT3_FS=m
+CONFIG_FUSE_FS=m
+CONFIG_NTFS3_FS=m
+
+# Disable not needed iMX drivers
+CONFIG_SOC_IMX31=n
+CONFIG_SOC_IMX35=n
+CONFIG_SOC_IMX50=n
+CONFIG_SOC_IMX51=n
+CONFIG_SOC_IMX53=n
+CONFIG_SOC_VF610=n
+CONFIG_SOC_IMX6SL=n
+CONFIG_SOC_IMX6SLL=n
+CONFIG_SOC_IMX6SX=n
+CONFIG_SOC_IMX7ULP=n
+CONFIG_SOC_IMX8M=n
+
+CONFIG_PINCTRL_IMX8MM=n
+CONFIG_PINCTRL_IMX8MN=n
+CONFIG_PINCTRL_IMX8MP=n
+CONFIG_PINCTRL_IMX8MQ=n
+
+CONFIG_CLK_IMX8MM=n
+CONFIG_CLK_IMX8MN=n
+CONFIG_CLK_IMX8MP=n
+CONFIG_CLK_IMX8MQ=n
+
+CONFIG_MTD_NAND_MXC=n
+CONFIG_PATA_IMX=n
+CONFIG_SPI_FSL_QUADSPI=n
+CONFIG_IMX7ULP_WDT=n
+CONFIG_FB_MX3=n
+CONFIG_RTC_DRV_MXC_V2=n
+CONFIG_PWM_IMX_TPM=n
+CONFIG_FSL_EDMA=n
+
+# Disable not needed functionality
+CONFIG_KEXEC=n
+CONFIG_SWAP=n
+
+# Disable noisy debug on the console every input event
+CONFIG_INPUT_EVBUG=n
+
+# Disable or build as module not needed generic drivers
+CONFIG_RC_CORE=n
+CONFIG_MTD_SPI_NOR=n
+CONFIG_VGA_ARB=n
+CONFIG_EEPROM_AT25=n
+CONFIG_SATA_PMP=n
+CONFIG_ATA_SFF=n
+CONFIG_KEYBOARD_ATKBD=n
+CONFIG_MOUSE_PS2=n
+CONFIG_INPUT_MMA8450=n
+CONFIG_SERIO=n
+CONFIG_PTP_1588_CLOCK_KVM=n
+
+CONFIG_TOUCHSCREEN_ADS7846=n
+CONFIG_TOUCHSCREEN_DA9052=n
+CONFIG_TOUCHSCREEN_EGALAX=n
+CONFIG_TOUCHSCREEN_GOODIX=n
+CONFIG_TOUCHSCREEN_ILI210X=n
+CONFIG_TOUCHSCREEN_MAX11801=n
+CONFIG_TOUCHSCREEN_IMX6UL_TSC=n
+CONFIG_TOUCHSCREEN_EDT_FT5X06=n
+CONFIG_TOUCHSCREEN_MC13783=n
+CONFIG_TOUCHSCREEN_TSC2004=n
+CONFIG_TOUCHSCREEN_TSC2007=n
+CONFIG_TOUCHSCREEN_SX8654=n
+CONFIG_TOUCHSCREEN_COLIBRI_VF50=n
+
+CONFIG_I2C_MUX=n
+CONFIG_I2C_MUX_GPIO=n
+CONFIG_I2C_HELPER_AUTO=n
+CONFIG_I2C_ALGOPCF=n
+CONFIG_I2C_ALGOPCA=n
+
+CONFIG_GPIO_SIOX=n
+CONFIG_GPIO_MAX732X=n
+CONFIG_GPIO_PCA953X=n
+CONFIG_GPIO_PCF857X=n
+CONFIG_GPIO_STMPE=n
+CONFIG_GPIO_74X164=n
+
+CONFIG_RN5T618_POWER=n
+CONFIG_SENSORS_MC13783_ADC=n
+
+CONFIG_DA9063_WATCHDOG=n
+CONFIG_DA9062_WATCHDOG=n
+
+CONFIG_MFD_DA9052_I2C=n
+CONFIG_MFD_DA9062=n
+CONFIG_MFD_DA9063=n
+CONFIG_MFD_MC13XXX_SPI=n
+CONFIG_MFD_MC13XXX_I2C=n
+
+CONFIG_REGULATOR_DA9052=n
+CONFIG_REGULATOR_DA9062=n
+CONFIG_REGULATOR_DA9063=n
+CONFIG_REGULATOR_LTC3676=n
+CONFIG_REGULATOR_MC13783=n
+CONFIG_REGULATOR_MC13892=n
+
+CONFIG_DVB_NET=n
+
+CONFIG_VIDEO_OV2680=n
+CONFIG_VIDEO_OV5645=n
+
+# HDMI to CSI-2 bridge
+CONFIG_VIDEO_TC358743=m
+
+CONFIG_CXD2880_SPI_DRV=n
+
+# This compiles all media-related drivers as modules and disables TV stuff
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_VIDEO_IMX_MEDIA=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=n
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=n
+CONFIG_MEDIA_RADIO_SUPPORT=n
+CONFIG_MEDIA_SDR_SUPPORT=n
+CONFIG_MEDIA_TEST_SUPPORT=n
+
+CONFIG_DRM_TI_TFP410=n
+
+CONFIG_LCD_CLASS_DEVICE=n
+CONFIG_LCD_L4F00242T03=n
+CONFIG_LCD_PLATFORM=n
+
+CONFIG_SND_SOC_EUKREA_TLV320=n
+CONFIG_SND_SOC_IMX_ES8328=n
+CONFIG_SND_SOC_CS42XX8_I2C=n
+CONFIG_SND_SOC_TLV320AIC3X_I2C=n
+CONFIG_SND_SOC_TLV320AIC23_I2C=n
+CONFIG_SND_SOC_WM8960=n
+CONFIG_SND_SOC_WM8962=n
+CONFIG_SND_SOC_ES8328_I2C=n
+CONFIG_SND_SOC_ES8328_SPI=n
+
+CONFIG_HID_WACOM=n
+CONFIG_I2C_HID_OF=n
+
+CONFIG_RTC_DRV_ISL1208=n
+CONFIG_RTC_DRV_PCF8523=n
+CONFIG_RTC_DRV_PCF8563=n
+CONFIG_RTC_DRV_M41T80=n
+CONFIG_RTC_DRV_RC5T619=n
+CONFIG_RTC_DRV_RV3029C2=n
+CONFIG_RTC_DRV_DA9063=n
+CONFIG_RTC_DRV_MC13XXX=n
+
+CONFIG_MMA8452=n
+CONFIG_RN5T618_ADC=n
+CONFIG_SENSORS_ISL29018=n
+CONFIG_MAG3110=n
+CONFIG_MPL3115=n
+
+CONFIG_SIOX=n
+
+CONFIG_BRCMFMAC=n
+CONFIG_WL12XX=n
+CONFIG_WL18XX=n
+CONFIG_WLCORE=n
+
+CONFIG_CS89x0_PLATFORM=n
+
+CONFIG_AT803X_PHY=n
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_ZAURUS=n
+CONFIG_AX88796B_PHY=m
+CONFIG_MICROCHIP_PHY=m
+CONFIG_SMSC_PHY=m
+
+CONFIG_PROVE_LOCKING=n
+CONFIG_DEBUG_RT_MUTEXES=n
+CONFIG_DEBUG_SPINLOCK=n
+CONFIG_DEBUG_MUTEXES=n
+CONFIG_DEBUG_WW_MUTEX_SLOWPATH=n
+CONFIG_DEBUG_RWSEMS=n
+CONFIG_DEBUG_LOCK_ALLOC=n
+
+CONFIG_DMADEVICES=y
+CONFIG_FSL_EDMA=y
+CONFIG_DMA_VIRTUAL_CHANNELS=y
+
+# RPMsg and RemoteProc for HMP
+CONFIG_RPMSG_TTY=m
+CONFIG_IMX_MBOX=m
+CONFIG_REMOTEPROC=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_IMX_REMOTEPROC=m
+CONFIG_RPMSG_CHAR=m
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_VIRTIO=m
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
diff --git a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt-less-latency.cfg b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt-less-latency.cfg
index a9c88bd..a9c88bd 100644
--- a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt-less-latency.cfg
+++ b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt-less-latency.cfg
diff --git a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt-less-latency.scc b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt-less-latency.scc
index edd1519..edd1519 100644
--- a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt-less-latency.scc
+++ b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt-less-latency.scc
diff --git a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt.cfg b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt.cfg
index f76e447..17b06b1 100644
--- a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt.cfg
+++ b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt.cfg
@@ -1,4 +1,5 @@
CONFIG_EXPERT=y
+# CONFIG_KVM is not set
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
diff --git a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt.scc b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt.scc
index 82d27dc..82d27dc 100644
--- a/recipes-kernel/linux/linux-toradex-mainline-5.4/preempt-rt.scc
+++ b/recipes-kernel/linux/linux-toradex-upstream-rt/preempt-rt.scc
diff --git a/recipes-kernel/linux/linux-toradex-upstream-rt_6.6.bb b/recipes-kernel/linux/linux-toradex-upstream-rt_6.6.bb
new file mode 100644
index 0000000..58f5a0e
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream-rt_6.6.bb
@@ -0,0 +1,20 @@
+LINUX_VERSION ?= "6.6.20-rt25"
+require recipes-kernel/linux/linux-toradex-upstream_6.6.bb
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex-upstream-6.6:"
+
+SUMMARY = "Toradex mainline real-time Linux kernel"
+# To build the RT kernel we use the RT kernel git repo rather than applying
+# the RT patch on top of a vanilla kernel.
+
+LINUX_REPO = "git://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git"
+SRC_URI:append = " \
+ file://preempt-rt.scc \
+ file://preempt-rt-less-latency.scc \
+"
+
+# set PV manually, that way PREFERRED_VERSION can be set to a constant value
+PV = "6.6"
+KBRANCH = "v6.6-rt"
+SRCREV_machine = "a27814b8cd8f89ad68e29d3d6f8f3b61c65aebf5"
+SRCREV_machine:use-head-next = "${AUTOREV}"
diff --git a/recipes-kernel/linux/linux-toradex-upstream.inc b/recipes-kernel/linux/linux-toradex-upstream.inc
new file mode 100644
index 0000000..cc50c70
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream.inc
@@ -0,0 +1,45 @@
+SUMMARY = "Toradex mainline Linux kernel"
+SECTION = "kernel"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM ?= "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/linux-toradex-upstream:"
+
+DEPENDS += "coreutils-native"
+
+# yaml and dtschema are required for 5.16+ device tree validation, libyaml is checked
+# via pkgconfig, so must always be present, but we can wrap the others to make them
+# conditional
+DEPENDS += "libyaml-native"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[dt-validation] = ",,python3-dtschema-native"
+# we need the wrappers if validation isn't in the packageconfig
+DEPENDS += "${@bb.utils.contains('PACKAGECONFIG', 'dt-validation', '', 'python3-dtschema-wrapper-native', d)}"
+
+PV = "${LINUX_VERSION}+git${SRCPV}"
+
+SRC_URI = " \
+ ${LINUX_REPO};protocol=https;branch=${KBRANCH};name=machine \
+ file://defconfig \
+ ${TDX_PATCHES} \
+"
+
+KERNEL_VERSION_SANITY_SKIP = "1"
+
+S = "${WORKDIR}/git"
+
+KCONFIG_MODE="--alldefconfig"
+
+# Load USB functions configurable through configfs (CONFIG_USB_CONFIGFS)
+KERNEL_MODULE_AUTOLOAD += "${@bb.utils.contains('COMBINED_FEATURES', 'usbgadget', ' libcomposite', '',d)}"
+
+inherit kernel-yocto kernel pkgconfig toradex-kernel-deploy-config toradex-kernel-localversion
+
+# Additional file deployed by recent mainline kernels
+FILES:${KERNEL_PACKAGE_NAME}-base += "${nonarch_base_libdir}/modules/${KERNEL_VERSION}/modules.builtin.modinfo"
+
+export DTC_FLAGS = "-@"
+
+# kconfiglib.KconfigError: init/Kconfig:70: error: couldn't parse 'default $(shell,$(srctree)/scripts/rust-version.sh $(RUSTC))': macro expanded to blank string
+do_kernel_configcheck[noexec] = "1"
diff --git a/recipes-kernel/linux/linux-toradex-upstream/0001-thermal-imx-Update-critical-temp-threshold.patch b/recipes-kernel/linux/linux-toradex-upstream/0001-thermal-imx-Update-critical-temp-threshold.patch
new file mode 100644
index 0000000..c09abb9
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/0001-thermal-imx-Update-critical-temp-threshold.patch
@@ -0,0 +1,40 @@
+From 212abec626e1c82616a1cf6e492e467cf79aef23 Mon Sep 17 00:00:00 2001
+From: Francesco Dolcini <francesco.dolcini@toradex.com>
+Date: Wed, 20 Apr 2022 11:13:00 +0200
+Subject: [PATCH 1/4] thermal: imx: Update critical temp threshold
+
+Increase the critical temperature threshold to the datasheet defined
+value according to the temperature grade of the SoC, increasing the
+actual critical temperature value of 5 degrees.
+
+Without this change the emergency shutdown will trigger earlier then
+required affecting applications that are expected to be working on this
+close to the limit, but yet valid, temperature range.
+
+Upstream-Status: Denied [https://lore.kernel.org/all/20220420091300.179753-1-francesco.dolcini@toradex.com/]
+Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
+---
+ drivers/thermal/imx_thermal.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
+index 826358cbe810..4fcbf15b2768 100644
+--- a/drivers/thermal/imx_thermal.c
++++ b/drivers/thermal/imx_thermal.c
+@@ -458,11 +458,11 @@ static void imx_init_temp_grade(struct platform_device *pdev, u32 ocotp_mem0)
+ }
+
+ /*
+- * Set the critical trip point at 5 °C under max
++ * Set the critical trip point at max
+ * Set the passive trip point at 10 °C under max (changeable via sysfs)
+ */
+ trips[IMX_TRIP_PASSIVE].temperature = data->temp_max - (1000 * 10);
+- trips[IMX_TRIP_CRITICAL].temperature = data->temp_max - (1000 * 5);
++ trips[IMX_TRIP_CRITICAL].temperature = data->temp_max;
+ }
+
+ static int imx_init_from_tempmon_data(struct platform_device *pdev)
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch b/recipes-kernel/linux/linux-toradex-upstream/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch
new file mode 100644
index 0000000..dfdd723
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch
@@ -0,0 +1,68 @@
+From 2147c8ddfaa746cdb8857db070f907fa9abfcb60 Mon Sep 17 00:00:00 2001
+From: Hiago De Franco <hiago.franco@toradex.com>
+Date: Tue, 19 Dec 2023 11:52:07 -0300
+Subject: [PATCH] usb: gadget: f_ncm: Apply workaround for packet clogging
+
+The existing size of 32 is causing significant slowness and freezing when
+utilizing the NCM protocol with a VNC client. This issue likely arises
+because the VNC protocol relies on sending numerous small packets, which
+accumulate until the 16KB limit is reached, leading to transmission
+delays.
+
+By decreasing TX_MAX_NUM_DPE to 4, we ensure that the NCM driver transmits
+packets at a reduced interval, thereby resolving the VNC performance
+issues. To comprehend how these packets are sent, refer to the code
+snippet below from f_ncm.c:
+
+```
+ /* If the new skb is too big for the current NCM NTB then
+ * set the current stored skb to be sent now and clear it
+ * ready for new data.
+ * NOTE: Assume maximum align for speed of calculation.
+ */
+ if (ncm->skb_tx_data
+ && (ncm->ndp_dgram_count >= TX_MAX_NUM_DPE
+ || (ncm->skb_tx_data->len +
+ div + rem + skb->len +
+ ncm->skb_tx_ndp->len + ndp_align + (2 * dgram_idx_len))
+ > max_size)) {
+ skb2 = package_for_tx(ncm);
+ if (!skb2)
+ goto err;
+ }
+```
+
+This issue is presently under investigation on the Linux kernel mailing
+list, and you can find the entire discussion at [1].
+
+[1] https://lore.kernel.org/all/20231204183751.64202-1-hiagofranco@gmail.com/
+
+Upstream-Status: Inappropriate [other]
+
+There is no proper patch for now, so instead we're using this patch that
+makes VNC work again as a temporarily solution until the mainline code
+gets fixed.
+
+Related-to: TEI-1078
+Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
+Signed-off-by: Joao Paulo Goncalves <joao.goncalves@toradex.com>
+---
+ drivers/usb/gadget/function/f_ncm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
+index e0c183234283..5e972d1c1a0c 100644
+--- a/drivers/usb/gadget/function/f_ncm.c
++++ b/drivers/usb/gadget/function/f_ncm.c
+@@ -113,7 +113,7 @@ static inline unsigned ncm_bitrate(struct usb_gadget *g)
+ * Smaller packets are not likely to be trying to maximize the
+ * throughput and will be mstly sending smaller infrequent frames.
+ */
+-#define TX_MAX_NUM_DPE 32
++#define TX_MAX_NUM_DPE 4
+
+ /* Delay for the transmit to wait before sending an unfilled NTB frame. */
+ #define TX_TIMEOUT_NSECS 300000
+--
+2.34.1
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch b/recipes-kernel/linux/linux-toradex-upstream/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch
new file mode 100644
index 0000000..5067258
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch
@@ -0,0 +1,61 @@
+From fdd0972a24818dc336b2235ce93000ee7b88240e Mon Sep 17 00:00:00 2001
+From: Max Krummenacher <max.krummenacher@toradex.com>
+Date: Thu, 1 Sep 2022 14:04:50 +0200
+Subject: [PATCH 2/4] Revert "drm/panel-simple: drop use of data-mapping
+ property"
+
+This reverts commit d021d751c14752a0266865700f6f212fab40a18c.
+
+Re-enable the data-mapping property which was already used in the
+5.4-2.3.0 downstream kernel.
+
+In addition to the revert set bpc from the data-mapping value
+as a WARN_ON is printed if missing.
+In addition to the revert have mapping pointing to the empty string to
+prevent a kernel panic if data-mapping can not be read from the dt and
+then an uninitialized pointer is used in strcmp.
+
+Upstream-Status: denied [Alternative solution being discused]
+https://lore.kernel.org/all/20220628181838.2031-1-max.oss.09@gmail.com/
+Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
+---
+ drivers/gpu/drm/panel/panel-simple.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
+index 95959dcc6e0e..4518eb5d7acb 100644
+--- a/drivers/gpu/drm/panel/panel-simple.c
++++ b/drivers/gpu/drm/panel/panel-simple.c
+@@ -464,6 +464,7 @@ static int panel_dpi_probe(struct device *dev,
+ struct panel_desc *desc;
+ unsigned int bus_flags;
+ struct videomode vm;
++ const char *mapping = "";
+ int ret;
+
+ np = dev->of_node;
+@@ -488,6 +489,21 @@ static int panel_dpi_probe(struct device *dev,
+ of_property_read_u32(np, "width-mm", &desc->size.width);
+ of_property_read_u32(np, "height-mm", &desc->size.height);
+
++ of_property_read_string(np, "data-mapping", &mapping);
++ if (!strcmp(mapping, "rgb24")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
++ desc->bpc = 8;
++ } else if (!strcmp(mapping, "rgb565")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB565_1X16;
++ desc->bpc = 6;
++ } else if (!strcmp(mapping, "bgr666")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB666_1X18;
++ desc->bpc = 6;
++ } else if (!strcmp(mapping, "lvds666")) {
++ desc->bus_format = MEDIA_BUS_FMT_RGB666_1X24_CPADHI;
++ desc->bpc = 6;
++ }
++
+ /* Extract bus_flags from display_timing */
+ bus_flags = 0;
+ vm.flags = timing->flags;
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch b/recipes-kernel/linux/linux-toradex-upstream/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch
new file mode 100644
index 0000000..4f5e2c0
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch
@@ -0,0 +1,39 @@
+From 070e2b7b7c3ef6e640e13aeb120c958e09accbb1 Mon Sep 17 00:00:00 2001
+From: Philippe Schenker <philippe.schenker@toradex.com>
+Date: Wed, 2 Nov 2022 14:25:56 +0100
+Subject: [PATCH 3/4] drivers: chipidea: disable runtime-pm for imx6ul
+
+Colibri iMX6ULL does not properly work with runtime-pm enabled. We see
+two issues with that enabled:
+
+1. Runtime PM disconnects the line as it thinks there is no VBUS -
+ because this signal is not hooked up in hardware. The driver gets a
+ wakeup signal from the attached hub after about 2s which leads to a
+ reset loop.
+2. In Dual-Role switching mode usb-device is not detected when plugged
+ in. The reason was never fully understood.
+
+Upstream-Status: Inappropriate [Configuration for colibri-imx6ull]
+
+Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
+---
+ drivers/usb/chipidea/ci_hdrc_imx.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c
+index e28bb2f2612d..4da4aa4ee70d 100644
+--- a/drivers/usb/chipidea/ci_hdrc_imx.c
++++ b/drivers/usb/chipidea/ci_hdrc_imx.c
+@@ -57,8 +57,7 @@ static const struct ci_hdrc_imx_platform_flag imx6sx_usb_data = {
+ };
+
+ static const struct ci_hdrc_imx_platform_flag imx6ul_usb_data = {
+- .flags = CI_HDRC_SUPPORTS_RUNTIME_PM |
+- CI_HDRC_TURN_VBUS_EARLY_ON |
++ .flags = CI_HDRC_TURN_VBUS_EARLY_ON |
+ CI_HDRC_DISABLE_DEVICE_STREAMING,
+ };
+
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream/0004-media-i2c-ov5640-Implement-get_mbus_config.patch b/recipes-kernel/linux/linux-toradex-upstream/0004-media-i2c-ov5640-Implement-get_mbus_config.patch
new file mode 100644
index 0000000..7205135
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/0004-media-i2c-ov5640-Implement-get_mbus_config.patch
@@ -0,0 +1,54 @@
+From 3317d3298cd06213d457ad7090ec0fd56eefc5d2 Mon Sep 17 00:00:00 2001
+From: Aishwarya Kothari <aishwarya.kothari@toradex.com>
+Date: Wed, 25 Jan 2023 13:09:15 +0100
+Subject: [PATCH 4/4] media: i2c: ov5640: Implement get_mbus_config
+
+Implement the introduced get_mbus_config operation to report the
+config of the MIPI CSI-2, BT.656 and Parallel interface.
+
+Signed-off-by: Aishwarya Kothari <aishwarya.kothari@toradex.com>
+Upstream-Status: Submitted [https://lore.kernel.org/all/20230306063649.7387-1-marcel@ziswiler.com/]
+---
+ drivers/media/i2c/ov5640.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
+index 5fe85aa2d2ec..8cb966fb1b79 100644
+--- a/drivers/media/i2c/ov5640.c
++++ b/drivers/media/i2c/ov5640.c
+@@ -3755,6 +3755,24 @@ static int ov5640_init_cfg(struct v4l2_subdev *sd,
+ return 0;
+ }
+
++static int ov5640_get_mbus_config(struct v4l2_subdev *sd,
++ unsigned int pad,
++ struct v4l2_mbus_config *cfg)
++{
++ struct ov5640_dev *sensor = to_ov5640_dev(sd);
++
++ cfg->type = sensor->ep.bus_type;
++ if (ov5640_is_csi2(sensor)) {
++ cfg->bus.mipi_csi2.num_data_lanes =
++ sensor->ep.bus.mipi_csi2.num_data_lanes;
++ cfg->bus.mipi_csi2.flags = sensor->ep.bus.mipi_csi2.flags;
++ } else {
++ cfg->bus.parallel.flags = sensor->ep.bus.parallel.flags;
++ }
++
++ return 0;
++}
++
+ static const struct v4l2_subdev_core_ops ov5640_core_ops = {
+ .log_status = v4l2_ctrl_subdev_log_status,
+ .subscribe_event = v4l2_ctrl_subdev_subscribe_event,
+@@ -3775,6 +3793,7 @@ static const struct v4l2_subdev_pad_ops ov5640_pad_ops = {
+ .get_selection = ov5640_get_selection,
+ .enum_frame_size = ov5640_enum_frame_size,
+ .enum_frame_interval = ov5640_enum_frame_interval,
++ .get_mbus_config = ov5640_get_mbus_config,
+ };
+
+ static const struct v4l2_subdev_ops ov5640_subdev_ops = {
+--
+2.35.3
+
diff --git a/recipes-kernel/linux/linux-toradex-upstream/aarch64/defconfig b/recipes-kernel/linux/linux-toradex-upstream/aarch64/defconfig
new file mode 100644
index 0000000..4d93994
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/aarch64/defconfig
@@ -0,0 +1,1026 @@
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_AUDIT=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_NUMA_BALANCING=y
+CONFIG_MEMCG=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_HUGETLB=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_PERF=y
+CONFIG_CGROUP_BPF=y
+CONFIG_USER_NS=y
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_PROFILING=y
+CONFIG_KEXEC_FILE=y
+CONFIG_CRASH_DUMP=y
+CONFIG_ARCH_K3=y
+CONFIG_ARCH_NXP=y
+CONFIG_ARCH_MXC=y
+CONFIG_ARM64_VA_BITS_48=y
+CONFIG_SCHED_MC=y
+CONFIG_SCHED_SMT=y
+CONFIG_NUMA=y
+CONFIG_XEN=y
+CONFIG_COMPAT=y
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_HIBERNATION=y
+CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
+CONFIG_ENERGY_MODEL=y
+CONFIG_ARM_PSCI_CPUIDLE=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPUFREQ_DT=y
+CONFIG_ACPI_CPPC_CPUFREQ=m
+CONFIG_ARM_SCPI_CPUFREQ=y
+CONFIG_ARM_IMX_CPUFREQ_DT=m
+CONFIG_ARM_SCMI_CPUFREQ=y
+CONFIG_ACPI=y
+CONFIG_ACPI_HOTPLUG_MEMORY=y
+CONFIG_ACPI_HMAT=y
+CONFIG_ACPI_APEI=y
+CONFIG_ACPI_APEI_GHES=y
+CONFIG_ACPI_APEI_PCIEAER=y
+CONFIG_ACPI_APEI_MEMORY_FAILURE=y
+CONFIG_ACPI_APEI_EINJ=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=y
+CONFIG_JUMP_LABEL=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_MEMORY_HOTREMOVE=y
+CONFIG_KSM=y
+CONFIG_MEMORY_FAILURE=y
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IPV6=m
+CONFIG_NETFILTER=y
+CONFIG_BRIDGE_NETFILTER=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NETFILTER_XT_MARK=m
+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
+CONFIG_NETFILTER_XT_TARGET_LOG=m
+CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_IP_VS=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_NAT=m
+CONFIG_IP6_NF_TARGET_MASQUERADE=m
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_VLAN_FILTERING=y
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_VLAN_8021Q_MVRP=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBS=m
+CONFIG_NET_SCH_ETF=m
+CONFIG_NET_SCH_TAPRIO=m
+CONFIG_NET_SCH_MQPRIO=m
+CONFIG_NET_SCH_INGRESS=m
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_FLOWER=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_GACT=m
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_GATE=m
+CONFIG_NET_SWITCHDEV=y
+CONFIG_QRTR_SMD=m
+CONFIG_QRTR_TUN=m
+CONFIG_CAN=m
+CONFIG_BT=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_HIDP=m
+# CONFIG_BT_LE is not set
+CONFIG_BT_LEDS=y
+# CONFIG_BT_DEBUGFS is not set
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTUSB_MTK=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_BCM=y
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_BT_HCIUART_MRVL=y
+CONFIG_BT_HCIVHCI=m
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_NXPUART=m
+CONFIG_CFG80211=m
+CONFIG_MAC80211=m
+CONFIG_MAC80211_LEDS=y
+CONFIG_RFKILL=m
+CONFIG_RFKILL_GPIO=m
+CONFIG_NET_9P=y
+CONFIG_NET_9P_VIRTIO=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+CONFIG_PCI_IOV=y
+CONFIG_PCI_PASID=y
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_ACPI=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_PCI_IMX6_HOST=y
+CONFIG_PCI_HISI=y
+CONFIG_PCI_ENDPOINT=y
+CONFIG_PCI_ENDPOINT_CONFIGFS=y
+CONFIG_PCI_EPF_TEST=m
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_BRCMSTB_GISB_ARB=y
+CONFIG_VEXPRESS_CONFIG=y
+CONFIG_MHI_BUS_PCI_GENERIC=m
+CONFIG_ARM_SCMI_PROTOCOL=y
+CONFIG_ARM_SCPI_PROTOCOL=y
+CONFIG_EFI_CAPSULE_LOADER=y
+CONFIG_IMX_DSP=m
+CONFIG_IMX_SCU=y
+CONFIG_IMX_SCU_PD=y
+CONFIG_GNSS=m
+CONFIG_GNSS_MTK_SERIAL=m
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_NBD=m
+CONFIG_VIRTIO_BLK=y
+CONFIG_BLK_DEV_NVME=m
+CONFIG_NVME_VERBOSE_ERRORS=y
+CONFIG_NVME_HWMON=y
+CONFIG_SRAM=y
+CONFIG_PCI_ENDPOINT_TEST=m
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=m
+CONFIG_UACCE=m
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_HISI_SAS=y
+CONFIG_SCSI_HISI_SAS_PCI=y
+CONFIG_MEGARAID_SAS=y
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_ATA=y
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_DWC=m
+CONFIG_AHCI_IMX=m
+CONFIG_AHCI_CEVA=y
+CONFIG_SATA_SIL24=y
+CONFIG_PATA_OF_PLATFORM=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_NETDEVICES=y
+CONFIG_MACVLAN=m
+CONFIG_MACVTAP=m
+CONFIG_TUN=y
+CONFIG_VETH=m
+CONFIG_VIRTIO_NET=y
+CONFIG_MHI_NET=m
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_ADAPTEC is not set
+# CONFIG_NET_VENDOR_AGERE is not set
+# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_NET_VENDOR_ALTEON is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AMD is not set
+# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_ATHEROS is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_CADENCE is not set
+# CONFIG_NET_VENDOR_CAVIUM is not set
+# CONFIG_NET_VENDOR_CHELSIO is not set
+# CONFIG_NET_VENDOR_CISCO is not set
+# CONFIG_NET_VENDOR_CORTINA is not set
+# CONFIG_NET_VENDOR_DEC is not set
+# CONFIG_NET_VENDOR_DLINK is not set
+# CONFIG_NET_VENDOR_EMULEX is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+CONFIG_FEC=y
+CONFIG_FSL_XGMAC_MDIO=y
+CONFIG_FSL_ENETC=y
+CONFIG_FSL_ENETC_VF=y
+CONFIG_FSL_ENETC_QOS=y
+# CONFIG_NET_VENDOR_GOOGLE is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_HUAWEI is not set
+CONFIG_E1000=y
+CONFIG_E1000E=y
+CONFIG_IGB=y
+CONFIG_IGBVF=y
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_MYRI is not set
+# CONFIG_NET_VENDOR_NI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETERION is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
+# CONFIG_NET_VENDOR_NVIDIA is not set
+# CONFIG_NET_VENDOR_OKI is not set
+# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
+# CONFIG_NET_VENDOR_PENSANDO is not set
+# CONFIG_NET_VENDOR_QLOGIC is not set
+# CONFIG_NET_VENDOR_BROCADE is not set
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RDC is not set
+CONFIG_R8169=m
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SILAN is not set
+# CONFIG_NET_VENDOR_SIS is not set
+# CONFIG_NET_VENDOR_SOLARFLARE is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_SOCIONEXT is not set
+CONFIG_STMMAC_ETH=m
+# CONFIG_NET_VENDOR_SUN is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_TEHUTI is not set
+CONFIG_TI_K3_AM65_CPSW_NUSS=y
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_AQUANTIA_PHY=y
+CONFIG_BROADCOM_PHY=m
+CONFIG_BCM54140_PHY=m
+CONFIG_BCM7XXX_PHY=m
+CONFIG_MARVELL_PHY=m
+CONFIG_MARVELL_10G_PHY=y
+CONFIG_MICREL_PHY=y
+CONFIG_MICROSEMI_PHY=y
+CONFIG_AT803X_PHY=y
+CONFIG_REALTEK_PHY=y
+CONFIG_ROCKCHIP_PHY=y
+CONFIG_DP83867_PHY=y
+CONFIG_DP83869_PHY=m
+CONFIG_DP83TD510_PHY=y
+CONFIG_VITESSE_PHY=y
+CONFIG_CAN_FLEXCAN=m
+CONFIG_CAN_M_CAN=m
+CONFIG_CAN_M_CAN_PLATFORM=m
+CONFIG_CAN_MCP251XFD=m
+CONFIG_MDIO_BCM_UNIMAC=y
+CONFIG_MDIO_GPIO=y
+CONFIG_MDIO_THUNDER=y
+CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y
+CONFIG_MDIO_BUS_MUX_MMIOREG=y
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9800=m
+CONFIG_USB_NET_SMSC75XX=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_WLAN_VENDOR_ADMTEK is not set
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_ATH10K_SDIO=m
+CONFIG_WCN36XX=m
+CONFIG_ATH11K=m
+CONFIG_ATH11K_AHB=m
+CONFIG_ATH11K_PCI=m
+# CONFIG_WLAN_VENDOR_ATMEL is not set
+CONFIG_BRCMFMAC=m
+# CONFIG_WLAN_VENDOR_CISCO is not set
+# CONFIG_WLAN_VENDOR_INTEL is not set
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_USB=m
+CONFIG_MT7921E=m
+# CONFIG_WLAN_VENDOR_RALINK is not set
+# CONFIG_WLAN_VENDOR_RSI is not set
+# CONFIG_WLAN_VENDOR_ST is not set
+CONFIG_WL18XX=m
+CONFIG_WLCORE_SDIO=m
+# CONFIG_WLAN_VENDOR_ZYDAS is not set
+# CONFIG_WLAN_VENDOR_QUANTENNA is not set
+CONFIG_WWAN=m
+CONFIG_MHI_WWAN_CTRL=m
+CONFIG_MHI_WWAN_MBIM=m
+CONFIG_INPUT_EVDEV=y
+CONFIG_KEYBOARD_ADC=m
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_SNVS_PWRKEY=m
+CONFIG_KEYBOARD_IMX_SC_KEY=m
+CONFIG_KEYBOARD_CROS_EC=y
+CONFIG_KEYBOARD_MTK_PMIC=m
+CONFIG_MOUSE_ELAN_I2C=m
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ATMEL_MXT=m
+CONFIG_TOUCHSCREEN_GOODIX=m
+CONFIG_TOUCHSCREEN_ELAN=m
+CONFIG_TOUCHSCREEN_EDT_FT5X06=m
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_BBNSM_PWRKEY=m
+CONFIG_INPUT_TPS65219_PWRBUTTON=y
+CONFIG_INPUT_PWM_BEEPER=m
+CONFIG_INPUT_PWM_VIBRA=m
+CONFIG_INPUT_RK805_PWRKEY=m
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_AMBAKMI=y
+CONFIG_LEGACY_PTY_COUNT=16
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_8250_OMAP=y
+CONFIG_SERIAL_8250_NR_UARTS=6
+CONFIG_SERIAL_8250_RUNTIME_UARTS=6
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_XILINX_PS_UART=y
+CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_SERIAL_FSL_LINFLEXUART=y
+CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y
+CONFIG_RPMSG_TTY=m
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_VIRTIO_CONSOLE=y
+CONFIG_IPMI_HANDLER=m
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_VIRTIO=y
+CONFIG_TCG_TPM=y
+CONFIG_TCG_TIS=m
+CONFIG_TCG_TIS_SPI=m
+CONFIG_TCG_TIS_SPI_CR50=y
+CONFIG_TCG_TIS_I2C_CR50=m
+CONFIG_TCG_TIS_I2C_INFINEON=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
+CONFIG_I2C_MUX_PCA954x=y
+CONFIG_I2C_CADENCE=m
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
+CONFIG_I2C_GPIO=m
+CONFIG_I2C_IMX=y
+CONFIG_I2C_IMX_LPI2C=y
+CONFIG_I2C_OMAP=y
+CONFIG_I2C_RK3X=y
+CONFIG_I2C_CROS_EC_TUNNEL=y
+CONFIG_SPI=y
+CONFIG_SPI_CADENCE_QUADSPI=y
+CONFIG_SPI_DESIGNWARE=m
+CONFIG_SPI_DW_DMA=y
+CONFIG_SPI_DW_MMIO=m
+CONFIG_SPI_FSL_LPSPI=y
+CONFIG_SPI_FSL_QUADSPI=y
+CONFIG_SPI_NXP_FLEXSPI=y
+CONFIG_SPI_IMX=m
+CONFIG_SPI_OMAP24XX=m
+CONFIG_SPI_PL022=y
+CONFIG_SPI_SPIDEV=y
+CONFIG_SPMI=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_MAX77620=y
+CONFIG_PINCTRL_RK805=m
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_PINCTRL_IMX8MM=y
+CONFIG_PINCTRL_IMX8MN=y
+CONFIG_PINCTRL_IMX8MP=y
+CONFIG_PINCTRL_IMX8MQ=y
+CONFIG_PINCTRL_IMX8QM=y
+CONFIG_PINCTRL_IMX8QXP=y
+CONFIG_PINCTRL_IMX8DXL=y
+CONFIG_PINCTRL_IMX8ULP=y
+CONFIG_PINCTRL_IMX93=y
+CONFIG_GPIO_ALTERA=m
+CONFIG_GPIO_DAVINCI=y
+CONFIG_GPIO_DWAPB=y
+CONFIG_GPIO_MB86S7X=y
+CONFIG_GPIO_MXC=y
+CONFIG_GPIO_PL061=y
+CONFIG_GPIO_SYSCON=y
+CONFIG_GPIO_WCD934X=m
+CONFIG_GPIO_XGENE=y
+CONFIG_GPIO_MAX732X=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X_IRQ=y
+CONFIG_GPIO_BD9571MWV=m
+CONFIG_GPIO_MAX77620=y
+CONFIG_POWER_RESET_BRCMSTB=y
+CONFIG_POWER_RESET_XGENE=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SYSCON_REBOOT_MODE=y
+CONFIG_NVMEM_REBOOT_MODE=m
+CONFIG_BATTERY_QCOM_BATTMGR=m
+CONFIG_BATTERY_SBS=m
+CONFIG_BATTERY_BQ27XXX=y
+CONFIG_BATTERY_MAX17042=m
+CONFIG_CHARGER_MT6360=m
+CONFIG_CHARGER_BQ25890=m
+CONFIG_CHARGER_BQ25980=m
+CONFIG_CHARGER_RK817=m
+CONFIG_SENSORS_ARM_SCMI=y
+CONFIG_SENSORS_ARM_SCPI=y
+CONFIG_SENSORS_GPIO_FAN=m
+CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_PWM_FAN=m
+CONFIG_SENSORS_INA2XX=m
+CONFIG_SENSORS_INA3221=m
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_THERMAL_EMULATION=y
+CONFIG_IMX_SC_THERMAL=m
+CONFIG_IMX8MM_THERMAL=m
+CONFIG_K3_THERMAL=y
+CONFIG_QORIQ_THERMAL=m
+CONFIG_GENERIC_ADC_THERMAL=m
+CONFIG_WATCHDOG=y
+CONFIG_ARM_SP805_WATCHDOG=y
+CONFIG_ARM_SBSA_WATCHDOG=y
+CONFIG_DW_WATCHDOG=y
+CONFIG_K3_RTI_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_IMX_SC_WDT=m
+CONFIG_IMX7ULP_WDT=m
+CONFIG_ARM_SMC_WATCHDOG=y
+CONFIG_MFD_BD9571MWV=y
+CONFIG_MFD_AXP20X_I2C=y
+CONFIG_MFD_HI6421_PMIC=y
+CONFIG_MFD_MAX77620=y
+CONFIG_MFD_MT6360=y
+CONFIG_MFD_MT6397=y
+CONFIG_MFD_RK8XX_I2C=y
+CONFIG_MFD_RK8XX_SPI=y
+CONFIG_MFD_SEC_CORE=y
+CONFIG_MFD_TI_AM335X_TSCADC=m
+CONFIG_MFD_TPS65219=y
+CONFIG_MFD_ROHM_BD718XX=y
+CONFIG_MFD_WCD934X=m
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_AXP20X=y
+CONFIG_REGULATOR_BD718XX=y
+CONFIG_REGULATOR_BD9571MWV=y
+CONFIG_REGULATOR_CROS_EC=y
+CONFIG_REGULATOR_FAN53555=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_HI6421V530=y
+CONFIG_REGULATOR_MAX77620=y
+CONFIG_REGULATOR_MAX8973=y
+CONFIG_REGULATOR_MP8859=y
+CONFIG_REGULATOR_MT6315=m
+CONFIG_REGULATOR_MT6357=y
+CONFIG_REGULATOR_MT6358=y
+CONFIG_REGULATOR_MT6359=y
+CONFIG_REGULATOR_MT6360=y
+CONFIG_REGULATOR_MT6397=y
+CONFIG_REGULATOR_PCA9450=y
+CONFIG_REGULATOR_PF8X00=y
+CONFIG_REGULATOR_PFUZE100=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_REGULATOR_QCOM_SPMI=y
+CONFIG_REGULATOR_RAA215300=y
+CONFIG_REGULATOR_RK808=y
+CONFIG_REGULATOR_S2MPS11=y
+CONFIG_REGULATOR_TPS65132=m
+CONFIG_REGULATOR_TPS65219=y
+CONFIG_REGULATOR_VCTRL=m
+CONFIG_MEDIA_SUPPORT=m
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_PLATFORM_SUPPORT=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_VIDEO_AMPHION_VPU=m
+CONFIG_VIDEO_IMX7_CSI=m
+CONFIG_VIDEO_IMX8MQ_MIPI_CSI2=m
+CONFIG_VIDEO_IMX_MIPI_CSIS=m
+CONFIG_VIDEO_IMX8_ISI=m
+CONFIG_VIDEO_IMX8_ISI_M2M=y
+CONFIG_VIDEO_IMX8_JPEG=m
+CONFIG_VIDEO_HANTRO=m
+CONFIG_VIDEO_AR0521=m
+CONFIG_VIDEO_IMX219=m
+CONFIG_VIDEO_IMX290=m
+CONFIG_VIDEO_IMX412=m
+CONFIG_VIDEO_OV5640=m
+CONFIG_VIDEO_OV5645=m
+CONFIG_VIDEO_OV5647=m
+CONFIG_VIDEO_OV9282=m
+CONFIG_DRM=m
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_I2C_SIL164=m
+CONFIG_DRM_I2C_NXP_TDA998X=m
+CONFIG_DRM_HDLCD=m
+CONFIG_DRM_MALI_DISPLAY=m
+CONFIG_DRM_KOMEDA=m
+CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m
+CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_SIMPLE=m
+CONFIG_DRM_PANEL_EDP=m
+CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m
+CONFIG_DRM_PANEL_RAYDIUM_RM67191=m
+CONFIG_DRM_PANEL_SITRONIX_ST7703=m
+CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m
+CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
+CONFIG_DRM_DISPLAY_CONNECTOR=m
+CONFIG_DRM_FSL_LDB=m
+CONFIG_DRM_LONTIUM_LT8912B=m
+CONFIG_DRM_LONTIUM_LT9611=m
+CONFIG_DRM_LONTIUM_LT9611UXC=m
+CONFIG_DRM_ITE_IT66121=m
+CONFIG_DRM_NWL_MIPI_DSI=m
+CONFIG_DRM_PARADE_PS8640=m
+CONFIG_DRM_SAMSUNG_DSIM=m
+CONFIG_DRM_SII902X=m
+CONFIG_DRM_SIMPLE_BRIDGE=m
+CONFIG_DRM_THINE_THC63LVD1024=m
+CONFIG_DRM_TOSHIBA_TC358767=m
+CONFIG_DRM_TOSHIBA_TC358768=m
+CONFIG_DRM_TI_TFP410=m
+CONFIG_DRM_TI_SN65DSI83=m
+CONFIG_DRM_TI_SN65DSI86=m
+CONFIG_DRM_ANALOGIX_ANX7625=m
+CONFIG_DRM_I2C_ADV7511=m
+CONFIG_DRM_I2C_ADV7511_AUDIO=y
+CONFIG_DRM_CDNS_MHDP8546=m
+CONFIG_DRM_IMX8QM_LDB=m
+CONFIG_DRM_IMX8QXP_LDB=m
+CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=m
+CONFIG_DRM_IMX_DCSS=m
+CONFIG_DRM_ETNAVIV=m
+CONFIG_DRM_MXSFB=m
+CONFIG_DRM_IMX_LCDIF=m
+CONFIG_DRM_TIDSS=m
+CONFIG_DRM_POWERVR=m
+CONFIG_FB=y
+CONFIG_FB_EFI=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_PWM=m
+CONFIG_BACKLIGHT_LP855X=m
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_ALOOP=m
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_FSL_ASRC=m
+CONFIG_SND_SOC_FSL_MQS=m
+CONFIG_SND_SOC_FSL_MICFIL=m
+CONFIG_SND_SOC_FSL_EASRC=m
+CONFIG_SND_SOC_FSL_XCVR=m
+CONFIG_SND_SOC_FSL_RPMSG=m
+CONFIG_SND_IMX_SOC=m
+CONFIG_SND_SOC_IMX_SGTL5000=m
+CONFIG_SND_SOC_IMX_SPDIF=m
+CONFIG_SND_SOC_FSL_ASOC_CARD=m
+CONFIG_SND_SOC_IMX_AUDMIX=m
+CONFIG_SND_SOC_IMX_HDMI=m
+CONFIG_SND_SOC_J721E_EVM=m
+CONFIG_SND_SOC_ADAU7002=m
+CONFIG_SND_SOC_AK4613=m
+CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CROS_EC_CODEC=m
+CONFIG_SND_SOC_DA7213=m
+CONFIG_SND_SOC_DMIC=m
+CONFIG_SND_SOC_ES7134=m
+CONFIG_SND_SOC_ES7241=m
+CONFIG_SND_SOC_ES8316=m
+CONFIG_SND_SOC_GTM601=m
+CONFIG_SND_SOC_MAX98357A=m
+CONFIG_SND_SOC_MAX98927=m
+CONFIG_SND_SOC_RK817=m
+CONFIG_SND_SOC_RT5640=m
+CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
+CONFIG_SND_SOC_SIMPLE_MUX=m
+CONFIG_SND_SOC_SPDIF=m
+CONFIG_SND_SOC_TAS2552=m
+CONFIG_SND_SOC_TAS571X=m
+CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
+CONFIG_SND_SOC_TLV320AIC3X_I2C=m
+CONFIG_SND_SOC_TS3A227E=m
+CONFIG_SND_SOC_WM8904=m
+CONFIG_SND_SOC_MT6358=m
+CONFIG_SND_SOC_NAU8822=m
+CONFIG_SND_SOC_LPASS_WSA_MACRO=m
+CONFIG_SND_SOC_LPASS_VA_MACRO=m
+CONFIG_SND_SOC_LPASS_RX_MACRO=m
+CONFIG_SND_SOC_LPASS_TX_MACRO=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SND_AUDIO_GRAPH_CARD=m
+CONFIG_SND_AUDIO_GRAPH_CARD2=m
+CONFIG_HID_MULTITOUCH=m
+CONFIG_USB_HIDDEV=y
+CONFIG_I2C_HID_ACPI=m
+CONFIG_I2C_HID_OF=m
+CONFIG_USB_CONN_GPIO=y
+CONFIG_USB=y
+CONFIG_USB_OTG=y
+CONFIG_USB_MON=m
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_PCI_RENESAS=m
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_ACM=m
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CDNS_SUPPORT=m
+CONFIG_USB_CDNS3=m
+CONFIG_USB_CDNS3_GADGET=y
+CONFIG_USB_CDNS3_HOST=y
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_DWC2=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_ISP1760=y
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_HUB_USB251XB=y
+CONFIG_USB_HSIC_USB3503=y
+CONFIG_USB_ONBOARD_HUB=m
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_ULPI=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_SNP_UDC_PLAT=y
+CONFIG_USB_BDC_UDC=y
+CONFIG_USB_CONFIGFS=m
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_TYPEC=m
+CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TCPCI=m
+CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC_UCSI=m
+CONFIG_UCSI_CCG=m
+CONFIG_UCSI_PMIC_GLINK=m
+CONFIG_TYPEC_TPS6598X=m
+CONFIG_TYPEC_HD3SS3220=m
+CONFIG_TYPEC_MUX_FSA4480=m
+CONFIG_TYPEC_MUX_GPIO_SBU=m
+CONFIG_MMC=y
+CONFIG_MMC_BLOCK_MINORS=32
+CONFIG_MMC_ARMMMCI=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_ACPI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ARASAN=y
+CONFIG_MMC_SDHCI_OF_ESDHC=y
+CONFIG_MMC_SDHCI_OF_DWCMSHC=y
+CONFIG_MMC_SDHCI_CADENCE=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+CONFIG_MMC_SDHCI_F_SDH30=y
+CONFIG_MMC_SPI=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_DW_EXYNOS=y
+CONFIG_MMC_DW_HI3798CV200=y
+CONFIG_MMC_DW_K3=y
+CONFIG_MMC_MTK=y
+CONFIG_MMC_SDHCI_XENON=y
+CONFIG_MMC_SDHCI_AM654=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFS_BSG=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_CDNS_PLATFORM=m
+CONFIG_SCSI_UFS_TI_J721E=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_MULTICOLOR=m
+CONFIG_LEDS_LM3692X=m
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_PWM=y
+CONFIG_LEDS_SYSCON=y
+CONFIG_LEDS_QCOM_LPG=m
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_DISK=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+CONFIG_LEDS_TRIGGER_PANIC=y
+CONFIG_EDAC=y
+CONFIG_EDAC_GHES=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_HYM8563=m
+CONFIG_RTC_DRV_MAX77686=y
+CONFIG_RTC_DRV_RK808=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_PCF85063=m
+CONFIG_RTC_DRV_PCF85363=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_BQ32K=m
+CONFIG_RTC_DRV_RX8581=m
+CONFIG_RTC_DRV_RV3028=m
+CONFIG_RTC_DRV_RV8803=m
+CONFIG_RTC_DRV_S5M=y
+CONFIG_RTC_DRV_DS3232=y
+CONFIG_RTC_DRV_PCF2127=m
+CONFIG_RTC_DRV_EFI=y
+CONFIG_RTC_DRV_CROS_EC=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_RTC_DRV_SNVS=m
+CONFIG_RTC_DRV_BBNSM=m
+CONFIG_RTC_DRV_IMX_SC=m
+CONFIG_RTC_DRV_MT6397=m
+CONFIG_RTC_DRV_TI_K3=m
+CONFIG_DMADEVICES=y
+CONFIG_BCM_SBA_RAID=m
+CONFIG_FSL_EDMA=y
+CONFIG_IMX_SDMA=m
+CONFIG_MV_XOR_V2=y
+CONFIG_PL330_DMA=y
+CONFIG_QCOM_HIDMA_MGMT=y
+CONFIG_QCOM_HIDMA=y
+CONFIG_TI_K3_UDMA=y
+CONFIG_TI_K3_UDMA_GLUE_LAYER=y
+CONFIG_VFIO=y
+CONFIG_VFIO_PCI=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_VIRTIO_BALLOON=y
+CONFIG_VIRTIO_MMIO=y
+CONFIG_XEN_GNTDEV=y
+CONFIG_XEN_GRANT_DEV_ALLOC=y
+CONFIG_STAGING=y
+CONFIG_STAGING_MEDIA=y
+CONFIG_VIDEO_MAX96712=m
+CONFIG_CHROME_PLATFORMS=y
+CONFIG_CROS_EC=y
+CONFIG_CROS_EC_I2C=y
+CONFIG_CROS_EC_RPMSG=m
+CONFIG_CROS_EC_SPI=y
+CONFIG_CROS_EC_CHARDEV=m
+CONFIG_CLK_VEXPRESS_OSC=y
+CONFIG_COMMON_CLK_RK808=y
+CONFIG_COMMON_CLK_SCMI=y
+CONFIG_COMMON_CLK_SCPI=y
+CONFIG_COMMON_CLK_CS2000_CP=y
+CONFIG_COMMON_CLK_S2MPS11=y
+CONFIG_COMMON_CLK_XGENE=y
+CONFIG_COMMON_CLK_PWM=y
+CONFIG_COMMON_CLK_RS9_PCIE=y
+CONFIG_COMMON_CLK_VC5=y
+CONFIG_COMMON_CLK_BD718XX=m
+CONFIG_CLK_IMX8MM=y
+CONFIG_CLK_IMX8MN=y
+CONFIG_CLK_IMX8MP=y
+CONFIG_CLK_IMX8MQ=y
+CONFIG_CLK_IMX8QXP=y
+CONFIG_CLK_IMX8ULP=y
+CONFIG_CLK_IMX93=y
+CONFIG_TI_SCI_CLK=y
+CONFIG_HWSPINLOCK=y
+CONFIG_ARM_MHU=y
+CONFIG_IMX_MBOX=y
+CONFIG_PLATFORM_MHU=y
+CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
+CONFIG_IOMMU_IO_PGTABLE_DART=y
+CONFIG_ARM_SMMU=y
+CONFIG_ARM_SMMU_V3=y
+CONFIG_REMOTEPROC=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_IMX_REMOTEPROC=y
+CONFIG_IMX_DSP_REMOTEPROC=m
+CONFIG_TI_K3_DSP_REMOTEPROC=m
+CONFIG_TI_K3_R5_REMOTEPROC=m
+CONFIG_RPMSG_CHAR=m
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_QCOM_GLINK_RPM=y
+CONFIG_RPMSG_VIRTIO=y
+CONFIG_SOUNDWIRE=m
+CONFIG_SOUNDWIRE_QCOM=m
+CONFIG_SOC_BRCMSTB=y
+CONFIG_FSL_RCPM=y
+CONFIG_QCOM_PMIC_GLINK=m
+CONFIG_TI_SCI_PM_DOMAINS=y
+CONFIG_TI_PRUSS=m
+CONFIG_DEVFREQ_GOV_PASSIVE=m
+CONFIG_ARM_IMX_BUS_DEVFREQ=y
+CONFIG_ARM_IMX8M_DDRC_DEVFREQ=m
+CONFIG_EXTCON_GPIO=y
+CONFIG_EXTCON_PTN5150=m
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_EXTCON_USBC_CROS_EC=y
+CONFIG_MEMORY=y
+CONFIG_IIO=y
+CONFIG_IMX8QXP_ADC=m
+CONFIG_MAX9611=m
+CONFIG_QCOM_SPMI_VADC=m
+CONFIG_QCOM_SPMI_ADC5=m
+CONFIG_TI_ADS1015=y
+CONFIG_TI_AM335X_ADC=m
+CONFIG_IIO_CROS_EC_SENSORS_CORE=m
+CONFIG_IIO_CROS_EC_SENSORS=m
+CONFIG_IIO_ST_LSM6DSX=m
+CONFIG_IIO_CROS_EC_LIGHT_PROX=m
+CONFIG_SENSORS_ISL29018=m
+CONFIG_VCNL4000=m
+CONFIG_IIO_ST_MAGN_3AXIS=m
+CONFIG_IIO_CROS_EC_BARO=m
+CONFIG_MPL3115=m
+CONFIG_PWM=y
+CONFIG_PWM_CROS_EC=m
+CONFIG_PWM_IMX27=m
+CONFIG_PWM_TIECAP=m
+CONFIG_PWM_TIEHRPWM=m
+CONFIG_RESET_IMX7=y
+CONFIG_RESET_TI_SCI=y
+CONFIG_PHY_CAN_TRANSCEIVER=m
+CONFIG_PHY_CADENCE_TORRENT=m
+CONFIG_PHY_CADENCE_SIERRA=m
+CONFIG_PHY_MIXEL_LVDS_PHY=m
+CONFIG_PHY_MIXEL_MIPI_DPHY=m
+CONFIG_PHY_FSL_IMX8M_PCIE=y
+CONFIG_PHY_QCOM_USB_HS=m
+CONFIG_PHY_SAMSUNG_USB2=y
+CONFIG_PHY_AM654_SERDES=m
+CONFIG_PHY_J721E_WIZ=m
+CONFIG_ARM_CCI_PMU=m
+CONFIG_ARM_CCN=m
+CONFIG_ARM_CMN=m
+CONFIG_ARM_SMMU_V3_PMU=m
+CONFIG_ARM_DSU_PMU=m
+CONFIG_FSL_IMX8_DDR_PMU=m
+CONFIG_ARM_SPE_PMU=m
+CONFIG_ARM_DMC620_PMU=m
+CONFIG_HISI_PMU=y
+CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU=m
+CONFIG_NVMEM_LAYOUT_SL28_VPD=m
+CONFIG_NVMEM_IMX_OCOTP=y
+CONFIG_NVMEM_IMX_OCOTP_ELE=m
+CONFIG_NVMEM_IMX_OCOTP_SCU=y
+CONFIG_NVMEM_RMEM=m
+CONFIG_NVMEM_SNVS_LPGPR=y
+CONFIG_NVMEM_SPMI_SDAM=m
+CONFIG_FPGA=y
+CONFIG_FPGA_MGR_ALTERA_CVP=m
+CONFIG_FPGA_BRIDGE=m
+CONFIG_ALTERA_FREEZE_BRIDGE=m
+CONFIG_FPGA_REGION=m
+CONFIG_OF_FPGA_REGION=m
+CONFIG_TEE=y
+CONFIG_OPTEE=y
+CONFIG_MUX_GPIO=m
+CONFIG_MUX_MMIO=y
+CONFIG_SLIM_QCOM_CTRL=m
+CONFIG_INTERCONNECT=y
+CONFIG_INTERCONNECT_IMX=y
+CONFIG_INTERCONNECT_IMX8MM=m
+CONFIG_INTERCONNECT_IMX8MN=m
+CONFIG_INTERCONNECT_IMX8MQ=m
+CONFIG_INTERCONNECT_IMX8MP=y
+CONFIG_COUNTER=m
+CONFIG_HTE=y
+CONFIG_EXFAT_FS=m
+CONFIG_EXT2_FS=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_BTRFS_FS=m
+CONFIG_BTRFS_FS_POSIX_ACL=y
+CONFIG_FANOTIFY=y
+CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
+CONFIG_QUOTA=y
+CONFIG_AUTOFS_FS=y
+CONFIG_FUSE_FS=m
+CONFIG_CUSE=m
+CONFIG_VFAT_FS=y
+CONFIG_NTFS_FS=m
+CONFIG_NTFS_RW=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_HUGETLBFS=y
+CONFIG_EFIVAR_FS=y
+CONFIG_SQUASHFS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
+CONFIG_ROOT_NFS=y
+CONFIG_9P_FS=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_SECURITY=y
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_ECHAINIV=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_ZSTD=m
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_USER_API_RNG=m
+CONFIG_CRYPTO_CHACHA20_NEON=m
+CONFIG_CRYPTO_GHASH_ARM64_CE=y
+CONFIG_CRYPTO_SHA1_ARM64_CE=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+CONFIG_CRYPTO_SHA512_ARM64_CE=m
+CONFIG_CRYPTO_SHA3_ARM64=m
+CONFIG_CRYPTO_SM3_ARM64_CE=m
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
+CONFIG_CRYPTO_AES_ARM64_BS=m
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
+CONFIG_CRYPTO_CRCT10DIF_ARM64_CE=m
+CONFIG_CRYPTO_DEV_FSL_CAAM=m
+CONFIG_CRYPTO_DEV_CCREE=m
+CONFIG_CRYPTO_DEV_HISI_SEC2=m
+CONFIG_CRYPTO_DEV_HISI_ZIP=m
+CONFIG_CRYPTO_DEV_HISI_HPRE=m
+CONFIG_CRYPTO_DEV_HISI_TRNG=m
+CONFIG_CRYPTO_DEV_AMLOGIC_GXL=m
+CONFIG_CRYPTO_DEV_SA2UL=m
+CONFIG_PACKING=y
+CONFIG_INDIRECT_PIO=y
+CONFIG_CRC_CCITT=m
+CONFIG_DMA_RESTRICTED_POOL=y
+CONFIG_CMA_SIZE_MBYTES=1376
+CONFIG_CMA_SIZE_PERCENTAGE=25
+CONFIG_CMA_SIZE_SEL_MIN=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
+CONFIG_DEBUG_INFO_REDUCED=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_FS=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_FTRACE is not set
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
+CONFIG_CORESIGHT=m
+CONFIG_CORESIGHT_LINK_AND_SINK_TMC=m
+CONFIG_CORESIGHT_CATU=m
+CONFIG_CORESIGHT_SINK_TPIU=m
+CONFIG_CORESIGHT_SINK_ETBV10=m
+CONFIG_CORESIGHT_STM=m
+CONFIG_CORESIGHT_CPU_DEBUG=m
+CONFIG_CORESIGHT_CTI=m
+CONFIG_MEMTEST=y
diff --git a/recipes-kernel/linux/linux-toradex-upstream/aarch64/toradex_aarch64.config b/recipes-kernel/linux/linux-toradex-upstream/aarch64/toradex_aarch64.config
new file mode 100644
index 0000000..a28c83c
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/aarch64/toradex_aarch64.config
@@ -0,0 +1,534 @@
+## This file contains the differences to arm64 defconfig
+## it is used to generate toradex defconfig with the following command
+##
+## make defconfig
+## scripts/kconfig/merge_config.sh .config toradex_aarch64.config
+## make savedefconfig
+
+
+##
+## Section to enable kernel features
+##
+
+# CPU Frequency scaling
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+# Usefull for debugging
+CONFIG_DYNAMIC_DEBUG=y
+
+# Filesystems widely used
+CONFIG_EXFAT_FS=m
+CONFIG_NTFS_FS=m
+CONFIG_NTFS_RW=y
+
+# NVMe debugging/features
+CONFIG_NVME_HWMON=y
+CONFIG_NVME_VERBOSE_ERRORS=y
+
+# Systemd, https://github.com/systemd/systemd/blob/main/README
+CONFIG_DEVTMPFS=y
+CONFIG_CGROUPS=y
+CONFIG_INOTIFY_USER=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EPOLL=y
+CONFIG_UNIX=y
+CONFIG_SYSFS=y
+CONFIG_PROC_FS=y
+CONFIG_FHANDLE=y
+CONFIG_SYSFS_DEPRECATED=n
+CONFIG_UEVENT_HELPER=n
+CONFIG_FW_LOADER_USER_HELPER=n
+CONFIG_NET_NS=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_BPF=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_RT_GROUP_SCHED=n
+
+# Spidev, force the driver to be builtin
+CONFIG_SPI_SPIDEV=y
+
+# Extcon used for dual-role USB switching
+CONFIG_EXTCON_GPIO=y
+
+# Gadgetfs is used for RNDIS (Ethernet over USB device)
+CONFIG_USB_GADGETFS=m
+
+# ADC used on Verdin boards
+CONFIG_TI_ADS1015=y
+
+# RTC widely used on Toradex eval-boards
+CONFIG_RTC_DRV_DS1307=y
+
+# Support HID devices
+# This suppresses also the warning "hid-generic: device has no listeners, quitting"
+CONFIG_USB_HIDDEV=y
+
+# USB hub used on modules and or eval-boards
+CONFIG_USB_HUB_USB251XB=y
+
+# Enable usbmon which allows capturing USB traffic using tcpdump
+CONFIG_USB_MON=m
+
+# Thermal emergency poweroff
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+
+# Wi-Fi and Bluetooth used on modules plus related useful settings
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIUART_MRVL=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_NXPUART=m
+CONFIG_BT_MRVL=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT=m
+CONFIG_CFG80211=m
+CONFIG_MAC80211=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_USB=m
+CONFIG_MWIFIEX=m
+CONFIG_R8188EU=m
+CONFIG_RFKILL_GPIO=m
+CONFIG_RFKILL=m
+
+# Verdin DSI Devices
+CONFIG_PWM=y
+CONFIG_DRM_LONTIUM_LT8912B=m
+CONFIG_DRM_TI_SN65DSI83=m
+
+# Verdin EEPROM
+CONFIG_EEPROM_AT24=y
+
+# Verdin Serial 8250 UARTs
+CONFIG_SERIAL_8250_NR_UARTS=6
+CONFIG_SERIAL_8250_RUNTIME_UARTS=6
+
+# Cameras
+CONFIG_VIDEO_AR0521=m
+CONFIG_VIDEO_IMX290=m
+CONFIG_VIDEO_OV5647=m
+CONFIG_VIDEO_OV9282=m
+CONFIG_VIDEO_TC358743=m
+
+# CMA
+CONFIG_CMA_SIZE_MBYTES=1376
+CONFIG_CMA_SIZE_PERCENTAGE=25
+# CONFIG_CMA_SIZE_SEL_MBYTES is not set
+# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
+CONFIG_CMA_SIZE_SEL_MIN=y
+
+# Verdin display adapters
+CONFIG_DRM_LONTIUM_LT8912B=m
+CONFIG_DRM_TI_SN65DSI83=m
+CONFIG_DRM_TOSHIBA_TC358767=m
+
+##
+## Section to enable Sitara K3 aarch64 SoC
+##
+
+# GPU
+CONFIG_DRM_POWERVR=m
+
+##
+## Section to enable i.MX aarch64 SoC
+##
+
+# GPU
+CONFIG_DRM_ETNAVIV=m
+
+# RPMsg and RemoteProc for HMP
+CONFIG_IMX_REMOTEPROC=y
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_VIRTIO=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_RPMSG_TTY=m
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
+
+# Enable i.MX PCIe
+CONFIG_PCI_IMX6_HOST=y
+CONFIG_PCI_IMX6_EP=m
+
+# Enable i.MX 8M series SoC drivers
+CONFIG_DRM_FSL_LDB=m
+CONFIG_DRM_IMX_LCDIF=m
+CONFIG_SND_SOC_FSL_AUD2HTX=m
+CONFIG_SND_SOC_FSL_RPMSG=m
+CONFIG_SND_SOC_FSL_XCVR=m
+CONFIG_SND_SOC_IMX_HDMI=m
+
+# Enable i.MX 8/8X series drivers
+CONFIG_AHCI_IMX=m
+CONFIG_DRM_IMX8QM_LDB=m
+CONFIG_DRM_IMX8QXP_LDB=m
+CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK=m
+CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=m
+CONFIG_IMX8QXP_ADC=m
+CONFIG_PHY_MIXEL_LVDS_PHY=m
+CONFIG_SND_SOC_FSL_MQS=m
+CONFIG_VIDEO_AMPHION_VPU=m
+CONFIG_VIDEO_IMX8_JPEG=m
+CONFIG_VIDEO_IMX8MQ_MIPI_CSI2=m
+
+# Optional HiFi4 DSP
+CONFIG_IMX_DSP=m
+CONFIG_IMX_DSP_REMOTEPROC=m
+
+
+##
+## Section to enable TI aarch64 SoC
+##
+
+CONFIG_K3_RTI_WATCHDOG=y
+CONFIG_K3_THERMAL=y
+
+# Verdin PMIC
+CONFIG_MFD_TPS65219=y
+CONFIG_REGULATOR_TPS65219=y
+CONFIG_INPUT_TPS65219_PWRBUTTON=y
+
+
+##
+## Section to disable kernel features
+##
+
+# Not used ADC Driver
+CONFIG_IMX93_ADC=n
+
+# Disable architectures and SoCs not used by Toradex
+CONFIG_ARCH_ACTIONS=n
+CONFIG_ARCH_SUNXI=n
+CONFIG_ARCH_ALPINE=n
+CONFIG_ARCH_APPLE=n
+CONFIG_ARCH_BCM=n
+CONFIG_ARCH_BCM2835=n
+CONFIG_ARCH_BCM_IPROC=n
+CONFIG_ARCH_BCMBCA=y
+CONFIG_ARCH_BRCMSTB=n
+CONFIG_ARCH_BERLIN=n
+CONFIG_ARCH_BITMAIN=n
+CONFIG_ARCH_EXYNOS=n
+CONFIG_ARCH_SPARX5=n
+CONFIG_ARCH_LG1K=n
+CONFIG_ARCH_HISI=n
+CONFIG_ARCH_KEEMBAY=n
+CONFIG_ARCH_MEDIATEK=n
+CONFIG_ARCH_MESON=n
+CONFIG_ARCH_MVEBU=n
+CONFIG_ARCH_LAYERSCAPE=n
+CONFIG_ARCH_S32=n
+CONFIG_ARCH_MA35=n
+CONFIG_ARCH_NPCM=n
+CONFIG_ARCH_QCOM=n
+CONFIG_ARCH_REALTEK=n
+CONFIG_ARCH_RENESAS=n
+CONFIG_ARCH_ROCKCHIP=n
+CONFIG_ARCH_SEATTLE=n
+CONFIG_ARCH_INTEL_SOCFPGA=n
+CONFIG_ARCH_STM32=n
+CONFIG_ARCH_SYNQUACER=n
+CONFIG_ARCH_TEGRA=n
+CONFIG_ARCH_TESLA_FSD=n
+CONFIG_ARCH_SPRD=n
+CONFIG_ARCH_THUNDER=n
+CONFIG_ARCH_THUNDER2=n
+CONFIG_ARCH_UNIPHIER=n
+CONFIG_ARCH_VEXPRESS=n
+CONFIG_ARCH_VISCONTI=n
+CONFIG_ARCH_XGENE=n
+CONFIG_ARCH_ZYNQMP=n
+
+# Disable NAND as Toradex uses only eMMC on ARM 64bit boards
+CONFIG_MTD=n
+
+# Disable unnecessary TV stuff
+CONFIG_DRM_NOUVEAU=n
+CONFIG_NET_DSA=n
+CONFIG_NFC=n
+CONFIG_OVERLAY_FS=n
+CONFIG_RC_CORE=n
+CONFIG_MTD_UBI=n
+CONFIG_JFFS2_FS=n
+CONFIG_UBIFS_FS=n
+# Media
+CONFIG_DVB_CORE=n
+CONFIG_DVB_M88DS3103=n
+CONFIG_DVB_MXL5XX=n
+CONFIG_DVB_STB0899=n
+CONFIG_DVB_STB6100=n
+CONFIG_DVB_STV090x=n
+CONFIG_DVB_STV0910=n
+CONFIG_DVB_STV6110x=n
+CONFIG_DVB_STV6111=n
+CONFIG_DVB_DRXK=n
+CONFIG_DVB_MN88472=n
+CONFIG_DVB_MN88473=n
+CONFIG_DVB_SI2165=n
+CONFIG_DVB_TDA18271C2DD=n
+CONFIG_DVB_CX24110=n
+CONFIG_DVB_CX24116=n
+CONFIG_DVB_CX24117=n
+CONFIG_DVB_CX24120=n
+CONFIG_DVB_CX24123=n
+CONFIG_DVB_DS3000=n
+CONFIG_DVB_MB86A16=n
+CONFIG_DVB_MT312=n
+CONFIG_DVB_S5H1420=n
+CONFIG_DVB_SI21XX=n
+CONFIG_DVB_STB6000=n
+CONFIG_DVB_STV0288=n
+CONFIG_DVB_STV0299=n
+CONFIG_DVB_STV0900=n
+CONFIG_DVB_STV6110=n
+CONFIG_DVB_TDA10071=n
+CONFIG_DVB_TDA10086=n
+CONFIG_DVB_TDA8083=n
+CONFIG_DVB_TDA8261=n
+CONFIG_DVB_TDA826X=n
+CONFIG_DVB_TS2020=n
+CONFIG_DVB_TUA6100=n
+CONFIG_DVB_TUNER_CX24113=n
+CONFIG_DVB_TUNER_ITD1000=n
+CONFIG_DVB_VES1X93=n
+CONFIG_DVB_ZL10036=n
+CONFIG_DVB_ZL10039=n
+CONFIG_DVB_AF9013=n
+CONFIG_DVB_CX22700=n
+CONFIG_DVB_CX22702=n
+CONFIG_DVB_CXD2820R=n
+CONFIG_DVB_CXD2841ER=n
+CONFIG_DVB_DIB3000MB=n
+CONFIG_DVB_DIB3000MC=n
+CONFIG_DVB_DIB7000M=n
+CONFIG_DVB_DIB7000P=n
+CONFIG_DVB_DIB9000=n
+CONFIG_DVB_DRXD=n
+CONFIG_DVB_EC100=n
+CONFIG_DVB_L64781=n
+CONFIG_DVB_MT352=n
+CONFIG_DVB_NXT6000=n
+CONFIG_DVB_RTL2830=n
+CONFIG_DVB_RTL2832=n
+CONFIG_DVB_RTL2832_SDR=n
+CONFIG_DVB_S5H1432=n
+CONFIG_DVB_SI2168=n
+CONFIG_DVB_SP887X=n
+CONFIG_DVB_STV0367=n
+CONFIG_DVB_TDA10048=n
+CONFIG_DVB_TDA1004X=n
+CONFIG_DVB_ZD1301_DEMOD=n
+CONFIG_DVB_ZL10353=n
+CONFIG_DVB_CXD2880=n
+CONFIG_DVB_STV0297=n
+CONFIG_DVB_TDA10021=n
+CONFIG_DVB_TDA10023=n
+CONFIG_DVB_VES1820=n
+CONFIG_DVB_AU8522=n
+CONFIG_DVB_AU8522_DTV=n
+CONFIG_DVB_AU8522_V4L=n
+CONFIG_DVB_BCM3510=n
+CONFIG_DVB_LG2160=n
+CONFIG_DVB_LGDT3305=n
+CONFIG_DVB_LGDT3306A=n
+CONFIG_DVB_LGDT330X=n
+CONFIG_DVB_MXL692=n
+CONFIG_DVB_NXT200X=n
+CONFIG_DVB_OR51132=n
+CONFIG_DVB_OR51211=n
+CONFIG_DVB_S5H1409=n
+CONFIG_DVB_S5H1411=n
+CONFIG_DVB_DIB8000=n
+CONFIG_DVB_MB86A20S=n
+CONFIG_DVB_S921=n
+CONFIG_DVB_MN88443X=n
+CONFIG_DVB_TC90522=n
+CONFIG_DVB_PLL=n
+CONFIG_DVB_TUNER_DIB0070=n
+CONFIG_DVB_TUNER_DIB0090=n
+CONFIG_DVB_A8293=n
+CONFIG_DVB_AF9033=n
+CONFIG_DVB_ASCOT2E=n
+CONFIG_DVB_ATBM8830=n
+CONFIG_DVB_HELENE=n
+CONFIG_DVB_HORUS3A=n
+CONFIG_DVB_ISL6405=n
+CONFIG_DVB_ISL6421=n
+CONFIG_DVB_ISL6423=n
+CONFIG_DVB_IX2505V=n
+CONFIG_DVB_LGS8GL5=n
+CONFIG_DVB_LGS8GXX=n
+CONFIG_DVB_LNBH25=n
+CONFIG_DVB_LNBH29=n
+CONFIG_DVB_LNBP21=n
+CONFIG_DVB_LNBP22=n
+CONFIG_DVB_M88RS2000=n
+CONFIG_DVB_TDA665x=n
+CONFIG_DVB_DRX39XYJ=n
+CONFIG_DVB_CXD2099=n
+CONFIG_DVB_SP2=n
+CONFIG_DVB_TUNER_CX24113=n
+CONFIG_DVB_TUNER_ITD1000=n
+CONFIG_DVB_TUNER_DIB0070=n
+CONFIG_DVB_TUNER_DIB0090=n
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=n
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=n
+CONFIG_MEDIA_SDR_SUPPORT=n
+CONFIG_MEDIA_TUNER=n
+CONFIG_MEDIA_TUNER_E4000=n
+CONFIG_MEDIA_TUNER_FC0011=n
+CONFIG_MEDIA_TUNER_FC0012=n
+CONFIG_MEDIA_TUNER_FC0013=n
+CONFIG_MEDIA_TUNER_FC2580=n
+CONFIG_MEDIA_TUNER_IT913X=n
+CONFIG_MEDIA_TUNER_M88RS6000T=n
+CONFIG_MEDIA_TUNER_MAX2165=n
+CONFIG_MEDIA_TUNER_MC44S803=n
+CONFIG_MEDIA_TUNER_MSI001=n
+CONFIG_MEDIA_TUNER_MT2060=n
+CONFIG_MEDIA_TUNER_MT2063=n
+CONFIG_MEDIA_TUNER_MT20XX=n
+CONFIG_MEDIA_TUNER_MT2131=n
+CONFIG_MEDIA_TUNER_MT2266=n
+CONFIG_MEDIA_TUNER_MXL301RF=n
+CONFIG_MEDIA_TUNER_MXL5005S=n
+CONFIG_MEDIA_TUNER_MXL5007T=n
+CONFIG_MEDIA_TUNER_QM1D1B0004=n
+CONFIG_MEDIA_TUNER_QM1D1C0042=n
+CONFIG_MEDIA_TUNER_QT1010=n
+CONFIG_MEDIA_TUNER_R820T=n
+CONFIG_MEDIA_TUNER_SI2157=n
+CONFIG_MEDIA_TUNER_SIMPLE=n
+CONFIG_MEDIA_TUNER_TDA18212=n
+CONFIG_MEDIA_TUNER_TDA18218=n
+CONFIG_MEDIA_TUNER_TDA18250=n
+CONFIG_MEDIA_TUNER_TDA18271=n
+CONFIG_MEDIA_TUNER_TDA827X=n
+CONFIG_MEDIA_TUNER_TDA8290=n
+CONFIG_MEDIA_TUNER_TDA9887=n
+CONFIG_MEDIA_TUNER_TEA5761=n
+CONFIG_MEDIA_TUNER_TEA5767=n
+CONFIG_MEDIA_TUNER_TUA9001=n
+CONFIG_MEDIA_TUNER_XC2028=n
+CONFIG_MEDIA_TUNER_XC4000=n
+CONFIG_MEDIA_TUNER_XC5000=n
+
+# Not used sound drivers
+CONFIG_SND_SOC_MSM8916_WCD_ANALOG=n
+CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=n
+CONFIG_SND_SOC_PCM3168A=n
+CONFIG_SND_SOC_PCM3168A_I2C=n
+CONFIG_SND_SOC_RL6231=n
+CONFIG_SND_SOC_RT5659=n
+CONFIG_SND_SOC_WCD9335=n
+CONFIG_SND_SOC_WCD_MBHC=n
+CONFIG_SND_SOC_WCD934X=n
+CONFIG_SND_SOC_WCD938X=n
+CONFIG_SND_SOC_WCD938X_SDW=n
+CONFIG_SND_SOC_WM8524=n
+CONFIG_SND_SOC_WM8960=n
+CONFIG_SND_SOC_WM8962=n
+CONFIG_SND_SOC_WM8978=n
+CONFIG_SND_SOC_WSA881X=n
+
+# Not used PCI drivers
+CONFIG_PCI_HOST_THUNDER_ECAM=n
+CONFIG_PCI_HOST_THUNDER_PEM=n
+CONFIG_PCI_LAYERSCAPE=n
+CONFIG_PCI_MESON=n
+CONFIG_PCI_XGENE_MSI=n
+CONFIG_PCI_XGENE=n
+CONFIG_PCIE_ALTERA_MSI=n
+CONFIG_PCIE_ALTERA=n
+CONFIG_PCIE_KIRIN=n
+CONFIG_PCIE_MOBIVEIL=n
+
+# Not used Graphic Drivers
+CONFIG_DRM_RCAR_DW_HDMI=n
+CONFIG_DRM_RCAR_LVDS=n
+# Selected by DRM_RCAR_LVDS only
+CONFIG_OF_OVERLAY=n
+CONFIG_DRM_HISI_HIBMC=n
+CONFIG_DRM_HISI_KIRIN=n
+CONFIG_DRM_PL111=n
+CONFIG_DRM_LIMA=n
+CONFIG_DRM_PANFROST=n
+
+# Not used Network and Wifi drivers
+CONFIG_NET_VENDOR_3COM=n
+CONFIG_NET_VENDOR_ADAPTEC=n
+CONFIG_NET_VENDOR_AGERE=n
+CONFIG_NET_VENDOR_ALACRITECH=n
+CONFIG_NET_VENDOR_ALTEON=n
+CONFIG_NET_VENDOR_AMAZON=n
+CONFIG_NET_VENDOR_AMD=n
+CONFIG_NET_VENDOR_AQUANTIA=n
+CONFIG_NET_VENDOR_ARC=n
+CONFIG_NET_VENDOR_ATHEROS=n
+CONFIG_NET_VENDOR_AURORA=n
+CONFIG_NET_VENDOR_BROADCOM=n
+CONFIG_NET_VENDOR_BROCADE=n
+CONFIG_NET_VENDOR_CADENCE=n
+CONFIG_NET_VENDOR_CAVIUM=n
+CONFIG_NET_VENDOR_CHELSIO=n
+CONFIG_NET_VENDOR_CISCO=n
+CONFIG_NET_VENDOR_CORTINA=n
+CONFIG_NET_VENDOR_DEC=n
+CONFIG_NET_VENDOR_DLINK=n
+CONFIG_NET_VENDOR_EMULEX=n
+CONFIG_NET_VENDOR_EZCHIP=n
+CONFIG_NET_VENDOR_GOOGLE=n
+CONFIG_NET_VENDOR_HISILICON=n
+CONFIG_NET_VENDOR_HP=n
+CONFIG_NET_VENDOR_HUAWEI=n
+CONFIG_NET_VENDOR_MARVELL=n
+CONFIG_NET_VENDOR_MELLANOX=n
+CONFIG_NET_VENDOR_MICREL=n
+CONFIG_NET_VENDOR_MICROCHIP=n
+CONFIG_NET_VENDOR_MICROSEMI=n
+CONFIG_NET_VENDOR_MYRI=n
+CONFIG_NET_VENDOR_NATSEMI=n
+CONFIG_NET_VENDOR_NETERION=n
+CONFIG_NET_VENDOR_NETRONOME=n
+CONFIG_NET_VENDOR_NI=n
+CONFIG_NET_VENDOR_NVIDIA=n
+CONFIG_NET_VENDOR_OKI=n
+CONFIG_NET_VENDOR_PACKET_ENGINES=n
+CONFIG_NET_VENDOR_PENSANDO=n
+CONFIG_NET_VENDOR_QLOGIC=n
+CONFIG_NET_VENDOR_QUALCOMM=n
+CONFIG_NET_VENDOR_RDC=n
+CONFIG_NET_VENDOR_RENESAS=n
+CONFIG_NET_VENDOR_ROCKER=n
+CONFIG_NET_VENDOR_SAMSUNG=n
+CONFIG_NET_VENDOR_SEEQ=n
+CONFIG_NET_VENDOR_SILAN=n
+CONFIG_NET_VENDOR_SIS=n
+CONFIG_NET_VENDOR_SMSC=n
+CONFIG_NET_VENDOR_SOCIONEXT=n
+CONFIG_NET_VENDOR_SOLARFLARE=n
+CONFIG_NET_VENDOR_SUN=n
+CONFIG_NET_VENDOR_SYNOPSYS=n
+CONFIG_NET_VENDOR_TEHUTI=n
+CONFIG_NET_VENDOR_VIA=n
+CONFIG_NET_VENDOR_WIZNET=n
+CONFIG_WLAN_VENDOR_ADMTEK=n
+CONFIG_WLAN_VENDOR_ATMEL=n
+CONFIG_WLAN_VENDOR_CISCO=n
+CONFIG_WLAN_VENDOR_INTEL=n
+CONFIG_WLAN_VENDOR_INTERSIL=n
+CONFIG_WLAN_VENDOR_QUANTENNA=n
+CONFIG_WLAN_VENDOR_RALINK=n
+CONFIG_WLAN_VENDOR_RSI=n
+CONFIG_WLAN_VENDOR_ST=n
+CONFIG_WLAN_VENDOR_ZYDAS=n
diff --git a/recipes-kernel/linux/linux-toradex-upstream/defconfig b/recipes-kernel/linux/linux-toradex-upstream/defconfig
new file mode 100644
index 0000000..77b3905
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/defconfig
@@ -0,0 +1,421 @@
+CONFIG_KERNEL_LZ4=y
+CONFIG_SYSVIPC=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_PREEMPT_VOLUNTARY=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=18
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CGROUP_BPF=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_EXPERT=y
+CONFIG_PERF_EVENTS=y
+CONFIG_ARCH_MULTI_V6=y
+CONFIG_ARCH_MXC=y
+CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6UL=y
+CONFIG_SOC_IMX7D=y
+CONFIG_SMP=y
+CONFIG_ARM_PSCI=y
+CONFIG_HIGHMEM=y
+CONFIG_ARCH_FORCE_MAX_ORDER=13
+CONFIG_CMDLINE="noinitrd console=ttymxc0,115200"
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPUFREQ_DT=y
+CONFIG_ARM_IMX6Q_CPUFREQ=y
+CONFIG_ARM_IMX_CPUFREQ_DT=y
+CONFIG_CPU_IDLE=y
+CONFIG_ARM_CPUIDLE=y
+CONFIG_ARM_PSCI_CPUIDLE=y
+CONFIG_VFP=y
+CONFIG_NEON=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_TEST_SUSPEND=y
+CONFIG_KPROBES=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_BINFMT_MISC=m
+# CONFIG_SWAP is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_NETFILTER=y
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+CONFIG_CAN=y
+CONFIG_BT=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_CFG80211=m
+CONFIG_CFG80211_WEXT=y
+CONFIG_MAC80211=m
+CONFIG_RFKILL=y
+CONFIG_RFKILL_INPUT=y
+CONFIG_PCI=y
+CONFIG_PCI_MSI=y
+# CONFIG_VGA_ARB is not set
+CONFIG_PCI_IMX6_HOST=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+CONFIG_IMX_WEIM=y
+CONFIG_CONNECTOR=y
+CONFIG_MTD=y
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_MTD_DATAFLASH=y
+CONFIG_MTD_SST25L=y
+CONFIG_MTD_RAW_NAND=y
+CONFIG_MTD_NAND_GPMI_NAND=y
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_FASTMAP=y
+CONFIG_MTD_UBI_BLOCK=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_EEPROM_AT24=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_ATA=y
+# CONFIG_SATA_PMP is not set
+CONFIG_SATA_AHCI_PLATFORM=y
+CONFIG_AHCI_IMX=y
+# CONFIG_ATA_SFF is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_FARADAY is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+CONFIG_SMC91X=y
+CONFIG_SMSC911X=y
+# CONFIG_NET_VENDOR_STMICRO is not set
+CONFIG_MICREL_PHY=y
+CONFIG_CAN_FLEXCAN=y
+CONFIG_CAN_MCP251X=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_ZAURUS is not set
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_ATH10K_SDIO=m
+CONFIG_IWLWIFI=m
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_RT2X00=m
+CONFIG_RT2800USB=m
+CONFIG_RT2800USB_RT3573=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
+CONFIG_RT2800USB_UNKNOWN=y
+CONFIG_RTL8192CU=m
+CONFIG_RTL8XXXU=m
+CONFIG_INPUT_EVDEV=y
+# CONFIG_KEYBOARD_ATKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_SNVS_PWRKEY=y
+CONFIG_KEYBOARD_IMX=y
+# CONFIG_MOUSE_PS2 is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_AD7879=y
+CONFIG_TOUCHSCREEN_AD7879_I2C=y
+CONFIG_TOUCHSCREEN_ATMEL_MXT=y
+CONFIG_TOUCHSCREEN_CYTTSP5=y
+CONFIG_TOUCHSCREEN_STMPE=y
+CONFIG_INPUT_MISC=y
+# CONFIG_SERIO is not set
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_FSL_LPUART=y
+CONFIG_SERIAL_FSL_LPUART_CONSOLE=y
+CONFIG_RPMSG_TTY=m
+CONFIG_SERIAL_DEV_BUS=y
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_GPIO=y
+CONFIG_I2C_IMX=y
+CONFIG_SPI=y
+CONFIG_SPI_MEM=y
+CONFIG_SPI_GPIO=y
+CONFIG_SPI_IMX=y
+CONFIG_SPI_SPIDEV=y
+# CONFIG_PTP_1588_CLOCK_KVM is not set
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_MXC=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
+CONFIG_SENSORS_GPIO_FAN=y
+CONFIG_SENSORS_IIO_HWMON=y
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_INA2XX=m
+CONFIG_SENSORS_SY7636A=y
+CONFIG_THERMAL_STATISTICS=y
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_CPU_THERMAL=y
+CONFIG_IMX_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_RN5T618_WATCHDOG=y
+CONFIG_IMX2_WDT=y
+CONFIG_MFD_SY7636A=y
+CONFIG_MFD_RN5T618=y
+CONFIG_MFD_STMPE=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_ANATOP=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_PFUZE100=y
+CONFIG_REGULATOR_RN5T618=y
+CONFIG_REGULATOR_SY7636A=y
+CONFIG_MEDIA_SUPPORT=y
+# CONFIG_DVB_NET is not set
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_VIDEO_MUX=y
+CONFIG_VIDEO_CODA=m
+CONFIG_VIDEO_IMX_PXP=y
+CONFIG_VIDEO_OV5640=m
+CONFIG_VIDEO_ADV7180=m
+CONFIG_VIDEO_TC358743=m
+# CONFIG_CXD2880_SPI_DRV is not set
+CONFIG_IMX_IPUV3_CORE=y
+CONFIG_DRM=y
+CONFIG_DRM_PANEL_LVDS=y
+CONFIG_DRM_PANEL_SIMPLE=y
+CONFIG_DRM_PANEL_EDP=y
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=y
+CONFIG_DRM_SIMPLE_BRIDGE=y
+CONFIG_DRM_DW_HDMI_AHB_AUDIO=m
+CONFIG_DRM_DW_HDMI_CEC=y
+CONFIG_DRM_IMX=y
+CONFIG_DRM_IMX_PARALLEL_DISPLAY=y
+CONFIG_DRM_IMX_TVE=y
+CONFIG_DRM_IMX_LDB=y
+CONFIG_DRM_IMX_HDMI=y
+CONFIG_DRM_ETNAVIV=y
+CONFIG_DRM_MXSFB=y
+CONFIG_FB=y
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_MX3 is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_PWM=y
+CONFIG_BACKLIGHT_GPIO=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_LOGO=y
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_FSL_ASRC=y
+CONFIG_SND_IMX_SOC=y
+CONFIG_SND_SOC_IMX_SGTL5000=y
+CONFIG_SND_SOC_IMX_SPDIF=y
+CONFIG_SND_SOC_FSL_ASOC_CARD=y
+CONFIG_SND_SOC_AC97_CODEC=y
+CONFIG_SND_SOC_NAU8822=m
+CONFIG_SND_SIMPLE_CARD=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_CONN_GPIO=y
+CONFIG_USB=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_ACM=m
+CONFIG_USB_STORAGE=y
+CONFIG_USB_CHIPIDEA=y
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_TEST=m
+CONFIG_USB_EHSET_TEST_FIXTURE=m
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_USB_MXS_PHY=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_LB_SS=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_UAC1=y
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_UVC=y
+CONFIG_USB_CONFIGFS_F_PRINTER=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_AUDIO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_G_NCM=m
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FUNCTIONFS=m
+CONFIG_USB_MASS_STORAGE=m
+CONFIG_USB_G_SERIAL=m
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_PWM=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_ONESHOT=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+CONFIG_LEDS_TRIGGER_GPIO=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_MXC=y
+CONFIG_RTC_DRV_SNVS=y
+CONFIG_DMADEVICES=y
+CONFIG_FSL_EDMA=y
+CONFIG_IMX_SDMA=m
+CONFIG_MXS_DMA=y
+CONFIG_DMATEST=m
+CONFIG_STAGING=y
+CONFIG_STAGING_MEDIA=y
+CONFIG_VIDEO_IMX_MEDIA=y
+CONFIG_COMMON_CLK_PWM=y
+CONFIG_IMX_MBOX=m
+CONFIG_REMOTEPROC=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_IMX_REMOTEPROC=m
+CONFIG_RPMSG_CHAR=m
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_VIRTIO=m
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_IIO=y
+CONFIG_IMX7D_ADC=y
+CONFIG_STMPE_ADC=y
+CONFIG_VF610_ADC=y
+CONFIG_PWM=y
+CONFIG_PWM_FSL_FTM=y
+CONFIG_PWM_IMX27=y
+CONFIG_NVMEM_IMX_OCOTP=y
+CONFIG_NVMEM_SNVS_LPGPR=y
+CONFIG_TEE=y
+CONFIG_OPTEE=y
+CONFIG_MUX_MMIO=y
+CONFIG_EXFAT_FS=m
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_PRINT_QUOTA_WARNING is not set
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=m
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_NTFS3_FS=m
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_JFFS2_FS=m
+CONFIG_UBIFS_FS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_UTF8=y
+CONFIG_SECURITYFS=y
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
+CONFIG_CRYPTO_DEV_SAHARA=y
+CONFIG_CRYPTO_DEV_MXS_DCP=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_CMA_SIZE_MBYTES=256
+CONFIG_CMA_SIZE_PERCENTAGE=35
+CONFIG_CMA_SIZE_SEL_MIN=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG=y
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_FS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_FTRACE is not set
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
diff --git a/recipes-kernel/linux/linux-toradex-upstream/toradex_imx_v6_v7.config b/recipes-kernel/linux/linux-toradex-upstream/toradex_imx_v6_v7.config
new file mode 100644
index 0000000..c63dc9d
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream/toradex_imx_v6_v7.config
@@ -0,0 +1,299 @@
+## This file contains the differences to imx_v6_v7_defconfig
+## it is used to generate toradex defconfig with the following command
+##
+## make imx_v6_v7_defconfig
+## scripts/kconfig/merge_config.sh .config toradex_imx_v6_v7.config
+## make savedefconfig
+
+# LZ4 support is better than LZO and provide good boot time performance
+CONFIG_KERNEL_LZ4=y
+
+# USB OTG Role Switch
+CONFIG_EXTCON_USB_GPIO=y
+CONFIG_USB_CONN_GPIO=y
+
+# Enable i.MX PCIE
+CONFIG_PCI_IMX6_HOST=y
+
+# Usefull for debugging
+CONFIG_DYNAMIC_DEBUG=y
+
+# Systemd, https://github.com/systemd/systemd/blob/main/README
+CONFIG_DEVTMPFS=y
+CONFIG_CGROUPS=y
+CONFIG_INOTIFY_USER=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EPOLL=y
+CONFIG_UNIX=y
+CONFIG_SYSFS=y
+CONFIG_PROC_FS=y
+CONFIG_FHANDLE=y
+CONFIG_SYSFS_DEPRECATED=n
+CONFIG_UEVENT_HELPER=n
+CONFIG_FW_LOADER_USER_HELPER=n
+CONFIG_NET_NS=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_BPF=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_RT_GROUP_SCHED=n
+
+# SPI test and debugging
+CONFIG_SPI_SPIDEV=y
+
+# Support HID devices
+# This suppresses also the warning "hid-generic: device has no listeners, quitting"
+CONFIG_USB_HIDDEV=y
+
+# Apalis Evaluation Board v1.2
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_INA2XX=m
+CONFIG_SND_SOC_NAU8822=m
+
+# Colibri Evaluation Board
+CONFIG_CAN_MCP251X=m
+
+# WiFi/BT used on multiple SOM
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+
+# WiFi modules
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_IWLWIFI=m
+CONFIG_RT2X00=m
+CONFIG_RT2800USB=m
+CONFIG_RT2800USB_RT3573=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
+CONFIG_RT2800USB_UNKNOWN=y
+CONFIG_RTL8192CU=m
+CONFIG_RTL8XXXU=m
+
+# 80211 as modules, so that regulatory.db is available when loading
+CONFIG_CFG80211=m
+CONFIG_MAC80211=m
+
+# Networking
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+
+# CMA, used by the VPU for example
+CONFIG_CMA_SIZE_MBYTES=256
+CONFIG_CMA_SIZE_SEL_MIN=y
+CONFIG_CMA_SIZE_PERCENTAGE=35
+
+# Thermal emergency poweroff
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000
+
+# Others
+CONFIG_DRM_SIMPLE_BRIDGE=y
+
+# Non rootfs as module to minimize image size
+CONFIG_JFFS2_FS=m
+CONFIG_EXFAT_FS=m
+CONFIG_EXT2_FS=m
+CONFIG_EXT3_FS=m
+CONFIG_FUSE_FS=m
+CONFIG_NTFS3_FS=m
+
+# Disable not needed iMX drivers
+CONFIG_SOC_IMX31=n
+CONFIG_SOC_IMX35=n
+CONFIG_SOC_IMX50=n
+CONFIG_SOC_IMX51=n
+CONFIG_SOC_IMX53=n
+CONFIG_SOC_VF610=n
+CONFIG_SOC_IMX6SL=n
+CONFIG_SOC_IMX6SLL=n
+CONFIG_SOC_IMX6SX=n
+CONFIG_SOC_IMX7ULP=n
+CONFIG_SOC_IMX8M=n
+
+CONFIG_PINCTRL_IMX8MM=n
+CONFIG_PINCTRL_IMX8MN=n
+CONFIG_PINCTRL_IMX8MP=n
+CONFIG_PINCTRL_IMX8MQ=n
+
+CONFIG_CLK_IMX8MM=n
+CONFIG_CLK_IMX8MN=n
+CONFIG_CLK_IMX8MP=n
+CONFIG_CLK_IMX8MQ=n
+
+CONFIG_MTD_NAND_MXC=n
+CONFIG_PATA_IMX=n
+CONFIG_SPI_FSL_QUADSPI=n
+CONFIG_IMX7ULP_WDT=n
+CONFIG_FB_MX3=n
+CONFIG_RTC_DRV_MXC_V2=n
+CONFIG_PWM_IMX_TPM=n
+CONFIG_FSL_EDMA=n
+
+# Disable not needed functionality
+CONFIG_KEXEC=n
+CONFIG_SWAP=n
+
+# Disable noisy debug on the console every input event
+CONFIG_INPUT_EVBUG=n
+
+# Disable or build as module not needed generic drivers
+CONFIG_RC_CORE=n
+CONFIG_MTD_SPI_NOR=n
+CONFIG_VGA_ARB=n
+CONFIG_EEPROM_AT25=n
+CONFIG_SATA_PMP=n
+CONFIG_ATA_SFF=n
+CONFIG_KEYBOARD_ATKBD=n
+CONFIG_MOUSE_PS2=n
+CONFIG_INPUT_MMA8450=n
+CONFIG_SERIO=n
+CONFIG_PTP_1588_CLOCK_KVM=n
+
+CONFIG_TOUCHSCREEN_ADS7846=n
+CONFIG_TOUCHSCREEN_DA9052=n
+CONFIG_TOUCHSCREEN_EGALAX=n
+CONFIG_TOUCHSCREEN_GOODIX=n
+CONFIG_TOUCHSCREEN_ILI210X=n
+CONFIG_TOUCHSCREEN_MAX11801=n
+CONFIG_TOUCHSCREEN_IMX6UL_TSC=n
+CONFIG_TOUCHSCREEN_EDT_FT5X06=n
+CONFIG_TOUCHSCREEN_MC13783=n
+CONFIG_TOUCHSCREEN_TSC2004=n
+CONFIG_TOUCHSCREEN_TSC2007=n
+CONFIG_TOUCHSCREEN_SX8654=n
+CONFIG_TOUCHSCREEN_COLIBRI_VF50=n
+
+CONFIG_I2C_MUX=n
+CONFIG_I2C_MUX_GPIO=n
+CONFIG_I2C_HELPER_AUTO=n
+CONFIG_I2C_ALGOPCF=n
+CONFIG_I2C_ALGOPCA=n
+
+CONFIG_GPIO_SIOX=n
+CONFIG_GPIO_MAX732X=n
+CONFIG_GPIO_PCA953X=n
+CONFIG_GPIO_PCF857X=n
+CONFIG_GPIO_STMPE=n
+CONFIG_GPIO_74X164=n
+
+CONFIG_RN5T618_POWER=n
+CONFIG_SENSORS_MC13783_ADC=n
+
+CONFIG_DA9063_WATCHDOG=n
+CONFIG_DA9062_WATCHDOG=n
+
+CONFIG_MFD_DA9052_I2C=n
+CONFIG_MFD_DA9062=n
+CONFIG_MFD_DA9063=n
+CONFIG_MFD_MC13XXX_SPI=n
+CONFIG_MFD_MC13XXX_I2C=n
+
+CONFIG_REGULATOR_DA9052=n
+CONFIG_REGULATOR_DA9062=n
+CONFIG_REGULATOR_DA9063=n
+CONFIG_REGULATOR_LTC3676=n
+CONFIG_REGULATOR_MC13783=n
+CONFIG_REGULATOR_MC13892=n
+
+CONFIG_DVB_NET=n
+
+CONFIG_VIDEO_OV2680=n
+CONFIG_VIDEO_OV5645=n
+
+# HDMI to CSI-2 bridge
+CONFIG_VIDEO_TC358743=m
+
+CONFIG_CXD2880_SPI_DRV=n
+
+# This compiles all media-related drivers as modules and disables TV stuff
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_VIDEO_IMX_MEDIA=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=n
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=n
+CONFIG_MEDIA_RADIO_SUPPORT=n
+CONFIG_MEDIA_SDR_SUPPORT=n
+CONFIG_MEDIA_TEST_SUPPORT=n
+
+CONFIG_DRM_TI_TFP410=n
+
+CONFIG_LCD_CLASS_DEVICE=n
+CONFIG_LCD_L4F00242T03=n
+CONFIG_LCD_PLATFORM=n
+
+CONFIG_SND_SOC_EUKREA_TLV320=n
+CONFIG_SND_SOC_IMX_ES8328=n
+CONFIG_SND_SOC_CS42XX8_I2C=n
+CONFIG_SND_SOC_TLV320AIC3X_I2C=n
+CONFIG_SND_SOC_TLV320AIC23_I2C=n
+CONFIG_SND_SOC_WM8960=n
+CONFIG_SND_SOC_WM8962=n
+CONFIG_SND_SOC_ES8328_I2C=n
+CONFIG_SND_SOC_ES8328_SPI=n
+
+CONFIG_HID_WACOM=n
+CONFIG_I2C_HID_OF=n
+
+CONFIG_RTC_DRV_ISL1208=n
+CONFIG_RTC_DRV_PCF8523=n
+CONFIG_RTC_DRV_PCF8563=n
+CONFIG_RTC_DRV_M41T80=n
+CONFIG_RTC_DRV_RC5T619=n
+CONFIG_RTC_DRV_RV3029C2=n
+CONFIG_RTC_DRV_DA9063=n
+CONFIG_RTC_DRV_MC13XXX=n
+
+CONFIG_MMA8452=n
+CONFIG_RN5T618_ADC=n
+CONFIG_SENSORS_ISL29018=n
+CONFIG_MAG3110=n
+CONFIG_MPL3115=n
+
+CONFIG_SIOX=n
+
+CONFIG_BRCMFMAC=n
+CONFIG_WL12XX=n
+CONFIG_WL18XX=n
+CONFIG_WLCORE=n
+
+CONFIG_CS89x0_PLATFORM=n
+
+CONFIG_AT803X_PHY=n
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_ZAURUS=n
+CONFIG_AX88796B_PHY=m
+CONFIG_MICROCHIP_PHY=m
+CONFIG_SMSC_PHY=m
+
+CONFIG_PROVE_LOCKING=n
+CONFIG_DEBUG_RT_MUTEXES=n
+CONFIG_DEBUG_SPINLOCK=n
+CONFIG_DEBUG_MUTEXES=n
+CONFIG_DEBUG_WW_MUTEX_SLOWPATH=n
+CONFIG_DEBUG_RWSEMS=n
+CONFIG_DEBUG_LOCK_ALLOC=n
+
+CONFIG_DMADEVICES=y
+CONFIG_FSL_EDMA=y
+CONFIG_DMA_VIRTUAL_CHANNELS=y
+
+# RPMsg and RemoteProc for HMP
+CONFIG_RPMSG_TTY=m
+CONFIG_IMX_MBOX=m
+CONFIG_REMOTEPROC=y
+CONFIG_REMOTEPROC_CDEV=y
+CONFIG_IMX_REMOTEPROC=m
+CONFIG_RPMSG_CHAR=m
+CONFIG_RPMSG_CTRL=m
+CONFIG_RPMSG_VIRTIO=m
+CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m
diff --git a/recipes-kernel/linux/linux-toradex-upstream_6.6.bb b/recipes-kernel/linux/linux-toradex-upstream_6.6.bb
new file mode 100644
index 0000000..1704c14
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream_6.6.bb
@@ -0,0 +1,30 @@
+require linux-toradex-upstream.inc
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}-${PV}:"
+
+LINUX_REPO = "git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
+
+TDX_PATCHES = " \
+ file://0001-ARM-dts-imx6qdl-apalis-Add-usdhc-aliases.patch \
+ file://0001-dt-bindings-arm-fsl-Add-toradex-apalis_imx6q-eval-v1.patch \
+ file://0001-dt-bindings-arm-fsl-add-verdin-imx8mm-mallow-board.patch \
+ file://0001-power-reset-gpio-poweroff-use-a-struct-to-store-the-.patch \
+ file://0001-thermal-imx-Update-critical-temp-threshold.patch \
+ file://0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch \
+ file://0002-arm64-dts-freescale-verdin-imx8mm-add-support-to-mal.patch \
+ file://0002-ARM-dts-imx6qdl-colibri-Add-usdhc-aliases.patch \
+ file://0002-ARM-dts-imx-Add-support-for-Apalis-Evaluation-Board-.patch \
+ file://0002-power-reset-gpio-poweroff-use-sys-off-handler-API.patch \
+ file://0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch \
+ file://0003-ARM-dts-imx7d-colibri-emmc-Add-usdhc-aliases.patch \
+ file://0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch \
+ file://0003-dt-bindings-power-reset-gpio-poweroff-Add-priority-p.patch \
+ file://0004-media-i2c-ov5640-Implement-get_mbus_config.patch \
+ file://0004-power-reset-gpio-poweroff-make-sys-handler-priority-.patch \
+"
+PV = "6.6"
+LINUX_VERSION ?= "6.6.20"
+KBRANCH = "linux-6.6.y"
+KERNEL_VERSION_SANITY_SKIP = "1"
+SRCREV_machine = "9b4a8eac17f0d840729384618b4b1e876233026c"
+SRCREV_machine:use-head-next = "${AUTOREV}"
diff --git a/recipes-kernel/linux/linux-toradex-upstream_mainline.bb b/recipes-kernel/linux/linux-toradex-upstream_mainline.bb
new file mode 100644
index 0000000..5212cac
--- /dev/null
+++ b/recipes-kernel/linux/linux-toradex-upstream_mainline.bb
@@ -0,0 +1,20 @@
+# This builds latest head of linux master
+# Do not use this recipe for production, it is not reproducible
+# and you don't know what git hash is built from just looking
+# at the metadata
+
+require linux-toradex-upstream.inc
+
+LINUX_REPO = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git"
+TDX_PATCHES = " \
+ file://0001-thermal-imx-Update-critical-temp-threshold.patch \
+ file://0002-Revert-drm-panel-simple-drop-use-of-data-mapping-pro.patch \
+ file://0003-drivers-chipidea-disable-runtime-pm-for-imx6ul.patch \
+ file://0004-media-i2c-ov5640-Implement-get_mbus_config.patch \
+ file://0001-usb-gadget-f_ncm-Apply-workaround-for-packet-cloggin.patch \
+"
+# set PV manually, that way PREFERRED_VERSION can be set to a constant value
+PV = "mainline"
+LINUX_VERSION = "6.8-rc"
+KBRANCH = "master"
+SRCREV_machine = "${AUTOREV}"
diff --git a/recipes-kernel/linux/linux-toradex_%.bbappend b/recipes-kernel/linux/linux-toradex_%.bbappend
deleted file mode 100644
index 760ffc8..0000000
--- a/recipes-kernel/linux/linux-toradex_%.bbappend
+++ /dev/null
@@ -1 +0,0 @@
-export DTC_FLAGS = "-@"
diff --git a/recipes-kernel/perf/perf.bbappend b/recipes-kernel/perf/perf.bbappend
new file mode 100644
index 0000000..1894a5a
--- /dev/null
+++ b/recipes-kernel/perf/perf.bbappend
@@ -0,0 +1,2 @@
+# python3-setuptools is required with 5.19-rc7
+DEPENDS += "${@bb.utils.contains('PACKAGECONFIG', 'scripting', 'python3-setuptools-native', '', d)}"
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.%.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.%.bbappend
new file mode 100644
index 0000000..122a2d6
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.%.bbappend
@@ -0,0 +1 @@
+PACKAGECONFIG:append = " v4l2codecs"
diff --git a/recipes-support/libsoc/libsoc/0001-libsoc-use-sane-board-naming.patch b/recipes-support/libsoc/libsoc/0001-libsoc-use-sane-board-naming.patch
deleted file mode 100644
index 647b64b..0000000
--- a/recipes-support/libsoc/libsoc/0001-libsoc-use-sane-board-naming.patch
+++ /dev/null
@@ -1,552 +0,0 @@
-From 78220a93d091d18c9b1c77beb82a220202b4e48e Mon Sep 17 00:00:00 2001
-Message-Id: <78220a93d091d18c9b1c77beb82a220202b4e48e.1536887613.git.marcel.ziswiler@toradex.com>
-From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-Date: Fri, 14 Sep 2018 03:09:16 +0200
-Subject: [PATCH] libsoc: use sane board naming
-
-Use board naming as per our OpenEmbedded machine naming. The Wi-Fi SKU
-of our Colibri iMX6ULL may need run-time aka postinst handling.
-
-Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
----
- contrib/board_files/colibri-imx6ullwb.conf | 95 ------
- ...olibri-imx7-1GB.conf => colibri-imx7-emmc.conf} | 4 +-
- .../{colibri-imx7-512mb.conf => colibri-imx7.conf} | 4 +-
- .../{colibri-vf61.conf => colibri-vf.conf} | 7 +-
- contrib/board_files/colibri-vf50.conf | 355 ---------------------
- 5 files changed, 8 insertions(+), 457 deletions(-)
- delete mode 100644 contrib/board_files/colibri-imx6ullwb.conf
- rename contrib/board_files/{colibri-imx7-1GB.conf => colibri-imx7-emmc.conf} (94%)
- rename contrib/board_files/{colibri-imx7-512mb.conf => colibri-imx7.conf} (94%)
- rename contrib/board_files/{colibri-vf61.conf => colibri-vf.conf} (95%)
- delete mode 100644 contrib/board_files/colibri-vf50.conf
-
-diff --git a/contrib/board_files/colibri-imx6ullwb.conf b/contrib/board_files/colibri-imx6ullwb.conf
-deleted file mode 100644
-index ed30cbf..0000000
---- a/contrib/board_files/colibri-imx6ullwb.conf
-+++ /dev/null
-@@ -1,95 +0,0 @@
--# Toradex Colibri iMX6ULLWB Computer On Module.
--# http://developer.toradex.com/products/colibri-imx6ullwb
--
--[board]
--dtfile = /proc/device-tree/model
--model = Toradex Colibri iMX6ULLWB on Colibri Evaluation Board
--
--[GPIO]
--###Colibri IMX6ULLWB SODIMM number to GPIO number mapping
--
--SODIMM_2 = 9
--SODIMM_4 = 8
--SODIMM_6 = 1
--SODIMM_8 = 0
--SODIMM_19 = 4
--SODIMM_21 = 5
--SODIMM_23 = 12
--SODIMM_25 = 18
--SODIMM_27 = 19
--SODIMM_28 = 112
--SODIMM_29 = 87
--SODIMM_30 = 37
--SODIMM_31 = 13
--SODIMM_32 = 22
--SODIMM_33 = 16
--SODIMM_34 = 23
--SODIMM_35 = 17
--SODIMM_36 = 20
--SODIMM_37 = 88
--SODIMM_38 = 21
--SODIMM_43 = 128
--SODIMM_44 = 65
--SODIMM_45 = 129
--SODIMM_46 = 76
--SODIMM_47 = 49
--SODIMM_48 = 78
--SODIMM_49 = 51
--SODIMM_50 = 80
--SODIMM_51 = 52
--SODIMM_52 = 81
--SODIMM_53 = 53
--SODIMM_54 = 82
--SODIMM_55 = 32
--SODIMM_56 = 64
--SODIMM_57 = 85
--SODIMM_58 = 72
--SODIMM_59 = 107
--SODIMM_60 = 71
--SODIMM_61 = 86
--SODIMM_62 = 77
--SODIMM_63 = 33
--SODIMM_64 = 84
--SODIMM_65 = 124
--SODIMM_66 = 83
--SODIMM_67 = 38
--SODIMM_68 = 66
--SODIMM_69 = 121
--SODIMM_70 = 70
--SODIMM_71 = 11
--SODIMM_72 = 74
--SODIMM_73 = 36
--SODIMM_74 = 79
--SODIMM_75 = 113
--SODIMM_76 = 69
--SODIMM_77 = 25
--SODIMM_78 = 73
--SODIMM_80 = 75
--SODIMM_82 = 67
--SODIMM_85 = 123
--SODIMM_86 = 90
--SODIMM_88 = 89
--SODIMM_90 = 92
--SODIMM_92 = 91
--SODIMM_95 = 131
--SODIMM_96 = 114
--SODIMM_98 = 122
--SODIMM_99 = 14
--SODIMM_100 = 26
--SODIMM_102 = 15
--SODIMM_104 = 39
--SODIMM_105 = 138
--SODIMM_106 = 10
--SODIMM_107 = 132
--SODIMM_129 = 2
--SODIMM_131 = 133
--SODIMM_133 = 110
--SODIMM_135 = 24
--SODIMM_137 = 130
--SODIMM_178 = 34
--SODIMM_186 = 27
--SODIMM_188 = 35
--SODIMM_190 = 48
--SODIMM_192 = 50
--SODIMM_194 = 29
--SODIMM_196 = 28
-diff --git a/contrib/board_files/colibri-imx7-1GB.conf b/contrib/board_files/colibri-imx7-emmc.conf
-similarity index 94%
-rename from contrib/board_files/colibri-imx7-1GB.conf
-rename to contrib/board_files/colibri-imx7-emmc.conf
-index e9b172a..bf891af 100644
---- a/contrib/board_files/colibri-imx7-1GB.conf
-+++ b/contrib/board_files/colibri-imx7-emmc.conf
-@@ -3,10 +3,10 @@
-
- [board]
- dtfile = /proc/device-tree/model
--model = Toradex Colibri iMX7 on Colibri Evaluation Board
-+model = Toradex Colibri iMX7 1GB (eMMC) on Colibri Evaluation Board
-
- [GPIO]
--###Colibri IMX7 SODIMM number to GPIO number mapping
-+###Colibri IMX7 1GB (eMMC) SODIMM number to GPIO number mapping
-
- SODIMM_19 = 101
- SODIMM_21 = 100
-diff --git a/contrib/board_files/colibri-imx7-512mb.conf b/contrib/board_files/colibri-imx7.conf
-similarity index 94%
-rename from contrib/board_files/colibri-imx7-512mb.conf
-rename to contrib/board_files/colibri-imx7.conf
-index aaac582..d3b4257 100644
---- a/contrib/board_files/colibri-imx7-512mb.conf
-+++ b/contrib/board_files/colibri-imx7.conf
-@@ -3,10 +3,10 @@
-
- [board]
- dtfile = /proc/device-tree/model
--model = Toradex Colibri iMX7 on Colibri Evaluation Board
-+model = Toradex Colibri iMX7 512MB on Colibri Evaluation Board
-
- [GPIO]
--###Colibri IMX7 SODIMM number to GPIO number mapping
-+###Colibri IMX7 512MB SODIMM number to GPIO number mapping
-
- SODIMM_19 = 101
- SODIMM_21 = 100
-diff --git a/contrib/board_files/colibri-vf61.conf b/contrib/board_files/colibri-vf.conf
-similarity index 95%
-rename from contrib/board_files/colibri-vf61.conf
-rename to contrib/board_files/colibri-vf.conf
-index 2292ade..bac6364 100644
---- a/contrib/board_files/colibri-vf61.conf
-+++ b/contrib/board_files/colibri-vf.conf
-@@ -1,12 +1,13 @@
--# Toradex Colibri VF61 Computer On Module.
-+# Toradex Colibri VF50/VF61 Computer On Module.
-+# http://developer.toradex.com/products/colibri-vf50
- # http://developer.toradex.com/products/colibri-vf61
-
- [board]
- dtfile = /proc/device-tree/model
--model = Toradex Colibri VF61 on Colibri Evaluation Board
-+model = Toradex Colibri VF50/VF61 on Colibri Evaluation Board
-
- [GPIO]
--### Colibri VF61 SODIMM number to GPIO number mapping
-+### Colibri VF50/VF61 SODIMM number to GPIO number mapping
-
- SODIMM_19 = 27
- SODIMM_21 = 26
-diff --git a/contrib/board_files/colibri-vf50.conf b/contrib/board_files/colibri-vf50.conf
-deleted file mode 100644
-index 3f73753..0000000
---- a/contrib/board_files/colibri-vf50.conf
-+++ /dev/null
-@@ -1,355 +0,0 @@
--# Toradex Colibri VF50 Computer On Module.
--# http://developer.toradex.com/products/colibri-vf50
--
--[board]
--dtfile = /proc/device-tree/model
--model = Toradex Colibri VF50 on Colibri Evaluation Board
--
--[GPIO]
--### Colibri VF50 SODIMM number to GPIO number mapping
--
--SODIMM_19 = 27
--SODIMM_21 = 26
--SODIMM_22 = 104
--SODIMM_23 = 10
--SODIMM_24 = 25
--SODIMM_25 = 35
--SODIMM_27 = 34
--SODIMM_28 = 30
--SODIMM_29 = 21
--SODIMM_30 = 23
--SODIMM_31 = 11
--SODIMM_32 = 82
--SODIMM_33 = 33
--SODIMM_34 = 81
--SODIMM_35 = 32
--SODIMM_36 = 80
--SODIMM_37 = 20
--SODIMM_38 = 79
--SODIMM_43 = 42
--SODIMM_44 = 109
--SODIMM_45 = 41
--SODIMM_46 = 121
--SODIMM_47 = 14
--SODIMM_48 = 123
--SODIMM_49 = 17
--SODIMM_50 = 125
--SODIMM_51 = 18
--SODIMM_52 = 112
--SODIMM_53 = 19
--SODIMM_54 = 113
--SODIMM_55 = 39
--SODIMM_56 = 107
--SODIMM_57 = 116
--SODIMM_58 = 131
--SODIMM_59 = 22
--SODIMM_59# = 52
--SODIMM_60 = 130
--SODIMM_61 = 117
--SODIMM_62 = 122
--SODIMM_63 = 38
--SODIMM_64 = 115
--SODIMM_65 = 40
--SODIMM_66 = 114
--SODIMM_67 = 31
--SODIMM_67# = 51
--SODIMM_68 = 105
--SODIMM_69 = 64
--SODIMM_70 = 129
--SODIMM_71 = 45
--SODIMM_72 = 133
--SODIMM_73 = 43
--SODIMM_74 = 124
--SODIMM_75 = 91
--SODIMM_76 = 128
--SODIMM_77 = 44
--SODIMM_78 = 132
--SODIMM_79 = 49
--SODIMM_80 = 120
--SODIMM_81 = 29
--SODIMM_82 = 106
--SODIMM_85 = 53
--SODIMM_86 = 84
--SODIMM_88 = 87
--SODIMM_89 = 2
--SODIMM_90 = 85
--SODIMM_92 = 86
--SODIMM_93 = 98
--SODIMM_94 = 28
--SODIMM_95 = 103
--SODIMM_96 = 134
--SODIMM_97 = 50
--SODIMM_98 = 46
--SODIMM_99 = 65
--SODIMM_100 = 92
--SODIMM_101 = 47
--SODIMM_102 = 93
--SODIMM_103 = 48
--SODIMM_104 = 66
--SODIMM_105 = 96
--SODIMM_106 = 63
--SODIMM_107 = 67
--SODIMM_127 = 68
--SODIMM_129 = 83
--SODIMM_131 = 108
--SODIMM_133 = 88
--SODIMM_134 = 7
--SODIMM_135 = 89
--SODIMM_136 = 126
--SODIMM_137 = 102
--SODIMM_138 = 127
--SODIMM_140 = 118
--SODIMM_142 = 119
--SODIMM_144 = 110
--SODIMM_146 = 111
--SODIMM_184 = 69
--SODIMM_186 = 70
--SODIMM_188 = 90
--SODIMM_190 = 15
--SODIMM_192 = 16
--SODIMM_194 = 37
--SODIMM_196 = 36
--
--### Colibri Evaluation Board location to GPIO mapping
--
--# (X9)
--X9_12 = 25
--X9_11 = 104
--X9_13 = 109
--X9_4 = 41
--X9_28 = 112
--X9_27 = 125
--X9_25 = 123
--X9_23 = 121
--X9_30 = 113
--X9_5 = 39
--X9_42 = 107
--X9_33 = 116
--X9_18 = 131
--X9_17 = 130
--X9_34 = 117
--X9_24 = 122
--X9_6 = 38
--X9_32 = 115
--X9_31 = 114
--X9_44 = 105
--X9_16 = 129
--X9_46 = 45
--X9_20 = 133
--X9_26 = 124
--X9_14 = 128
--X9_19 = 132
--X9_21 = 120
--X9_45 = 106
--X9_7 = 92
--X9_9 = 93
--X9_35 = 126
--X9_37 = 127
--X9_38 = 118
--X9_39 = 119
--X9_47 = 37
--X9_48 = 36
--X9_41 = 111
--X9_10 = 66
--X9_40 = 110
--
--# (X10)
--X10_2 = 27
--X10_3 = 26
--X10_4 = 10
--X10_5 = 35
--X10_6 = 34
--X10_27 = 30
--X10_7 = 21
--X10_28 = 23
--X10_9 = 11
--X10_30 = 82
--X10_19 = 33
--X10_14 = 81
--X10_11 = 32
--X10_16 = 80
--X10_12 = 20
--X10_17 = 79
--X10_18 = 42
--X10_19 = 14
--X10_23 = 17
--X10_24 = 18
--X10_25 = 19
--X10_26 = 22
--X10_26# = 52
--X10_30 = 31
--X10_30# = 51
--X10_31 = 43
--X10_32 = 84
--x10_33 = 87
--X10_34 = 85
--X10_35 = 86
--X10_37 = 96
--X10_42 = 68
--X10_38 = 67
--X10_47 = 83
--X10_48 = 108
--X10_41 = 88
--X10_39 = 63
--X10_40 = 89
--X10_49 = 102
--X10_20 = 15
--X10_21 = 16
--
--# (X22)
--X22_14 = 40
--X22_21 = 64
--X22_3 = 91
--X22_22 = 44
--X22_9 = 49
--X22_6 = 29
--X22_13 = 53
--X22_5 = 28
--X22_4 = 134
--X22_10 = 50
--X22_18 = 46
--X22_7 = 47
--X22_8 = 48
--
--# EX A
--EX_A_26 = 2
--EX_A_28 = 98
--EX_A_31 = 65
--EX_A_27 = 96
--EX_A_32 = 88
--EX_A_23 = 126
--EX_A_22 = 127
--EX_A_22 = 118
--EX_A_21 = 111
--EX_A_20 = 90
--
--# EX B
--EX_B_28 = 103
--EX_B_26 = 67
--EX_B_23 = 7
--EX_B_21 = 110
--EX_B_20 = 70
--
--# EX C
--EX_C_27 = 63
--EX_C_32 = 68
--EX_C_31 = 89
--EX_C_21 = 119
--EX_C_20 = 69
--
--### Colibri Aster Carrier Board location to GPIO mapping
--
--# Extension Connector (X20)
--# This extension connector pinout is compatible with header pins available on
--# the Raspberry Pi, Type B+ board.
--# NOTE: Some of these functions might change depending on the Colibri module that is used.
--X20_32 = 30
--# Via R127
--x20_27 = 21
--X20_33 = 23
--X20_36 = 82
--X20_11 = 81
--X20_10 = 80
--# Via R128
--X20_28 = 20
--X20_8 = 79
--# Via R120
--X20_12 = 22
--X20_24 = 40
--# Via R122
--X20_35 = 31
--# Via R124
--X20_40 = 64
--X20_15 = 45
--X20_38 = 91
--X20_37 = 49
--X20_31 = 29
--x20_26 = 84
--X20_23 = 87
--X20_21 = 85
--X20_19 = 86
--X20_29 = 28
--X20_7 = 134
--X20_13 = 50
--X20_16 = 46
--# Via R125
--X20_40 = 92
--X20_22 = 47
--X20_18 = 48
--# Via R121
--X20_12 = 89
--# Via R123
--X20_35 = 90
--X20_3 = 37
--# Via R126
--#X20_12 = 37
--X20_5 = 36
--# Via R129
--#X20_28 = 36
--
--# Arduino Shield header: Digital I/OPins (X17)
--UNO_GPIO1 = 41
--UNO_GPIO2 = 31
--UNO_GPIO2# = 51
--UNO_GPIO3 = 88
--UNO_GPIO4 = 30
--UNO_GPIO5 = 23
--UNO_GPIO6 = 39
--UNO_GPIO7 = 38
--UNO_GPIO8 = 22
--UNO_GPIO8# = 52
--UNO_SPI_MOSI = 86
--UNO_SPI_MISO = 85
--UNO_SPI_SCK = 87
--UNO_I2C_SDA = 37
--UNO_I2C_SCL = 36
--
--### Colibri Iris Carrier Board location to GPIO mapping
--
--# Extension Connctor (X16)
--X16_5 = 37
--X16_6 = 36
--X16_8 = 87
--X16_9 = 84
--X16_10 = 85
--X16_11 = 86
--X16_13 = 46
--X16_14 = 88
--X16_15 = 48
--X16_16 = 47
--X16_17 = 50
--X16_18 = 53
--X16_19 = 49
--X16_20 = 41
--X16_37 = 22
--X16_37# = 52
--X16_38 = 30
--X16_39 = 23
--X16_40 = 31
--X16_40# = 51
--
--### Colibri Viola Carrier Board location to GPIO mapping
--
--# Extension Connector (X9)
--X9_42 = 30
--X9_16 = 41
--X9_17 = 39
--X9_41 = 22
--X9_18 = 38
--X9_44 = 31
--X9_44# = 51
--X9_15 = 49
--X9_14 = 53
--X9_13 = 50
--X9_9 = 46
--X9_12 = 47
--X9_11 = 48
--X9_10 = 88
--X9_8 = 89
--
--# (X10)
--X10_8 = 29
--X10_9 = 28
--X10_10 = 134
--X10_11 = 40
--X10_12 = 91
---
-2.14.4
-
diff --git a/recipes-support/libsoc/libsoc_0.8.2.bbappend b/recipes-support/libsoc/libsoc_0.8.2.bbappend
deleted file mode 100644
index 1f17c94..0000000
--- a/recipes-support/libsoc/libsoc_0.8.2.bbappend
+++ /dev/null
@@ -1,33 +0,0 @@
-FILESEXTRAPATHS_prepend := "${THISDIR}/libsoc:"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-SRCREV = "9a97d260379856940a5de9862ef06803de82cca8"
-
-SRC_URI += " \
- file://0001-libsoc-use-sane-board-naming.patch \
-"
-
-BOARD_apalis-imx6 = "apalis-imx6"
-BOARD_apalis-tk1 = "apalis-tk1"
-BOARD_colibri-imx6 = "colibri-imx6"
-BOARD_colibri-imx6ull = "colibri-imx6ull"
-BOARD_colibri-imx7 = "colibri-imx7"
-BOARD_colibri-imx7-emmc = "colibri-imx7-emmc"
-
-PACKAGECONFIG_apalis-imx6 = "allboardconfigs enableboardconfig python"
-PACKAGECONFIG_apalis-tk1 = "allboardconfigs enableboardconfig python"
-PACKAGECONFIG_colibri-imx6 = "allboardconfigs enableboardconfig python"
-PACKAGECONFIG_colibri-imx6ull = "allboardconfigs enableboardconfig python"
-PACKAGECONFIG_colibri-imx7 = "allboardconfigs enableboardconfig python"
-PACKAGECONFIG_colibri-imx7-emmc = "allboardconfigs enableboardconfig python"
-
-pkg_postinst_ontarget_${PN}_colibri-imx6ull () {
- IS_WIFI_DTB=`grep -c toradex,colibri_imx6ull-wifi /proc/device-tree/compatible`
- if [ $IS_WIFI_DTB -gt 0 ]; then
- mv -f ${datadir}/libsoc/colibri-imx6ull.conf ${datadir}/libsoc/colibri-imx6ull.conf.bak
- # SODIMM pins missing on Wi-Fi SKU
- cat ${datadir}/libsoc/colibri-imx6ull.conf.bak | grep -E -v "(SODIMM_79|SODIMM_81|SODIMM_89|SODIMM_93|SODIMM_94|SODIMM_97|SODIMM_101|SODIMM_103|SODIMM_127|SODIMM_138)" > ${datadir}/libsoc/colibri-imx6ull.conf
- rm -f ${datadir}/libsoc/colibri-imx6ull.conf.bak
- fi
-}
diff --git a/recipes-support/libusbgx/files/g1.schema.in b/recipes-support/libusbgx/files/g1.schema.in
index 7bfaf70..99b39cc 100644
--- a/recipes-support/libusbgx/files/g1.schema.in
+++ b/recipes-support/libusbgx/files/g1.schema.in
@@ -24,21 +24,19 @@ strings = (
} );
functions :
{
- rndis_usb0 :
+ ncm_usb0 :
{
instance = "usb0";
- type = "rndis";
+ type = "ncm";
attrs :
{
- dev_addr = "00:14:2d:ff:ff:ff";
- host_addr = "00:14:2d:ff:ff:fe";
qmult = 5;
};
os_descs = (
{
- interface = "rndis";
- compatible_id = "RNDIS";
- sub_compatible_id = "5162001";
+ interface = "ncm";
+ compatible_id = "WINNCM";
+ sub_compatible_id = "";
} );
};
};
@@ -54,11 +52,11 @@ configs = (
strings = (
{
lang = 0x409;
- configuration = "RNDIS";
+ configuration = "WINNCM";
} );
functions = (
{
- name = "rndis.usb0";
- function = "rndis_usb0";
+ name = "ncm.usb0";
+ function = "ncm_usb0";
} );
} );
diff --git a/recipes-support/libusbgx/files/setup-board.sh b/recipes-support/libusbgx/files/setup-board.sh
new file mode 100755
index 0000000..03f5af4
--- /dev/null
+++ b/recipes-support/libusbgx/files/setup-board.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if [ -f /proc/device-tree/toradex,product-id ]; then
+ product_id=$(printf "0x%X\n" $((0x4000 + 0x$(tr -d "\0" < /proc/device-tree/toradex,product-id))))
+ echo $product_id > /sys/kernel/config/usb_gadget/g1/idProduct
+fi
+
+if [ -f /proc/device-tree/serial-number ]; then
+ serial_number=$(tr -d "\0" < /proc/device-tree/serial-number)
+ echo $serial_number > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
+fi
diff --git a/recipes-support/libusbgx/files/usbg.service b/recipes-support/libusbgx/files/usbg.service
deleted file mode 100644
index c9ed582..0000000
--- a/recipes-support/libusbgx/files/usbg.service
+++ /dev/null
@@ -1,17 +0,0 @@
-[Unit]
-Description=Load default USB gadget schema g1.schema
-ConditionPathExists=/etc/usbg/g1.schema
-Before=systemd-networkd.service
-
-[Service]
-Type=oneshot
-ExecStart=/usr/bin/gadget-import g1 /etc/usbg/g1.schema
-ExecStartPost=/bin/sh -c '/bin/echo $((0x4000+$(expr $(cat /proc/device-tree/toradex,product-id) + 0))) > \
- /sys/kernel/config/usb_gadget/g1/idProduct'
-ExecStartPost=/bin/sh -c '/bin/cat /proc/device-tree/serial-number > \
- /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber'
-ExecStartPost=/bin/sh -c '/bin/echo `ls /sys/class/udc/` > \
- /sys/kernel/config/usb_gadget/g1/UDC'
-
-[Install]
-WantedBy=multi-user.target
diff --git a/recipes-support/libusbgx/libusbgx-config.bbappend b/recipes-support/libusbgx/libusbgx-config.bbappend
new file mode 100644
index 0000000..33ef5b7
--- /dev/null
+++ b/recipes-support/libusbgx/libusbgx-config.bbappend
@@ -0,0 +1,19 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
+
+PACKAGE_ARCH:tdx = "${MACHINE_ARCH}"
+
+SRC_URI:append:tdx = " \
+ file://g1.schema.in \
+ file://setup-board.sh \
+"
+
+do_install:append:tdx() {
+ sed -e "s:@@PRODUCT_NAME@@:${MACHINE}:" ${WORKDIR}/g1.schema.in > ${WORKDIR}/g1.schema
+ sed -i "s:IMPORT_SCHEMAS=.*:IMPORT_SCHEMAS=\"g1\":" ${D}${sysconfdir}/default/usbgx
+
+ install -d ${D}${sysconfdir}/usbgx
+ install -m 0644 ${WORKDIR}/g1.schema ${D}${sysconfdir}/usbgx/g1.schema
+
+ install -d ${D}${sysconfdir}/usbgx.d
+ install -m 0755 ${WORKDIR}/setup-board.sh ${D}${sysconfdir}/usbgx.d
+}
diff --git a/recipes-support/libusbgx/libusbgx_git.bb b/recipes-support/libusbgx/libusbgx_git.bb
deleted file mode 100644
index 6449f9c..0000000
--- a/recipes-support/libusbgx/libusbgx_git.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-SUMMARY = "USB Gadget neXt Configfs Library"
-
-LICENSE = "GPLv2 & LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
- file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
-
-inherit autotools pkgconfig systemd
-
-DEPENDS = "libconfig"
-
-EXTRA_OECONF = "--includedir=${includedir}/usbgx"
-
-PV = "0.2.0+git${SRCPV}"
-SRCREV = "45c14ef4d5d7ced0fbf984208de44ced6d5ed898"
-SRCBRANCH = "master"
-SRC_URI = " \
- git://github.com/libusbgx/libusbgx.git;branch=${SRCBRANCH} \
- file://usbg.service \
- file://g1.schema.in \
-"
-
-S = "${WORKDIR}/git"
-
-MACHINE_NAME ?= "${MACHINE}"
-do_compile_append () {
- sed -e "s:@@PRODUCT_NAME@@:${MACHINE_NAME}:" ${WORKDIR}/g1.schema.in > ${WORKDIR}/g1.schema
-}
-
-do_install_append () {
- if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
- install -d ${D}${systemd_unitdir}/system/
- install -m 0644 ${WORKDIR}/usbg.service ${D}${systemd_unitdir}/system
- fi
-
- install -d ${D}${sysconfdir}/usbg/
- install -m 0644 ${WORKDIR}/g1.schema ${D}${sysconfdir}/usbg/g1.schema
-}
-
-SYSTEMD_PACKAGES = "${PN}-examples"
-SYSTEMD_SERVICE_${PN}-examples = "usbg.service"
-
-PACKAGES =+ "${PN}-examples"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-FILES_${PN}-examples = " \
- ${bindir}/gadget-* \
- ${bindir}/show-gadgets \
- ${bindir}/show-udcs \
- ${sysconfdir}/usbg/g1.schema \
-"
diff --git a/recipes-support/rng-tools/rng-tools_%.bbappend b/recipes-support/rng-tools/rng-tools_%.bbappend
new file mode 100644
index 0000000..562c022
--- /dev/null
+++ b/recipes-support/rng-tools/rng-tools_%.bbappend
@@ -0,0 +1 @@
+PACKAGECONFIG:remove:tdx = "libjitterentropy"
diff --git a/recipes-support/snapd/snapd_2.25.bb b/recipes-support/snapd/snapd_2.25.bb
index e1998e8..d644323 100644
--- a/recipes-support/snapd/snapd_2.25.bb
+++ b/recipes-support/snapd/snapd_2.25.bb
@@ -1,6 +1,6 @@
SUMMARY = "The snapd and snap tools enable systems to work with .snap files."
HOMEPAGE = "https://www.snapcraft.io"
-LICENSE = "GPL-3.0"
+LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://${WORKDIR}/${PN}-${PV}/COPYING;md5=d32239bcb673463ab874e80d47fae504"
SRC_URI = " \
@@ -21,7 +21,7 @@ DEPENDS = " \
xfsprogs \
"
-RDEPENDS_${PN} = " \
+RDEPENDS:${PN} = " \
ca-certificates \
kernel-module-squashfs \
squashfs-tools \
@@ -43,13 +43,13 @@ inherit systemd go autotools pkgconfig python3native
# and we need to tell the autotools class to look in there.
AUTOTOOLS_SCRIPT_PATH = "${S}/cmd"
-SYSTEMD_SERVICE_${PN} = "snapd.service"
+SYSTEMD_SERVICE:${PN} = "snapd.service"
-do_configure_prepend() {
+do_configure:prepend() {
(cd ${S} ; ./mkversion.sh ${PV})
}
-do_configure_append() {
+do_configure:append() {
go_do_configure
}
@@ -87,7 +87,7 @@ do_install() {
echo "PATH=\$PATH:/snap/bin" > ${D}${sysconfdir}/profile.d/20-snap.sh
}
-FILES_${PN} += " \
+FILES:${PN} += " \
${systemd_unitdir}/system/ \
/var/lib/snapd \
/var/snap \
@@ -96,4 +96,4 @@ FILES_${PN} += " \
# ERROR: snapd-2.23.5-r0 do_package_qa: QA Issue: No GNU_HASH in the elf binary:
# '.../snapd/usr/lib/snapd/snap-exec' [ldflags]
-INSANE_SKIP_${PN} = "ldflags"
+INSANE_SKIP:${PN} = "ldflags"
diff --git a/recipes-support/tdx-info/tdx-info_0.1.1.bb b/recipes-support/tdx-info/tdx-info_0.1.1.bb
new file mode 100644
index 0000000..61ee751
--- /dev/null
+++ b/recipes-support/tdx-info/tdx-info_0.1.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Script to get useful information about Toradex Hardware."
+DESCRIPTION = "This script can be used by Toradex customers in userspace to grab information from the module and share it with Toradex Support Team"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c38c9404df9658111a87d5090719fb44"
+
+SRC_URI = "git://github.com/toradex/tdx-info;protocol=https;branch=v${PV}"
+SRCREV = "80840350f00965e9862a354a1bd870954f8af18e"
+
+S = "${WORKDIR}/git"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/tdx-info ${D}${bindir}
+}