vreg_l8a is the shared VCC rail for UFS (ufs_mem_hc vcc-supply) and eMMC (sdhc_1 vmmc-supply). UFS holds no regulator vote of its own in U-Boot, so nothing stops other consumers from disabling the rail while UFS still needs it.
eMMC's power-cycle runs after UFS has already linked up and started transferring data. Its power-off fires a real disable vote on vreg_l8a, glitching UFS VCC while the link is live. UFS has no recovery from this: every following command fails (OCS errors, UTP timeouts, "Card did not respond to voltage select! : -110"). Force the rail always-on so the disable vote is rejected in regulator_set_enable() (-EACCES) before it reaches the RPMh driver. eMMC is non-removable and does not need a real power-cycle. Signed-off-by: Balaji Selvanathan <[email protected]> --- arch/arm/dts/monaco-evk-u-boot.dtsi | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/dts/monaco-evk-u-boot.dtsi b/arch/arm/dts/monaco-evk-u-boot.dtsi index 5520d111864..8e9102eae4d 100644 --- a/arch/arm/dts/monaco-evk-u-boot.dtsi +++ b/arch/arm/dts/monaco-evk-u-boot.dtsi @@ -34,3 +34,7 @@ }; }; }; + +&vreg_l8a { + regulator-always-on; +}; -- 2.34.1
