2021–10–15: Pinephone
Pro – A Quick Review
I received Pinephone Pro (2021–05–11 batch) at the end of August.
Here's a summary of my experiences with it so far.
- By the looks of it it's almost inidistinguishable from a normal Pinephone,
inside and outside (only tiny details are different). You wouldn't notice that
it's some secret Pinephone variant, if I wouldn't tell you.
- It is compatible with pinephone batteries, back covers, and hopefully the
upcoming keyboard, too. With the keyboard it will basically be a tiny pinebook
pro. :)
- HW wise I've hit few issues so far, but I haven't tried many of the
peripherals, yet. Maybe some of these issues are specific to my
particular unit.
- My unit does not accept input from debugging serial adapter. Only TX works.
This made it very tedious to figure out why USB-OTG and Wifi was not initially
working, because I had no way to control the phone other than by modifying the
code on the uSD card on my PC, and constantly swapping the card between my PC
and the phone. In the end I managed to figure it out last week, and was able to
get Arch Linux ARM / i3wm desktop to run on the phone.
- There's some issue correctly reporting the battery current.
It's underreported by 50% or so. (Phone reports 1.5W power consumption, reality
is 2.8W. Something like that.) Maybe the 0.01 Ohm shunt resistor R107 is
incorrect, or the PMIC is expecting some other value, or there's some other
software/hardware issue.
- The hardware is similar to Pinebook Pro, except for a different PMIC
(RK818–3) so you can guess that this phone's performance is precisely that of
Pinebook Pro's.
- Software wise, it matches the Pinebook Pro, too. On a blobless mainline
kernel/TF-A and bootloader, suspend to RAM is only unidirectional – suspend
works, resume does not (even with latest LPDDR4 fixes in TF-A from a few months
ago). Hopefully that will get fixed soon, now that it will be even more
important to have reliable suspend/resume. :)
- There's some special TF-A blob from Rockchip (made for Pinephone Pro) that
makes suspend/resume work with mainline Linux. I haven't tried it, because
I wasn't able to extract it yet into the ELF format expected by Levinboot.
- Yes, Levinboot works on Pinephone Pro, after a small porting effort (LED
GPIOs are different, LOG regulator does not exist on PPP, and ADC1 is also
connected just like on PBP, but instead of recovery key, it is connected to
volume keys via a resistor ladder). I'll soon have a patch to allow for boot
option selection via volume keys. This is a key feature for easy kernel
development and testing. Quick and easily available kernel fallback, and very
fast boot, make kernel development much more enjoyable! I really dislike SD
card swapping.
- There are quite a bit of software quirks:
- Resetting the SoC works about as badly as it does on Pinebook Pro.
- For whatever reason powerdown is not completely reliable, sometimes it
works, sometimes the phone continues consuming 2.5W of power. Probably some
kernel issue.
- Display code fails with unbalanced clock prepare/enable calls on first DPMS
blanking event, and you need to reboot to regain display output.
- Cameras need some DT configuration. Necessary code for both cameras to work
in in Linux 5.15.
- Linux 5.14 works on Pinephone Pro. Linux 5.15 crashes on boot for some
unknown reason that is hard to debug.
- Random panics that I did not have time to investigate, yet. Red LED starts
blinking on panic, because it's configured to do that in DT (that's how
I know kernel panic happened, but I didn't have serial console connected so
the details were lost). These don't seem rare, so it should be possible to catch
again quite easily.
- Power consumption is quite a bit higher than on the original Pinephone.
I have some numbers bellow. It's RK3399 after all…
- The phone's eMMC 128GB storage is very fast (~150MiB/s). This makes the
system more responsive.
- CPU is faster than Pinephone's and faster than Librem 5's. It's also more
power hungry.
Obligatory boot video :)
U-Boot is terribly slow in the default configuration, so I didn't even try
it. But I ported Levinboot to PPP and here's Levinboot booting up the Arch
Linux ARM from eMMC: (Levinboot is on SD card and the payload is on eMMC)
Whoa, that was fast! 6.15s to desktop. Exactly just like the Pinebook Pro
boot times. ;) All that is thanks to CrystalGamma, and his work on Levinboot. :)
Here's a serial console view of Levinboot starting up on Pinephone Pro.
Power consumption
It's a portable mobile device, so I guess power consumption is what people
will care about a lot. It has two aspects: how long it will run on battery, and
how much it will heat up under load.
I have a nice setup for measuring the load at 1000 samples per second via
this fake battery setup I made for original Pinephone:
Pinephone Pro came with Android factory image, that I used to get some
initial numbers to compare against in the future. This image most likely doesn't
limit the maximum CPU frequency, so the peak power consumption is quite high,
due to that.
- suspended to RAM: 150–160mW
- idling at home screen lowest brightness: 3W
- idling at home screen highest brightness: 4.4W
- using back camera viewfinder at highest brightness: 5.3W
- taking a photo 7W with peaks to 12W
- using the web browser (scrolling through Twitter feed) 8W with peaks
to 10–11W
- some actions cause peaks above 12W
So this basically says that heavy use will drain the battery in about 1.5h,
idling with screen on in aboutu 3–4h, and the phone will become unstable near
the lower end of the capacity, because I don't think the single cell battery
will sustain high enough voltage with load peaks of 10W or more near the lower
end of the capacity. (that would be 3A+) battery in Pinebook Pro probably fares
better at this, due to lower internal resistance. CPU throttling based on
remainging capacity will be needed to control this issue.
When suspended to RAM (standby) the phone will last for about 2 and half
days with the Rockchip's TF-A blob. This is worse than Pinephone, which has
power consumption in suspend around 60 mW (2.5× better).
Once I had Arch Linux working on the phone, I also measured the power
consumption on mainline Linux + mainline TF-A.
I used the default backlight brightness of 2000 or so, wifi was turned on,
and I varried CPU frequency limits
(cpupower frequency-set --freq $FREQ
) and loaded the CPU cores with
openssl speed -multi $N
.
Baseline idling with brightness set to kernel default and 1.42GHz limit
was 3.1W.
N FREQ
---------------------
6 408 MHz 3.5 W
6 600 MHz 3.8 W
6 816 MHz 4.2 W
6 1.01 GHz 5.5 W
6 1.20 GHz 5.5 W
6 1.42 GHz 6.9 W
2 1.42 GHz 5.1 W
1 1.42 GHz 4.1 W
N = 1 (loading one performance core to max)
N = 2 (loading two performance cores to max)
N = 6 (loading all cores)
Backlight brightness vs power:
100 2.8 W (almost not visible)
2000 3.0 W
3000 3.4 W
3500 3.7 W
4000 4.2 W
4095 4.3 W (max)
The scale is non-linear.
So at full brightness/full CPU load at 1.42GHz, the phone will consume about
8.3W. This test is without the GPU doing anything. GPU will probably add
something, too.
Some board photos
Some things I noticed:
- There are pads that you can short to recover from broken bootloader on eMMC
or in SPI flash.
- You'll have to remove the „woid your warranty sticker“ to get to the
pads, though. Easy way around that is to never flash a bootloader to SPI/eMMC.
Or be sure to flash a known working one that has some way to help you recover
from failed kernel update by booting from SD card.
- The board looks much more packed with components than the
Pinephone one!
- Not much to see on the bottom. It's not easy to remove the metal shielding,
because the black tape is quite sticky and the white heat transfer pad is also
glued to the SoC.
What works
- WiFi seems to work fine (and is powered from PMIC, instead of directly from
battery as on the original Pinephone)
- If the phone can be powered from USB cable without battery inserted, then
wifi has a chance to work in that configuration, too. (unlike on original
Pinephone)
- Display looks nice, backlight seems better done than on Pinephone (more
stable)
- Cameras are better overall (judging by their performance in factory
Android image)
- eMMC is significantly faster than on original Pinephone
- USB OTG works
I did not yet test the rest.
Kernel status
I'd like to add cameras to DT, but that will need a working 5.15 kernel
(because it has support for multiple cameras). Linux 5.15 is currently not
booting on Pinephon Pro. It hangs mid-boot possibly on some issue related
to RCU.
Other than that, non-mainlined drivers for the PMIC battery and charger
support are needed.
The rest of the support is very similar to Pinebook Pro, ie. non-working
convergence in mainline Linux.
Closing words
Pinephone Pro is basically Pinebook Pro with more useful PMIC, modem,
cameras, and a better supported wifi chip (cypress supported cyw43455 is more
open than broadcom supported brcm43456 in PBP) in a much smaller form
factor.
Performance is thus much better than the original Pinephone, but the power
consumption is higher too. Baseline power consumption with normal backlight
brightness and screen turned on is ~2.8–3W. Doing something in the browser or
just moving the mouse around rises the power consumption to ~5W. This was tested
in sway, with GPU acceleration turned on, and only one CPU core enabled.
That's not a huge problem for Pinebook Pro with its 36Wh battery (4–7h
runtime on a notebook is nice) 2–3h runtime with screen on, on a phone, is a
problem. It will be a nice mini-notebook with a pinephone keyboard,
though. :)