Now the mainline u-boot has decent pcie and pcie phy driver for rk3399. The only deficiency is the clock of pcie phy not included. The first attached patch add this clock so that u-boot proper can load linux kernel residing in an ext4 partition of nvme ssd.pcie_phy_clk.patch
The second patch enables loading the environment from a file in an ext4 partition of nvme ssd.env_nvme.patch
More conveniently the u-boot proper(u-boot.itb) could be an ordinary file residing in an ext4 partition of nvme ssd. The idbloader(tpl/spl in spi/emmc/sdcard) could load it if pcie nvme support is enabled in spl. That's the third attachment.spl_nvme.patch
The usb and usb phy is working so the usbkbd can be used to choose a boot option without a serial port debug console. The last attachment set the default env to enable usbkbd and vidconsole.env_vidconsole_usbkbd.patch
And for your convenience my u-boot config for nanopc-t4 also attached here.u-boot.config