Re: Sipeed Lichee RV (Allwinner D1)

From: Mitchell Horne <mhorne_at_freebsd.org>
Date: Wed, 19 Jan 2022 16:24:48 UTC

On 1/17/22 15:02, Jakob Alvermark wrote:
> Hi,
>
>
> With RISC-V SBCs now coming down in price, I got curios and got myself 
> a Lichee RV (with the dock).
>
> https://linux-sunxi.org/Sipeed_Lichee_RV
>
> The instructions here, https://linux-sunxi.org/Allwinner_Nezha along 
> with some patching got me a working U-boot.
>
> Cross-building and putting together and image for and SD card got me 
> this far:
>
> [35]HELLO! BOOT0 is starting!
> [38]BOOT0 commit : 771192d
> [41]set pll start
> [42]periph0 has been enabled
> [45]set pll end
> [47]board init ok
> [49]DRAM only have internal ZQ!!
> [51]get_pmu_exist() = -1
> [54]ddr_efuse_type: 0x0
> [57][AUTO DEBUG] single rank and full DQ!
> [61]ddr_efuse_type: 0x0
> [64][AUTO DEBUG] rank 0 row = 15
> [67][AUTO DEBUG] rank 0 bank = 8
> [70][AUTO DEBUG] rank 0 page size = 2 KB
> [74]DRAM BOOT DRIVE INFO: V0.24
> [77]DRAM CLK = 792 MHz
> [79]DRAM Type = 3 (2:DDR2,3:DDR3)
> [82]DRAMC ZQ value: 0x7b7bfb
> [85]DRAM ODT value: 0x42.
> [87]ddr_efuse_type: 0x0
> [90]DRAM SIZE =512 M
> [94]DRAM simple test OK.
> [96]dram size =512
> [98]card no is 0
> [99]sdcard 0 line count 4
> [102][mmc]: mmc driver ver 2021-04-2 16:45
> [111][mmc]: Wrong media type 0x0
> [114][mmc]: ***Try SD card 0***
> [131][mmc]: HSSDR52/SDR25 4 bit
> [134][mmc]: 50000000 Hz
> [136][mmc]: 15193 MB
> [138][mmc]: ***SD/MMC 0 init OK!!!***
> [187]Loading boot-pkg Succeed(index=1).
> [190]Entry_name        = opensbi
> [193]Entry_name        = dtb
> [196]Entry_name        = u-boot
> [199]Jump to second Boot.
>
>
> U-Boot 2022.01-rc1-31813-gf3a0e980de-dirty (Jan 17 2022 - 13:27:57 +0100)
>
> CPU:   rv64imafdc
> Model: Allwinner D1 NeZha
> DRAM:  512 MiB
> WDT:   Started watchdog@6011000 with servicing (16s timeout)
> MMC:   mmc@4020000: 0, mmc@4021000: 1
> Loading Environment from nowhere... OK
> In:    serial@2500000
> Out:   serial@2500000
> Err:   serial@2500000
> Net:   Could not get PHY for ethernet@4500000: addr 1
> No ethernet found.
>
> Hit any key to stop autoboot:  0
> switch to partitions #0, OK
> mmc0 is current device
> Scanning mmc 0:1...
> libfdt fdt_check_header(): FDT_ERR_BADMAGIC
> Scanning disk mmc@4020000.blk...
> Scanning disk mmc@4021000.blk...
> Disk mmc@4021000.blk not ready
> Found 3 disks
> ** Unable to read file ubootefi.var **
> Failed to load EFI variables
> mdio_register: non unique device name 'ethernet@4500000'
> Could not get PHY for ethernet@4500000: addr 1
> mdio_register: non unique device name 'ethernet@4500000'
> Could not get PHY for ethernet@4500000: addr 1
> BootOrder not defined
> EFI boot manager: Cannot load any image
> Found EFI removable media binary efi/boot/bootriscv64.efi
> 1409436 bytes read in 248 ms (5.4 MiB/s)
> libfdt fdt_check_header(): FDT_ERR_BADMAGIC
> Booting /efi\boot\bootriscv64.efi
>
> Consoles: EFI console
>     Reading loader env vars from /efi/freebsd/loader.env
> Setting currdev to disk0p1:
> FreeBSD/riscv EFI loader, Revision 1.1
> (Fri Jan 14 13:21:23 CET 2022 root@legion)
>
>    Command line arguments: l
>    Image base: 0x5e98c000
>    EFI version: 2.80
>    EFI Firmware: Das U-Boot (rev 8226.256)
>    Console: comconsole (0)
>    Load Path: /efi\boot\bootriscv64.efi
>    Load Device: 
> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)/HD(1,GPT,1ab17495-7795-11ec-9e49-f875a47d4ead,0xa1f8,0x10418)
> Trying ESP: 
> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)/HD(1,GPT,1ab17495-7795-11ec-9e49-f875a47d4ead,0xa1f8,0x10418)
> Setting currdev to disk0p1:
> Trying: 
> /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b)/SD(0)/SD(0)/HD(2,GPT,2973d4b3-7795-11ec-9e49-f875a47d4ead,0x1a610,0x114340)
> Setting currdev to disk0p2:
> Loading /boot/defaults/loader.conf
> Loading /boot/defaults/loader.conf
> Loading /boot/device.hints
> Loading /boot/loader.conf
> Loading /boot/loader.conf.local
> /
>
>    ______               ____   _____ _____
>   |  ____|             |  _ \ / ____|  __ \
>   | |___ _ __ ___  ___ | |_) | (___ | |  | |
>   |  ___| '__/ _ \/ _ \|  _ < \___ \| |  | |
>   | |   | | |  __/  __/| |_) |____) | |__| |
>   | |   | | |    |    ||     |      |      |
>   |_|   |_|  \___|\___||____/|_____/|_____/ ```                        `
>                                                 s` 
> `.....---.......--.```   -/
>  +---------- Welcome to FreeBSD -----------+    +o .--` /y:`      +.
>  |                                         | yo`:. :o      `+-
>  |  1. Boot Multi user [Enter]             | y/ -/`   -o/
>  |  2. Boot Single user                    | .- ::/sy+:.
>  |  3. Escape to loader prompt             | / `--  /
>  |  4. Reboot                              | 
> `:                          :`
>  |  5. Cons: Video                         | 
> `:                          :`
>  |                                         | /                          /
>  |  Options:                               | .-                        -.
>  |  6. Kernel: default/kernel (1 of 1)     | --                      -.
>  |  7. Boot Options                        | `:` `:`
>  |                                         | .--             `--.
>  |                                         | .---.....----.
>  +-----------------------------------------+
>    Autoboot in 0 seconds. [Space] to pause
>
> Loading kernel...
> /boot/kernel/kernel text=0x609ddc text=0x133abc data=0xf4420 
> data=0xb54+0x1d73e4 syms=[0x8+0xcd188+0x8+0xee5ae]
> Loading configured modules...
> can't find '/etc/hostid'
> can't find '/boot/entropy'
> Using DTB provided by EFI at 0x47ef5000.
> Kernel entry at 0x56a0002e...
> Kernel args: (null)
>
> -----
>
> And here it stops for  ~16 seconds then restarts, that's the watchdog 
> resetting it.
>
> So where do I go from here?
>
Hi Jakob,

Looks like it bails somewhere in the initial kernel setup, before the 
first output to the console. This is a wide range, so it's difficult to 
say exactly where things are going wrong.

I will say that generally FreeBSD is not expected to work on the D1; as 
far as I know you are the first to try it. This hardware has some quirks 
requiring special support, which we are entirely lacking. Specifically, 
there is one related to virtual memory management, which requires custom 
(spec-breaking) bits in the page tables to be set, to properly specify 
the attributes of physical and device memory. This _may_ have something 
to do with why it is failing where it is. It would take a motivated 
party to add the support required for this SoC, and I'm not aware of 
anyone currently taking this on. This board has caused some headaches in 
Linux-land for the same reasons, but there are more hands to do the work 
there. I just want to set the expectations properly :)

If you wanted to debug this further, you might rebuild the kernel after 
adding 'options EARLY_PRINTF' to the config file, as this should enable 
a couple early outputs and narrow down the search slightly.

Cheers,
Mitchell

>
> Cheers,
>
> Jakob Alvermark
>
>