U-Boot with direct NVMe boot support for eMMC/SPI Flash
#1
Update (29/06/2020):
Now there's also an option to use mainline U-Boot (v2020.07-rc5) with reference ARM Trusted Firmware, no need to use Rockchip blobs anymore.
You can build it yourself using this repository and flash the image as usual (flash_erase + dd works for Manjaro):

https://github.com/pcm720/u-boot-build-scripts

The build script uses patches from dhivael, sigmaris and Manjaro.
The resulting SPI image works on my PBP and boots from NVMe just fine.
Boot priority is SD -> eMMC -> NVMe -> USB, and there's no need to destroy U-Boot on SD card anymore.

---------
While it's possible to place the boot partition on eMMC and use NVMe as rootfs, the lack of NVMe support in stock U-Boot kept bugging me, so I decided to do something about it.

So, by porting Rockchip PCIe patches from Radxa and backporting some NVMe patches from upstream U-boot, I was able to get NVMe support going on mrfixit2001's fork and now can successfully boot from my NVMe drive:

[Image: nrnCuS0.png]

You can find binary images for SD/eMMC/SPI flash and source code here.
Note that the current SPI image has issues when booting pre-made images from SD card.

For some reason Rockchip's SPL tries (and fails) to initialize trust mode with the microSD, so you'll have to zero out the bootloader, U-Boot and ATF on your SD card with the following commands:
Quote:dd if=/dev/zero bs=32k seek=1 count=1 of=<microSD>
dd if=/dev/zero bs=64k seek=128 count=64 of=<microSD>
dd if=/dev/zero bs=64k seek=192 count=64 of=<microSD>
The first command corrupts Rockchip's SPL, and second and third zero out U-Boot and ATF, respectively.

In other words, the microSD must not contain any of the bootcode. The same most likely goes for the eMMC.

As usual, I am not responsible for any damage or data loss caused by using these images. They work for me.
Don't flash it if you don't know how to recover from damaged bootloader and can't be bothered to search for recovery options.

If you're flashing the SPI image, make sure that all 16 Mbytes are accessible and that it can be flashed properly before doing anything.
If something doesn't look right, try using Manjaro. That's what I used to flash it to my device.
  Reply
#2
(11-27-2019, 03:34 PM)pcm720 Wrote: While it's possible to place the boot partition on eMMC and use NVMe as rootfs, the lack of NVMe support in stock U-Boot kept bugging me, so I decided to do something about it.

So, by porting Rockchip PCIe patches from Radxa and backporting some NVMe patches from upstream U-boot, I was able to get NVMe support going on ayufan's fork and now can successfully boot from my NVMe drive:
[Image: eX0v2EF.png]

Of course, since SPI flash is a no-go for now, U-Boot lives on eMMC: you still have to keep it connected. But that's a start.

You can find binary images and source code here.
As usual, I am not responsible for any damage or data loss caused by using these images. They work for me.
Don't flash it if you don't know how to recover from damaged bootloader and can't be bothered to search for recovery options.

What order is U-Boot configured to check devices for extlinux.conf/boot scripts? If you haven't already could you set it so that it looks for a boot script/config from SD > NVMe > eMMC ?

I'm writing install scripts for the Ubuntu images to make the process less error-prone and it'd be hugely helpful if we could get as many of the PBP U-Boot boot orders aligned so that they do roughly what most users expect when they pop an SD card in to boot.

Thanks for working on this, apologies for immediately piling on and asking for more.
  Reply
#3
(11-27-2019, 08:33 PM)Arglebargle Wrote: What order is U-Boot configured to check devices for extlinux.conf/boot scripts? If you haven't already could you set it so that it looks for a boot script/config from SD > NVMe > eMMC ?

I'm writing install scripts for the Ubuntu images to make the process less error-prone and it'd be hugely helpful if we could get as many of the PBP U-Boot boot orders aligned so that they do roughly what most users expect when they pop an SD card in to boot.

Thanks for working on this, apologies for immediately piling on and asking for more.

Right now, it's set to boot from NVMe first, then SD, then eMMC.
I suppose prioritizing SD makes sense. I'll change that as soon as I have the time.
  Reply
