Hardware / Environment
-
Board: Verdin AM62 (Colibri SoM, WiFi version) on a custom carrier board
-
Kernel: Reference Minimal Image (Toradex)
-
U-Boot: Using
fdtfile=k3-am625-verdin-wifi-dev-new.dtb -
Tools:
gpioset,gpioget,gpioinfo,grepon/sys/kernel/debug/pinctrl/*/pinmux-pins
Goal
Reconfigure SODIMM pins 42, 44, and 46 (GPIO0_35, GPIO0_37, GPIO0_34) as plain GPIOs instead of their default peripheral functions (I²S2/McASP). Need them to toggle reliably via gpioset/gpioget.
Changes Tried
-
Device tree pinmux group:
pinctrl_i2s2_as_gpio: main-i2s2-gpio-pins { pinctrl-single,pins = < AM62X_IOPAD(0x0090, PIN_OUTPUT, 7) /* GPIO0_35 - SODIMM 42 */ AM62X_IOPAD(0x0098, PIN_OUTPUT, 7) /* GPIO0_37 - SODIMM 44 */ AM62X_IOPAD(0x008c, PIN_OUTPUT, 7) /* GPIO0_34 - SODIMM 46 */ AM62X_IOPAD(0x0088, PIN_OUTPUT, 7) /* GPIO0_33 - SODIMM 48 */ >; bias-pull-up; //Even without this }; -
Applied to
&main_gpio0(tried even without hogging):&main_gpio0 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2s2_as_gpio>; status = "okay"; gpio-line-names = "SODIMM_52", "", "", "SODIMM_56", "SODIMM_58", "SODIMM_60", "SODIMM_62", "", "", "", "", "SODIMM_54", "SODIMM_64", "", "", "SODIMM_174", "SODIMM_172", "", "", "", "", "", "", "", "", "SODIMM_76", "SODIMM_21", "SODIMM_256", "SODIMM_252", "SODIMM_48", "SODIMM_46", "SODIMM_42", "SODIMM_218", "SODIMM_44", "SODIMM_189", ...; sodimm42_hog: sodimm42-hog { gpio-hog; gpios = <35 GPIO_ACTIVE_HIGH>; line-name = "SODIMM_42"; output-low; }; sodimm44_hog: sodimm44-hog { gpio-hog; gpios = <37 GPIO_ACTIVE_HIGH>; line-name = "SODIMM_44"; output-low; }; }; -
Rebuilt and deployed DTB
-
Placed at
/boot/k3-am625-verdin-wifi-dev-new.dtb -
Verified U-Boot is set:
setenv fdtfile k3-am625-verdin-wifi-dev-new.dtb saveenv -
Checked
/sys/firmware/fdtstrings includesodimm42-hogandSODIMM_42.
-
-
Verified file checksum differences (
md5sum) to ensure new DTB was loaded. -
Tested with libgpiod:
-
gpioset 1 35=1→error setting the GPIO line values: Device or resource busy -
gpioget 1 34→ always0 -
gpioinfo | grep SODIMM_42→ shows[used] -
/sys/kernel/debug/pinctrl/.../pinmux-pins:pin 34 (PIN34): (MUX UNCLAIMED) (GPIO UNCLAIMED) pin 35 (PIN35): (MUX UNCLAIMED) (GPIO UNCLAIMED) pin 37 (PIN37): 600000.gpio (GPIO UNCLAIMED) function main-gpio0-36-default-pins
-
-
Other checks done:
-
Used
strings /sys/firmware/fdtto confirm DT contents. -
Verified device tree includes my hog nodes.
-
Watched
/sys/kernel/debug/pinctrl/*/pinmux-pinswithwatch, but no muxing change when toggling GPIO.
-
Current Behavior / Issue
-
Pins remain
(MUX UNCLAIMED)or(GPIO UNCLAIMED)after boot. -
Even hogged pins are marked
[used]ingpioinfobut never get muxed to GPIO. -
gpiosetfails withDevice or resource busy. -
Other pins (e.g., GPIO0_40 with a simpler pinctrl) toggle correctly, so the subsystem works in general.
Questions for the Forum
-
Is my hog placement or pinmux binding incorrect for AM62/Verdin?
-
Do hogs inside
&main_gpio0fail to request muxing early enough—should they be undergpio@600000instead? -
Is there another DT fragment (
k3-am62-verdin-wifi.dtsior similar) overriding my changes at boot? -
Any kernel configs or driver quirks for AM62 that prevent muxing unless a consumer explicitly requests the line?
-
Recommended way to confirm at runtime which DTB is truly active (without
dtcon target)?
Would anyone familiar with AM62x or Verdin DT overlays/hogs provide guidance on why these pins remain unclaimed even though the new DTB contains my changes?