SPI + NVMe booting(beta)

Is there a list of Rock PI 4B that are confirmed working to boot from the SPI to the NVME? It seems none of the 3rd party OS’ will.

Only the above image supports nvme boot from spi. Majaro aim to have it for the 5,3 release or at least pcie.
I don’t think any of the 3rd party releases have even managed pcie. Even radxa’s own images for ubuntu doesn’t support pcie and overall it is all slightly disjointed.

https://dl.radxa.com/rockpi4/images/debian/rockpi4-debian-stretch-desktop-arm64-20190730_2022-gpt.img.gz

Looks like the best image by far even has ddr4-800 support but why when a image is released we don’t simply get a minimal and alternative 32/64 bit version and previous versions are archived?
There are quite a few images floating around that are flakey and probably a waste of time for the downloader and a bad representation and having many ‘bad’ images on offer over a singular best of is a bit crass.
I built the armhf version if interested
https://dl.radxa.com/rockpi4/images/debian/rockpi4-debian-stretch-desktop-armhf-20190730_2022-gpt.img.gz
https://dl.radxa.com/rockpi4/images/debian/rockpi4-debian-stretch-server-arm64-20190730_2022-gpt.img.gz
https://dl.radxa.com/rockpi4/images/debian/rockpi4-debian-buster-server-arm64-20190730_2022-gpt.img.gz
If you want armhf-server send twelveteen bitcoin to micerunfree@myhead.com

1 Like

Eem. Sorry what do you mean by radxa’s ununtu doesn’t support pcie?

Does it? Forgot as not used for a while as its another pile of dung.

Yes it does and does it good. I’m using ubuntu for my raid5 file server

Its sort of impossible for it to be good as 4.4 and bionic are out of whack and some of the libs/software require a newer kernel.
Prob would of been better to of made xenial.

Its a bit like the above Buster server as yeah it will work with 4.4 but its not the kernel generation for that release and you will find problems.
It seems to lag updates to the radxa apt if even if they are updated, but guess its easy to apply any rootfs to the current working uboot/kernel

SPI booting priority is the highest, this is hardcoded in the maskrom in rk3399 chip and can not be changed.

Even with the new image to flash the SPI, I cannot get the NVME to solo boot. I still have to leave the uSD card in to allow the NVME to boot. What next steps can I take to help troubleshoot this?

You need a serial console and check the low level boot log. It’s highly like that your SSD is not recognized in u-boot loader but in kernel. Currently in bootloader, we are not compatible with some nvme controller, a known one is PHISON.

The data spec file does not list the controller, so all I can tell is “Samsung made”.

I will work on getting my serial reader working.

https://pastebin.com/tNjwm4Nc

看起来是检测到了ssd,但是无法启动ssd中的内核

Sometimes it is helpful to look at lists of the various NVMe to figure out compatibility
example of a list – https://www.iol.unh.edu/registry/nvme

Samsung are a Phison competitor rather than adopter.
I have mentioned this before but the m.2 extender is sort of flawed.
Its 40 pin and the ground traces have been dropped.
I noticed this when I tried to get a longer ribbon cable than the standard one.
200mm it just fails with my lowly integral but works fine on the short ribbon.

Dunno why they are saying its incompatibility with controllers when the essential ground lines of the pcie reference spec have just been dropped.
You have a fast ssd prob struggling with cross talk and errors due to an inherent design fault.

You can check the schematics and pcie is supposed to be like the old 80 pin ide ribbon cables where a common separating ground plane wrapped around a like 40 pin connector that ide was.
With the ffc ribbon they have just chopped them out of the design and then scratch their heads when it seems faster / better ssd seem to be problematic but the cheaper and slower seem to be more compatible !

Erm…!

All it would take is a 50pin ffc as that has the conductors but its impossible on 40.
Think they are on board hopefully so.
Also maybe should be sheaved with a gnd as pice is like mega fast and the current design is an easy fix but pointing at other areas is sort of strange.

1 Like

I totally agreed with your view on m.2 extender design flaw of dropping the ground traces as I was a Computer Peripheral Engineer (but 40 years ago) and knew the importance of ground traces. That’s why I have surrender to try booting NVMe alone. I am now just using eMMC to test my application server functionality. Cheers.

Its not that major as a likely fix is to use a 50 pin ffc with the ground traces with gap spacing and also add a DC coupling capacitor as close to the extender m.2 connector as possible.

Its such a simple board to produce and likely cheap that its crazy to add such dubious design omissions to the quality of the original RockPi4.
Its plainly shown in the schematic https://dl.radxa.com/rockpi4/docs/hw/m2_extend/rockpi4-m2-extend-sch_pcie_to_fpc_V1.4.pdf

