Forums › Devices › OSD32MP15x › Configure OSD32MP15x for 1.8V I/O operation
Tagged: OSD32MP15x 1.8V
Hi,
We are trying to enable 1.8V on our custom board based on OSD32MP157F SiP.
We are not using MicroSD card at sdmmc1. Only using eMMC at sdmmc2 and WiFi module LBEE5HY1MW at sdmmc3.
We’ve made all the required changes in hardware, PMIC NVM registers and device tree but its not working and appears to be stuck at u-boot.
We’ve made following hardware changes (with respect to OSD32MP1 RED board)
We’ve made following kernel and tfa devcie tree changes. U-Boot device tree is same as Kernel device tree.
Kernel device tree changes
/* Kernel device tree changes code snippet */ /* PMIC */ &i2c4{ u-boot,dm-pre-reloc; pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c4_pins_z_mx>; pinctrl-1 = <&i2c4_sleep_pins_z_mx>; status = "okay"; i2c-scl-rising-time-ns = <185>; i2c-scl-falling-time-ns = <20>; clock-frequency = <400000>; /delete-property/ dmas; /delete-property/ dma-names; pmic:stpmic@33{ compatible = "st,stpmic1"; reg = <0x33>; interrupts-extended = <&exti_pwr 55 IRQ_TYPE_EDGE_FALLING>; interrupt-controller; #interrupt-cells = <2>; status = "okay"; st,main-control-register = <0x04>; st,vin-control-register = <0xc0>; st,usb-control-register = <0x20>; regulators{ compatible = "st,stpmic1-regulators"; buck1-supply = <&vin>; buck2-supply = <&vin>; buck3-supply = <&vin>; buck4-supply = <&vin>; ldo1-supply = <&v3v3>; ldo2-supply = <&vin>; ldo3-supply = <&vdd_ddr>; ldo4-supply = <&vin>; ldo5-supply = <&vin>; ldo6-supply = <&v3v3>; vref_ddr-supply = <&vin>; boost-supply = <&vin>; pwr_sw1-supply = <&bst_out>; pwr_sw2-supply = <&bst_out>; vddcore:buck1{ regulator-name = "vddcore"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1350000>; regulator-always-on; regulator-initial-mode = <0>; regulator-over-current-protection; }; vdd_ddr:buck2{ regulator-name = "vdd_ddr"; regulator-min-microvolt = <1350000>; regulator-max-microvolt = <1350000>; regulator-always-on; regulator-initial-mode = <0>; regulator-over-current-protection; }; vdd:buck3{ regulator-name = "vdd"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; st,mask-reset; regulator-initial-mode = <0>; regulator-over-current-protection; }; v3v3:buck4{ regulator-name = "v3v3"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; regulator-over-current-protection; regulator-initial-mode = <0>; }; v1v8_audio:ldo1{ regulator-name = "v1v8_audio"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; interrupts = ; }; v3v3_hdmi:ldo2{ regulator-name = "v3v3_hdmi"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; interrupts = ; }; vtt_ddr:ldo3{ regulator-name = "vtt_ddr"; regulator-min-microvolt = <500000>; regulator-max-microvolt = <750000>; regulator-always-on; regulator-over-current-protection; }; vdd_usb:ldo4{ regulator-name = "vdd_usb"; interrupts = ; }; v3v3_eth:ldo5{ regulator-name = "v3v3_eth"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; interrupts = ; }; v3v3_dsi:ldo6{ regulator-name = "v3v3_dsi"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; interrupts = ; }; vref_ddr:vref_ddr{ regulator-name = "vref_ddr"; regulator-always-on; regulator-over-current-protection; }; bst_out:boost{ regulator-name = "bst_out"; interrupts = ; regulator-always-on; }; vbus_otg:pwr_sw1{ regulator-name = "vbus_otg"; interrupts = ; regulator-active-discharge; regulator-always-on; }; vbus_sw:pwr_sw2{ regulator-name = "vbus_sw"; interrupts = ; regulator-active-discharge = <1>; regulator-always-on; }; }; onkey{ compatible = "st,stpmic1-onkey"; interrupts = , ; interrupt-names = "onkey-falling", "onkey-rising"; power-off-time-sec = <10>; status = "okay"; }; watchdog { compatible = "st,stpmic1-wdt"; status = "disabled"; }; }; eeprom@50 { compatible = "atmel,24c02"; reg = <0x50>; pagesize = <16>; }; }; &pwr_regulators { vdd-supply = <&vdd>; vdd_3v3_usbfs-supply = <&vdd_usb>; }; /* eMMC */ &sdmmc2{ u-boot,dm-pre-reloc; pinctrl-names = "default", "opendrain", "sleep"; pinctrl-0 = <&sdmmc2_pins_mx>; pinctrl-1 = <&sdmmc2_opendrain_pins_mx>; pinctrl-2 = <&sdmmc2_sleep_pins_mx>; status = "okay"; non-removable; no-sd; no-sdio; st,neg-edge; bus-width = <8>; vmmc-supply = <&v3v3_eth>; vqmmc-supply = <&v3v3>; max-frequency = <150000000>; mmc-hs200-1_8v; }; /* WiFi */ &sdmmc3{ pinctrl-names = "default", "opendrain", "sleep"; pinctrl-0 = <&sdmmc3_pins_mx>; pinctrl-1 = <&sdmmc3_opendrain_pins_mx>; pinctrl-2 = <&sdmmc3_sleep_pins_mx>; arm,primecell-periphid = <0x10153180>; non-removable; st,neg-edge; bus-width = <4>; vmmc-supply = <&v3v3>; mmc-pwrseq = <&wifi_pwrseq>; #address-cells = <1>; #size-cells = <0>; keep-power-in-suspend; mmc-ddr-1_8v; max-frequency = <50000000>; status = "okay"; brcmf: bcrmf@1 { reg = <1>; compatible = "brcm,bcm4329-fmac"; }; };
TFA device tree changes
/* TFA device tree changes code snippet */ /* PMIC */ &i2c4 { pinctrl-names = "default"; pinctrl-0 = <&i2c4_pins_z_mx>; i2c-scl-rising-time-ns = <185>; i2c-scl-falling-time-ns = <20>; clock-frequency = <400000>; status = "okay"; secure-status = "okay"; pmic: stpmic@33 { compatible = "st,stpmic1"; reg = <0x33>; interrupts-extended = <&exti_pwr 55 IRQ_TYPE_EDGE_FALLING>; interrupt-controller; #interrupt-cells = <2>; status = "okay"; secure-status = "okay"; regulators { compatible = "st,stpmic1-regulators"; buck1-supply = <&vin>; buck2-supply = <&vin>; buck3-supply = <&vin>; buck4-supply = <&vin>; ldo1-supply = <&v3v3>; ldo2-supply = <&vin>; ldo3-supply = <&vdd_ddr>; ldo4-supply = <&vin>; ldo5-supply = <&vin>; ldo6-supply = <&v3v3>; vref_ddr-supply = <&vin>; boost-supply = <&vin>; pwr_sw1-supply = <&bst_out>; pwr_sw2-supply = <&bst_out>; vddcore: buck1 { regulator-name = "vddcore"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1350000>; regulator-always-on; regulator-initial-mode = <0>; regulator-over-current-protection; lp-stop{ regulator-on-in-suspend; regulator-suspend-microvolt = <1200000>; }; standby-ddr-sr{ regulator-off-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; vdd_ddr: buck2 { regulator-name = "vdd_ddr"; regulator-min-microvolt = <1350000>; regulator-max-microvolt = <1350000>; regulator-always-on; regulator-initial-mode = <0>; regulator-over-current-protection; lp-stop{ regulator-suspend-microvolt = <1350000>; regulator-on-in-suspend; }; standby-ddr-sr{ regulator-suspend-microvolt = <1350000>; regulator-on-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; vdd: buck3 { regulator-name = "vdd"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; st,mask-reset; regulator-initial-mode = <0>; regulator-over-current-protection; lp-stop{ regulator-suspend-microvolt = <1800000>; regulator-on-in-suspend; }; standby-ddr-sr{ regulator-suspend-microvolt = <1800000>; regulator-on-in-suspend; }; standby-ddr-off{ regulator-suspend-microvolt = <1800000>; regulator-on-in-suspend; }; }; v3v3: buck4 { regulator-name = "v3v3"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; regulator-over-current-protection; regulator-initial-mode = <0>; lp-stop{ regulator-suspend-microvolt = <1800000>; regulator-on-in-suspend; }; standby-ddr-sr{ regulator-off-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; v1v8_ldo1: ldo1 { regulator-name = "v1v8_audio"; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-always-on; standby-ddr-sr{ regulator-off-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; v3v3_ldo2: ldo2 { regulator-name = "v3v3_hdmi"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; standby-ddr-sr{ regulator-off-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; vtt_ddr: ldo3 { regulator-name = "vtt_ddr"; regulator-min-microvolt = <500000>; regulator-max-microvolt = <750000>; regulator-always-on; regulator-over-current-protection; lp-stop{ regulator-off-in-suspend; }; standby-ddr-sr{ regulator-off-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; vdd_usb: ldo4 { regulator-name = "vdd_usb"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; standby-ddr-sr{ regulator-on-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; vdda: ldo5 { regulator-name = "vdda"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; standby-ddr-sr{ regulator-suspend-microvolt = <3300000>; regulator-on-in-suspend; }; standby-ddr-off{ regulator-suspend-microvolt = <3300000>; regulator-on-in-suspend; }; }; v1v2_ldo6: ldo6 { regulator-name = "v1v2_ldo6"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; regulator-always-on; standby-ddr-sr{ regulator-off-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; vref_ddr: vref_ddr { regulator-name = "vref_ddr"; regulator-always-on; regulator-over-current-protection; lp-stop{ regulator-on-in-suspend; }; standby-ddr-sr{ regulator-on-in-suspend; }; standby-ddr-off{ regulator-off-in-suspend; }; }; bst_out: boost { regulator-name = "bst_out"; }; vbus_otg: pwr_sw1 { regulator-name = "vbus_otg"; }; vbus_sw: pwr_sw2 { regulator-name = "vbus_sw"; regulator-active-discharge = <1>; }; }; }; }; &pwr_regulators { system_suspend_supported_soc_modes = < STM32_PM_CSLEEP_RUN STM32_PM_CSTOP_ALLOW_LP_STOP STM32_PM_CSTOP_ALLOW_STANDBY_DDR_SR >; system_off_soc_mode = ; vdd-supply = <&vdd>; vdd_3v3_usbfs-supply = <&vdd_usb>; }; /* eMMC */ &sdmmc2{ pinctrl-names = "default"; pinctrl-0 = <&sdmmc2_pins_mx>; bus-width = <8>; vmmc-supply = <&vdda>; vqmmc-supply = <&v3v3>; max-frequency = <150000000>; mmc-hs200-1_8v; status = "okay"; };
We have verified the correct output voltages are there.
Power-up sequence stuck at uboot prompt STM32MP> after generating gollowing messages…
invalid MAC address in OTP 00:00:00:00:00:00
Net: No ethernet found.
Hit any key to stop autoboot: 0
STM32MP>
Would appreciate any help resolving this issue.
/Farid
Board has started booting up in kernel but failing to initialize WiFi module.
Its generating following error and $ ifconfig is not showing up wlan0 interface.
[ 3.204544] mmc0: error -22 whilst initialising SDIO card
few more mmc logs ..
$ dmesg | grep -i mmc
[ 3.146380] mmci-pl18x 48004000.sdmmc: allocated mmc-pwrseq
[ 3.151679] mmci-pl18x 48004000.sdmmc: mmc0: PL180 manf 53 rev1 at 0x48004000 irq 48,0 (pio)
[ 3.187294] mmci-pl18x 58007000.sdmmc: mmc1: PL180 manf 53 rev2 at 0x58007000 irq 54,0 (pio)
[ 3.201548] mmci-pl18x 48004000.sdmmc: no support for card’s volts
[ 3.206280] mmc0: error -22 whilst initialising SDIO card
[ 3.261074] mmci-pl18x 48004000.sdmmc: no support for card’s volts
[ 3.267396] mmc0: error -22 whilst initialising SDIO card
[ 3.327512] mmc1: new HS200 MMC card at address 0001
[ 3.332902] mmcblk1: mmc1:0001 X29128 117 GiB
[ 3.337005] mmcblk1boot0: mmc1:0001 X29128 partition 1 4.00 MiB
[ 3.343798] mmcblk1boot1: mmc1:0001 X29128 partition 2 4.00 MiB
[ 3.348819] mmcblk1rpmb: mmc1:0001 X29128 partition 3 4.00 MiB, chardev (243:0)
[ 3.359377] mmci-pl18x 48004000.sdmmc: no support for card’s volts
[ 3.364471] mmc0: error -22 whilst initialising SDIO card
[ 3.381567] mmcblk1: p1 p2 p3 p4 p5 p6
[ 3.424181] mmci-pl18x 48004000.sdmmc: no support for card’s volts
[ 3.428925] mmc0: error -22 whilst initialising SDIO card
Hey Farid,
The kernel messages indicate an issue with voltage selection settings in the device tree. In the sdmmc3 node, an IO VCC supply may be needed. See example here: https://wiki.st.com/stm32mpu/wiki/SDMMC_device_tree_configuration. The property needed could be vqmmc-supply.
I am assuming you have VIO for the WiFi module set to 1.8V and the IOs of the MMC interface are pulled to 1.8V and not 3.3V.
If you have some time, please post some info about how you were able to resolve your earlier boot issue.
Thanks and Best,
Neeraj
Hi Neeraj,
Thanks for your response. We found the problem and fixed it.
The WiFi module’s VBAT supply needs 3.3V to operate but in our device tree it was powered by 1.8V from buck4 that’s why it was failing to initialize.
We changed the VBAT supply to 3.3V (ldo5) and WiFi module initialize and works OK.
We don’t need vqmmc-supply for WiFi module, leaving the strapping option pin (GPIO_7) unconnected sets it for 1.8V.
Regarding the earlier boot issue, we didn’t change anything in software. Just clean the area on board around strapping option pin (GPIO_7) may be it was shorting, not sure, but board starts booting with eMMC working at 1.8V.
Thanks again for your help.
/Farid
Octavo Systems LLC all rights reserved
OCTAVO is registered in the U.S. Patent and Trademark Office. OSD, C-SiP, and the Octavo Logo are trademarks of Octavo Systems LLC.
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields
"*" indicates required fields