summary refs log tree commit diff
path: root/pkgs/os-specific/linux/device-tree
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/os-specific/linux/device-tree')
-rw-r--r--pkgs/os-specific/linux/device-tree/default.nix17
-rw-r--r--pkgs/os-specific/linux/device-tree/raspberrypi.nix32
2 files changed, 49 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/device-tree/default.nix b/pkgs/os-specific/linux/device-tree/default.nix
new file mode 100644
index 00000000000..13d819a08a5
--- /dev/null
+++ b/pkgs/os-specific/linux/device-tree/default.nix
@@ -0,0 +1,17 @@
+{ stdenvNoCC, dtc, findutils }:
+
+with stdenvNoCC.lib; {
+  applyOverlays = (base: overlays: stdenvNoCC.mkDerivation {
+    name = "device-tree-overlays";
+    nativeBuildInputs = [ dtc findutils ];
+    buildCommand = let
+      quotedDtbos = concatMapStringsSep " " (o: "\"${toString o}\"") (toList overlays);
+    in ''
+      for dtb in $(find ${base} -name "*.dtb" ); do
+        outDtb=$out/$(realpath --relative-to "${base}" "$dtb")
+        mkdir -p "$(dirname "$outDtb")"
+        fdtoverlay -o "$outDtb" -i "$dtb" ${quotedDtbos};
+      done
+    '';
+  });
+}
diff --git a/pkgs/os-specific/linux/device-tree/raspberrypi.nix b/pkgs/os-specific/linux/device-tree/raspberrypi.nix
new file mode 100644
index 00000000000..a77200a68f7
--- /dev/null
+++ b/pkgs/os-specific/linux/device-tree/raspberrypi.nix
@@ -0,0 +1,32 @@
+{ stdenvNoCC, raspberrypifw }:
+
+stdenvNoCC.mkDerivation {
+  name = "raspberrypi-dtbs-${raspberrypifw.version}";
+  nativeBuildInputs = [ raspberrypifw ];
+
+  # Rename DTBs so u-boot finds them, like linux-rpi.nix
+  buildCommand = ''
+    mkdir -p $out/broadcom/
+    cd $out/broadcom/
+
+    cp ${raspberrypifw}/share/raspberrypi/boot/bcm*.dtb .
+
+    cp bcm2708-rpi-0-w.dtb bcm2835-rpi-zero-w.dtb
+    cp bcm2708-rpi-b.dtb bcm2835-rpi-a.dtb
+    cp bcm2708-rpi-b.dtb bcm2835-rpi-b.dtb
+    cp bcm2708-rpi-b.dtb bcm2835-rpi-b-rev2.dtb
+    cp bcm2708-rpi-b-plus.dtb bcm2835-rpi-a-plus
+    cp bcm2708-rpi-b-plus.dtb bcm2835-rpi-b-plus
+    cp bcm2708-rpi-b-plus.dtb bcm2835-rpi-zero.dtb
+    cp bcm2708-rpi-cm.dtb bcm2835-rpi-cm.dtb
+    cp bcm2709-rpi-2-b.dtb bcm2836-rpi-2-b.dtb
+    cp bcm2710-rpi-3-b.dtb bcm2837-rpi-3-b.dtb
+    cp bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-b-plus.dtb
+    cp bcm2710-rpi-cm3.dtb bcm2837-rpi-cm3.dtb
+  '';
+
+  passthru = {
+    # Compatible overlays that may be used
+    overlays = "${raspberrypifw}/share/raspberrypi/boot/overlays";
+  };
+}