mirror of
				https://github.com/NixOS/nixos-hardware.git
				synced 2025-11-04 17:27:14 +08:00 
			
		
		
		
	starfive visionfive2: rework firmware build/update scripts
This commit is contained in:
		@@ -1,78 +1,26 @@
 | 
				
			|||||||
{ callPackage, pkgsBuildHost, writeText, writeShellApplication
 | 
					{ callPackage
 | 
				
			||||||
, stdenv, dtc, mtdutils, coreutils }:
 | 
					, writeShellApplication
 | 
				
			||||||
let
 | 
					, stdenv
 | 
				
			||||||
  uboot = callPackage ./uboot.nix { };
 | 
					, mtdutils
 | 
				
			||||||
  opensbi = callPackage ./opensbi.nix {
 | 
					}:
 | 
				
			||||||
    withPayload = "${uboot}/u-boot.bin";
 | 
					 | 
				
			||||||
    withFDT = "${uboot}/starfive_visionfive2.dtb";
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  spl-tool = pkgsBuildHost.callPackage ./spl-tool.nix { };
 | 
					 | 
				
			||||||
  its-file = writeText "visionfive2-uboot-fit-image.its" ''
 | 
					 | 
				
			||||||
    /dts-v1/;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    / {
 | 
					rec {
 | 
				
			||||||
      description = "U-boot-spl FIT image for JH7110 VisionFive2";
 | 
					  opensbi = callPackage ./opensbi.nix { };
 | 
				
			||||||
      #address-cells = <2>;
 | 
					  uboot = callPackage ./uboot.nix { inherit opensbi; };
 | 
				
			||||||
 | 
					 | 
				
			||||||
      images {
 | 
					 | 
				
			||||||
        firmware {
 | 
					 | 
				
			||||||
          description = "u-boot";
 | 
					 | 
				
			||||||
          data = /incbin/("${opensbi}/share/opensbi/lp64/generic/firmware/fw_payload.bin");
 | 
					 | 
				
			||||||
          type = "firmware";
 | 
					 | 
				
			||||||
          arch = "riscv";
 | 
					 | 
				
			||||||
          os = "u-boot";
 | 
					 | 
				
			||||||
          load = <0x0 0x40000000>;
 | 
					 | 
				
			||||||
          entry = <0x0 0x40000000>;
 | 
					 | 
				
			||||||
          compression = "none";
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      configurations {
 | 
					 | 
				
			||||||
        default = "config-1";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        config-1 {
 | 
					 | 
				
			||||||
          description = "U-boot-spl FIT config for JH7110 VisionFive2";
 | 
					 | 
				
			||||||
          firmware = "firmware";
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
  '';
 | 
					 | 
				
			||||||
in rec {
 | 
					 | 
				
			||||||
  inherit opensbi uboot;
 | 
					 | 
				
			||||||
  spl = stdenv.mkDerivation {
 | 
					 | 
				
			||||||
    name = "starfive-visionfive2-spl";
 | 
					 | 
				
			||||||
    depsBuildBuild = [ spl-tool ];
 | 
					 | 
				
			||||||
    phases = [ "installPhase" ];
 | 
					 | 
				
			||||||
    installPhase = ''
 | 
					 | 
				
			||||||
      mkdir -p $out/share/starfive-visionfive2/
 | 
					 | 
				
			||||||
      ln -s ${uboot}/u-boot-spl.bin .
 | 
					 | 
				
			||||||
      spl_tool -c -f ./u-boot-spl.bin
 | 
					 | 
				
			||||||
      cp u-boot-spl.bin.normal.out $out/share/starfive-visionfive2/spl.bin
 | 
					 | 
				
			||||||
    '';
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  uboot-fit-image = stdenv.mkDerivation {
 | 
					 | 
				
			||||||
    name = "starfive-visionfive2-uboot-fit-image";
 | 
					 | 
				
			||||||
    nativeBuildInputs = [ dtc ];
 | 
					 | 
				
			||||||
    phases = [ "installPhase" ];
 | 
					 | 
				
			||||||
    installPhase = ''
 | 
					 | 
				
			||||||
      mkdir -p $out/share/starfive-visionfive2/
 | 
					 | 
				
			||||||
      ${uboot}/mkimage -f ${its-file} -A riscv -O u-boot -T firmware $out/share/starfive-visionfive2/visionfive2_fw_payload.img
 | 
					 | 
				
			||||||
    '';
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
  updater-flash = writeShellApplication {
 | 
					  updater-flash = writeShellApplication {
 | 
				
			||||||
    name = "visionfive2-firmware-update-flash";
 | 
					    name = "visionfive2-firmware-update-flash";
 | 
				
			||||||
    runtimeInputs = [ mtdutils ];
 | 
					    runtimeInputs = [ mtdutils ];
 | 
				
			||||||
    text = ''
 | 
					    text = ''
 | 
				
			||||||
      flashcp -v ${spl}/share/starfive-visionfive2/spl.bin /dev/mtd0
 | 
					      flashcp -v ${uboot}/u-boot-spl.bin.normal.out /dev/mtd0
 | 
				
			||||||
      flashcp -v ${uboot-fit-image}/share/starfive-visionfive2/visionfive2_fw_payload.img /dev/mtd1
 | 
					      flashcp -v ${uboot}/u-boot.itb /dev/mtd1
 | 
				
			||||||
    '';
 | 
					    '';
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  updater-sd = writeShellApplication {
 | 
					  updater-sd = writeShellApplication {
 | 
				
			||||||
    name = "visionfive2-firmware-update-sd";
 | 
					    name = "visionfive2-firmware-update-sd";
 | 
				
			||||||
    runtimeInputs = [ ];
 | 
					    runtimeInputs = [ ];
 | 
				
			||||||
    text = ''
 | 
					    text = ''
 | 
				
			||||||
      dd if=${spl}/share/starfive-visionfive2/spl.bin of=/dev/mmcblk0p1 conv=fsync
 | 
					      dd if=${uboot}/u-boot-spl.bin.normal.out of=/dev/mmcblk0p1 conv=fsync
 | 
				
			||||||
      dd if=${uboot-fit-image}/share/starfive-visionfive2/visionfive2_fw_payload.img of=/dev/mmcblk0p2 conv=fsync
 | 
					      dd if=${uboot}/u-boot.itb of=/dev/mmcblk0p2 conv=fsync
 | 
				
			||||||
    '';
 | 
					    '';
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,10 +36,10 @@ in {
 | 
				
			|||||||
      EOF
 | 
					      EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      eval $(partx $img -o START,SECTORS --nr 1 --pairs)
 | 
					      eval $(partx $img -o START,SECTORS --nr 1 --pairs)
 | 
				
			||||||
      dd conv=notrunc if=${firmware.spl}/share/starfive-visionfive2/spl.bin of=$img seek=$START count=$SECTORS
 | 
					      dd conv=notrunc if=${firmware.uboot}/u-boot-spl.bin.normal.out of=$img seek=$START count=$SECTORS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      eval $(partx $img -o START,SECTORS --nr 2 --pairs)
 | 
					      eval $(partx $img -o START,SECTORS --nr 2 --pairs)
 | 
				
			||||||
      dd conv=notrunc if=${firmware.uboot-fit-image}/share/starfive-visionfive2/visionfive2_fw_payload.img of=$img seek=$START count=$SECTORS
 | 
					      dd conv=notrunc if=${firmware.uboot}/u-boot.itb of=$img seek=$START count=$SECTORS
 | 
				
			||||||
    '';
 | 
					    '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    populateRootCommands = ''
 | 
					    populateRootCommands = ''
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user