Issue with mmc_power_on() and reference counter of regulator

Hi,
I am using the FriendlyElec NanoPi R4S board. When I updated U-Boot to a recent version (0fe0395922), it failed to boot from MMC. Here is the log:
================================ U-Boot TPL 2023.10-rc3 (Sep 02 2023 - 08:21:08) lpddr4_set_rate: change freq to 400MHz 0, 1 Channel 0: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB Channel 1: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB 256B stride lpddr4_set_rate: change freq to 800MHz 1, 0 Trying to boot from BOOTROM Returning to boot ROM...
U-Boot SPL 2023.10-rc3 (Sep 02 2023 - 08:21:08 +0000) Trying to boot from MMC1 spl_load_fit_image: Skip load 'atf-5': image size is 0! NOTICE: BL31: v2.9(release): NOTICE: BL31: Built : 08:19:59, Sep 2 2023
U-Boot 2023.10-rc3 (Sep 02 2023 - 08:21:08 +0000)
SoC: Rockchip rk3399 Reset cause: POR Model: FriendlyElec NanoPi R4S DRAM: 4 GiB (effective 3.9 GiB) PMIC: RK808 Core: 264 devices, 23 uclasses, devicetree: separate MMC: mmc@fe320000: 1 Loading Environment from nowhere... OK In: serial,usbkbd Out: serial,vidconsole Err: serial,vidconsole Model: FriendlyElec NanoPi R4S Net: Error: ethernet@fe300000 address not set. No ethernet found.
Hit any key to stop autoboot: 0 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 ================================
Does anyone know how to fix the issue?
I looked into commit logs and the mailing list so far, and I found the below commit that adds the reference counter to the regulator. I could remove the above error by reverting this change. Of course, it should not be the proper way. Maybe we could replace regulator_set_enable() in mmc_power_on() by regulator_set_enable_if_allowed(). However, I have no confidence about it as I'm not familiar with the U-Boot source code.
================================ commit 4fcba5d556b4224ad65a249801e4c9594d1054e8 Author: Eugen Hristev eugen.hristev@collabora.com Date: Wed Apr 19 16:45:24 2023 +0300
regulator: implement basic reference counter
Some devices share a regulator supply, when the first one will request regulator disable, the second device will have it's supply cut off before graciously shutting down. Hence there will be timeouts and other failed operations. Implement a reference counter mechanism similar with what is done in Linux, to keep track of enable and disable requests, and only disable the regulator when the last of the consumers has requested shutdown.
Signed-off-by: Eugen Hristev eugen.hristev@collabora.com Reviewed-by: Simon Glass sjg@chromium.org Reviewed-by: Patrice Chotard patrice.chotard@foss.st.com ================================
Any help would be greatly appreciated. Thank you!
Kenta Sato

Hi,
On 2023-09-02 13:35, Kenta Sato wrote:
Hi,
I am using the FriendlyElec NanoPi R4S board. When I updated U-Boot to a recent version (0fe0395922), it failed to boot from MMC. Here is the log:
================================ U-Boot TPL 2023.10-rc3 (Sep 02 2023 - 08:21:08) lpddr4_set_rate: change freq to 400MHz 0, 1 Channel 0: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB Channel 1: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB 256B stride lpddr4_set_rate: change freq to 800MHz 1, 0 Trying to boot from BOOTROM Returning to boot ROM...
U-Boot SPL 2023.10-rc3 (Sep 02 2023 - 08:21:08 +0000) Trying to boot from MMC1 spl_load_fit_image: Skip load 'atf-5': image size is 0! NOTICE: BL31: v2.9(release): NOTICE: BL31: Built : 08:19:59, Sep 2 2023
U-Boot 2023.10-rc3 (Sep 02 2023 - 08:21:08 +0000)
SoC: Rockchip rk3399 Reset cause: POR Model: FriendlyElec NanoPi R4S DRAM: 4 GiB (effective 3.9 GiB) PMIC: RK808 Core: 264 devices, 23 uclasses, devicetree: separate MMC: mmc@fe320000: 1 Loading Environment from nowhere... OK In: serial,usbkbd Out: serial,vidconsole Err: serial,vidconsole Model: FriendlyElec NanoPi R4S Net: Error: ethernet@fe300000 address not set. No ethernet found.
Hit any key to stop autoboot: 0 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 ================================
Does anyone know how to fix the issue?
I looked into commit logs and the mailing list so far, and I found the below commit that adds the reference counter to the regulator. I could remove the above error by reverting this change. Of course, it should not be the proper way. Maybe we could replace regulator_set_enable() in mmc_power_on() by regulator_set_enable_if_allowed(). However, I have no confidence about it as I'm not familiar with the U-Boot source code.
I sent patches to fix such situation back in July, see [1]. Those patches was merged into next, but should probably have gone into master.
Please try next, and/or apply patches at [1] and report back result.
[1] https://patchwork.ozlabs.org/project/uboot/list/?series=364753&state=*
Regards, Jonas
================================ commit 4fcba5d556b4224ad65a249801e4c9594d1054e8 Author: Eugen Hristev eugen.hristev@collabora.com Date: Wed Apr 19 16:45:24 2023 +0300
regulator: implement basic reference counter Some devices share a regulator supply, when the first one will request regulator disable, the second device will have it's supply cut off before graciously shutting down. Hence there will be timeouts and other failed operations. Implement a reference counter mechanism similar with what is done in Linux, to keep track of enable and disable requests, and only disable the regulator when the last of the consumers has requested shutdown. Signed-off-by: Eugen Hristev <eugen.hristev@collabora.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
================================
Any help would be greatly appreciated. Thank you!
Kenta Sato