I guess the alternative is to shop elsewhere as M.2 Extenders do exist but be careful as the cheap and poor 40 pin ones do exist, but how do you mount?

Its also not just that the gnd traces are missing the minimum gap distance between lanes is also likely incorrect and induce capacitance at this high speed…
ADT_Link actually provide some correct product but there is no mount point which makes me think why do we have an expensive and essentially useless lotes m.2 connector on board?

Or cut the FFC and go direct to m.2 via quality cables like the ADT design, as to be honest the correct insulation to stop parasitic capacitance is likely an impossible task via FFC…
http://www.adt.link/product/R44SF.html
The differential pairs actual have zero potential as they are in anti-phase but the gap to gnd insulation far too small.

Because this is primarily a makers board and pci-e 2.0 I have a hunch that we prob could get away with a 50pin FFC only design with full gnd traces, spaces simulating insulation and GND coupling capacitor.
But place a solderable gnd pin on board so that if makers want to get creative with sheaving and gnd have the ability there.

I suck at CAD I am not a Computer Peripheral engineer but I am old enough to remember being surprised how much 80wire IDE ribbon cables where essential on ‘80 pin’ designs at that time.
Its not rocket science to realize what a massive omission this is.

Also when the gnd traces are introduced its likely much longer ribbon cables could be used allowing far more implementation variation.
Even better move the M.2 along the same axis to the GPIO replace with a 50pin, put back the 12 gnd traces.

Its not just nvme boot as for me currently with the current extender its likely high speed nvme is a bad idea and if you are going to employ get a cheap and slow nvme. Do not get the latest and greatest “high speed” nvme, as with all best wishes Radxa the current m.2 extender design is bordering very close to absolutely bat shit crazy.

The way to prove things is somehow mount your NVMe direct and see if it works.

Summary

