author: Emil Renner Berthing <kernel@esmil.dk> 2021-05-05 20:03:04 +0200
committer: Emil Renner Berthing <emil.renner.berthing@canonical.com> 2023-11-27 15:12:08 +0100
commit: 5edbf54ad93e0d07f358bf41cc85dd9b1679c5af
parent: 4732158aa33df041ab814a0d60606863adeb025e
Commit Summary:
Diffstat:
4 files changed, 414 insertions, 35 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 000000000000..bee36e419625
--- /dev/null
+++ b/README.md
@@ -0,0 +1,154 @@
+# Linux kernel for StarFive's JH7100 RISC-V SoC
+
+## What is this?
+
+The [JH7100][soc] is a Linux-capable dual-core 64bit RISC-V SoC and this tree
+is meant to collect all the in-development patches for running Linux on boards
+using this. So far there are two such boards and both are supported by this tree:
+
+1) [StarFive VisionFive][visionfive]
+2) [BeagleV Starlight Beta][starlight]
+
+The VisionFive boards aren't quite shipping yet, but you can already
+[register interest][interest] and ask questions on the [forum][].
+
+About 300 BeagleV Starlight Beta boards were sent out to developers in
+April 2021 in preparation for an eventual BeagleV branded board using the
+updated JH7110 chip. The BeagleBoard organization has since [cancelled that
+project][beaglev] though.
+
+
+[visionfive]: https://github.com/starfive-tech/VisionFive
+[interest]: http://starfive.mikecrm.com/doQXj99
+[forum]: https://forum.rvspace.org/c/visionfive/6
+[starlight]: https://github.com/beagleboard/beaglev-starlight
+[soc]: https://github.com/starfive-tech/JH7100_Docs
+[beaglev]: https://beaglev.org/blog/2021-07-30-the-future-of-beaglev-community
+
+## Cross-compiling
+
+Cross-compiling the Linux kernel is surprisingly easy since it doesn't depend
+on any (target) libraries and most distributions already have packages with a
+working cross-compiler. We'll also need a few other tools to build everything:
+```shell
+# Debian/Ubuntu
+sudo apt-get install libncurses-dev libssl-dev bc flex bison make gcc gcc-riscv64-linux-gnu
+# Fedora
+sudo dnf install ncurses-devel openssl openssl-devel bc flex bison make gcc gcc-riscv64-linux-gnu
+# Archlinux
+sudo pacman -S --needed ncurses openssl bc flex bison make gcc riscv64-linux-gnu-gcc
+```
+
+The build system needs to know that we want to cross-compile a kernel for
+RISC-V by setting `ARCH=riscv`. It also needs to know the prefix of our
+cross-compiler using `CROSS_COMPILE=riscv64-linux-gnu-`. Also let's assume
+we're building on an 8-core machine so compilation can be greatly sped up by
+telling make to use all 8 cores with `-j8`.
+
+First we need to configure the kernel though. Linux has a *very* extensive
+configuration system, but you can get a good baseline configuration for the
+boards using:
+```shell
+make -j8 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- visionfive_defconfig
+```
+
+There is nothing magic about this configuration other than it has all the
+drivers enabled that are working for the hardware on the boards. In fact it has
+very little extra features enabled which is great for compile times, but you
+are very much encouraged to add additional drivers and configure your kernel
+further using
+```shell
+make -j8 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- nconfig
+```
+
+Now compile the whole thing with
+```
+make -j8 ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu-
+```
+
+
+## Installing
+
+Once the build has finished the resulting kernel can be found at
+```shell
+arch/riscv/boot/Image
+```
+You'll also need the matching device tree at
+```shell
+arch/riscv/boot/dts/starfive/jh7100-starfive-visionfive-v1.dtb
+```
+(If you have a Starlight board you should instead be using `jh7100-beaglev-starlight.dtb`.)
+
+These two files should be copied to the boot partition on the SD card. In the
+default [Fedora image][fedora] this is `/dev/mmcblk0p3` and is mounted at `/boot`.
+
+Now add the following entry to the `grub.cfg` file:
+```
+menuentry 'My New Kernel' {
+ linux /Image earlycon console=ttyS0,115200n8 root=/dev/mmcblk0p4 rootwait
+ devicetree /jh7100-starfive-visionfive-v1.dtb
+}
+```
+
+This assumes your root file system is at `/dev/mmcblk0p4` which it is in the
+default [Fedora image][fedora].
+
+The `visionfive_defconfig` doesn't enable modules, but if you enabled them in
+your build you'll also need to install them in `/lib/modules/` on the root file
+system. How to do that best is out of scope for this README though.
+
+[fedora]: https://github.com/starfive-tech/Fedora_on_StarFive/
+
+## Status
+
+#### SoC
+
+- [x] Clock tree
+- [x] Resets
+- [x] Pinctrl/Pinmux
+- [x] GPIO
+- [x] Serial port
+- [x] I2C
+- [x] SPI
+- [x] MMC / SDIO / SD card
+- [x] Random number generator
+- [x] Temperature sensor
+- [x] Ethernet
+- [x] USB
+- [x] DRM driver
+- [x] NVDLA
+- [x] Watchdog
+- [x] PWM DAC for sound through the minijack, only 16kHz samplerate for now
+- [ ] I2S [WIP]
+- [ ] TDM [WIP]
+- [ ] MIPI-DSI [WIP]
+- [ ] MIPI-CSI [WIP]
+- [ ] ISP [WIP]
+- [ ] Video Decode [WIP]
+- [ ] Video Encode [WIP]
+- [ ] QSPI
+- [ ] Security Engine
+- [ ] NNE50
+- [ ] Vision DSP
+
+#### Board
+
+- [x] LED
+- [x] PMIC / Reboot
+- [x] Ethernet PHY
+- [x] HDMI
+- [x] AP6236 Wifi
+- [x] AP6236 Bluetooth, with a [userspace tool][patchram]
+- [x] I2C EEPROM (VisionFive only)
+- [ ] GD25LQ128DWIG (VisionFive) / GD25LQ256D (Starlight) flash
+
+[patchram]: https://github.com/AsteroidOS/brcm-patchram-plus
+
+## Contributing
+
+If you're working on cleaning up or upstreaming some of this or adding support
+for more of the SoC I'd very much like to incorporate it into this tree. Either
+send a pull request, mail or contact Esmil on IRC/Slack.
+
+Also think of this tree mostly as a collection of patches that will hopefully
+mature enough to be submitted upstream eventually. So expect regular rebases.
diff --git a/arch/riscv/configs/visionfive_defconfig b/arch/riscv/configs/visionfive_defconfig
new file mode 100644
index 000000000000..beb4d3d25336
--- /dev/null
+++ b/arch/riscv/configs/visionfive_defconfig
@@ -0,0 +1,245 @@
+CONFIG_LOCALVERSION="-visionfive"
+CONFIG_KERNEL_ZSTD=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_GENERIC_IRQ_DEBUGFS=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_PSI=y
+# CONFIG_CPU_ISOLATION is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_CGROUPS=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+CONFIG_CGROUP_PIDS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_NAMESPACES=y
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_RD_LZ4 is not set
+CONFIG_EXPERT=y
+# CONFIG_SYSFS_SYSCALL is not set
+CONFIG_SOC_STARFIVE=y
+CONFIG_ERRATA_STARFIVE_JH7100=y
+CONFIG_NONPORTABLE=y
+CONFIG_SMP=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=4
+# CONFIG_RISCV_ISA_SVNAPOT is not set
+# CONFIG_RISCV_ISA_SVPBMT is not set
+# CONFIG_RISCV_ISA_V is not set
+# CONFIG_RISCV_ISA_ZBB is not set
+# CONFIG_RISCV_ISA_ZICBOM is not set
+# CONFIG_RISCV_ISA_ZICBOZ is not set
+# CONFIG_COMPAT is not set
+# CONFIG_RISCV_ISA_FALLBACK is not set
+CONFIG_JUMP_LABEL=y
+# CONFIG_STACKPROTECTOR is not set
+# CONFIG_GCC_PLUGINS is not set
+CONFIG_BLK_WBT=y
+# CONFIG_BLK_DEBUG_FS is not set
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_MQ_IOSCHED_DEADLINE is not set
+# CONFIG_MQ_IOSCHED_KYBER is not set
+CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_KSM=y
+CONFIG_CMA=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+# CONFIG_SECRETMEM is not set
+CONFIG_LRU_GEN=y
+CONFIG_LRU_GEN_ENABLED=y
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_INET_DIAG is not set
+# CONFIG_IPV6_SIT is not set
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_FQ_CODEL=y
+CONFIG_BT=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_HIDP=y
+CONFIG_BT_HS=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+CONFIG_CFG80211=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+CONFIG_RFKILL=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_STANDALONE is not set
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+CONFIG_EXTRA_FIRMWARE="regulatory.db regulatory.db.p7s brcm/brcmfmac43430-sdio.bin brcm/brcmfmac43430-sdio.clm_blob brcm/brcmfmac43430-sdio.txt"
+CONFIG_EXTRA_FIRMWARE_DIR="firmware"
+CONFIG_EFI_ZBOOT=y
+CONFIG_MTD=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_PARTITIONED_MASTER=y
+CONFIG_MTD_SPI_NOR=y
+# CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set
+CONFIG_ZRAM=y
+CONFIG_ZRAM_MEMORY_TRACKING=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=1
+CONFIG_BLK_DEV_NBD=y
+CONFIG_EEPROM_AT24=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_SCAN_ASYNC=y
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_NETDEVICES=y
+CONFIG_WIREGUARD=y
+CONFIG_TUN=y
+CONFIG_STMMAC_ETH=y
+# CONFIG_DWMAC_GENERIC is not set
+CONFIG_MICREL_PHY=y
+CONFIG_MOTORCOMM_PHY=y
+# CONFIG_USB_NET_DRIVERS is not set
+CONFIG_BRCMFMAC=y
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_SERIO is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_LDISC_AUTOLOAD is not set
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
+# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_DW=y
+CONFIG_SERIAL_OF_PLATFORM=y
+# CONFIG_DEVMEM is not set
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
+CONFIG_SPI=y
+CONFIG_SPI_CADENCE_QUADSPI=y
+CONFIG_SPI_DESIGNWARE=y
+CONFIG_SPI_DW_DMA=y
+CONFIG_SPI_DW_MMIO=y
+CONFIG_SPI_SPIDEV=y
+# CONFIG_PTP_1588_CLOCK is not set
+# CONFIG_PINCTRL_STARFIVE_JH7110_SYS is not set
+# CONFIG_PINCTRL_STARFIVE_JH7110_AON is not set
+CONFIG_GPIOLIB_FASTPATH_LIMIT=256
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_TPS65086=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
+CONFIG_POWER_RESET_TPS65086=y
+CONFIG_SENSORS_SFCTEMP=y
+CONFIG_THERMAL=y
+CONFIG_THERMAL_NETLINK=y
+CONFIG_THERMAL_STATISTICS=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_CPU_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_MFD_TPS65086=y
+CONFIG_DRM=y
+CONFIG_DRM_I2C_NXP_TDA998X=y
+CONFIG_DRM_STARFIVE=y
+CONFIG_FB=y
+# CONFIG_FB_DEVICE is not set
+CONFIG_SOUND=y
+CONFIG_SND=y
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_CTL_FAST_LOOKUP is not set
+# CONFIG_SND_DRIVERS is not set
+# CONFIG_SND_SPI is not set
+# CONFIG_SND_USB is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_STARFIVE_PWMDAC=y
+CONFIG_SND_SIMPLE_CARD=y
+# CONFIG_I2C_HID is not set
+CONFIG_USB=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_MON=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_DBGCAP=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_UAS=y
+CONFIG_USB_CDNS_SUPPORT=y
+CONFIG_USB_CDNS3=y
+CONFIG_USB_CDNS3_HOST=y
+CONFIG_USB_CDNS3_STARFIVE=y
+CONFIG_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+CONFIG_MMC_DW=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_DMADEVICES=y
+CONFIG_DW_AXI_DMAC=y
+CONFIG_DMABUF_HEAPS=y
+CONFIG_DMABUF_HEAPS_SYSTEM=y
+# CONFIG_VIRTIO_MENU is not set
+# CONFIG_VHOST_MENU is not set
+# CONFIG_CLK_STARFIVE_JH7110_PLL is not set
+# CONFIG_CLK_STARFIVE_JH7110_SYS is not set
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_PWM=y
+CONFIG_PWM_OCORES=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_BTRFS_FS=y
+CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_DNOTIFY is not set
+CONFIG_FANOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-15"
+CONFIG_FAT_DEFAULT_UTF8=y
+CONFIG_EXFAT_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_MISC_FILESYSTEMS is not set
+CONFIG_NFS_FS=y
+CONFIG_ROOT_NFS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_UTF8=y
+CONFIG_LSM=""
+CONFIG_CRYPTO_USER=y
+CONFIG_CRYPTO_ZSTD=y
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_RAID6_PQ_BENCHMARK is not set
+CONFIG_SWIOTLB_DYNAMIC=y
+CONFIG_DMA_CMA=y
+# CONFIG_DEBUG_MISC is not set
+CONFIG_STRIP_ASM_SYMS=y
+CONFIG_DEBUG_SECTION_MISMATCH=y
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+# CONFIG_FRAME_POINTER is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_SLUB_DEBUG is not set
+CONFIG_DEBUG_RODATA_TEST=y
+CONFIG_DEBUG_WX=y
+CONFIG_SOFTLOCKUP_DETECTOR=y
+CONFIG_WQ_WATCHDOG=y
+# CONFIG_SCHED_DEBUG is not set
+CONFIG_STACKTRACE=y
+CONFIG_RCU_CPU_STALL_TIMEOUT=60
+# CONFIG_RCU_TRACE is not set
+# CONFIG_FTRACE is not set
+# CONFIG_RUNTIME_TESTING_MENU is not set
diff --git a/firmware/brcm/brcmfmac43430-sdio.AP6212.txt b/firmware/brcm/brcmfmac43430-sdio.AP6212.txt
new file mode 100644
index 000000000000..901854e67bb5
--- /dev/null
+++ b/firmware/brcm/brcmfmac43430-sdio.AP6212.txt
@@ -0,0 +1,44 @@
+# SPDX-License-Identifier: GPL-2.0+
+# (C) Copyright 2018 Linaro Ltd
+# NVRAM config file for the Ampak AP6212 43430 WiFi/BT module
+aa2g=1
+ag0=255
+AvVmid_c0=0x0,0xc8
+boardflags=0x00404201
+# boardflags3 is not set
+boardnum=22
+boardrev=0x1101
+boardtype=0x0726
+# btc_params is not set
+cckbw202gpo=0x5555
+cckpwroffset0=5
+ccode=ALL
+# cldo_pwm is not set
+deadman_to=0xffffffff
+devid=0x43e2
+extpagain2g=0
+il0macaddr=00:90:4c:c5:12:38
+legofdmbw202gpo=0x77777777
+macaddr=00:90:4c:c5:12:38
+manfid=0x2d0
+maxp2ga0=90
+mcsbw202gpo=0xaaaaaaaa
+muxenab=0x10
+nocrc=1
+ofdmdigfilttype=7
+# ofdmdigfilttypebe is not set
+pa0itssit=0x20
+pa2ga0=-168,7161,-820
+# pacalidx2g is not set
+# papdendidx is not set
+# papdepsoffset is not set
+papdmode=2
+# papdvalidtest is not set
+prodid=0x0726
+# propbw202gpois not set
+# spurconfig is not set
+sromrev=11
+txpwrbckof=6
+vendid=0x14e4
+wl0id=0x431b
+xtalfreq=26000
diff --git a/firmware/brcm/brcmfmac43430-sdio.bin b/firmware/brcm/brcmfmac43430-sdio.bin
new file mode 100644
index 000000000000..bb9b19783fe2
Binary files /dev/null and b/firmware/brcm/brcmfmac43430-sdio.bin differ
diff --git a/firmware/brcm/brcmfmac43430-sdio.clm_blob b/firmware/brcm/brcmfmac43430-sdio.clm_blob
new file mode 100644
index 000000000000..69a3e57ae149
Binary files /dev/null and b/firmware/brcm/brcmfmac43430-sdio.clm_blob differ
diff --git a/firmware/brcm/brcmfmac43430-sdio.txt b/firmware/brcm/brcmfmac43430-sdio.txt
new file mode 120000
index 000000000000..e06912f7d727
--- /dev/null
+++ b/firmware/brcm/brcmfmac43430-sdio.txt
@@ -0,0 +1 @@
+brcmfmac43430-sdio.AP6212.txt
\ No newline at end of file
diff --git a/firmware/regulatory.db b/firmware/regulatory.db
new file mode 100644
index 000000000000..4105433c98fb
Binary files /dev/null and b/firmware/regulatory.db differ
diff --git a/firmware/regulatory.db.p7s b/firmware/regulatory.db.p7s
new file mode 100644
index 000000000000..7d35370d9e2f
Binary files /dev/null and b/firmware/regulatory.db.p7s differ