Re: Sipeed Lichee RV (Allwinner D1)

From: Jessica Clarke <jrtc27_at_freebsd.org>
Date: Mon, 07 Feb 2022 17:44:06 UTC
On 7 Feb 2022, at 17:38, Jakob Alvermark <jakob@alvermark.net> wrote:
> 
> On 1/29/22 16:12, Jakob Alvermark wrote:
>> 
>> On 1/28/22 16:29, Mitchell Horne wrote:
>>> On 1/19/22 18:05, Jakob Alvermark wrote:
>>>> 
>>>> On 1/19/22 17:24, Mitchell Horne wrote:
>>>>> 
>>>>> 
>>>>> 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:
>>>>>> 
>>>> <snip>
>>>>>> 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.
>>>> 
>>>> 
>>>> Hi Mitchell,
>>>> 
>>>> 
>>>> I did not expect it to work. But it would be nice if it did.
>>>> 
>>>> I have a long experience with FreeBSD and I have played around with a couple of different ARM-boards, but I'm not very experienced with kernel hacking.
>>>> 
>>>> I built a kernel with EARLY_PRINTF, but it did not give me any more output...
>>>> 
>>>> Is there anything else I could try?
>>>> 
>>> 
>>> Yes, I missed an important detail: the required uart driver is missing from the kernel. Please add 'device uart_snps' to the kernel config as well, and see if this results in any output.
>> 
>> 
>> Hi, I tried that, but sadly it did not make any difference.
>> 
>> I looked at what they have done in Linux, and this commit seems to have some interesting bits:
>> 
>> https://github.com/smaeul/linux/commit/c1bc61cee73e236c3cd69fe6c998b7f80c654263#diff-4f4bb4eea826b523d76ddb1c539dad5685a0e7fd7cc8f1089a0493efd0e8e5b8 
> 
> 
> Hi again,
> 
> 
> I noticed they have updated the U-Boot code to specifically support this board.
> 
> With nothing to loose, I decided to try it.
> 
> Now I get a little more:
> 
> [35]HELLO! BOOT0 is starting!
> [38]BOOT0 commit : 525883d-dirty
> [41]set pll start
> [43]periph0 has been enabled
> [46]set pll end
> [47]board init ok
> [49]DRAM only have internal ZQ!!
> [52]get_pmu_exist() = -1
> [55]ddr_efuse_type: 0x0
> [58][AUTO DEBUG] single rank and full DQ!
> [62]ddr_efuse_type: 0x0
> [65][AUTO DEBUG] rank 0 row = 15
> [68][AUTO DEBUG] rank 0 bank = 8
> [71][AUTO DEBUG] rank 0 page size = 2 KB
> [75]DRAM BOOT DRIVE INFO: V0.24
> [77]DRAM CLK = 792 MHz
> [80]DRAM Type = 3 (2:DDR2,3:DDR3)
> [83]DRAMC ZQ value: 0x7b7bfb
> [85]DRAM ODT value: 0x42.
> [88]ddr_efuse_type: 0x0
> [91]DRAM SIZE =512 M
> [94]DRAM simple test OK.
> [96]dram size =512
> [98]card no is 0
> [100]sdcard 0 line count 4
> [102][mmc]: mmc driver ver 2021-04-2 16:45
> [112][mmc]: Wrong media type 0x0
> [115][mmc]: ***Try SD card 0***
> [132][mmc]: HSSDR52/SDR25 4 bit
> [135][mmc]: 50000000 Hz
> [137][mmc]: 15193 MB
> [139][mmc]: ***SD/MMC 0 init OK!!!***
> [176]Loading boot-pkg Succeed(index=1).
> [180]Entry_name        = opensbi
> [183]Entry_name        = dtb
> [185]Entry_name        = u-boot
> [189]Adding DRAM info to DTB.
> [193]Jump to second Boot.
> 
> OpenSBI v1.0
>    ____                    _____ ____ _____
>   / __ \                  / ____|  _ \_   _|
>  | |  | |_ __   ___ _ __ | (___ | |_) || |
>  | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
>  | |__| | |_) |  __/ | | |____) | |_) || |_
>   \____/| .__/ \___|_| |_|_____/|____/_____|
>         | |
>         |_|
> 
> Platform Name             : Sipeed Lichee RV Dock
> Platform Features         : medeleg
> Platform HART Count       : 1
> Platform IPI Device       : aclint-mswi
> Platform Timer Device     : aclint-mtimer @ 24000000Hz
> Platform Console Device   : uart8250
> Platform HSM Device       : ---
> Platform Reboot Device    : sunxi-wdt-reset
> Platform Shutdown Device  : ---
> Firmware Base             : 0x40000000
> Firmware Size             : 264 KB
> Runtime SBI Version       : 0.3
> 
> Domain0 Name              : root
> Domain0 Boot HART         : 0
> Domain0 HARTs             : 0*
> Domain0 Region00          : 0x0000000014008000-0x000000001400bfff (I)
> Domain0 Region01          : 0x0000000014000000-0x0000000014007fff (I)
> Domain0 Region02          : 0x0000000040000000-0x000000004007ffff ()
> Domain0 Region03          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
> Domain0 Next Address      : 0x000000004a000000
> Domain0 Next Arg1         : 0x0000000044000000
> Domain0 Next Mode         : S-mode
> Domain0 SysReset          : yes
> 
> Boot HART ID              : 0
> Boot HART Domain          : root
> Boot HART ISA             : rv64imafdcvsux
> Boot HART Features        : scounteren,mcounteren,mcountinhibit,time
> Boot HART PMP Count       : 16
> Boot HART PMP Granularity : 2048
> Boot HART PMP Address Bits: 38
> Boot HART MHPM Count      : 0
> Boot HART MIDELEG         : 0x0000000000000222
> Boot HART MEDELEG         : 0x000000000000b109
> 
> 
> U-Boot 2022.01-32931-gc249924b17-dirty (Feb 06 2022 - 17:29:00 +0100)
> 
> DRAM:  512 MiB
> Core:  43 devices, 18 uclasses, devicetree: board
> 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:   No ethernet found.
> Hit any key to stop autoboot:  0
> switch to partitions #0, OK
> mmc0 is current device
> Scanning mmc 0:1...
> ** Unable to read file / **
> Failed to load '/'
> 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
> 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: 0x5e9d8000
>    EFI version: 2.90
>    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,0x200000)
> 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=0x5ef0ec text=0x1704dc data=0xf7900 data=0xbcc+0x2741cc syms=[0x8+0xd0290+0x8+0xf1d3e]
> Loading configured modules...
> can't find '/boot/entropy'
> can't find '/etc/hostid'
> Using DTB provided by EFI at 0x47ef6000.
> Kernel entry at 0x56a0002e...
> Kernel args: (null)
> ERROR loading DTB
> panic: Boot hart ID was not properly set
> cpuid = 0
> time = 1
> KDB: stack backtrace:
> Uptime: 1s

Like it says, your device tree is broken. U-Boot is supposed to copy
the previous stage’s /chosen/boot-hartid to any device tree it loads,
but something’s gone wrong there. Not much FreeBSD can do about that.

Jess