RVKVM Project with VisionFive and Geekworm A8 - Seeking Insights

Hey everyone,

I recently embarked on a side project to learn more about computer systems by attempting to build an RVKVM (RISC-V KVM) using the StarFive VisionFive development board and the Geekworm Pikvm-A8 HAT. I reached out to the Pi-KVM team to inquire about potential compatibility, but they mentioned that the VisionFive board might lack USB OTG drivers, which could pose an issue.

Before diving headfirst into this project, I’d like to know if any of you can confirm the absence of USB OTG drivers on the VisionFive board. Additionally, I’m eager to hear any advice, tips, or suggestions you might have for someone taking on a project like this.

For more details about the project and the hardware components I’ll be working with, you can check out the first part of my article series here: Building a RISC-V KVM (rvKVM) from Scratch - Part 1 | kusamaxi

Looking forward to your insights and discussion!


From everything I’ve read the VF2 board does not provide USB OTG.

And the JH7110 SoC does not support On-The-Go.

It can not be used, since that functionality is just not available in the hardware.
See post from @SunWukong below, looks like OTG may be available at some future date.

1 Like

Is something changing here at the moment?
[PATCH v3 5/5] dts: usb: add StarFive JH7110 USB dts configuration.

+		usb0: usb@10100000 {
+			compatible = "starfive,jh7110-usb";
+			clocks = <&stgcrg JH7110_STGCLK_USB0_LPM>,
+				 <&stgcrg JH7110_STGCLK_USB0_STB>,
+				 <&stgcrg JH7110_STGCLK_USB0_APB>,
+				 <&stgcrg JH7110_STGCLK_USB0_AXI>,
+				 <&stgcrg JH7110_STGCLK_USB0_UTMI_APB>;
+			clock-names = "lpm", "stb", "apb", "axi", "utmi_apb";
+			resets = <&stgcrg JH7110_STGRST_USB0_PWRUP>,
+				 <&stgcrg JH7110_STGRST_USB0_APB>,
+				 <&stgcrg JH7110_STGRST_USB0_AXI>,
+				 <&stgcrg JH7110_STGRST_USB0_UTMI_APB>;
+			starfive,stg-syscon = <&stg_syscon 0x4 0xc4 0x148 0x1f4>;
+			starfive,sys-syscon = <&sys_syscon 0x18>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0x0 0x0 0x10100000 0x100000>;
+			usbdrd_cdns3: usb@0 {
+				compatible = "cdns,usb3";
+				reg = <0x0 0x10000>,
+				      <0x10000 0x10000>,
+				      <0x20000 0x10000>;
+				reg-names = "otg", "xhci", "dev";
+				interrupts = <100>, <108>, <110>;
+				interrupt-names = "host", "peripheral", "otg";
+				phys = <&usbphy0>;
+				phy-names = "cdns3,usb2-phy";
+				maximum-speed = "super-speed";
+			};
+		};

Well spotted, that is good news and very interesting. So is the “Cadence USB” accessible as the “1 × USB device port (by reusing the USB-C port)” ?

1 Like