New toy arrived — RockPro64

AArch64 world has toys on cheap side, servers on expensive and some attempts in a middle.


I started working on AArch64 in 2012 year. Before hardware was available. Even before toolchain bits were available. Then first prototype server arrived at Red Hat, then it got replaced with Applied Micro Mustang. Then more servers, Mustang under desk. Joined Linaro (as Red Hat assignee) and started using their server lab.

And during all those years I never played with AArch64 SBC.

If it lacks proper storage and 16+GB ram then I am not interested.

Some months ago I decided to change it.

What to choose?

There are many AArch64 boards to choose from. Some are better, some are not. Popular ones and those with features. Like usual.

So I asked Peter Robinson and few other folks about their proposal and most of them agreed that Rockchip RK3399 looks most interesting. Has PCI Express slot on several boards, uses Mali T860 so can play with Panfrost driver, USB 3 ports are present etc.


After some market research I decided on RockPro64 from Pine64. Board has USB 3 in both A and C type, PCIe x4 slot is present and I can reuse acrylic case from Pine A64 board I bought few years ago. And it has “the most expensive chip in ARM world” present (16MB SPI flash for boot firmware).

Ordered in March, board arrived two days ago.


I digged in my boxes and found 12V/5A power supply (3A is recommended minimum), used some Ethernet cable flying under desk, old 64GB usb3 thumb drive for storage and my lovely IOGEAR GKM561R keyboard/trackpoint which I use for all boards bring-up.

Mounted board into acrylic case and started wiring extra stuff.

Disable SPI button

As boot firmware can be stored in onboard SPI chip there has to be a way to ignore it on boot. According to disable SPI note on vendor website it is a matter of crossing SPI_CLK with GND during boot.

So small breadboard, two wires, button and I am ready.

Serial console

As usual serial console is on pins. So breadboard got one of my cheap USB-Serial dongles plugged and then wires started.

Serial console setup post on forum says that 6/8/10 pins are all I need. Did them, connected USB cable and started picocom at 1.5Mbps speed:

Terminal ready
��tU�����UU���˕�U���TU J���UU���Q�UR�)���Q�

Lovely! Turned out that CP2102 dongles are only “expected” to work at that speed. Digged deeper in drawers and found SPI Hook device from TinCanTools. It uses FT2232HL so should be fine with up to 12Mbps speed.

And worked without problems:

U-Boot TPL 2020.04 (Apr 20 2020 - 00:00:00)
Channel 0: LPDDR4, 50MHz
BW=32 Col=10 Bk=8 CS0 Row=16/15 CS=1 Die BW=16 Size=2048MB
Channel 1: LPDDR4, 50MHz
BW=32 Col=10 Bk=8 CS0 Row=16/15 CS=1 Die BW=16 Size=2048MB
256B stride
256B stride
lpddr4_set_rate: change freq to 400000000 mhz 0, 1
lpddr4_set_rate: change freq to 800000000 mhz 1, 0
Trying to boot from BOOTROM
Returning to boot ROM...

U-Boot SPL 2020.04 (Apr 20 2020 - 00:00:00 +0000)
Trying to boot from MMC1

U-Boot 2020.04 (Apr 20 2020 - 00:00:00 +0000)

SoC: Rockchip rk3399
Reset cause: POR
Model: Pine64 RockPro64
DRAM:  3.9 GiB
PMIC:  RK808 
MMC:   dwmmc@fe320000: 1, sdhci@fe330000: 0
Loading Environment from MMC... Card did not respond to voltage select!
*** Warning - No block device, using default environment

So I was ready to play!


So when Arm will open source Mali drivers?

This question is present on each “Ask Arm Anything” sessions during Linaro Connect (ARM partners only session, badges are checked on room entry). And answer always is more or less “never”.

But there is Panfrost now. Fully open source driver for Mali family used in RK3399 SoC.

Booted board and it got stuck:

[   29.043106] panfrost ff9a0000.gpu: clock rate = 500000000
[   29.053073] rockchip-vop ff8f0000.vop: Adding to iommu group 1
[   29.058099] panfrost ff9a0000.gpu: mali-t860 id 0x860 major 0x2 minor 0x0 status 0x0
[   29.058948] panfrost ff9a0000.gpu: features: 00000000,100e77bf, issues: 00000000,24040400
[   29.059820] panfrost ff9a0000.gpu: Features: L2:0x07120206 Shader:0x00000000 Tiler:0x00000809 Mem:0x1 MMU:0x00002830 AS:0xff JS:0x7
[   29.061053] panfrost ff9a0000.gpu: shader_present=0xf l2_present=0x1
[   29.063559] rockchip-vop ff900000.vop: Adding to iommu group 2
[   29.147966] panfrost ff9a0000.gpu: devfreq_add_device: Unable to find governor for the device
[   29.151244] panfrost ff9a0000.gpu: [drm:panfrost_devfreq_init [panfrost]] *ERROR* Couldn't initialize GPU devfreq
[   29.173499] panfrost ff9a0000.gpu: Fatal error during devfreq init

Discussed issue with people on #panfrost IRC channel and they pointed me at “governor_simpleondemand” kernel module being missing. So I rebuilt initramfs with “dracut -v —force-drivers governor_simpleondemand —force” command and it booted to FullHD framebuffer.

Some work is needed here as monitor has 3440x1440 resolution so at least 2560x1440 or 2560x1080 should be used. But that can wait for now. I plan to move this board somewhere else on desk and connect to 24” full hd monitor.


I do not plan to use that board for any serious stuff. More as a device to learn how EBBR world looks. Boot sequence with U-Boot loading Grub from EFI system partition looks good.

There are some things which need work. I want to have boot firmware stored in SPI flash as now I have 1GB microsd card in slot just to have U-Boot loaded.

There are some changes in U-Boot waiting for someone to test, USB-C port is not enabled at all (it should work as USB 3 and DisplayPort).

So who knows :D

aarch64 linux rockpro64 sbc