Four Partitions and a Borrowed Bootloader: NetBSD on the Milk-V Mars
As I write this, there is a Milk-V Mars on my network running NetBSD-current with a 28 GB root filesystem, gigabit Ethernet passing a ping flood at 0.0% loss, and an SSH prompt that answers like any other machine on the shelf. As far as I can tell it's the only documented NetBSD Mars in existence. The NetBSD wiki lists the hardware as supported, but publishes no image and no instructions, and neither does anyone else. Closing the gap between "supported" and "boots" took a weekend, three wrong theories, one self-inflicted filesystem corruption, and a serial console I put off hooking up for far too long. This is the whole story, and it ends with a one-line fix.

When I reviewed the Mars in February, it finished dead last in my Rust benchmark fleet and I called it a better specimen than appliance. Slow, cheap, plentiful RAM, a real serial header, and an architecture the mainstream is still learning. It is exactly the kind of hardware NetBSD exists for, and NetBSD gained StarFive JH7110 support in -current. Nobody had introduced them. So: build a self-contained bootable microSD, entirely on a Mac, no compiling, no touching the board's SPI flash.
How a JH7110 finds an operating system
The JH7110's boot chain has four links. The BootROM in silicon reads the GPT from sector 1 of the card and hunts for a partition by type GUID (2E54B353-…) which holds the SPL. The SPL brings up DDR and loads a FIT image (OpenSBI + U-Boot) from a second type GUID, BC13C2FF-…. U-Boot finds an OS somehow (hold that thought) and NetBSD's bootriscv64.efi pulls the kernel off an FFS partition. Four partitions:
| # | Contents | Found by |
|---|---|---|
| 1 | SPL | BootROM, via type GUID |
| 2 | OpenSBI + U-Boot FIT | SPL, via type GUID |
| 3 | EFI System Partition | U-Boot |
| 4 | NetBSD FFS root | the ESP's bootloader |
Partitions 3 and 4 come wholesale from NetBSD's daily riscv64 image (nycdn.netbsd.org; JH7110 support lives only in -current). Assembly is sgdisk, mtools, and dd on a Mac: two minutes, scripted end-to-end in my repo's build-image.sh. The build phase's happiest find: NetBSD's image ships jh7110-milkv-mars.dtb, a device tree for this exact board, matched to its own drivers. Remember that file; it matters later.
Partitions 1 and 2 are the borrowed bootloader, and they're where everything went sideways.
The board itself: Mars V1.21, StarFive JH7110 in the middle, the 40-pin header along the top edge (serial console on pins 6, 8, and 10), and the tiny two-position boot DIP switch tucked against the USB3 stack.
The archaeology that lied to me
Mainline U-Boot dropped JH7110 SD-card booting in v2025.10, so round one borrowed MilkV's prebuilt vendor bootloader (mars-buildroot-sdk V1.0.6), built when SD boot was a first-class citizen. Its environment is compiled into an uncompressed FIT, so strings(1) works as a debugger. It showed me a full EFI distro-boot apparatus, scan_dev_for_efi and all. The problem appeared to reduce to one filename: alias NetBSD's Mars DTB to the name the scan wants. I shipped that and wrote a confident paragraph about it.
The board didn't boot. Lesson one, paid in full: presence in a U-Boot environment is not evidence of execution. Compiled-in environments carry every script upstream ever shipped, like a junk drawer carries keys to apartments you no longer rent. Tracing bootcmd call by call showed the vendor's actual generic path: import /uEnv.txt, sysboot an extlinux config. The EFI machinery is dead code. My card spoke fluent EFI to a bootloader that only learned uEnv and extlinux.
To convict the vendor firmware I first had to acquit my image, without a serial console. Debian's snapshot archive keeps every package ever shipped, including u-boot-qemu 2021.10, the vendor build's exact generation. QEMU plus period-correct U-Boot made a workable stand-in for the board, and my actual image file booted through EFI into NetBSD on the first try. The image was fine; the vendor environment was the problem.
MilkV's own practice pointed at a workaround: their Debian card's uEnv.txt contains, verbatim, # Fix missing bootcmd. The vendor patches its own firmware's environment at every boot. Following suit, my card grew a uEnv.txt hijacking their fdt_loaddtb hook into an EFI boot. QEMU validated it against the vendor's exact command sequence. The board still didn't boot. With no console, I turned the card into its own flight recorder: U-Boot has fatwrite, so the hook gained breadcrumb files written to the FAT partition at each stage. Boot, pull the card, read it back. Verdict, across multiple boots: zero breadcrumbs. The firmware on this board never even imported the file its own design patches with. At that point it made more sense to stop accommodating the vendor firmware entirely.
The transplant, and the board that "died"
If the vendor bootloader won't speak any language my card can write, replace the bootloader: Debian's u-boot-starfive package carries mainline 2025.01 for the VisionFive 2, the exact version the U-Boot docs bless for this family, and the vendor's own Mars firmware is literally a VF2 build with the filename changed. SPL into partition 1, FIT into partition 2.
And the board booted. DHCP lease with NetBSD's fingerprints (a locally-administered MAC and a dhcpcd DUID); port 22 open. Then, minutes later: gone. Every boot: appear, vanish. I had three theories (kernel panic, power sag, bad -current daily) and a day of DHCP-lease forensics that couldn't pick between them.
The serial console — a USB-UART hanging off a Raspberry Pi across the room, driven over SSH, after its own detour through baud-rate resets, a missing clocal that made writes block forever, and five stacked stty processes wedging the tty — settled it in ten minutes:
NetBSD/riscv (riscv64) (constty) login:
A login prompt. On the board I'd declared dead. All three theories wrong at once: the board was never dying. What died was its network. The OS sat there healthy, unreachable, while I issued death certificates on the testimony of a router. The kernel had already named the killer at boot:
[ 1.000000] mcommphy0: autoconfiguration error: unknown drive strength (3 uA at 1800 mV) [ 1.000000] eqos1: reset timeout!
A PHY misconfigured by unrecognized device-tree values, and eqos1, a second Ethernet controller on a board that has one port. The VisionFive 2 has two. The kernel was running the VF2 device tree. Mainline U-Boot had silently fallen back to its built-in FDT, and NetBSD, handed a description of the wrong board, drove the PHY into dropping four of every five frames, with the survivors crossing in a perfectly healthy 0.4 ms. At the U-Boot prompt:
StarFive # printenv fdtfile ## Error: "fdtfile" not defined StarFive # setenv fdtfile starfive/jh7110-milkv-mars.dtb StarFive # bootflow scan ... riscv64# ping -c 10 -i 0.3 10.1.1.1 | tail -2 10 packets transmitted, 10 packets received, 0.0% packet loss
Zero percent packet loss. One environment variable had been the entire problem. env save wrote it to SPI flash, and every boot since has been autonomous and clean.
One empty string
Why was fdtfile never set? This is my favorite finding of the project. The VF2 board code composes it from the board's ID EEPROM, and the Mars's EEPROM is blank. The env template ends with "fdtfile=" CONFIG_DEFAULT_FDT_FILE, and the defconfig doesn't set CONFIG_DEFAULT_FDT_FILE, so the template renders as fdtfile=. U-Boot's env import treats an empty value as "delete the variable." There is no dedicated Mars defconfig upstream; Mars support is VF2-plus-EEPROM. Blank EEPROM, empty default, deleted variable, wrong device tree, 80% packet loss. The fix, compiled into the custom U-Boot that now ships in my repo (cross-built by build-uboot.sh on a Raspberry Pi):
CONFIG_DEFAULT_FDT_FILE="starfive/jh7110-milkv-mars.dtb"
One line — though, as is usually the way with these things, finding the line was the weekend's work.
The superblock that fought back
Two more fights before the finish line, both instructive. First, the kernel panicked on one heavily-loaded boot: a genuine NetBSD-current riscv bug, caught with a full backtrace over serial (pmap_segtab.c:948, assertion failed in the pagedaemon; report drafted for port-riscv). It retroactively explains the earlier "deaths" too: panic, then a reboot attempt that hangs, because (the second fight) the VF2-flavored firmware can't drive the Mars's PMIC. pmic_ops: cannot read pmic power register, and every software reboot on this board is actually a power cycle. Permanent caveat until someone builds Mars-aware firmware.
And then the filesystem resize humbled me. NetBSD's images grow their root on first boot and then run resize_root_postcmd="/sbin/reboot -n": reboot without syncing. That looked like a bug to me on a board where reboot hangs, so I emptied it. Days later I learned what it's for: after resizing a mounted-read-only root, the kernel still holds the old superblock in memory, and any later sync writes stale metadata over the resized filesystem. Mine did exactly that (BAD SUPER BLOCK: VALUES IN SUPER BLOCK DISAGREE WITH THOSE IN FIRST ALTERNATE), and fsck, offered two truths, chose the stale one and un-resized the disk. The recovery (from the boot-failure shell, root mounted read-only): fsck_ffs -f -y, resize_ffs -y, verify, then exit via reboot -n, the exact no-sync reboot I'd deleted, so the fix reaches disk unclobbered. The next power cycle mounted 28 GB clean. Weird-looking safeties are load-bearing. Understand why a thing exists before you remove it, especially when it's one flag on a reboot command.
Where it stands
The scoreboard, finally all green where it counts: Boot chain: mainline U-Boot, EFI, Mars DTB from compiled-in default, fully autonomous. Ethernet: 0.0% loss, stable pinned MAC. Storage: 28 GB grown FFS, clean. Access: SSH from anywhere on my LAN, serial console rig for the deep end. Known caveats: power-cycle instead of reboot (PMIC), and a recurring kernel panic in the UVM layer under sustained heavy write load (two distinct backtraces captured over serial, pagedaemon/pmap and buffer-cache list corruption, pointing at a common riscv MD bug; upstream report in progress). Day-to-day use is stable; sustained bulk writes (extracting the 150,000-file pkgsrc tree, for instance) trigger it reliably.
Proof of life, over SSH: NetBSD 11.99.7, CPU reported as milkv,mars, 48 minutes of uptime, and neofetch installed from the riscv64 binary package repository.
Everything is scripted and reproducible in the repo, github.com/ajokela/milkv-netbsd; see the README for build instructions, the DIP-switch table, and known issues. build-image.sh builds the image (NetBSD daily + custom U-Boot + FAT16 ESP + your SSH key, two minutes on a Mac), build-uboot.sh reproduces the one-line-patched firmware on any Debian box, and customize-image.sh boots the image in QEMU and bakes in distribution defaults. The next step is the thing this niche deserves and doesn't have: a flashable image. Default credentials root/netbsd with a motd that yells at you to change them, in the grand SBC tradition; unique host keys and entropy generated on each board's own first boot; a persistent MAC minted on first touch. Download: netbsd-mars-20260719.img.xz (234 MB, SHA512) — flash with xz -dc netbsd-mars-20260719.img.xz | sudo dd of=/dev/rdiskN bs=1m, set the DIP switch to SD, and log in as root/netbsd.
What transfers
Dead code lies. Environment strings, advertised features, config scaffolding: presence is not execution. Trace the call chain or test empirically.
Absence of signal is not absence of life. I diagnosed a dying board from lease tables for a day; it was a healthy board with a bad NIC. When your only instrument is the network, network bugs look like death.
You can debug a remarkable amount blind, and you should still get the console. Snapshot-archive time machines, flight-recorder SD cards, and DHCP forensics correctly convicted the vendor firmware and acquitted the image. They also supported three wrong theories that ten minutes of serial console dissolved. Blind methods find what; the console finds why.
Weird-looking safeties are usually load-bearing. The no-sync reboot I "fixed" was the only thing standing between a fresh resize and stale-metadata corruption. Understanding why a mechanism exists has to come before removing it, a lesson I re-learned the expensive way.
The gap between "supported" and "bootable" is where the work lives. Drivers in the tree, DTB in the daily build, hardware on the wiki, and yet no path from a downloaded file to a login prompt, because the people who did the work have serial consoles and muscle memory. The last mile of platform support is documentation. This post, the repo, and the image to come are my attempt at paying that toll. The Mars is still a better specimen than appliance, but it is now, at last, a working one.
Appendix: dmesg of a healthy boot
For the search engines, and for anyone deciding whether their Mars will work: the complete kernel autoconfiguration output of a good boot, captured over serial. The lines worth noting: simplebus0 at mainbus0: Milk-V Mars, the kernel naming the right board at last; the mcommphy0 block printing real calibration values (rx-clk-drv-microamp is 3970, delay lines at 1500 ps) where unknown drive strength errors used to live; exactly one eqos0 and no phantom second controller; and pmic (x-powers,axp15060) at iic0 addr 0x36 not configured, the software-reset caveat in a single line.
[ 1.000000] ------------------------------------------ [ 1.000000] kern_vtopdiff = 0xffffffbf03400000 [ 1.000000] memory_start = 0x 40060000 [ 1.000000] memory_end = 0x 240000000 [ 1.000000] memory_size = 0x 1fffa0000 [ 1.000000] kernstart_phys = 0x fcc00000 [ 1.000000] kernend_phys = 0x fd800000 [ 1.000000] msgbufaddr = 0xffffffe23fff0000 [ 1.000000] VM_MIN_KERNEL_ADDRESS = 0xffffffc000000000 [ 1.000000] kernstart_mega = 0xffffffc000000000 [ 1.000000] kernstart = 0xffffffc000000000 [ 1.000000] kernend = 0xffffffc000c00000 [ 1.000000] kernend_mega = 0xffffffc000c00000 [ 1.000000] VM_MAX_KERNEL_ADDRESS = 0xffffffd000000000 [ 1.000000] pmap_direct_base = 0xffffffe000000000 [ 1.000000] ------------------------------------------ [ 1.000000] adding 0x40060000 - 0xfcc00000 to freelist 0 [ 1.000000] adding 0xfd800000 - 0xfda00000 to freelist 0 [ 1.000000] adding 0xfda0a000 - 0xfe6e8000 to freelist 0 [ 1.000000] adding 0xfe6f5000 - 0xfe6f9000 to freelist 0 [ 1.000000] adding 0xfe6fa000 - 0xfe6fb000 to freelist 0 [ 1.000000] adding 0xfe6fd000 - 0xfe700000 to freelist 0 [ 1.000000] adding 0xfe725000 - 0xff762000 to freelist 0 [ 1.000000] adding 0xff763000 - 0xfff4a000 to freelist 0 [ 1.000000] adding 0xfff4c000 - 0x23fff0000 to freelist 0 [ 1.000000] common cpusets bs_pde 0xffffffc000a0b000 ASID max 0 kcpusets nkmempages limits: ffffffc004000000 - ffffffd000000000 [ 1.000000] kva : ffffffc004000000 - ffffffc2b9000000 [ 1.000000] mpstart [ 1.000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, [ 1.000000] 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, [ 1.000000] 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, [ 1.000000] 2024, 2025, 2026 [ 1.000000] The NetBSD Foundation, Inc. All rights reserved. [ 1.000000] Copyright (c) 1982, 1986, 1989, 1991, 1993 [ 1.000000] The Regents of the University of California. All rights reserved. [ 1.000000] NetBSD 11.99.7 (GENERIC64) #0: Sat Jul 18 15:41:53 UTC 2026 [ 1.000000] mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/riscv/compile/GENERIC64 [ 1.000000] total memory = 8179 MB [ 1.000000] avail memory = 7910 MB [ 1.000000] entropy: ready [ 1.000000] timecounter: Timecounters tick every 10.000 msec [ 1.000000] WARNING: module error: Built-in module `iic' can't find built-in dependency `i2c_bitbang' [ 1.000000] WARNING: module error: Built-in module `iic' prerequisite `i2c_bitbang' failed, error 2 [ 1.000000] mainbus0 (root) [ 1.000000] simplebus0 at mainbus0: Milk-V Mars [ 1.000000] simplebus1 at simplebus0 [ 1.000000] cpus0 at simplebus0 [ 1.000000] simplebus2 at simplebus0 [ 1.000000] cpu0 at cpus0: SiFive 7-Series Processor (E7, S7, U7 series) imp. 4210427 [ 1.000000] cpu0: vendor 0x489 arch. 8000000000000007 imp. 4210427 [ 1.000000] cpu1 at cpus0: SiFive 7-Series Processor (E7, S7, U7 series) imp. 4210427 [ 1.000000] cpu1: vendor 0x489 arch. 8000000000000007 imp. 4210427 [ 1.000000] cpu2 at cpus0: SiFive 7-Series Processor (E7, S7, U7 series) imp. 4210427 [ 1.000000] cpu2: vendor 0x489 arch. 8000000000000007 imp. 4210427 [ 1.000000] cpu3 at cpus0: SiFive 7-Series Processor (E7, S7, U7 series) imp. 4210427 [ 1.000000] cpu3: vendor 0x489 arch. 8000000000000007 imp. 4210427 [ 1.000000] intc0 at cpu0: local interrupt controller [ 1.000000] intc1 at cpu1: local interrupt controller [ 1.000000] intc2 at cpu2: local interrupt controller [ 1.000000] intc3 at cpu3: local interrupt controller [ 1.000000] fclock0 at simplebus0: 49152000 Hz fixed clock (tdm_ext) [ 1.000000] fclock1 at simplebus0: 12288000 Hz fixed clock (mclk_ext) [ 1.000000] fclock2 at simplebus0: 12288000 Hz fixed clock (i2srx_bclk_ext) [ 1.000000] fclock3 at simplebus0: 192000 Hz fixed clock (i2srx_lrck_ext) [ 1.000000] syscon0 at simplebus1: System Controller Registers [ 1.000000] jh7110syscon0 at simplebus1: JH7110 STG system controller [ 1.000000] fclock4 at simplebus0: 24000000 Hz fixed clock (osc) [ 1.000000] fclock5 at simplebus0: 12288000 Hz fixed clock (i2stx_bclk_ext) [ 1.000000] fclock6 at simplebus0: 192000 Hz fixed clock (i2stx_lrck_ext) [ 1.000000] fclock7 at simplebus0: 50000000 Hz fixed clock (gmac1_rmii_refin) [ 1.000000] fclock8 at simplebus0: 125000000 Hz fixed clock (gmac1_rgmii_rxin) [ 1.000000] syscon1 at simplebus1: System Controller Registers [ 1.000000] fclock9 at simplebus0: 50000000 Hz fixed clock (gmac0_rmii_refin) [ 1.000000] fclock10 at simplebus0: 125000000 Hz fixed clock (gmac0_rgmii_rxin) [ 1.000000] fclock11 at simplebus0: 32768 Hz fixed clock (rtc_osc) [ 1.000000] fclock12 at simplebus0: 74250000 Hz fixed clock (dvp_clk) [ 1.000000] fclock13 at simplebus0: 297000000 Hz fixed clock (hdmitx0_pixelclk) [ 1.000000] jh7110clkc0 at simplebus1: JH7110 System Clock and Reset Generator [ 1.000000] plic0 at simplebus1 [ 1.000000] plic0: inactive HART for PLIC for context 0 [ 1.000000] plic0: interrupt cpu0 (hart 1)/Machine external #11 handler installed [ 1.000000] plic0: interrupt cpu0 (hart 1)/Supervisor external #9 handler installed [ 1.000000] plic0: hart 1 context 2 [ 1.000000] plic0: interrupt cpu1 (hart 2)/Machine external #11 handler installed [ 1.000000] plic0: interrupt cpu1 (hart 2)/Supervisor external #9 handler installed [ 1.000000] plic0: hart 2 context 4 [ 1.000000] plic0: interrupt cpu2 (hart 3)/Machine external #11 handler installed [ 1.000000] plic0: interrupt cpu2 (hart 3)/Supervisor external #9 handler installed [ 1.000000] plic0: hart 3 context 6 [ 1.000000] plic0: interrupt cpu3 (hart 4)/Machine external #11 handler installed [ 1.000000] plic0: interrupt cpu3 (hart 4)/Supervisor external #9 handler installed [ 1.000000] plic0: hart 4 context 8 [ 1.000000] plic0: attaching: RISC-V PLIC (136 IRQs) [ 1.000000] jh7110pinctrl0 at simplebus1: Pin Controller [ 1.000000] jh7110clkc1 at simplebus1: JH7110 System-Top-Group Clock and Reset Generator [ 1.000000] jh7110clkc2 at simplebus1: JH7110 Always-On Clock and Reset Generator [ 1.000000] jh7110pinctrl1 at simplebus1: Pin Controller [ 1.000000] jh7110clkc3 at simplebus1: JH7110 Video Output Clock and Reset Generator [ 1.000000] jh7110pciephy0 at simplebus1: JH7110 PCIe PHY [ 1.000000] jh7110pciephy1 at simplebus1: JH7110 PCIe PHY [ 1.000000] ccache0 at simplebus1: L2 cache controller. 2048 KiB/64B 16-way (2048 set). [ 1.000000] ccache0: No. of banks 8 [ 1.000000] ccache0: No. of ways per bank 16 [ 1.000000] ccache0: Sets per bank 256 [ 1.000000] ccache0: Bytes per cache block 64 [ 1.000000] ccache0: Largest way enabled 15 [ 1.000000] /opp-table-0 at simplebus0 not configured [ 1.000000] dwiic0 at simplebus1: I2C controller [ 1.000000] dwiic0: interrupting on plic0 irq 50 [ 1.000000] iic0 at dwiic0: I2C bus [ 1.000000] pmic (x-powers,axp15060) at iic0 addr 0x36 not configured [ 1.000000] jh71x0temp0 at simplebus1: JH71x0 temperature sensor [ 1.000000] /soc/dma-controller@16050000 at simplebus1 not configured [ 1.000000] /soc/phy@10200000 at simplebus1 not configured [ 1.000000] /soc/syscon@13030000/clock-controller at syscon0 not configured [ 1.000000] /soc/dma-controller@16008000 at simplebus1 not configured [ 1.000000] eqos0 at simplebus1: DesignWare EQOS ver 0x52 (0x41) [ 1.000000] eqos0: hw features 1a2173f7 09845904 01000000 00000000 [ 1.000000] eqos0: Ethernet address f2:00:1b:33:82:be [ 1.000000] mcommphy0 at eqos0 phy 0: Motorcomm YT8531 GbE PHY [ 1.000000] mcommphy0: motorcomm,tx-clk-adj-enabled is true [ 1.000000] mcommphy0: motorcomm,tx-clk-100-inverted is true [ 1.000000] mcommphy0: motorcomm,tx-clk-1000-inverted is true [ 1.000000] mcommphy0: rx-clk-drv-microamp is 3970 [ 1.000000] mcommphy0: motorcomm,rx-data-drv-microamp is 2910 [ 1.000000] mcommphy0: rx-internal-delay-ps is 1500 [ 1.000000] mcommphy0: tx-internal-delay-ps is 1500 [ 1.000000] mcommphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT-FDX, auto [ 1.000000] eqos0: interrupting on plic0 irq 7 [ 1.000000] /soc/clock-controller@19810000 at simplebus1 not configured [ 1.000000] /soc/phy@19820000 at simplebus1 not configured [ 1.000000] /soc/power-controller@17030000 at simplebus1 not configured [ 1.000000] jh7110pcie0 at simplebus1: PCIe [ 1.000000] jh7110pcie0: interrupting on plic0 irq 56 [ 1.000000] jh7110pcie0: MMIO (32-bit non-prefetchable): 0x0000000030000000 + 0x0000000008000000 @ 0x0000000030000000 [ 1.000000] jh7110pcie0: MMIO (64-bit prefetchable) : 0x0000000900000000 + 0x0000000040000000 @ 0x0000000900000000 [ 1.000000] pci0 at jh7110pcie0 bus 0 [ 1.000000] pci0: memory space enabled, rd/line, rd/mult, wr/inv ok [ 1.000000] ppb0 at pci0 dev 0 function 0: vendor 1556 product 1111 (rev. 0x02) [ 1.000000] ppb0: PCI Express capability version 2 <Root Port of PCI-E Root Complex> x1 @ 5.0GT/s [ 1.000000] pci1 at ppb0 bus 1 [ 1.000000] pci1: memory space enabled, rd/line, wr/inv ok [ 1.000000] xhci0 at pci1 dev 0 function 0: vendor 1106 product 3483 (rev. 0x01) [ 1.000000] xhci0: 64-bit DMA [ 1.000000] xhci0: interrupting at plic0 irq 56 [ 1.000000] xhci0: xHCI version 1.0 [ 1.000000] usb0 at xhci0: USB revision 3.0 [ 1.000000] usb1 at xhci0: USB revision 2.0 [ 1.000000] jh7110pcie1 at simplebus1: PCIe [ 1.000000] jh7110pcie1: autoconfiguration error: link not up [ 1.000000] /sound at simplebus0 not configured [ 1.000000] /soc/pwmdac@100b0000 at simplebus1 not configured [ 1.000000] /audio-codec at simplebus0 not configured [ 1.000000] /soc/timer@2000000 at simplebus1 not configured [ 1.000000] com0 at simplebus1: DesignWare APB UART, no fifo [ 1.000000] com0: console [ 1.000000] com0: interrupting on plic0 irq 32 [ 1.000000] dwiic1 at simplebus1: I2C controller [ 1.000000] dwiic1: interrupting on plic0 irq 35 [ 1.000000] iic1 at dwiic1: I2C bus [ 1.000000] dwiic2 at simplebus1: I2C controller [ 1.000000] dwiic2: interrupting on plic0 irq 37 [ 1.000000] iic2 at dwiic2: I2C bus [ 1.000000] /soc/spi@10060000 at simplebus1 not configured [ 1.000000] jh71x0usb0 at simplebus1: USB [ 1.000000] dwiic3 at simplebus1: I2C controller [ 1.000000] dwiic3: interrupting on plic0 irq 51 [ 1.000000] iic3 at dwiic3: I2C bus [ 1.000000] /soc/pwm@120d0000 at simplebus1 not configured [ 1.000000] /soc/spi@13010000 at simplebus1 not configured [ 1.000000] /soc/crypto@16000000 at simplebus1 not configured [ 1.000000] jh7110trng0 at simplebus1: JH7110 TRNG [ 1.000000] jh7110trng0: Features : 0xd<mode reset state=0x1=mission mode,ring oscillator=0x1=present,max rand length=0x1=256-bit> [ 1.000000] jh7110trng0: Build config: 0x3d<auto reseed loopback=0x1=present,mode after reset=0x1=mission mode,PRNG after reset=0x1=present,max PRNG length=0x1=256-bit> [ 1.000000] jh7110trng0: interrupting on plic0 irq 30 [ 1.000000] dwcmmc0 at simplebus1: DesignWare SD/MMC [ 1.000000] dwcmmc0: interrupting on plic0 irq 74 [ 1.000000] dwcmmc1 at simplebus1: DesignWare SD/MMC [ 1.000000] dwcmmc1: interrupting on plic0 irq 75 [ 1.000000] /gpio-restart at simplebus0 not configured [ 1.000000] /soc/watchdog@13070000 at simplebus1 not configured [ 1.000000] xhci1 at simplebus1autoconfiguration error: : cannot switch 'otg' mode to host [ 1.000000] timecounter: Timecounter "riscv" frequency 4000000 Hz quality 100 [ 1.000003] timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0 [ 1.799984] cpu_boot_secondary_processors: starting secondary processors [ 1.799984] cpu_boot_secondary_processors: secondary processors hatched. 4 running [ 1.815242] uhub0 at usb0: NetBSD (0x0000) xHCI root hub (0x0000), class 9/0, rev 3.00/1.00, addr 0 [ 1.819981] uhub0: 4 ports with 4 removable, self powered [ 1.819981] uhub1 at usb1: NetBSD (0x0000) xHCI root hub (0x0000), class 9/0, rev 2.00/1.00, addr 0 [ 1.829977] uhub1: 1 port with 1 removable, self powered [ 1.829977] sdmmc0 at dwcmmc0 [ 1.829977] sdmmc1 at dwcmmc1 [ 1.849982] IPsec: Initialized Security Association Processing. [ 1.959977] sdmmc1: SD card status: 4-bit, C10, U1, V10, A1 [ 1.959977] ld1 at sdmmc1: <0x27:0x5048:SD32G:0x60:0x00000307:0x156> [ 1.969977] ld1: 29508 MB, 7494 cyl, 128 head, 63 sec, 512 bytes/sect x 60432384 sectors [ 1.979977] ld1: GPT GUID: e27a702f-df79-4d5a-be5f-1cda14fa33e4 [ 1.979977] dk0 at ld1: "spl", 4096 blocks at 2048, type: <unknown> [ 1.989977] dk1 at ld1: "uboot", 8192 blocks at 8192, type: <unknown> [ 1.999977] dk2 at ld1: "EFI", 163840 blocks at 16384, type: msdos [ 1.999977] dk3 at ld1: "netbsd-root", 60252127 blocks at 180224, type: ffs [ 2.009977] ld1: 4-bit width, High-Speed/SDR25, 50.000 MHz [ 2.269976] uhub2 at uhub1 port 1: vendor 2109 (0x2109) USB2.0 Hub (0x3431), class 9/0, rev 2.10/4.20, addr 1 [ 2.279977] uhub2: single transaction translator [ 2.289976] uhub2: 4 ports with 4 removable, self powered [ 2.629983] swwdog0: software watchdog initialized [ 2.629983] WARNING: 2 errors while detecting hardware; check system log. [ 2.641566] boot device: dk3 [ 2.641566] root on dk3 [ 2.659978] root file system type: ffs [ 2.669979] kern.module.path=/stand/riscv/11.99.7/modules [ 2.669979] WARNING: no TOD clock present [ 2.681527] WARNING: using filesystem time [ 2.685595] WARNING: CHECK AND RESET THE DATE!