Enabling SPI on Verdin AM62 in Yocto: Missing .dts file - modify .dtsi

Hello Toradex Community,

I’m working with a Verdin AM62 module and need to enable SPI1 through the device tree. In my Yocto build environment, I’m encountering the following

  1. File Location
  • Found: k3-am62-verdin.dtsi in tmp/work-shared/verdin-am62/kernel-source/arch/arm64/boot/dts/
  • Missing: k3-am62-verdin.dts (not found anywhere in the Yocto build
  1. Yocto-Specific Context:

Using Toradex’s BSP layer with linux-toradex-ti recipe

Building with Yocto Scarthgap
Need to configure SPI1 with:
Mode 3 (CPOL=1, CPHA=1)
3MHz speed
8 bits/word

Assume it modifies, what are my next steps and also like how to build that like i need to build full image or i need to build that specif dts part if so what is the command to do so

like i have mallow_carrier_board now and i choosen to use verdin_am62

Soo now there are many dts and dtsi files which one i should modify

udaykumar@SYS-TK01:~/oe-core/build/tmp/work-shared/verdin-am62/kernel-source/arch/arm64/boot/dts/ti$ ls
k3-am625-beagleplay-csi2-ov5640.dtso k3-am62p5-verdin-wifi-mallow.dts k3-am6548-iot2050-advanced-pg2.dts k3-j721e-evm-pcie0-ep.dtso
k3-am625-beagleplay-csi2-tevi-ov5640.dtso k3-am62p5-verdin-wifi-yavia.dts k3-am654-base-board.dts k3-j721e-evm-pcie1-ep.dtso
k3-am625-beagleplay.dts k3-am62p.dtsi k3-am654-base-board-rocktech-rk101-panel.dtso k3-j721e-evm-quad-port-eth-exp.dtso
k3-am625-beagleplay-lincolntech-lcd185-panel.dtso k3-am62-phycore-som.dtsi k3-am654-base-board-toshiba-tc358867-evm.dtso k3-j721e-main.dtsi
k3-am625.dtsi k3-am62p-main.dtsi k3-am654.dtsi k3-j721e-mcu-wakeup.dtsi
k3-am625-minimal.dts k3-am62p-mcu.dtsi k3-am654-icssg2.dtso k3-j721e-sk-csi2-dual-imx219.dtso
k3-am625-phyboard-lyra-rdk.dts k3-am62p-thermal.dtsi k3-am654-idk.dtso k3-j721e-sk-csi2-ov5640.dtso
k3-am625-sk.dts k3-am62p-verdin-dahlia.dtsi k3-am654-industrial-thermal.dtsi k3-j721e-sk.dts
k3-am625-sk-ecap-capture.dtso k3-am62p-verdin-dev.dtsi k3-am654-pcie-usb2.dtso k3-j721e-sk-fpdlink-fusion.dtso
k3-am625-sk-lincolntech-lcd185-panel.dtso k3-am62p-verdin.dtsi k3-am654-pcie-usb3.dtso k3-j721e-sk-rpi-hdr-ehrpwm.dtso
k3-am625-sk-m2-cc3301.dtso k3-am62p-verdin-ivy.dtsi k3-am65.dtsi k3-j721e-som-p0.dtsi
k3-am625-sk-mcspi-loopback.dtso k3-am62p-verdin-mallow.dtsi k3-am65-iot2050-common.dtsi k3-j721e-thermal.dtsi
k3-am625-sk-microtips-mf101hie-panel.dtso k3-am62p-verdin-nonwifi.dtsi k3-am65-iot2050-common-pg1.dtsi k3-j721s2-common-proc-board.dts
k3-am625-sk-rpi-hdr-ehrpwm.dtso k3-am62p-verdin-wifi.dtsi k3-am65-iot2050-common-pg2.dtsi k3-j721s2.dtsi
k3-am625-verdin-nonwifi-dahlia.dts k3-am62p-verdin-yavia.dtsi k3-am65-main.dtsi k3-j721s2-evm-csi2-ov5640.dtso
k3-am625-verdin-nonwifi-dev.dts k3-am62p-wakeup.dtsi k3-am65-mcu.dtsi k3-j721s2-evm-fusion.dtso
k3-am625-verdin-nonwifi-ivy.dts k3-am62-thermal.dtsi k3-am65-wakeup.dtsi k3-j721s2-evm-gesi-exp-board.dtso
k3-am625-verdin-nonwifi-mallow.dts k3-am62-verdin-dahlia.dtsi k3-am68-sk-base-board.dts k3-j721s2-evm-pcie1-ep.dtso
k3-am625-verdin-nonwifi-yavia.dts k3-am62-verdin-dev.dtsi k3-am68-sk-bb-csi2-ov5640.dtso k3-j721s2-main.dtsi
k3-am625-verdin-wifi-dahlia.dts k3-am62-verdin.dtsi k3-am68-sk-rpi-hdr-ehrpwm.dtso k3-j721s2-mcu-wakeup.dtsi
k3-am625-verdin-wifi-dev.dts k3-am62-verdin-ivy.dtsi k3-am68-sk-som.dtsi k3-j721s2-som-p0.dtsi
k3-am625-verdin-wifi-ivy.dts k3-am62-verdin-mallow.dtsi k3-am68-sk-v3link-fusion.dtso k3-j721s2-thermal.dtsi
k3-am625-verdin-wifi-mallow.dts k3-am62-verdin-nonwifi.dtsi k3-am69-aquila-clover.dts k3-j722s.dtsi
k3-am625-verdin-wifi-yavia.dts k3-am62-verdin-wifi.dtsi k3-am69-aquila-dev.dts k3-j722s-evm-csi2-ov5640.dtso
k3-am62a7.dtsi k3-am62-verdin-yavia.dtsi k3-am69-aquila.dtsi k3-j722s-evm-csi2-quad-rpi-cam-imx219.dtso
k3-am62a7-sk-csi2-ox05b1s.dtso k3-am62-wakeup.dtsi k3-am69-sk-csi2-ov5640.dtso k3-j722s-evm-csi2-quad-tevi-ov5640.dtso
k3-am62a7-sk.dts k3-am62x-phyboard-lyra-gpio-fan.dtso k3-am69-sk.dts k3-j722s-evm-dsi-rpi-7inch-panel.dtso
k3-am62a7-sk-e3-max-opp.dtso k3-am62x-sk-common.dtsi k3-am69-sk-fpdlink-fusion-auxport.dtso k3-j722s-evm.dts
k3-am62a7-sk-ethernet-dc01.dtso k3-am62x-sk-csi2-imx219.dtso k3-am69-sk-rpi-hdr-ehrpwm.dtso k3-j722s-evm-fpdlink-fusion.dtso
k3-am62a7-sk-fusion.dtso k3-am62x-sk-csi2-ov5640.dtso k3-fpdlink-imx390-rcm-0-0.dtso k3-j722s-evm-microtips-mf101hie-panel.dtso
k3-am62a7-sk-m2-cc3301.dtso k3-am62x-sk-csi2-tevi-ov5640.dtso k3-fpdlink-imx390-rcm-0-1.dtso k3-j722s-evm-pwm.dtso
k3-am62a7-sk-rpi-hdr-ehrpwm.dtso k3-am62x-sk-csi2-v3link-fusion.dtso k3-fpdlink-imx390-rcm-0-2.dtso k3-j722s-evm-v3link-fusion.dtso
k3-am62a7-sk-ub954-evm.dtso k3-am62x-sk-dmtimer-pwm.dtso k3-fpdlink-imx390-rcm-0-3.dtso k3-j722s-main.dtsi
k3-am62a.dtsi k3-am62x-sk-eqep.dtso k3-fpdlink-imx390-rcm-1-0.dtso k3-j742s2.dtsi
k3-am62a-main.dtsi k3-am62x-sk-fastboot-disable-hdmi.dtso k3-fpdlink-imx390-rcm-1-1.dtso k3-j742s2-evm.dts
k3-am62a-mcu.dtsi k3-am62x-sk-hdmi-audio.dtso k3-fpdlink-imx390-rcm-1-2.dtso k3-j742s2-evm-ethfw.dtso
k3-am62a-thermal.dtsi k3-am62x-sk-lpm-wkup-sources.dtso k3-fpdlink-imx390-rcm-1-3.dtso k3-j742s2-main.dtsi
k3-am62a-wakeup.dtsi k3-am62x-sk-mcan.dtso k3-fpdlink-imx390-rcm-2-0.dtso k3-j784s4.dtsi
k3-am62.dtsi k3-am62x-sk-microtips-mf103hie-lcd2.dtso k3-fpdlink-imx390-rcm-2-1.dtso k3-j784s4-evm-csi2-ov5640.dtso
k3-am62-lp-sk.dts k3-am62x-sk-pwm.dtso k3-fpdlink-imx390-rcm-2-2.dtso k3-j784s4-evm.dts
k3-am62-lp-sk-lincolntech-lcd185-panel.dtso k3-am642.dtsi k3-fpdlink-imx390-rcm-2-3.dtso k3-j784s4-evm-ethfw.dtso
k3-am62-lp-sk-microtips-mf101hie-panel.dtso k3-am642-evm.dts k3-fpdlink-ov2312-0-0.dtso k3-j784s4-evm-pcie0-pcie1-ep.dtso
k3-am62-lp-sk-nand.dtso k3-am642-evm-icssg1-dualemac.dtso k3-fpdlink-ov2312-0-1.dtso k3-j784s4-evm-quad-port-eth-exp1.dtso
k3-am62-main.dtsi k3-am642-evm-icssg1-dualemac-mii.dtso k3-fpdlink-ov2312-0-2.dtso k3-j784s4-evm-usxgmii-exp1-exp2.dtso
k3-am62-mcu.dtsi k3-am642-evm-nand.dtso k3-fpdlink-ov2312-0-3.dtso k3-j784s4-main.dtsi
k3-am62p5.dtsi k3-am642-evm-pcie0-ep.dtso k3-j7200-common-proc-board.dts k3-j784s4-mcu-wakeup.dtsi
k3-am62p5-sk-dsi-rpi-7inch-panel.dtso k3-am642-evm-sk-cpsw3g-pps.dtso k3-j7200.dtsi k3-j784s4-thermal.dtsi
k3-am62p5-sk-dss-shared-mode.dtso k3-am642-phyboard-electra-rdk.dts k3-j7200-evm-ethfw.dtso k3-pinctrl.h
k3-am62p5-sk.dts k3-am642-sk.dts k3-j7200-evm-mcspi-loopback.dtso k3-serdes.h
k3-am62p5-sk-eqep.dtso k3-am642-sk-pwm.dtso k3-j7200-evm-pcie1-ep.dtso k3-v3link-imx219-0-0.dtso
k3-am62p5-sk-ethfw.dtso k3-am642-tqma64xxl.dtsi k3-j7200-evm-quad-port-eth-exp.dtso k3-v3link-imx219-0-1.dtso
k3-am62p5-sk-m2-cc3301.dtso k3-am642-tqma64xxl-mbax4xxl.dts k3-j7200-main.dtsi k3-v3link-imx219-0-2.dtso
k3-am62p5-sk-mcan.dtso k3-am64.dtsi k3-j7200-mcu-wakeup.dtsi k3-v3link-imx219-0-3.dtso
k3-am62p5-sk-microtips-mf070zima-lcd3.dtso k3-am64-main.dtsi k3-j7200-som-p0.dtsi k3-v3link-imx219-1-0.dtso
k3-am62p5-sk-microtips-mf101hie-panel.dtso k3-am64-mcu.dtsi k3-j7200-thermal.dtsi k3-v3link-imx219-1-1.dtso
k3-am62p5-sk-microtips-mf103hie-lcd2.dtso k3-am64-phycore-som.dtsi k3-j721e-beagleboneai64-dsi-rpi-7inch-panel.dtso k3-v3link-imx219-1-2.dtso
k3-am62p5-sk-pwm.dtso k3-am64-thermal.dtsi k3-j721e-beagleboneai64.dts k3-v3link-imx219-1-3.dtso
k3-am62p5-sk-rpi-hdr-ehrpwm.dtso k3-am64-tqma64xxl-mbax4xxl-sdcard.dtso k3-j721e-beagleboneai64-microtips-mf070zima-lcd3.dtso k3-v3link-ov5640-0-0.dtso
k3-am62p5-verdin-nonwifi-dahlia.dts k3-am64-tqma64xxl-mbax4xxl-wlan.dtso k3-j721e-common-proc-board.dts k3-v3link-ov5640-0-1.dtso
k3-am62p5-verdin-nonwifi-dev.dts k3-am6528-iot2050-basic-common.dtsi k3-j721e-common-proc-board-infotainment.dtso k3-v3link-ov5640-0-2.dtso
k3-am62p5-verdin-nonwifi-ivy.dts k3-am6528-iot2050-basic.dts k3-j721e.dtsi k3-v3link-ov5640-0-3.dtso
k3-am62p5-verdin-nonwifi-mallow.dts k3-am6528-iot2050-basic-pg2.dts k3-j721e-evm-csi2-ov5640.dtso k3-v3link-tevi-ov5640-0-0.dtso
k3-am62p5-verdin-nonwifi-yavia.dts k3-am652.dtsi k3-j721e-evm-ethfw.dtso k3-v3link-tevi-ov5640-0-1.dtso
k3-am62p5-verdin-wifi-dahlia.dts k3-am6548-iot2050-advanced-common.dtsi k3-j721e-evm-fusion.dtso k3-v3link-tevi-ov5640-0-2.dtso
k3-am62p5-verdin-wifi-dev.dts k3-am6548-iot2050-advanced.dts k3-j721e-evm-gesi-exp-board.dtso k3-v3link-tevi-ov5640-0-3.dtso
k3-am62p5-verdin-wifi-ivy.dts k3-am6548-iot2050-advanced-m2.dts k3-j721e-evm-ina2xx.dtso Makefile
udaykumar@SYS-TK01:~/oe-core/build/tmp/work-shared/verdin-am62/kernel-source/arch/arm64/boot/dts/ti$ nano k3-am62-verdin.dtsi

Hi @Uday10122!

To modify the device tree, we recommend using overlays. If you are not familiar with overlays, refer to the Device Tree Overlays Technical Overview article.

Another interesting article is First Steps with Device Tree Overlays. I recommend you read it and see if it solves your issue.

Best regards.
Lucas Azeituno

Hi Lucas,

Thank you for the helpful resources!

I’m quite new to Yocto and device trees, but I’m slowly getting the hang of it. I’ve successfully built the image for the verdin-am62 machine without any issues.

I now want to enable SPI on the board. I already know how to edit the overlay based on my requirement, but I’m not sure how and where exactly to add the overlay in the Yocto build—like where to place the .dts file, how to compile it, and how to include it in the image.

If you could provide some beginner-friendly steps or examples for this part, that would be really helpful.

Thanks again for your support!

Best regards,
Uday

Hi @Uday10122!

This is the structure you should have:

meta-overlay-test/
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-kernel
    └── linux
        ├── device-tree-overlays
        │   └── verdin-imx8mp_gpio-pullup.dts
        └── device-tree-overlays_%.bbappend

In this example, I used an overlay to enable GPIOs pull-ups.

The .dts is:

/dts-v1/;
/plugin/;

#include <dt-bindings/gpio/gpio.h>
#include "imx8mp-pinfunc.h"

/ {
        compatible = "toradex,verdin-imx8mp-nonwifi-dahlia",
                     "toradex,verdin-imx8mp-nonwifi",
                     "toradex,verdin-imx8mp",
                     "fsl,imx8mp";
};

&pinctrl_gpio1 {
        fsl,pins = <MX8MP_IOMUXC_GPIO1_IO00__GPIO1_IO00         0x1c4>;
};

&pinctrl_gpio3 {
        fsl,pins = <MX8MP_IOMUXC_GPIO1_IO05__GPIO1_IO05         0x1c4>;
};

&pinctrl_gpio4 {
        fsl,pins = <MX8MP_IOMUXC_GPIO1_IO06__GPIO1_IO06         0x1c4>;
};

And the .bbappend file is:

FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"

SRC_URI:append = " file://verdin-imx8mp_gpio-pullup.dts"

do_collect_overlays:prepend () {
    cp ${WORKDIR}/verdin-imx8mp_gpio-pullup.dts ${S}
}

TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT:append = " verdin-imx8mp_gpio-pullup.dtbo"

After this, you must add the meta-layer (meta-overlay-test in this example) to your bblayers.conf. Otherwise, Yocto won’t build it.

Following this structure, you should be able to build an image with your overlay added.

Feel free to ask if you face any issues or doubts.

Best regards.
Lucas Azeituno.

1 Like

Hi Lucas,

A big thanks for your detailed guidance and example — it helped a lot!

I followed your structure and adapted it for the verdin-am62 with my custom overlay verdin-am62-mallow-spi1.dts. Below are the two files I used:

verdin-am62-mallow-spi1.dts

/dts-v1/;
/plugin/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/spi/spi.h>

/ {
compatible = “toradex,verdin-am62”, “ti,am625”;
fragment@0 {
target = <&main_spi1>;
overlay {
status = “okay”;
spidev0: spi@0 {
compatible = “spidev”;
reg = <0>;
spi-max-frequency = <3000000>; // 3MHz
spi-cpol;
spi-cpha;
status = “okay”;
};
};
};
};

device-tree-overlays_%.bbappend

FILESEXTRAPATHS:prepend := “${THISDIR}/${BPN}:”

SRC_URI:append = " file://verdin-am62-mallow-spi1.dts"

do_collect_overlays:prepend () {
cp ${WORKDIR}/verdin-am62-mallow-spi1.dts ${S}
}

TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT:append = " verdin-am62-mallow-spi1.dtbo"

I also added my custom layer to the bblayers.conf, and the build completed without any errors.
However, I don’t see the verdin-am62-mallow-spi1.dtbo file inside the build/deploy/images/verdin-am62/overlays directory.

Am I missing any step to ensure that this .dts gets compiled into a .dtbo and placed correctly in the overlays directory?

Thanks again for your help — I really appreciate your support!

Best regards,
Uday

Hi @Uday10122!

We already have an overlay for spidev pre-built and pre-enabled in Verdin AM62.

Please refer to this article to learn how to enable pre-built overlays in our BSP, and this for TorizonOS.

Here is a list of pre-enabled overlays in our SoMs.

Best regards.
Lucas Azeituno

Hi @Lucas,

Thank you so much for the clarification and the helpful resources!

Yes, I noticed that a prebuilt overlay for spidev is already available and enabled in the Verdin AM62 BSP.

However, for learning purposes, I wanted to go through the process myself—disabling the prebuilt overlay and creating a custom .dts to generate my own .dtbo file. I followed the steps and created the layer and file structure as you described earlier.

My main goal with this exercise is just to understand how the overlay integration works and how the .dtbo is generated within the Yocto workflow.

i am following this link for structure “meta-grilo-experiments/meta-new-device-tree-overlays at scarthgap-7.x.y · griloHBG/meta-grilo-experiments · GitHub

Thanks again for your support!

Best regards,
Uday kumar

Hi @Uday10122!

The link that you sent should work, too.

Can I consider this topic solved?

Best regards.
Lucas Azeituno.

Hi Lucas,

Yes, it works. Thanks! You can mark it as solved.

Best regards,
Uday