ARM64 – Pi3 64-Bit Tribulations.. Too Soon for Stability..
I had ordered a Raspberry Pi 3 back in March in the hope that it would be a useful exercise in 64-bit on a different chipset.. I was (somewhat) disappointed to find that there was no initial 64-bit support, and indeed that I had been a bit of a pioneer in even running armv7 code on my Pi 2!
After checking the GIT repositories in recent weeks for 64-bit U-Boot and Kernel, I started some tests.. The first painful discovery was the ‘hijacking’ of the UART/Console port on the device, for use by Bluetooth hardware… This had echoes of the Geekbox SDcard/UART scenario mentioned in a previous article, but at least this time there seemed to be a workaround – of sorts, except that on my Pi3 (with a temporary 32-bit setup) I only saw the kernel boot output, and not the earlier U-Boot commands..
Some more info (and much ‘speculation’..) is on the Pi Forum: https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=137963 There are some ‘instructions’ near the end of the thread..
I had tried to follow various instructions to get U-Boot working as a start, but ran up against the inevitable ‘moving target’ problem with GIT repositories.. The version that was alleged to work had been superseded, and in some cases the specified checkout version was no longer in existence..
There are (at least) two GIT repositories with U-Boot: https://github.com/swarren/u-boot/tree/rpi_dev and https://github.com/zeldin/u-boot-rpi3/tree/master.. I have – so far – not had any luck getting the first one to work, and the second version did show up, but aborted almost immediately:
U-Boot 2016.03-rc3-g96a6c2f (Apr 14 2016 - 23:45:59 -0700) DRAM: 944 MiB "Synchronous Abort" handler, esr 0x02000000 ELR: 3af4110c LR: 3af4237c x0 : 0000000000c51838 x1 : 000000000000000c x2 : 000000000004f760 x3 : 000000000004f760 x4 : 000000003af636c4 x5 : 0000000000000160 x6 : 0000000000010000 x7 : 000000000000000a x8 : 0000000007fff7b0 x9 : 000000003af41000 x10: 0000000000000000 x11: 0000000000000001 x12: 00000000ffffffff x13: 00000000ffffffff x14: c0cb10620de021b8 x15: a98c11034c806420 x16: cd75c246083527b0 x17: 0000a00000000000 x18: 000000003ab3ce08 x19: 000000003ab3cce0 x20: 0481000000020000 x21: f37e600000000000 x22: 000000000000000d x23: 000000000002000d x24: 001000006c5225e8 x25: 000000003e6a3d9a x26: 21380000fcf19ef4 x27: 00000000a5ff98a5 x28: 0080000037b7f368 x29: 0000000000000084 Resetting CPU ... resetting ... << repeats.... >>
I had no problem getting U-Boot to work on the Pi2, but this is a bit more complex… There is another dimension to the moving targets, as it appears the Pi firmware has recently been updated, and when I loaded the latest version from the Pi GIT repository, even the second U-Boot stopped working, with nothing showing on the screen at all..
So… My plan now is to leave everything until the dust has settled, and there is more stability in firmware/u-boot/kernel/ versions.. This was always just an academic exercise, in any case, as it has been pointed out by many that the Pi3 has too little memory available to take advantage of 64-bit processing, and in many circumstances would actually be slower than in 32-bit mode..
Robert Gadsdon. April 15, 2016.
Others report a dramatic 64 bit speed-up with some tasks on these cores. The Pi3’s memory constraints aren’t going to impact much on any software that isn’t actually constrained. Finally, the relative immaturity of gcc’s Arm8 back-end might mean there is more improvement ahead.
In other words, as so often in engineering, we know nothing really until we’ve actually tried and measured it. Which is why I’m quite interested in the Pi3 64 bit work. I had a mind to give the current state of play a whirl, but I think I’ll hold off for a month or two – thanks for the write-up, you just saved me an afternoon 🙂