Hi, Thank you for the quick response.
On Sat, Sep 2, 2023 at 10:45 PM Jonas Karlman jonas@kwiboo.se wrote:
Hi,
On 2023-09-02 13:35, Kenta Sato wrote:
Hi,
I am using the FriendlyElec NanoPi R4S board. When I updated U-Boot to a recent version (0fe0395922), it failed to boot from MMC. Here is the log:
================================ U-Boot TPL 2023.10-rc3 (Sep 02 2023 - 08:21:08) lpddr4_set_rate: change freq to 400MHz 0, 1 Channel 0: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB Channel 1: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB 256B stride lpddr4_set_rate: change freq to 800MHz 1, 0 Trying to boot from BOOTROM Returning to boot ROM...
U-Boot SPL 2023.10-rc3 (Sep 02 2023 - 08:21:08 +0000) Trying to boot from MMC1 spl_load_fit_image: Skip load 'atf-5': image size is 0! NOTICE: BL31: v2.9(release): NOTICE: BL31: Built : 08:19:59, Sep 2 2023
U-Boot 2023.10-rc3 (Sep 02 2023 - 08:21:08 +0000)
SoC: Rockchip rk3399 Reset cause: POR Model: FriendlyElec NanoPi R4S DRAM: 4 GiB (effective 3.9 GiB) PMIC: RK808 Core: 264 devices, 23 uclasses, devicetree: separate MMC: mmc@fe320000: 1 Loading Environment from nowhere... OK In: serial,usbkbd Out: serial,vidconsole Err: serial,vidconsole Model: FriendlyElec NanoPi R4S Net: Error: ethernet@fe300000 address not set. No ethernet found.
Hit any key to stop autoboot: 0 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 Error enabling VMMC supply : -114 ================================
Does anyone know how to fix the issue?
I looked into commit logs and the mailing list so far, and I found the below commit that adds the reference counter to the regulator. I could remove the above error by reverting this change. Of course, it should not be the proper way. Maybe we could replace regulator_set_enable() in mmc_power_on() by regulator_set_enable_if_allowed(). However, I have no confidence about it as I'm not familiar with the U-Boot source code.
I sent patches to fix such situation back in July, see [1]. Those patches was merged into next, but should probably have gone into master.
Please try next, and/or apply patches at [1] and report back result.
[1] https://patchwork.ozlabs.org/project/uboot/list/?series=364753&state=*
I tried the next branch. The issue seems to be solved.
================================ U-Boot TPL 2023.10-rc3 (Sep 02 2023 - 22:00:13) lpddr4_set_rate: change freq to 400MHz 0, 1 Channel 0: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB Channel 1: LPDDR4, 400MHz BW=32 Col=10 Bk=8 CS0 Row=15 CS1 Row=15 CS=2 Die BW=16 Size=2048MB 256B stride lpddr4_set_rate: change freq to 800MHz 1, 0 Trying to boot from BOOTROM Returning to boot ROM...
U-Boot SPL 2023.10-rc3 (Sep 02 2023 - 22:00:13 +0000) Trying to boot from MMC1 spl_load_fit_image: Skip load 'atf-5': image size is 0! NOTICE: BL31: v2.9(release): NOTICE: BL31: Built : 22:00:05, Sep 2 2023
U-Boot 2023.10-rc3 (Sep 02 2023 - 22:00:13 +0000)
SoC: Rockchip rk3399 Reset cause: POR Model: FriendlyElec NanoPi R4S DRAM: 4 GiB (effective 3.9 GiB) PMIC: RK808 Core: 264 devices, 23 uclasses, devicetree: separate MMC: mmc@fe320000: 1 Loading Environment from nowhere... OK In: serial,usbkbd Out: serial,vidconsole Err: serial,vidconsole Model: FriendlyElec NanoPi R4S Net: Error: ethernet@fe300000 address not set. No ethernet found.
Hit any key to stop autoboot: 0 ** Booting bootflow 'mmc@fe320000.bootdev.part_1' with extlinux 1: Arch Linux Retrieving file: /vmlinuz-linux-nanopi-r4s Retrieving file: /initramfs-linux-nanopi-r4s.img (...) ================================
I hope those patches will be in the master and the next release soon.
Thank you!
Kenta
Regards, Jonas
================================ commit 4fcba5d556b4224ad65a249801e4c9594d1054e8 Author: Eugen Hristev eugen.hristev@collabora.com Date: Wed Apr 19 16:45:24 2023 +0300
regulator: implement basic reference counter Some devices share a regulator supply, when the first one will request regulator disable, the second device will have it's supply cut off before graciously shutting down. Hence there will be timeouts and other failed operations. Implement a reference counter mechanism similar with what is done in Linux, to keep track of enable and disable requests, and only disable the regulator when the last of the consumers has requested shutdown. Signed-off-by: Eugen Hristev <eugen.hristev@collabora.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
================================
Any help would be greatly appreciated. Thank you!
Kenta Sato
participants (2)
-
Jonas Karlman
-
Kenta Sato