Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Raspberry Pi 3を64ビットで使う


Raspberry Pi 3のLinuxは32ビットでも書きましたが、Raspberry Pi 3のSoCにはARM Cortex-A53x4が載っていますが、LinuxRaspberry Pi/Pi 2と同じ32ビット版です。

それに対して、Entering aarch64 execution stateでは、
    config.txtに、arm_control=0x200 を書けば良い
ということです。

config.txtによると、
ARM CPUとLinuxの初期化前に、GPUによって読み込まれる。

arm_controlのBit 9は、ブート時に32ビットモードにするか、64ビットモードにするかを決めます。
32ビットでブートするときは、arm_control=0x0にするか、arm_controlを削除すればいい。

64ビットモードか32ビットモードの切り替えは、リセットが解除されるタイミングで決まる。
64ビットモードで起動すれば32ビットモードに切り替えられるが、
32ビットモードで起動すると64ビットモードには切り替えられない。

ただし、64ビットのローダーコードはまだ存在しないので、
config.txtにkernel_old=1を追加し、アドレス0x0から64ビットコードを実行することになる。

で、具体的にどうやって64ビットモードと32ビットモードの切り替えをやるのか?
ARM Cortex-A53 MPCOre Processor Technical Reference Manualの
A.4. Configuration signals
AA64nAA32[CN:0]信号がリセット解除時に、
0の時はAArch32で、1の時はAArch64になる。

AA64nAA32[CN:0]と各コアを個別の設定できるようですが、
arm_controlではすべてのコアをどちらかにしているのでしょう!