DDR Version 1.20 20190314
In
soft reset
SRX
channel 0
CS = 0
MR0=0x98
MR4=0x3
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
CS = 1
MR0=0x18
MR4=0x3
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
channel 1
CS = 0
MR0=0x98
MR4=0x3
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
CS = 1
MR0=0x18
MR4=0x3
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
channel 0 training pass!
channel 1 training pass!
change freq to 400MHz 0,1
channel 0
CS = 0
MR0=0x98
MR4=0x3
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
CS = 1
MR0=0x18
MR4=0x82
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
channel 1
CS = 0
MR0=0x98
MR4=0x82
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
CS = 1
MR0=0x18
MR4=0x82
MR5=0xFF
MR8=0x8
MR12=0x72
MR14=0x72
MR18=0x0
MR19=0x0
MR24=0x8
MR25=0xFF
channel 0 training pass!
channel 1 training pass!
change freq to 800MHz 1,0
Channel 0: LPDDR4,800MHz
Bus Width=32 Col=10 Bank=8 Row=15/15 CS=2 Die Bus-Width=16 Size=2048MB
Channel 1: LPDDR4,800MHz
Bus Width=32 Col=10 Bank=8 Row=15/15 CS=2 Die Bus-Width=16 Size=2048MB
256B stride
ch 0 ddrconfig = 0x101, ddrsize = 0x2020
ch 1 ddrconfig = 0x101, ddrsize = 0x2020
pmugrf_os_reg[2] = 0x3AA1FAA1, stride = 0xD
OUT
Boot1: 2018-06-26, version: 1.14
CPUId = 0x0
ChipType = 0x10, 279
Spi_ChipId = ef4017
SpiBootInit:0
mmc0:cmd8,32
mmc0:cmd5,32
mmc0:cmd55,32
mmc0:cmd1,32
mmc0:cmd8,32
mmc0:cmd5,32
mmc0:cmd55,32
mmc0:cmd1,32
mmc0:cmd8,32
mmc0:cmd5,32
mmc0:cmd55,32
mmc0:cmd1,32
SdmmcInit=0 1
StorageInit ok = 23283
SecureMode = 0
SecureInit ret = 0, SecureMode = 0
GPT vendor signature is wrong
LoadTrust Addr:0x1800
No find bl30.bin
No find bl32.bin
Load uboot, ReadLba = 1000
Load OK, addr=0x200000, size=0xee888
RunBL31 0x10000
NOTICE: BL31: v1.3(debug):0e7a845
NOTICE: BL31: Built : 16:13:46, Apr 17 2019
NOTICE: BL31: Rockchip release version: v1.1
INFO: GICv3 with legacy support detected. ARM GICV3 driver initialized in EL3
INFO: Using opteed sec cpu_context!
INFO: boot cpu mask: 0
INFO: plat_rockchip_pmu_init(1181): pd status 3e
INFO: BL31: Initializing runtime services
WARNING: No OPTEE provided by BL2 boot loader, Booting device without OPTEE initialization. SMC`s destined for OPTEE will return SMC_UNK
ERROR: Error initializing runtime service opteed_fast
INFO: BL31: Preparing for EL3 exit to normal world
INFO: Entry point address = 0x200000
INFO: SPSR = 0x3c9

U-Boot 2017.09-02676-g4490220395 (Jul 01 2019 - 07:49:56 +0000)

Model: Rockchip RK3399 rockpi4b Board
PreSerial: 2
DRAM: 3.9 GiB
Relocation Offset is: f5be0000
Sysmem: init
I2c speed: 400000Hz
PMIC: RK808
vdd-center init 950000 uV
MMC: dwmmc@fe320000: 1, sdhci@fe330000: 0
Using default environment

Model: Rockchip RK3399 rockpi4b Board
dcache off

Device 0: Vendor: 0x2646 Rev: E8FK11.R Prod: 50026B76826C0418
Type: Hard Disk
Capacity: 228936.5 MB = 223.5 GB (468862128 x 512)
… is now current device
Bootdev: nvme 0
rockchip_get_bootdev: can’t find dev_desc!
[Vendor ERROR]:Invalid boot device type(0)
rockchip_get_bootdev: can’t find dev_desc!
[Vendor ERROR]:Invalid boot device type(0)
rockchip_get_bootdev: can’t find dev_desc!
rockchip_get_boot_mode: dev_desc is NULL!
rockchip_get_bootdev: can’t find dev_desc!
init_resource_list: dev_desc is NULL!
Can’t find file:logo.bmp
failed to display uboot logo
CLK: (uboot. arml: enter 816000 KHz, init 816000 KHz, kernel 0N/A)
CLK: (uboot. armb: enter 24000 KHz, init 24000 KHz, kernel 0N/A)
aplll 816000 KHz
apllb 24000 KHz
dpll 800000 KHz
cpll 24000 KHz
gpll 800000 KHz
npll 600000 KHz
vpll 24000 KHz
aclk_perihp 133333 KHz
hclk_perihp 66666 KHz
pclk_perihp 33333 KHz
aclk_perilp0 266666 KHz
hclk_perilp0 88888 KHz
pclk_perilp0 44444 KHz
hclk_perilp1 100000 KHz
pclk_perilp1 50000 KHz
Net: eth0: ethernet@fe300000
Hit key to stop autoboot(‘CTRL+C’): 0

Device 0: Vendor: 0x2646 Rev: E8FK11.R Prod: 50026B76826C0418
Type: Hard Disk
Capacity: 228936.5 MB = 223.5 GB (468862128 x 512)
… is now current device
Scanning nvme 0:4…
Found /extlinux/extlinux.conf
pxefile_addr_str = 0x00500000
bootfile = /extlinux/extlinux.conf
Retrieving file: /extlinux/extlinux.conf
reading /extlinux/extlinux.conf
598 bytes read in 2 ms (292 KiB/s)
select kernel
1: kernel-4.4.154-90-rockchip-ga14f6502e045
2: kernel-4.4.154-88-rockchip-00030-g90239a6
Enter choice: Retrieving file: /hw_intfc.conf
reading /hw_intfc.conf
1719 bytes read in 1 ms (1.6 MiB/s)
dtoverlay number: 0, name:/overlays/console-on-ttyS2.dtbo
dtoverlay number: 1, name:/overlays/spi1-flash.dtbo
hw_conf.valid = 1
hw_conf.pwm0 = 0
hw_conf.pwm1 = 0
hw_conf.uart2 = 1
hw_conf.uart4 = 0
hw_conf.spi1 = 1
hw_conf.spi2 = 0
hw_conf.i2c2 = 0
hw_conf.i2c6 = 0
hw_conf.i2c7 = 0
hw_conf.dts_overlay_count = 2
hw_conf.dts_overlay[0] = /overlays/console-on-ttyS2.dtbo
hw_conf.dts_overlay[1] = /overlays/spi1-flash.dtbo
1: kernel-4.4.154-90-rockchip-ga14f6502e045
Retrieving file: /vmlinuz-4.4.154-90-rockchip-ga14f6502e045
reading /vmlinuz-4.4.154-90-rockchip-ga14f6502e045
ERROR: status = 13, phase = 1, head = 1
Error reading cluster
** Unable to read file /vmlinuz-4.4.154-90-rockchip-ga14f6502e045 **
Skipping kernel-4.4.154-90-rockchip-ga14f6502e045 for failure retrieving kernel
Retrieving file: /hw_intfc.conf
reading /hw_intfc.conf
1719 bytes read in 1 ms (1.6 MiB/s)
dtoverlay number: 2, name:/overlays/console-on-ttyS2.dtbo
dtoverlay number: 3, name:/overlays/spi1-flash.dtbo
hw_conf.valid = 1
hw_conf.pwm0 = 0
hw_conf.pwm1 = 0
hw_conf.uart2 = 1
hw_conf.uart4 = 0
hw_conf.spi1 = 1
hw_conf.spi2 = 0
hw_conf.i2c2 = 0
hw_conf.i2c6 = 0
hw_conf.i2c7 = 0
hw_conf.dts_overlay_count = 4
hw_conf.dts_overlay[0] =
hw_conf.dts_overlay[1] =
hw_conf.dts_overlay[2] = /overlays/console-on-ttyS2.dtbo
hw_conf.dts_overlay[3] = /overlays/spi1-flash.dtbo
2: kernel-4.4.154-88-rockchip-00030-g90239a6
Retrieving file: /vmlinuz-4.4.154-88-rockchip-00030-g90239a6
reading /vmlinuz-4.4.154-88-rockchip-00030-g90239a6
ERROR: status = 13, phase = 1, head = 0
Error reading cluster
** Unable to read file /vmlinuz-4.4.154-88-rockchip-00030-g90239a6 **
Skipping kernel-4.4.154-88-rockchip-00030-g90239a6 for failure retrieving kernel
SCRIPT FAILED: continuing…
Card did not respond to voltage select!
mmc_init: -95, time 9
Card did not respond to voltage select!
mmc_init: -95, time 26
starting USB…
USB0: USB EHCI 1.00
USB1: USB OHCI 1.0
USB2: failed to get usb phy
Port not available.
USB3: failed to get usb phy
Port not available.
USB4: Can’t get the usbphy register address
probe failed, error -6
USB5: Can’t get the usbphy register address
probe failed, error -6
scanning bus 0 for devices… 1 USB Device(s) found
scanning bus 1 for devices… 1 USB Device(s) found
scanning usb for storage devices… 0 Storage Device(s) found

Device 0: unknown device
ethernet@fe300000 Waiting for PHY auto negotiation to complete… done
Speed: 1000, full duplex
BOOTP broadcast 1
DHCP client bound to address 192.168.1.150 (8 ms)
*** Warning: no boot file name; using ‘C0A80196.img’
Using ethernet@fe300000 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.150
Filename ‘C0A80196.img’.
Load address: 0x800800
Loading: T T T T T T T T T T
Retry count exceeded; starting again
missing environment variable: pxeuuid
Retrieving file: /extlinux/pxelinux.cfg/01-4a-a4-83-ac-26-71
Speed: 1000, full duplex
Using ethernet@fe300000 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.150
Filename ‘/extlinux/pxelinux.cfg/01-4a-a4-83-ac-26-71’.
Load address: 0x600000
Loading: T T T T T T T T T T
Retry count exceeded; starting again
Retrieving file: /extlinux/pxelinux.cfg/C0A80196
Speed: 1000, full duplex
Using ethernet@fe300000 device
TFTP from server 192.168.1.1; our IP address is 192.168.1.150
Filename ‘/extlinux/pxelinux.cfg/C0A80196’.
Load address: 0x600000
Loading: T T T T T T T T T T
Retry count exceeded; starting again

scanning bus 1 for devices… 1 USB Device(s) found
scanning usb for storage devices… 0 Storage Device(s) found

Device 0: unknown device
ethernet@fe300000 Waiting for PHY auto negotiation to complete… done
Speed: 1000, full duplex
BOOTP broadcast 1

maybe storage mounting problem

The NVMe controller not supported is not related with the M.2 extender. Even with directly plug to the on board M.2 connector, the issue exists. However I think your comment on the current m.2 extender is right. We are getting a ADT-LINK cable and check how they are doing it. It cost about 30$. I am not sure if the users would like to pay for that.

1 Like

Which model is your SSD?

Kingston 240GB A1000 SSD, directly to the on board M.2 connector
chip is 25Q64FVATQ, maybe running slowly, I’ll test one soon
and other ssd
tested rockpi A and B both model