about summary refs log tree commit diff
path: root/pkgs/misc/uboot/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/misc/uboot/default.nix')
-rw-r--r--pkgs/misc/uboot/default.nix90
1 files changed, 68 insertions, 22 deletions
diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix
index ffe576c31d81..8a07461bb2f1 100644
--- a/pkgs/misc/uboot/default.nix
+++ b/pkgs/misc/uboot/default.nix
@@ -1,37 +1,49 @@
-{ stdenv, lib, fetchurl, fetchpatch, bc, bison, dtc, flex, openssl, swig
-, armTrustedFirmwareAllwinner
+{ stdenv, lib, fetchurl, fetchpatch, fetchFromGitHub, bc, bison, dtc, flex
+, openssl, swig, armTrustedFirmwareAllwinner, armTrustedFirmwareRK3328
+, armTrustedFirmwareRK3399
 , buildPackages
 }:
 
 let
-  buildUBoot = { version ? "2019.10"
-            , filesToInstall
-            , installDir ? "$out"
-            , defconfig
-            , extraConfig ? ""
-            , extraPatches ? []
-            , extraMakeFlags ? []
-            , extraMeta ? {}
-            , ... } @ args:
-           stdenv.mkDerivation ({
-
+  defaultVersion = "2019.10";
+  defaultSrc = fetchurl {
+    url = "ftp://ftp.denx.de/pub/u-boot/u-boot-${defaultVersion}.tar.bz2";
+    sha256 = "053hcrwwlacqh2niisn0zas95zkbffw5aw5sdhixs8lmfdq60vcd";
+  };
+  buildUBoot = {
+    version ? null
+  , src ? null
+  , filesToInstall
+  , installDir ? "$out"
+  , defconfig
+  , extraConfig ? ""
+  , extraPatches ? []
+  , extraMakeFlags ? []
+  , extraMeta ? {}
+  , ... } @ args: stdenv.mkDerivation ({
     pname = "uboot-${defconfig}";
-    inherit version;
 
-    src = fetchurl {
-      url = "ftp://ftp.denx.de/pub/u-boot/u-boot-${version}.tar.bz2";
-      sha256 = "053hcrwwlacqh2niisn0zas95zkbffw5aw5sdhixs8lmfdq60vcd";
-    };
+    version = if src == null then defaultVersion else version;
+
+    src = if src == null then defaultSrc else src;
 
     patches = [
+      # Submitted upstream: https://patchwork.ozlabs.org/patch/1203693/
       (fetchpatch {
         url = https://github.com/dezgeg/u-boot/commit/extlinux-path-length-2018-03.patch;
         sha256 = "07jafdnxvqv8lz256qy29agjc2k1zj5ad4k28r1w5qkhwj4ixmf8";
       })
+      # Submitted upstream: https://patchwork.ozlabs.org/patch/1203678/
+      (fetchpatch {
+        name = "rockchip-allow-loading-larger-kernels.patch";
+        url = "https://marc.info/?l=u-boot&m=157537843004298&q=raw";
+        sha256 = "0l3l88cc9xkxkraql82pfgpx6nqn4dj7cvfaagh5pzfwkxyw0n3p";
+      })
     ] ++ extraPatches;
 
     postPatch = ''
       patchShebangs tools
+      patchShebangs arch/arm/mach-rockchip
     '';
 
     nativeBuildInputs = [
@@ -90,15 +102,12 @@ in {
   inherit buildUBoot;
 
   ubootTools = buildUBoot {
-    defconfig = "allnoconfig";
+    defconfig = "tools-only_defconfig";
     installDir = "$out/bin";
     hardeningDisable = [];
     dontStrip = false;
     extraMeta.platforms = lib.platforms.linux;
     extraMakeFlags = [ "HOST_TOOLS_ALL=y" "CROSS_BUILD_TOOLS=1" "NO_SDL=1" "tools" ];
-    postConfigure = ''
-      sed -i '/CONFIG_SYS_TEXT_BASE/c\CONFIG_SYS_TEXT_BASE=0x00000000' .config
-    '';
     filesToInstall = [
       "tools/dumpimage"
       "tools/fdtgrep"
@@ -251,6 +260,43 @@ in {
     filesToInstall = ["u-boot.bin"];
   };
 
+  ubootRock64 = let
+    rkbin = fetchFromGitHub {
+      owner = "ayufan-rock64";
+      repo = "rkbin";
+      rev = "f79a708978232a2b6b06c2e4173c5314559e0d3a";
+      sha256 = "0h7xm4ck3p3380c6bqm5ixrkxwcx6z5vysqdwvfa7gcqx5d6x5zz";
+    };
+  in buildUBoot {
+    extraMakeFlags = [ "all" "u-boot.itb" ];
+    defconfig = "rock64-rk3328_defconfig";
+    extraMeta = {
+      platforms = [ "aarch64-linux" ];
+      license = lib.licenses.unfreeRedistributableFirmware;
+    };
+    BL31="${armTrustedFirmwareRK3328}/bl31.elf";
+    filesToInstall = [ "u-boot.itb" "idbloader.img"];
+    # Derive MAC address from cpuid
+    # Submitted upstream: https://patchwork.ozlabs.org/patch/1203686/
+    extraConfig = ''
+      CONFIG_MISC_INIT_R=y
+    '';
+    # Close to being blob free, but the U-Boot TPL causes random memory
+    # corruption
+    postBuild = ''
+      ./tools/mkimage -n rk3328 -T rksd -d ${rkbin}/rk33/rk3328_ddr_786MHz_v1.13.bin idbloader.img
+      cat spl/u-boot-spl.bin >> idbloader.img
+    '';
+  };
+
+  ubootRockPro64 = buildUBoot {
+    extraMakeFlags = [ "all" "u-boot.itb" ];
+    defconfig = "rockpro64-rk3399_defconfig";
+    extraMeta.platforms = ["aarch64-linux"];
+    BL31="${armTrustedFirmwareRK3399}/bl31.elf";
+    filesToInstall = [ "u-boot.itb" "idbloader.img"];
+  };
+
   ubootSheevaplug = buildUBoot {
     defconfig = "sheevaplug_defconfig";
     extraMeta.platforms = ["armv5tel-linux"];