starfive/visionfive/v1: init
This commit is contained in:
parent
c156c31e1d
commit
68e08aa56b
25
starfive/visionfive/v1/README.md
Normal file
25
starfive/visionfive/v1/README.md
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
### Build the SD image
|
||||||
|
- ``nix-build "<nixpkgs/nixos>" -A config.system.build.sdImage -I nixos-config=iso.nix``
|
||||||
|
|
||||||
|
- ``iso.nix``
|
||||||
|
```nix
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ <nixos-hardware/starfive/visionfive/v1/sd-image-installer.nix> ];
|
||||||
|
# or imports = [ "${nixos-hardware-directory}/starfive/visionfive/v1/sd-image-installer.nix" ];
|
||||||
|
|
||||||
|
nixpkgs.crossSystem = {
|
||||||
|
config = "riscv64-unknown-linux-gnu";
|
||||||
|
system = "riscv64-linux";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Relevant documentation
|
||||||
|
- Flashing
|
||||||
|
- - https://doc-en.rvspace.org/VisionFive/Quick_Start_Guide/VisionFive_QSG/hardware_connection.html
|
||||||
|
- - https://doc-en.rvspace.org/VisionFive/Quick_Start_Guide/VisionFive_QSG/using_xmodem1.html
|
||||||
|
- Recovery
|
||||||
|
- - https://doc-en.rvspace.org/VisionFive/Quick_Start_Guide/VisionFive_QSG/hardware_setup.html
|
||||||
|
- - https://doc-en.rvspace.org/VisionFive/Quick_Start_Guide/VisionFive_QSG/for_maclinux4.html
|
31
starfive/visionfive/v1/default.nix
Normal file
31
starfive/visionfive/v1/default.nix
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{ config, lib, pkgs, ...}:
|
||||||
|
|
||||||
|
{
|
||||||
|
hardware.deviceTree.name = lib.mkDefault "starfive/jh7100-starfive-visionfive-v1.dtb";
|
||||||
|
systemd.services."serial-getty@hvc0".enable = lib.mkDefault false;
|
||||||
|
environment.systemPackages = with pkgs; lib.mkDefault [ mtdutils ];
|
||||||
|
|
||||||
|
boot = {
|
||||||
|
# Force no ZFS (from nixos/modules/profiles/base.nix) until updated to kernel 6.0
|
||||||
|
supportedFilesystems = lib.mkForce [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ];
|
||||||
|
consoleLogLevel = lib.mkDefault 7;
|
||||||
|
kernelPackages = lib.mkDefault (pkgs.callPackage ./linux.nix { inherit (config.boot) kernelPatches; });
|
||||||
|
|
||||||
|
kernelParams = lib.mkDefault [
|
||||||
|
"console=tty0"
|
||||||
|
"console=ttyS0,115200n8"
|
||||||
|
"earlycon=sbi"
|
||||||
|
];
|
||||||
|
|
||||||
|
initrd.kernelModules = lib.mkDefault [
|
||||||
|
"dw-axi-dmac-platform"
|
||||||
|
"dw_mmc-pltfm"
|
||||||
|
"spi-dw-mmio"
|
||||||
|
];
|
||||||
|
|
||||||
|
loader = {
|
||||||
|
grub.enable = lib.mkDefault false;
|
||||||
|
generic-extlinux-compatible.enable = lib.mkDefault true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
35
starfive/visionfive/v1/firmware.nix
Normal file
35
starfive/visionfive/v1/firmware.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{ runCommand
|
||||||
|
, buildPackages
|
||||||
|
, pkgs
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
uboot = pkgs.callPackage ./uboot.nix { };
|
||||||
|
|
||||||
|
opensbi = pkgs.opensbi.override {
|
||||||
|
withPayload = "${uboot}/u-boot.bin";
|
||||||
|
withFDT = "${uboot}/u-boot.dtb";
|
||||||
|
};
|
||||||
|
in runCommand "firmware-starfive-visionfive-v1" {
|
||||||
|
nativeBuildInputs = with buildPackages; [ xxd ];
|
||||||
|
} ''
|
||||||
|
function handle_file {
|
||||||
|
inFile=$1
|
||||||
|
echo inFile: $inFile
|
||||||
|
outFile=$2
|
||||||
|
inSize=`stat -c "%s" $inFile`
|
||||||
|
inSize32HexBe=`printf "%08x\n" $inSize`
|
||||||
|
inSize32HexLe=''${inSize32HexBe:6:2}''${inSize32HexBe:4:2}''${inSize32HexBe:2:2}''${inSize32HexBe:0:2}
|
||||||
|
echo "inSize: $inSize (0x$inSize32HexBe, LE:0x$inSize32HexLe)"
|
||||||
|
echo $inSize32HexLe | xxd -r -ps > $outFile
|
||||||
|
cat $inFile >> $outFile
|
||||||
|
echo outFile: $outFile
|
||||||
|
outSize=`stat -c "%s" $outFile`
|
||||||
|
outSize32HexBe=`printf "%08x\n" $outSize`
|
||||||
|
echo "outSize: $outSize (0x$outSize32HexBe)"
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir -p "$out/nix-support"
|
||||||
|
echo "file bin \"$out/opensbi_u-boot_starfive_visionfive_v1.bin\"" >> "$out/nix-support/hydra-build-products"
|
||||||
|
handle_file ${opensbi}/share/opensbi/lp64/generic/firmware/fw_payload.bin $out/opensbi_u-boot_starfive_visionfive_v1.bin
|
||||||
|
''
|
36
starfive/visionfive/v1/linux.nix
Normal file
36
starfive/visionfive/v1/linux.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{ lib
|
||||||
|
, callPackage
|
||||||
|
, linuxPackagesFor
|
||||||
|
, kernelPatches
|
||||||
|
, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
modDirVersion = "6.0.0";
|
||||||
|
|
||||||
|
linuxPkg = { fetchFromGitHub, buildLinux, ... } @ args:
|
||||||
|
buildLinux (args // {
|
||||||
|
inherit modDirVersion kernelPatches;
|
||||||
|
version = "${modDirVersion}-starfive-visionfive-v1";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "starfive-tech";
|
||||||
|
repo = "linux";
|
||||||
|
rev = "cfcb617265422c0af0ae5bc9688dceba2d10b27a";
|
||||||
|
sha256 = "sha256-EAMCOtJZ51xSLySQPaZyomfa/1Xs9kNedz04tIbELqg=";
|
||||||
|
};
|
||||||
|
|
||||||
|
defconfig = "starfive_jh7100_fedora_defconfig";
|
||||||
|
|
||||||
|
structuredExtraConfig = with lib.kernel; {
|
||||||
|
KEXEC = yes;
|
||||||
|
SERIAL_8250_DW = yes;
|
||||||
|
PINCTRL_STARFIVE = yes;
|
||||||
|
DW_AXI_DMAC_STARFIVE = yes;
|
||||||
|
PTP_1588_CLOCK = yes;
|
||||||
|
STMMAC_ETH = yes;
|
||||||
|
STMMAC_PCI = yes;
|
||||||
|
};
|
||||||
|
|
||||||
|
extraMeta.branch = "visionfive";
|
||||||
|
} // (args.argsOverride or { }));
|
||||||
|
in lib.recurseIntoAttrs (linuxPackagesFor (callPackage linuxPkg { }))
|
12
starfive/visionfive/v1/sd-image-installer.nix
Normal file
12
starfive/visionfive/v1/sd-image-installer.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# To build, use:
|
||||||
|
# nix-build "<nixpkgs/nixos>" -I nixos-config=starfive/visionfive/v1/sd-image-installer.nix -A config.system.build.sdImage
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
<nixpkgs/nixos/modules/profiles/installation-device.nix>
|
||||||
|
./sd-image.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# the installation media is also the installation target,
|
||||||
|
# so we don't want to provide the installation configuration.nix.
|
||||||
|
installer.cloneConfig = false;
|
||||||
|
}
|
29
starfive/visionfive/v1/sd-image.nix
Normal file
29
starfive/visionfive/v1/sd-image.nix
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# To build, use:
|
||||||
|
# nix-build "<nixpkgs}/nixos>" -I nixos-config=starfive/visionfive/v1/sd-image.nix -A config.system.build.sdImage
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
firmware = pkgs.callPackage ./firmware.nix { };
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
<nixpkgs/nixos/modules/profiles/base.nix>
|
||||||
|
<nixpkgs/nixos/modules/installer/sd-card/sd-image.nix>
|
||||||
|
./default.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
sdImage = {
|
||||||
|
imageName = "${config.sdImage.imageBaseName}-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}-starfive-visionfive-v1.img";
|
||||||
|
|
||||||
|
# We have to use custom boot firmware since we do not support
|
||||||
|
# StarFive's Fedora MMC partition layout. Thus, we include this in
|
||||||
|
# the image's firmware partition so the user can flash the custom firmware.
|
||||||
|
populateFirmwareCommands = ''
|
||||||
|
cp ${firmware}/opensbi_u-boot_starfive_visionfive_v1.bin firmware/opensbi_u-boot_starfive_visionfive_v1.bin
|
||||||
|
'';
|
||||||
|
|
||||||
|
populateRootCommands = ''
|
||||||
|
mkdir -p ./files/boot
|
||||||
|
${config.boot.loader.generic-extlinux-compatible.populateCmd} -c ${config.system.build.toplevel} -d ./files/boot
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
17
starfive/visionfive/v1/uboot.nix
Normal file
17
starfive/visionfive/v1/uboot.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{ fetchFromGitHub
|
||||||
|
, buildUBoot
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildUBoot {
|
||||||
|
version = "2022.04";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "Madouura";
|
||||||
|
repo = "u-boot";
|
||||||
|
rev = "fe61fbcc8c5d3f7a589d2a6ea61855ab77de621f";
|
||||||
|
sha256 = "sha256-jMZYxAHB37pNzzLdb8wupZA1CeD0gB84x18B7XVzq/M=";
|
||||||
|
};
|
||||||
|
|
||||||
|
defconfig = "starfive_jh7100_visionfive_smode_defconfig";
|
||||||
|
filesToInstall = [ "u-boot.bin" "u-boot.dtb" ];
|
||||||
|
}
|
Loading…
Reference in a new issue