Overall Status

Core Components

[ATTACH]

Boot Standard Kernel:

{OK}

LAN network card:

{OK}

Detect hard drives (NVMe):

{OK}

Detect hard drives (microSD):

{OK}

USB ports

{OK}

Analog audio output

{OK}

HDMI

{X}

Extra Features

CPU Frequency Scaling

{OK}

Hibernation

[?]

Sleep / Suspend

[?]

Power Off / Reboot

{OK}

Xorg

[?]

Legend :
{OK} = OK ; {X} = Unsupported(No Driver) ; /!\ = Error (Couldn't get it working); [?] Unknown, Not Test ; [-] Not-applicable
{i} = Configuration Required; X-( = Only works with a non-free driver and or firmware

Current support state could be followed at RVSpace JH7110 Upstream Status page.

Installation

Be sure to set the DIP switches correctly for your boot medium. Boot methods SD and eMMC directly from StarFive JH7110 CPU loader are deprecated and should not be used as they have been removed from vendor documentation and are incompatible to GUID Partition Table disk representation. Remaining valid boot methods are UART for recovery action and SPI NOR flash for U-Boot bootloader (which can then itself correctly boot from SD and eMMC). See VisionFive 2 Boot Mode Settings for more details.

Update firmware (U-Boot)

It is required to update SPI NOR flash to contain a version of U-Boot upstream release v2025.01 or newer: https://packages.debian.org/trixie/riscv64/u-boot-starfive/download

Refer to the official U-Boot StarFive boards documentation for detailed instructions specific to your particular board variant, on building and uploading U-Boot SPL plus U-Boot Main to SPI Flash memory. This guide follows the official U-Boot usage advice however with the following packaged builds of U-Boot in the Debian package archives:

wget http://deb.debian.org/debian/pool/main/u/u-boot/u-boot-starfive_2025.01-3_riscv64.deb

dpkg -x u-boot-starfive_2025.01-3_riscv64.deb u-boot-starfive_2025.01-3_riscv64

cd u-boot-starfive_2025.01-3_riscv64/usr/lib/u-boot/starfive_visionfive2

(Optional advice for advanced users) instructions for using another small board computer host as a serial interface

If you want to use serial console from a Raspberry Pi GPIO, after connecting the right pins of both devices, stop the getty service providing a login via serial and use device /dev/ttyS1 wherever /dev/ttyUSB0 is used in this guide:

# Stop service providing login via serial console (would conflict with us using that console)
`sudo systemctl stop getty@tty1.service`
# Use device /dev/ttyS1 instead of USB device
`sudo tio /dev/ttyS1 -o 1`

Debian 13 Trixie installation

Adjust the boot mode DIP switch to select the 'QSPI NOR Flash' boot mode for normal operation.

Booting debian-installer from serial port

wget https://deb.debian.org/debian/dists/trixie/main/installer-riscv64/current/images/netboot/mini.efi

tio /dev/ttyUSB0 -o 1

Use a suitable serial terminal i.e. tio described herein:

[21:18:47.463] tio 3.9
[21:18:47.463] Press ctrl-t q to quit
[21:18:47.480] Connected to /dev/ttyUSB0

power-on the board ready to enter commands over UART serial

U-Boot SPL 2025.01-3 (Apr 08 2025 - 23:07:41 +0000)
DDR version: dc2e84f0.
Trying to boot from SPI


U-Boot 2025.01-3 (Apr 08 2025 - 23:07:41 +0000)

CPU:   sifive,u74-mc
Model: Pine64 Star64
DRAM:  4 GiB
Core:  136 devices, 26 uclasses, devicetree: board
WDT:   Not starting watchdog@13070000
MMC:   mmc@16010000: 0, mmc@16020000: 1
Loading Environment from SPIFlash... SF: Detected gd25lq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environment

StarFive EEPROM format v2

--------EEPROM INFO--------
Vendor : PINE64
Product full SN: STAR64V1-2310-D004E000-0000xxxx
data version: 0x2
PCB revision: 0xc1
BOM revision: A
Ethernet MAC0 address: 6c:cf:39:00:xx:xx
Ethernet MAC1 address: 6c:cf:39:00:xx:xx
--------EEPROM INFO--------

starfive_7110_pcie pcie@2b000000: Starfive PCIe bus probed.
starfive_7110_pcie pcie@2c000000: Starfive PCIe bus probed.
In:    serial@10000000
Out:   serial@10000000
Err:   serial@10000000
Net:   eth0: ethernet@16030000, eth1: ethernet@16040000
starting USB...
No USB controllers found
Working FDT set to ff72da10
Hit any key to stop autoboot:  2 1 0

press enter i.e. or any other key to interrupt autoboot here

StarFive # 

(optional) Set devicetree search path in U-Boot if needed i.e. Milk-V Mars CM and Milk-V Mars CM Lite on U-Boot v2025.01:

env set fdtfile starfive/jh7110-milkv-mars.dtb ; env save

If you want to avoid the long wait (~2h) of transferring the 70 MiB+ mini.efi over a 115 kbps serial connection, you can instead transfer it via a TFTP server, from MMC storage, or from USB on board variants that support USB in U-Boot. See the U-Boot documentation for more details on alternatives to serial data transfer.

loady $loadaddr && bootefi $loadaddr

StarFive # loady $loadaddr && bootefi $loadaddr
## Ready for binary (ymodem) download to 0x82000000 at 115200 bps...
CCC

^t-y

[21:24:32.232] Send file with YMODEM
[21:24:32.232] Enter file name: 

mini.efi

[21:24:51.255] Sending file 'mini.efi'  
[21:24:51.255] Press any key to abort transfer
...…|
[23:17:31.511] Done
## Total Size      = 0x047cba00 = 75282944 Bytes
## Start Addr      = 0x82000000
Card did not respond to voltage select! : -110
Card did not respond to voltage select! : -110
Cannot persist EFI variables without system partition
Booting /MemoryMapped(0x0,0x82000000,0x867cba00)
EFI stub: Booting Linux Kernel...
EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
EFI stub: Using DTB from configuration table
EFI stub: Exiting boot services...
[    0.000000] Linux version 6.12.33+deb13-riscv64 (debian-kernel@lists.debian.org) (riscv64-linux-gnu-gcc-14 (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44) #1 SMP Debian 6.12.33-1 (2025-06-19)
[    0.000000] Machine model: Pine64 Star64

Common part

From then on are the familiar steps in sequence for a debian-installer workflow.

Installation notes:

Workaround Bug #1120745 for missing USB driver module in Debian 13 Trixie initramfs

The problem exists with Debian Installer able to install to USB media but the installed system is not bootable due to missing USB driver in initramfs, affecting all JH-7110 SoC using boards that make use of the integrated Cadence USB functionality on the JH-7110 SoC. As a workaround during the last step of installation, at the Finish the installation: Installation complete prompt:

Advance screen text window to the (n)ext screen window for access to a command line prompt

Control-a,n

Pin Debian Testing to reduced priority

`cat > /target/etc/apt/preferences.d/debian-testing-pin200.pref << EOF`
Package: *
Pin: release a=testing
Pin-Priority: 200
EOF

Add Debian Testing to apt sources

`cat > /target/etc/apt/sources.list.d/debian-testing.sources << EOF`
Types: deb deb-src
URIs: http://deb.debian.org/debian
Suites: testing
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF

Install initramfs-tools with the fix from Debian testing

`chroot /target apt update`

`chroot /target apt install -t testing initramfs-tools`

Return screen text window to the (p)revious screen window and continue with the installation

Control-a,p

U-Boot Linux Access

To access and edit U-Boot environment from a running OS, one can use u-boot-tools which are available in Debian repositories.

u-boot-tools should be configured to read the environment:

# Edit /etc/fw_env.config and set to content as below:

# NOR example
# MTD device name       Device offset   Env. size       Flash sector size       Number of sectors
/dev/mtd1               0x0000          0x10000         0x1000

When configuration above is complete, one can try to read environment using fw_printenv and set using fw_setenv commands. For these commands to be successful it will first be necessary that there is a valid environment to modify having run env save from U-Boot command line environment.

LUA Support

At the moment (Feb 10th, 2024), LUA JIT compilation support is not implemented for RISC-V, see Add support for RISC-V issue for the current state. A work in progress JIT support is available at LuaJIT.


CategoryHardware