From 3c4862636fd6a29f69a7b43f82a3cf070a9c650d Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Thu, 26 Jan 2023 15:59:59 +0000 Subject: [PATCH 1/7] linuxPackages.ipu6-drivers: init at 2023-01-17 --- .../linux/ipu6-drivers/default.nix | 60 +++++++++++++++++++ pkgs/top-level/linux-kernels.nix | 2 + 2 files changed, 62 insertions(+) create mode 100644 pkgs/os-specific/linux/ipu6-drivers/default.nix diff --git a/pkgs/os-specific/linux/ipu6-drivers/default.nix b/pkgs/os-specific/linux/ipu6-drivers/default.nix new file mode 100644 index 000000000000..d9c291032d5b --- /dev/null +++ b/pkgs/os-specific/linux/ipu6-drivers/default.nix @@ -0,0 +1,60 @@ +{ lib +, stdenv +, fetchFromGitHub +, kernel +}: + +let + ivsc-driver = fetchFromGitHub { + owner = "intel"; + repo = "ivsc-driver"; + rev = "94ecb88b3ac238d9145ac16230d6e0779bb4fd32"; + hash = "sha256-Q7iyKw4WFSX42E4AtoW/zYRKpknWZSU66V5VPAx6AjA="; + }; +in + +stdenv.mkDerivation rec { + pname = "ipu6-drivers"; + version = "unstable-2023-01-17"; + + src = fetchFromGitHub { + owner = "intel"; + repo = pname; + rev = "f83b0747b297cc42325668aaf69471d89253b88e"; + hash = "sha256-yl2ZtJUTh1/qmTA8USd+FBCUAY5qNdh4bSvFRPImQNI="; + }; + + postPatch = '' + cp --no-preserve=mode --recursive --verbose \ + ${ivsc-driver}/backport-include \ + ${ivsc-driver}/drivers \ + ${ivsc-driver}/include \ + . + ''; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + makeFlags = kernel.makeFlags ++ [ + "KERNELRELEASE=${kernel.modDirVersion}" + "KERNEL_SRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + ]; + + enableParallelBuilding = true; + + preInstall = '' + sed -i -e "s,INSTALL_MOD_DIR=,INSTALL_MOD_PATH=$out INSTALL_MOD_DIR=," Makefile + ''; + + installTargets = [ + "modules_install" + ]; + + meta = { + homepage = "https://github.com/intel/ipu6-drivers"; + description = "IPU6 kernel driver"; + license = lib.licenses.gpl2; + maintainers = with lib.maintainers; [ hexa ]; + platforms = [ "x86_64-linux" ]; + broken = kernel.kernelOlder "5.15"; + }; +} diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index 56225b6d4241..d3d352cc7835 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -330,6 +330,8 @@ in { intel-speed-select = if lib.versionAtLeast kernel.version "5.3" then callPackage ../os-specific/linux/intel-speed-select { } else null; + ipu6-drivers = callPackage ../os-specific/linux/ipu6-drivers {}; + ixgbevf = callPackage ../os-specific/linux/ixgbevf {}; it87 = callPackage ../os-specific/linux/it87 {}; From 134e4a6473a032513c2bea03035342aacaf3f53d Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Thu, 26 Jan 2023 17:07:48 +0000 Subject: [PATCH 2/7] ipu6-camera-bin: init at 2022-11-12 Exposes both the ipu6 and ipu6ep firmware variants as top-level packages. --- .../firmware/ipu6-camera-bins/default.nix | 69 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 6 ++ 2 files changed, 75 insertions(+) create mode 100644 pkgs/os-specific/linux/firmware/ipu6-camera-bins/default.nix diff --git a/pkgs/os-specific/linux/firmware/ipu6-camera-bins/default.nix b/pkgs/os-specific/linux/firmware/ipu6-camera-bins/default.nix new file mode 100644 index 000000000000..b8c9d9d0d436 --- /dev/null +++ b/pkgs/os-specific/linux/firmware/ipu6-camera-bins/default.nix @@ -0,0 +1,69 @@ +{ lib +, stdenv +, fetchFromGitHub + +# Pick one of +# - ipu6 (Tiger Lake) +# - ipu6ep (Alder Lake) +, ipuVersion ? "ipu6" +}: + +stdenv.mkDerivation { + pname = "${ipuVersion}-camera-bin"; + version = "unstable-2022-11-12"; + + src = fetchFromGitHub { + owner = "intel"; + repo = "ipu6-camera-bins"; + rev = "4694ba7ee51652d29ef41e7fde846b83a2a1c53b"; + hash = "sha256-XPT3dbV6Kl1/TEeiQESF4Q4s95hjtiv4VLlqlahQXqE="; + }; + + sourceRoot = "source/${ipuVersion}"; + + installPhase = '' + runHook preInstall + + mkdir -p $out + cp --no-preserve=mode --recursive \ + lib \ + include \ + $out/ + + install -D ../LICENSE $out/share/doc + + runHook postInstall + ''; + + postFixup = '' + for pcfile in $out/lib/pkgconfig/*.pc; do + substituteInPlace $pcfile \ + --replace 'exec_prefix=/usr' 'exec_prefix=''${prefix}' \ + --replace 'prefix=/usr' "prefix=$out" \ + --replace 'libdir=/usr/lib' 'libdir=''${prefix}/lib' \ + --replace 'includedir=/usr/include' 'includedir=''${prefix}/include' + done + ''; + + passthru = { + inherit ipuVersion; + }; + + meta = let + generation = { + ipu6 = "Tiger Lake"; + ipu6ep = "Alder Lake"; + }.${ipuVersion}; + in with lib; { + description = "${generation} IPU firmware and proprietary image processing libraries"; + homepage = "https://github.com/intel/ipu6-camera-bins"; + license = licenses.issl; + sourceProvenance = with sourceTypes; [ + binaryFirmware + ]; + maintainers = with maintainers; [ + hexa + ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 87f6a6d595df..3c184b74ddea 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -25865,6 +25865,12 @@ with pkgs; iproute2 = callPackage ../os-specific/linux/iproute { }; + ipu6-camera-bin = callPackage ../os-specific/linux/firmware/ipu6-camera-bins {}; + + ipu6ep-camera-bin = callPackage ../os-specific/linux/firmware/ipu6-camera-bins { + ipuVersion = "ipu6ep"; + }; + iputils = hiPrio (callPackage ../os-specific/linux/iputils { }); # hiPrio for collisions with inetutils (ping) From 4269391e56b015472b8f238c1ae52442e168348f Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Thu, 26 Jan 2023 21:14:20 +0000 Subject: [PATCH 3/7] ipu6-camera-hal: init at 2023-01-09 Also exposes ipu6ep-camera-hal, an overriden version for the Alder Lake platform. --- .../libraries/ipu6-camera-hal/default.nix | 72 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 6 ++ 2 files changed, 78 insertions(+) create mode 100644 pkgs/development/libraries/ipu6-camera-hal/default.nix diff --git a/pkgs/development/libraries/ipu6-camera-hal/default.nix b/pkgs/development/libraries/ipu6-camera-hal/default.nix new file mode 100644 index 000000000000..d8ac28f4ce6b --- /dev/null +++ b/pkgs/development/libraries/ipu6-camera-hal/default.nix @@ -0,0 +1,72 @@ +{ lib +, stdenv +, fetchFromGitHub + +# build +, cmake +, pkg-config + +# runtime +, expat +, ipu6-camera-bin +, libtool +, gst_all_1 +}: + +stdenv.mkDerivation { + pname = "ipu6-camera-hal"; + version = "unstable-2023-01-09"; + + src = fetchFromGitHub { + owner = "intel"; + repo = "ipu6-camera-hal"; + rev = "37292891c73367d22ba1fc96ea9b6e4546903037"; + hash = "sha256-dJvTZt85rt5/v2JXOsfbSY933qffyXW74L0nWdIlqug="; + }; + + nativeBuildInputs = [ + cmake + pkg-config + ]; + + cmakeFlags = [ + "-DIPU_VER=${ipu6-camera-bin.ipuVersion}" + # missing libiacss + "-DUSE_PG_LITE_PIPE=ON" + # missing libipu4 + "-DENABLE_VIRTUAL_IPU_PIPE=OFF" + ]; + + NIX_CFLAGS_COMPILE = [ + "-I${lib.getDev ipu6-camera-bin}/include/ia_imaging" + "-I${lib.getDev ipu6-camera-bin}/include/ia_camera" + ]; + + enableParallelBuilding = true; + + buildInputs = [ + expat + ipu6-camera-bin + libtool + gst_all_1.gstreamer + gst_all_1.gst-plugins-base + ]; + + preFixup = '' + ls -lah $out/lib/pkgconfig/ + sed -Ei \ + -e "s,^prefix=.*,prefix=$out," \ + -e "s,^exec_prefix=.*,exec_prefix=''${prefix}," \ + -e "s,^libdir=.*,libdir=''${prefix}/lib," \ + -e "s,^includedir=.*,includedir=''${prefix}/include/libcamhal," \ + $out/lib/pkgconfig/libcamhal.pc + ''; + + meta = with lib; { + description = "HAL for processing of images in userspace"; + homepage = "https://github.com/intel/ipu6-camera-hal"; + license = licenses.asl20; + maintainers = with maintainers; [ hexa ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3c184b74ddea..ed19a4cba4ef 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -25867,10 +25867,16 @@ with pkgs; ipu6-camera-bin = callPackage ../os-specific/linux/firmware/ipu6-camera-bins {}; + ipu6-camera-hal = callPackage ../development/libraries/ipu6-camera-hal {}; + ipu6ep-camera-bin = callPackage ../os-specific/linux/firmware/ipu6-camera-bins { ipuVersion = "ipu6ep"; }; + ipu6ep-camera-hal = callPackage ../development/libraries/ipu6-camera-hal { + ipu6-camera-bin = ipu6ep-camera-bin; + }; + iputils = hiPrio (callPackage ../os-specific/linux/iputils { }); # hiPrio for collisions with inetutils (ping) From c4c9f600e7a09bb0044fc10ea3ae62a3c65b76b5 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Thu, 26 Jan 2023 21:44:12 +0000 Subject: [PATCH 4/7] gst_all_1.icamerasrc: init at 202212109 --- .../libraries/gstreamer/default.nix | 2 + .../gstreamer/icamerasrc/default.nix | 55 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 pkgs/development/libraries/gstreamer/icamerasrc/default.nix diff --git a/pkgs/development/libraries/gstreamer/default.nix b/pkgs/development/libraries/gstreamer/default.nix index 9b67dd49c82b..69ee36149776 100644 --- a/pkgs/development/libraries/gstreamer/default.nix +++ b/pkgs/development/libraries/gstreamer/default.nix @@ -25,5 +25,7 @@ gst-vaapi = callPackage ./vaapi { }; + icamerasrc = callPackage ./icamerasrc { }; + # note: gst-python is in ./python/default.nix - called under pythonPackages } diff --git a/pkgs/development/libraries/gstreamer/icamerasrc/default.nix b/pkgs/development/libraries/gstreamer/icamerasrc/default.nix new file mode 100644 index 000000000000..d67f646b2b62 --- /dev/null +++ b/pkgs/development/libraries/gstreamer/icamerasrc/default.nix @@ -0,0 +1,55 @@ +{ lib +, stdenv +, fetchFromGitHub +, autoreconfHook +, pkg-config +, gst_all_1 +, ipu6-camera-hal +, libdrm +}: + +stdenv.mkDerivation rec { + pname = "icamerasrc"; + version = "20221209"; + + src = fetchFromGitHub { + owner = "intel"; + repo = "icamerasrc"; + rev = "refs/tags/rpl_plat_${version}_pv"; + hash = "sha256-qlV363l4tUjUAa1LiZQq55byKpz1tLESKAXEmgiYHVo="; + }; + + nativeBuildInputs = [ + autoreconfHook + pkg-config + ]; + + preConfigure = '' + # https://github.com/intel/ipu6-camera-hal/issues/1 + export CHROME_SLIM_CAMHAL=ON + # https://github.com/intel/icamerasrc/issues/22 + export STRIP_VIRTUAL_CHANNEL_CAMHAL=ON + ''; + + buildInputs = [ + gst_all_1.gstreamer + gst_all_1.gst-plugins-base + ipu6-camera-hal + libdrm + ]; + + NIX_CFLAGS_COMPILE = [ + # gstcameradeinterlace.cpp:55:10: fatal error: gst/video/video.h: No such file or directory + "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0" + ]; + + enableParallelBuilding = true; + + meta = with lib; { + description = "GStreamer Plugin for MIPI camera support through the IPU6/IPU6EP/IPU6SE on Intel Tigerlake/Alderlake/Jasperlake platforms"; + homepage = "https://github.com/intel/icamerasrc/tree/icamerasrc_slim_api"; + license = licenses.lgpl21Plus; + maintainers = with maintainers; [ hexa ]; + platforms = [ "x86_64-linux" ]; + }; +} From 9b4f6d4d9278632b1e6c28e83ed9764bd0387c43 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Tue, 14 Feb 2023 16:33:59 +0100 Subject: [PATCH 5/7] linuxPackages.ivsc-driver: init at 2023-01-06 --- .../os-specific/linux/ivsc-driver/default.nix | 43 +++++++++++++++++++ pkgs/top-level/linux-kernels.nix | 2 + 2 files changed, 45 insertions(+) create mode 100644 pkgs/os-specific/linux/ivsc-driver/default.nix diff --git a/pkgs/os-specific/linux/ivsc-driver/default.nix b/pkgs/os-specific/linux/ivsc-driver/default.nix new file mode 100644 index 000000000000..fbcf61955350 --- /dev/null +++ b/pkgs/os-specific/linux/ivsc-driver/default.nix @@ -0,0 +1,43 @@ +{ lib +, stdenv +, fetchFromGitHub +, kernel +}: + +stdenv.mkDerivation rec { + pname = "ivsc-drivers"; + version = "unstable-2023-01-06"; + + src = fetchFromGitHub { + owner = "intel"; + repo = "ivsc-driver"; + rev = "94ecb88b3ac238d9145ac16230d6e0779bb4fd32"; + hash = "sha256-Q7iyKw4WFSX42E4AtoW/zYRKpknWZSU66V5VPAx6AjA="; + }; + + nativeBuildInputs = kernel.moduleBuildDependencies; + + makeFlags = kernel.makeFlags ++ [ + "KERNELRELEASE=${kernel.modDirVersion}" + "KERNEL_SRC=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" + ]; + + enableParallelBuilding = true; + + preInstall = '' + sed -i -e "s,INSTALL_MOD_DIR=,INSTALL_MOD_PATH=$out INSTALL_MOD_DIR=," Makefile + ''; + + installTargets = [ + "modules_install" + ]; + + meta = { + homepage = "https://github.com/intel/ivsc-drivers"; + description = "Intel Vision Sensing Controller kernel driver"; + license = lib.licenses.gpl2; + maintainers = with lib.maintainers; [ hexa ]; + platforms = [ "x86_64-linux" ]; + broken = kernel.kernelOlder "5.15"; + }; +} diff --git a/pkgs/top-level/linux-kernels.nix b/pkgs/top-level/linux-kernels.nix index d3d352cc7835..239caa1756fe 100644 --- a/pkgs/top-level/linux-kernels.nix +++ b/pkgs/top-level/linux-kernels.nix @@ -332,6 +332,8 @@ in { ipu6-drivers = callPackage ../os-specific/linux/ipu6-drivers {}; + ivsc-driver = callPackage ../os-specific/linux/ivsc-driver {}; + ixgbevf = callPackage ../os-specific/linux/ixgbevf {}; it87 = callPackage ../os-specific/linux/it87 {}; From 6b3385723874fc580a854701292a9a0c7ede4482 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Tue, 14 Feb 2023 17:03:57 +0100 Subject: [PATCH 6/7] ivsc-firmware: init at 2022-11-02 --- .../linux/firmware/ivsc-firmware/default.nix | 41 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 43 insertions(+) create mode 100644 pkgs/os-specific/linux/firmware/ivsc-firmware/default.nix diff --git a/pkgs/os-specific/linux/firmware/ivsc-firmware/default.nix b/pkgs/os-specific/linux/firmware/ivsc-firmware/default.nix new file mode 100644 index 000000000000..fb2f940ddce6 --- /dev/null +++ b/pkgs/os-specific/linux/firmware/ivsc-firmware/default.nix @@ -0,0 +1,41 @@ +{ lib +, stdenv +, fetchFromGitHub +}: + +stdenv.mkDerivation { + pname = "ivsc-firmware"; + version = "unstable-2022-11-02"; + + src = fetchFromGitHub { + owner = "intel"; + repo = "ivsc-firmware"; + rev = "29c5eff4cdaf83e90ef2dcd2035a9cdff6343430"; + hash = "sha256-GuD1oTnDEs0HslJjXx26DkVQIe0eS+js4UoaTDa77ME="; + }; + + dontBuild = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib/firmware/vsc + cp --no-preserve=mode --recursive ./firmware/* $out/lib/firmware/vsc/ + install -D ./LICENSE $out/share/doc + + runHook postInstall + ''; + + meta = with lib; { + description = "Firmware binaries for the Intel Vision Sensing Controller"; + homepage = "https://github.com/intel/ivsc-firmware"; + license = licenses.issl; + sourceProvenance = with sourceTypes; [ + binaryFirmware + ]; + maintainers = with maintainers; [ + hexa + ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ed19a4cba4ef..d64a9d7604cb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -25877,6 +25877,8 @@ with pkgs; ipu6-camera-bin = ipu6ep-camera-bin; }; + ivsc-firmware = callPackage ../os-specific/linux/firmware/ivsc-firmware { }; + iputils = hiPrio (callPackage ../os-specific/linux/iputils { }); # hiPrio for collisions with inetutils (ping) From b38d6054d789ec8f12a11ed7c2107ce770be7a98 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Tue, 14 Feb 2023 17:58:59 +0100 Subject: [PATCH 7/7] linuxPackages.ipu6-drivers: Reuse ivsc-driver source Now that the ivsc-driver is packaged as well, we can reuse the source files. --- pkgs/os-specific/linux/ipu6-drivers/default.nix | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/pkgs/os-specific/linux/ipu6-drivers/default.nix b/pkgs/os-specific/linux/ipu6-drivers/default.nix index d9c291032d5b..155e384a119d 100644 --- a/pkgs/os-specific/linux/ipu6-drivers/default.nix +++ b/pkgs/os-specific/linux/ipu6-drivers/default.nix @@ -1,18 +1,10 @@ { lib , stdenv , fetchFromGitHub +, ivsc-driver , kernel }: -let - ivsc-driver = fetchFromGitHub { - owner = "intel"; - repo = "ivsc-driver"; - rev = "94ecb88b3ac238d9145ac16230d6e0779bb4fd32"; - hash = "sha256-Q7iyKw4WFSX42E4AtoW/zYRKpknWZSU66V5VPAx6AjA="; - }; -in - stdenv.mkDerivation rec { pname = "ipu6-drivers"; version = "unstable-2023-01-17"; @@ -26,9 +18,9 @@ stdenv.mkDerivation rec { postPatch = '' cp --no-preserve=mode --recursive --verbose \ - ${ivsc-driver}/backport-include \ - ${ivsc-driver}/drivers \ - ${ivsc-driver}/include \ + ${ivsc-driver.src}/backport-include \ + ${ivsc-driver.src}/drivers \ + ${ivsc-driver.src}/include \ . '';