mirror of
				https://github.com/NixOS/nixos-hardware.git
				synced 2025-11-04 09:17:14 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, pkgs, lib, ... }:
 | 
						|
let
 | 
						|
  cfg = config.hardware.visionfive2;
 | 
						|
in
 | 
						|
{
 | 
						|
  options = {
 | 
						|
    hardware.visionfive2 = {
 | 
						|
      opensbi = {
 | 
						|
        src = lib.mkOption {
 | 
						|
          description = "VisionFive2 OpenSBI source";
 | 
						|
          type = lib.types.nullOr lib.types.package;
 | 
						|
          default = null;
 | 
						|
        };
 | 
						|
        patches = lib.mkOption {
 | 
						|
          description = "List of patches to apply to the VisionFive2 OpenSBI source";
 | 
						|
          type = lib.types.nullOr (lib.types.listOf lib.types.package);
 | 
						|
          default = null;
 | 
						|
        };
 | 
						|
      };
 | 
						|
      uboot = {
 | 
						|
        src = lib.mkOption {
 | 
						|
          description = "VisionFive2 U-boot source";
 | 
						|
          type = lib.types.nullOr lib.types.package;
 | 
						|
          default = null;
 | 
						|
        };
 | 
						|
        patches = lib.mkOption {
 | 
						|
          description = "List of patches to apply to the VisionFive2 U-boot source";
 | 
						|
          type = lib.types.nullOr (lib.types.listOf lib.types.package);
 | 
						|
          default = null;
 | 
						|
        };
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = {
 | 
						|
    system.build = {
 | 
						|
      opensbi = (pkgs.callPackage ./opensbi.nix {}).overrideAttrs (f: p: {
 | 
						|
        src = if cfg.opensbi.src != null then cfg.opensbi.src else p.src;
 | 
						|
        patches = if cfg.opensbi.patches != null then cfg.opensbi.patches else (p.patches or []);
 | 
						|
      });
 | 
						|
 | 
						|
      uboot = (pkgs.callPackage ./uboot.nix { inherit (config.system.build) opensbi; }).overrideAttrs (f: p: {
 | 
						|
        src = if cfg.uboot.src != null then cfg.uboot.src else p.src;
 | 
						|
        patches = if cfg.uboot.patches != null then cfg.uboot.patches else (p.patches or []);
 | 
						|
      });
 | 
						|
 | 
						|
      updater-flash = pkgs.writeShellApplication {
 | 
						|
        name = "visionfive2-firmware-update-flash";
 | 
						|
        runtimeInputs = [ pkgs.mtdutils ];
 | 
						|
        text = ''
 | 
						|
          flashcp -v ${config.system.build.uboot}/u-boot-spl.bin.normal.out /dev/mtd0
 | 
						|
          flashcp -v ${config.system.build.uboot}/u-boot.itb /dev/mtd2
 | 
						|
        '';
 | 
						|
      };
 | 
						|
 | 
						|
      updater-sd = pkgs.writeShellApplication {
 | 
						|
        name = "visionfive2-firmware-update-sd";
 | 
						|
        runtimeInputs = [ ];
 | 
						|
        text = ''
 | 
						|
          dd if=${config.system.build.uboot}/u-boot-spl.bin.normal.out of=/dev/mmcblk0p1 conv=fsync
 | 
						|
          dd if=${config.system.build.uboot}/u-boot.itb of=/dev/mmcblk0p2 conv=fsync
 | 
						|
        '';
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |