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

Reply via email to