Carrier Board : IVY Plus or Verdin Board
Board : IMX8MP
Linux : verdin-imx8mp-15290475 5.15.129-rt67-6.5.0-devel+git.6f8fd49366db #1 SMP PREEMPT_RT Fri Dec 22 11:15:52 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
The GPIO control example program from the SDK is not controlling the GPIO3 output.
Do I need to do anything on the deviceTree and overlay on this.
My existing dtb/dts on linux
imx8mp-verdin-nonwifi-dev.dts (107.5 KB)
Overlay I modied to run the hello world ( uart4)
verdin-imx8mp_uart4_cm7-overlay.dts (1.5 KB)
Hi, I’m the Toradex AI Assistant.
I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.
Did you like my answer?

Hello! Thank you for the detailed information about your setup.
If your GPIO3 output is not working as expected on the Verdin iMX8MP, it is very likely that device tree changes are required. By default, pins may be assigned to other functions (like UART, SPI, I2C, etc.), and in order to control a pin as a GPIO, you need to:
- Ensure the pin is set to GPIO mode in the device tree or overlay.
- Make sure no other peripheral is driving the GPIO3 pin.
Steps to Enable GPIO3 via Device Tree Overlay
-
Identify the Pin Mapping
-
Create/Modify a Device Tree Overlay
Here’s a simplified example to enable a pin as GPIO (replace SODIMM_202
, main_pmx0
, and GPIO0_7
with your actual GPIO3 mapping):
/dts-v1/;
/plugin/;
/ {
compatible = "toradex,verdin-imx8mp";
};
&main_pmx0 {
pinctrl_gpio3: gpio3_grp {
fsl,pins = <
/* Replace with your actual GPIO3 pad control */
MX8MP_IOMUXC_GPIO1_IO03 0x1c6 /* Example */
>;
};
};
&gpio1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio3>;
};
(Replace the pad and GPIO references as per your actual pinout and SoC documentation.)
-
Disable Pin Conflicts
If GPIO3 was previously assigned to another peripheral, that interface needs to be disabled. For example, if UART4 was configured on this pin:
&uart4 {
status = "disabled";
};
-
Deploy the Overlay
Deploy your overlay following the overlays documentation:
How to write and deploy a device tree overlay
Summary Checklist
- Map the correct pad/pin to GPIO function in your overlay.
- Ensure no other interface claims the pin (disable others).
- Deploy the overlay and reboot.
If you wish, you can share which exact SODIMM or pad you are mapping as “GPIO3” and I can help with a more specific example.
Further details:
How to write device tree overlays on Toradex
Let me know if you need help mapping the pin or building the overlay!
Best regards,
Toradex AI Assistant.
I would like to use the
SODIMM_206_M as input
SODIMM_208_M as input
SODIMM_210_M as output (T28 Pin)
SODIMM_212_M as output
Thanks.
Ramesh.
Information from schematic on GPIO3:
GPIO3 is on the schematic SODIMM_210_M pin .
root@verdin-imx8mp-15290475:~# gpiofind SODIMM_210
gpiochip0 5
root@verdin-imx8mp-15290475:~# gpioinfo
gpiochip0 - 32 lines:
line 0: “SODIMM_206” unused input active-high
line 1: “SODIMM_208” unused input active-high
line 2: unnamed unused input active-high
line 3: unnamed “interrupt” input active-high [used]
line 4: unnamed “sd-vsel” output active-high [used]
line 5: “SODIMM_210” unused input active-high
Since SODIMM_210 is mentioned unused in the gpioinfo command, do i need to make it to the overlay for GPIO3?
Thanks.
SODIMM_210 is referred by pinctrl_gpio3
. And it is still used in iomuxc from verdin-imx8mp_uart4_cm7-overlay.dts
. In order to manipulate it from M7, pinctrl_gpio3
has to be freed from device tree.
/* Remove pinctrl_gpio_hog4 and add pinctrl_gpio_hog1 */
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio1>, <&pinctrl_gpio2>,
<&pinctrl_gpio3>, <&pinctrl_gpio4>,
<&pinctrl_gpio7>, <&pinctrl_gpio8>,
<&pinctrl_gpio_hog1>, <&pinctrl_gpio_hog2>, <&pinctrl_gpio_hog3>,
<&pinctrl_hdmi_hog>;
};