Linux(Armbian)ならちゃんとOrange Pi One Plusのネットワークコントローラが動くというかPHYがちゃんと見える件、調べていくうちにATFによる問題と考えるのが良さそうだ…という状況になっています。
Armbian起動時のATF(v2.2)のメッセージはこんな感じ。
U-Boot SPL 2020.10-armbian (Aug 08 2021 - 16:15:05 +0200) DRAM: 1024 MiB Trying to boot from MMC1 NOTICE: BL31: v2.2(debug):a04808c-dirty NOTICE: BL31: Built : 16:15:01, Aug 8 2021 NOTICE: BL31: Detected Allwinner H6 SoC (1728) NOTICE: BL31: Found U-Boot DTB at 0xc083488, model: OrangePi One Plus INFO: ARM GICv2 driver initialized NOTICE: PMIC: Probing AXP805 NOTICE: PMIC: AXP805 detected INFO: BL31: Platform setup done INFO: BL31: Initializing runtime services INFO: BL31: cortex_a53: CPU workaround for 855873 was applied INFO: BL31: Preparing for EL3 exit to normal world INFO: Entry point address = 0x4a000000 INFO: SPSR = 0x3c9 U-Boot 2020.10-armbian (Aug 08 2021 - 16:15:05 +0200) Allwinner Technology |
こちらでビルドしたATF(v2.5)は、こう。
U-Boot SPL 2021.10 (Nov 30 2021 - 05:10:07 +0900) DRAM: 1024 MiB Trying to boot from MMC1 NOTICE: BL31: v2.5(debug):v2.5 NOTICE: BL31: Built : 05:09:35, Nov 30 2021 NOTICE: BL31: Detected Allwinner H6 SoC (1728) NOTICE: BL31: Found U-Boot DTB at 0xc08a308, model: OrangePi One Plus INFO: ARM GICv2 driver initialized INFO: Configuring SPC Controller INFO: PMIC: Probing AXP805 on RSB INFO: PMIC: aldo1 voltage: 3.300V INFO: PMIC: aldo2 voltage: 3.300V INFO: PMIC: aldo3 voltage: 3.300V INFO: PMIC: bldo1 voltage: 1.800V INFO: PMIC: bldo2 voltage: 1.800V INFO: PMIC: bldo3 voltage: 1.800V INFO: PMIC: cldo1 voltage: 3.300V INFO: PMIC: cldo2 voltage: 3.300V INFO: PMIC: cldo3 voltage: 3.300V INFO: PMIC: dcdcd voltage: 0.960V INFO: PMIC: dcdce voltage: 1.200V INFO: BL31: Platform setup done INFO: BL31: Initializing runtime services INFO: BL31: cortex_a53: CPU workaround for 855873 was applied INFO: BL31: cortex_a53: CPU workaround for 1530924 was applied INFO: PSCI: Suspend is unavailable INFO: BL31: Preparing for EL3 exit to normal world INFO: Entry point address = 0x4a000000 INFO: SPSR = 0x3c9 U-Boot 2021.10 (Nov 30 2021 - 05:10:07 +0900) Allwinner Technology |
ATFのdrivers/allwinner/を見るに、v2.2ではAXP80x向けのドライバは一切無く、v2.3以降で実装されているという状況です。そしてAXP80x共通処理となるcommon.cを見る限りでは、DeviceTreeノードにphandleもしくはregulator-always-onプロパティのどちらか一つでも存在すれば無条件にレギュレーターをonにするという動きになっています。また、レギュレーターをonとした後に適当な待ちを行うといったこともしないようです。
ATF v2.5のソースコードに手を入れて、ATF v2.2と同じようにレギュレーターの操作を一切行わない(その一方でOpenBSD側ではレギュレーターの操作を行う)状態で動作を試したところ、意図したアドレスでRTL8211が見えるようになっています。
という訳で、ATFが要らぬことをしていたから、ということが原因になりそうです。修正のためのパッチも投げてはみましたが、状況を見ているとマージされる可能性は低そうです。Merge conflictsにdrivers: allwinner: axp: Enable regulators more judiciouslyが挙がっているのを見るに、以前からこの問題点を指摘していた人はいて、その時にマージされていれば自分が要らぬ苦労をしなくて済んだのは確かなのですが…「誰だよ-1した奴は!💢」と叫びたいところです。52.7kg(22:00)