#4
(11-27-2019, 08:43 PM)pcm720 Wrote:
(11-27-2019, 08:33 PM)Arglebargle Wrote: What order is U-Boot configured to check devices for extlinux.conf/boot scripts? If you haven't already could you set it so that it looks for a boot script/config from SD > NVMe > eMMC ?

I'm writing install scripts for the Ubuntu images to make the process less error-prone and it'd be hugely helpful if we could get as many of the PBP U-Boot boot orders aligned so that they do roughly what most users expect when they pop an SD card in to boot.

Thanks for working on this, apologies for immediately piling on and asking for more.

Right now, it's set to boot from NVMe first, then SD, then eMMC.
I suppose prioritizing SD makes sense. I'll change that as soon as I have the time.

Thanks! That'll help keep users out of trouble when they manage to mangle something and need to rescue the system from an sd card.
  Reply
#5
I rebased these patches onto mrfixit2001's fork and updated the original post.
Boot times are now significantly faster, power LED also turns on as soon as U-boot starts to run boot scripts.
Basically, now it's the same stock U-Boot experience, but with NVMe support Smile

(11-27-2019, 09:38 PM)Arglebargle Wrote: Thanks! That'll help keep users out of trouble when they manage to mangle something and need to rescue the system from an sd card.

I also implemented your suggestion.
  Reply
#6
Watching this thread and hoping that this can be implemented and supported for all users (including relatively novice users such as myself). I would love to see a video of emmc vs nvme boot times!
  Reply
#7
nice work Smile just browsing your github repo... do you plan to upstream this to BSP or mainline u-boot?
Come have a chat in the Pine A64 IRC channel >>
  Reply
#8
(11-28-2019, 11:42 AM)xalius Wrote: nice work Smile just browsing your github repo... do you plan to upstream this to BSP or mainline u-boot?

Thanks! I did create a pull request in mrfixit2001's repo, but I don't plan on upstreaming it further.
I didn't write that Rockchip PCIe driver and have almost no experience with ARM SoCs and Rockchip in particular, so I feel that it's not up to me to submit this anywhere else.
Although seeing mainline U-Boot running on Pinebook Pro would be really nice...
  Reply
#9
Is there a build guide anywhere? I got as far as u-boot.bin but am not sure how to massage that into u-boot.img (nor whether there are any changes to idbloader.img and trust.img).
PineTime: wasp-os and MicroPython, Pinebook Pro:  Debian Bullseye
  Reply
#10
(11-27-2019, 03:34 PM)pcm720 Wrote: Of course, since SPI flash is a no-go for now, U-Boot lives on eMMC: you still have to keep it connected. But that's a start.

Pardon my ignorance, but why is u-boot on SPI a no-go for us right now? I've noticed that other rk3399 hardware has achieved it (Khadas Edge has a script to flash u-boot to SPI in their wiki.) Would it not be possible to adapt these existing tools to flash SPI on the PBP?

Awesome work on this modification, btw! I'm looking forward to loading it onto my CrOs install today.
  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  NVME powersaving script mamboman777 6 209 Yesterday, 06:01 AM
Last Post: mamboman777
  pinebook doesnt see the nvme andrewiassur 3 152 06-30-2020, 06:51 PM
Last Post: andrewiassur
  [Solved] SD Card strange boot behaviour benderni 4 221 06-30-2020, 04:27 PM
Last Post: benderni
  Save your sanity: If you buy a PBP, buy a serial adapter and USB to eMMC adapter. Syonyk 11 430 06-30-2020, 10:28 AM
Last Post: manawyrm
  Prepare to buy Pinebook Pro with nvme adapter sujunmin 1 188 06-23-2020, 07:00 AM
Last Post: Samurai_Crow
  Unable to mount NVME (PineBook Pro) WallStreet 3 138 06-21-2020, 09:51 AM
Last Post: xmixahlx
  Intermittent Boot Issues MrRoosevelt 19 934 06-21-2020, 06:45 AM
Last Post: khanku
  Nvme drive not being recognised. vssz 12 493 06-18-2020, 02:43 AM
Last Post: vssz
  Initial boot redo? caetuna 1 118 06-17-2020, 01:35 PM
Last Post: tophneal
  Boot time text messges Pbowen 2 183 06-10-2020, 02:41 PM
Last Post: Pbowen

Forum Jump:


Users browsing this thread: 1 Guest(s)