
Mainline TF-A has a broken behavior - it enables all used AXP regulator outputs, without much reason.
It breaks PHY on Orange Pi 3 and other boards, because they a specific power-on sequence is required. aldo2 which is enabled by TF-A is just a half of PHY's power and the other half that is untouched by TF-A must be enabled simultaneously (even a small difference may cause a break-down). If not TF-A, kernel driver would do everything correctly.
However, some boards rely on this behavior, so it's impossible to get rid of it.
TF-A recently started checking regulator status, and now it enables a regulator only if it's status is "okay". Disabling regulator in U-Boot's dts workarounds the problem. --- arch/arm/dts/sun50i-h6-orangepi-3.dts | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/arch/arm/dts/sun50i-h6-orangepi-3.dts b/arch/arm/dts/sun50i-h6-orangepi-3.dts index 7e83f6146f..9f91e4ec88 100644 --- a/arch/arm/dts/sun50i-h6-orangepi-3.dts +++ b/arch/arm/dts/sun50i-h6-orangepi-3.dts @@ -207,6 +207,10 @@ regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc33-audio-tv-ephy-mac"; + /* This regulator must be enabled by the kernel, + * not by u-boot or TF-A, otherwise power-on + * sequence will be wrong and PHY won't work */ + status = "disabled"; };
/* ALDO3 is shorted to CLDO1 */