Device Drivers
Overview
RVComp provides two out-of-tree Linux kernel drivers as Buildroot packages. Both drivers are licensed under the GNU General Public License version 2 (GPL-2.0).
Package |
Module |
Role |
|---|---|---|
|
|
Linux network interface for the RVComp Ethernet controller |
|
|
Linux block device backed by sdcram |
rvcomp-ethernet
Source:
RVComp/buildroot/package/rvcomp-ethernet/src/rvcomp_ethernet.cModule name:
rvcomp_ethernetDevice tree compatible:
isct,rvcomp-ethernetLicense: GPL-2.0
This driver exposes the RVComp Ethernet controller as a standard Linux network interface (eth0). It maps the CSR region and the RX/TX MMIO buffer regions at probe time.
Receive Flow
PHY → [hardware: MAC filter, FCS check, write to RX buffer, advance ADDR_END]
→ driver detects ADDR_END != ADDR_START
→ allocates skb
→ reads frame bytes from RX buffer into skb
→ passes skb to Linux network stack
→ advances ADDR_START
Transmit Flow
Linux network stack calls ndo_start_xmit
→ driver writes 32-bit frame-length header + payload into TX buffer
→ driver advances TX_BUFFER_END
→ [hardware: prepend preamble/SFD, append FCS, transmit via PHY]
Hardware handles destination-MAC filtering and FCS processing; the driver does not need to calculate or strip the FCS.
rvcomp-mmc
Source:
RVComp/buildroot/package/rvcomp-mmc/src/rvcomp_mmc.cModule name:
rvcomp_mmcDevice tree compatible:
isct,rvcomp-mmcLicense: GPL-2.0
This driver exposes sdcram-backed storage as the block device /dev/mmcblk0. It does not use the Linux MMC host framework; it is a block driver that services requests through the sdcram MMIO window.
The driver reads rootfs-offset from the device tree so that the block device address space starts at the root filesystem region on the card, not at offset 0.
Read Flow
Linux block layer issues read request (512-byte sectors)
→ driver writes target page address (upper 29 bits) to CSR_ADDR29
→ driver reads 32-bit words through the 4 KiB MMIO window
→ copies data into the request buffer
→ completes the block request
Write Flow
Linux block layer issues write request (512-byte sectors)
→ driver writes target page address (upper 29 bits) to CSR_ADDR29
→ driver writes through the 4 KiB MMIO window
→ completes the block request (writes buffered in write-back cache)
Flush is not issued on every write. It is triggered only when the block layer issues an explicit REQ_OP_FLUSH (e.g. on fsync or unmount):
Linux block layer issues flush request (REQ_OP_FLUSH)
→ driver writes 1 to CSR_FLUSH
→ driver polls CSR_FLUSH_DONE until flush completes
→ driver clears FLUSH_DONE latch (CSR_FLUSH_DONE_CLR)
→ completes the flush request
In-Kernel Support
PLIC, CLINT, and the serial console are handled by standard in-kernel drivers configured through the RVComp kernel defconfig. No out-of-tree modules are required for these peripherals.