From 430c94788670c08f6b28c8253c62214da5d942a1 Mon Sep 17 00:00:00 2001 From: Emil Renner Berthing Date: Wed, 5 May 2021 20:03:04 +0200 Subject: [NOT-FOR-UPSTREAM] Add build instructions For convenience this also adds a small visionfive_defconfig and the firmware needed for the brcmfmac driver along with the signed regulatory database. The firmware is from the linux-firmware repo and the regulatory database from the wireless-regdb Fedora package. Signed-off-by: Geert Uytterhoeven Signed-off-by: Drew Fustini Signed-off-by: Emil Renner Berthing --- README.md | 154 +++++++++++++++++ arch/riscv/configs/visionfive_defconfig | 246 ++++++++++++++++++++++++++++ firmware/brcm/BCM43430A1.hcd | Bin 0 -> 36657 bytes firmware/brcm/brcmfmac43430-sdio.AP6212.txt | 44 +++++ firmware/brcm/brcmfmac43430-sdio.bin | Bin 0 -> 421158 bytes firmware/brcm/brcmfmac43430-sdio.clm_blob | Bin 0 -> 4733 bytes firmware/brcm/brcmfmac43430-sdio.txt | 1 + firmware/regulatory.db | Bin 0 -> 4896 bytes firmware/regulatory.db.p7s | Bin 0 -> 1085 bytes 9 files changed, 445 insertions(+) create mode 100644 README.md create mode 100644 arch/riscv/configs/visionfive_defconfig create mode 100644 firmware/brcm/BCM43430A1.hcd create mode 100644 firmware/brcm/brcmfmac43430-sdio.AP6212.txt create mode 100644 firmware/brcm/brcmfmac43430-sdio.bin create mode 100644 firmware/brcm/brcmfmac43430-sdio.clm_blob create mode 120000 firmware/brcm/brcmfmac43430-sdio.txt create mode 100644 firmware/regulatory.db create mode 100644 firmware/regulatory.db.p7s 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..61f01aa61d2f --- /dev/null +++ b/arch/riscv/configs/visionfive_defconfig @@ -0,0 +1,246 @@ +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_DEV_WRITE_MOUNTED 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_HCIUART=y +CONFIG_BT_HCIUART_BCM=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 brcm/BCM43430A1.hcd" +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_SERIAL_DEV_BUS=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_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_RESET_GPIO=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/BCM43430A1.hcd b/firmware/brcm/BCM43430A1.hcd new file mode 100644 index 000000000000..77ddeb8d2ac8 Binary files /dev/null and b/firmware/brcm/BCM43430A1.hcd differ 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..3742a1947b71 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..0dbf5dcd19b9 Binary files /dev/null and b/firmware/regulatory.db.p7s differ -- cgit v1.2.3