commit c28c1d361e30a6898f8413a58d2be70e614ee79b
Author: Hans de Goede <hdegoede(a)redhat.com>
Date: Thu Jun 27 19:57:42 2024 +0200
Update to commit 289e645dffbd0ea633f10bb4f93855f1e4429e9a
Update /lib/modprobe.d/intel_ipu6_isys.conf for the out of tree module
being renamed to icamera_ipu6_isys
Adjust things for the libraries now having a proper .so.0 soname
hal_adaptor.so dispatches between different libcamhal.so builds, only build it once
New icamerasrc must use hal_adaptor, drop libcamhal files from -devel
Fix ownership of /usr/share/defaults and /usr/share/defaults/etc
.gitignore | 1 +
0001-CMakeLists-fixes.patch | 68 +++++++++++++++++
...-Fix-build-error-due-to-missing-cstdint.h.patch | 71 -----------------
...l-Dymically-set-mainline-IVSC-media-entit.patch | 49 ++++++++++++
...Patch-lib-path-to-align-fedora-path-usage.patch | 6 +-
60-intel-ipu6.rules | 14 ++--
intel_ipu6_isys.conf => icamera_ipu6_isys.conf | 2 +-
ipu6-camera-hal.rpmlintrc | 7 ++
ipu6-camera-hal.spec | 88 ++++++++++++----------
sources | 2 +-
10 files changed, 185 insertions(+), 123 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index b20861b..3032ca7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/ipu6-camera-hal-cc0b859.tar.gz
/ipu6-camera-hal-884b81a.tar.gz
/ipu6-camera-hal-da2e282.tar.gz
+/ipu6-camera-hal-289e645.tar.gz
diff --git a/0001-CMakeLists-fixes.patch b/0001-CMakeLists-fixes.patch
new file mode 100644
index 0000000..28fc296
--- /dev/null
+++ b/0001-CMakeLists-fixes.patch
@@ -0,0 +1,68 @@
+From 6be766eded95dd2893262a071369d898f42217f9 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Thu, 27 Jun 2024 11:36:57 +0200
+Subject: [PATCH] CMakeLists fixes
+
+A couple of CMakeLists.txt fixes:
+
+1. Use ${CMAKE_INSTALL_LIBDIR} instead of lib so that .so files get
+ installed under usr/lib64 for distributions using that
+2. Drop usr/ prefix in various places to avoid files getting installed
+ under usr/usr/...
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+---
+ CMakeLists.txt | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2773c73..24fd049 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -266,7 +266,7 @@ add_library(camhal_static STATIC ${LIBCAMHAL_SRCS})
+ if (NOT CAL_BUILD AND (NOT "${CMAKE_INSTALL_SUB_PATH}" STREQUAL
""))
+ set(CMAKE_SKIP_RPATH TRUE)
+ set_target_properties(camhal PROPERTIES LINK_FLAGS
+- "-Wl,-rpath,/usr/lib/${CMAKE_INSTALL_SUB_PATH}")
++
"-Wl,-rpath,${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_INSTALL_SUB_PATH}")
+ add_compile_definitions(SUB_CONFIG_PATH="${CMAKE_INSTALL_SUB_PATH}")
+ endif()
+ set_target_properties(camhal_static PROPERTIES OUTPUT_NAME "camhal")
+@@ -399,9 +399,9 @@ endif() #ENABLE_SANDBOXING
+ if (NOT CAL_BUILD)
+ # Install headers
+ if ("${CMAKE_INSTALL_SUB_PATH}" STREQUAL "")
+- install(DIRECTORY include/ DESTINATION usr/include/libcamhal)
++ install(DIRECTORY include/ DESTINATION include/libcamhal)
+ if (SUPPORT_LIVE_TUNING)
+- install(FILES modules/livetune/LiveTuning.h DESTINATION
usr/include/libcamhal/api)
++ install(FILES modules/livetune/LiveTuning.h DESTINATION include/libcamhal/api)
+ endif() #SUPPORT_LIVE_TUNING
+ endif()
+
+@@ -421,18 +421,18 @@ endif()
+ # Install libraries
+ if (${CMAKE_VERSION} VERSION_LESS 3.11)
+ install(TARGETS camhal camhal_static
+- LIBRARY DESTINATION usr/lib/${CMAKE_INSTALL_SUB_PATH}
+- ARCHIVE DESTINATION usr/lib/${CMAKE_INSTALL_SUB_PATH}
++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${CMAKE_INSTALL_SUB_PATH}
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/${CMAKE_INSTALL_SUB_PATH}
+ )
+ else()
+-install(TARGETS camhal camhal_static DESTINATION usr/lib/${CMAKE_INSTALL_SUB_PATH})
++install(TARGETS camhal camhal_static DESTINATION
${CMAKE_INSTALL_LIBDIR}/${CMAKE_INSTALL_SUB_PATH})
+ endif()
+
+ # Install package config file
+ configure_file(${PROJECT_SOURCE_DIR}/cmake/libcamhal.pc.cmakein
+ ${PROJECT_SOURCE_DIR}/libcamhal.pc @ONLY)
+ install(FILES libcamhal.pc
+- DESTINATION usr/${CMAKE_INSTALL_LIBDIR}/${CMAKE_INSTALL_SUB_PATH}/pkgconfig)
++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/${CMAKE_INSTALL_SUB_PATH}/pkgconfig)
+
+ endif() #NOT CAL_BUILD
+
+--
+2.45.1
+
diff --git a/0001-MediaControl-Dymically-set-mainline-IVSC-media-entit.patch
b/0001-MediaControl-Dymically-set-mainline-IVSC-media-entit.patch
new file mode 100644
index 0000000..877f4ff
--- /dev/null
+++ b/0001-MediaControl-Dymically-set-mainline-IVSC-media-entit.patch
@@ -0,0 +1,49 @@
+From aa749f7cd42a4e70472139b96801c5408bed1d3d Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Wed, 26 Jun 2024 00:56:52 +0200
+Subject: [PATCH] MediaControl: Dymically set mainline IVSC media-entity
+ src-pad index
+
+Since mainline kernel commit 48f5fd8967f8 ("media: ivsc: csi: Swap SINK
+and SOURCE pads") the src-pad on the mainline ivsc mc-entity is pad 1,
+where as on older versions it is pad 0.
+
+When updating the sensor link to point to the IVSC instead, link.srcPad
+was left at pad-0 inherited from the original sensor link.
+
+Since with newer kernels this now needs to be pad-1, also update
+link.srcPad and do so dynamically, so that it works with all mainline
+IVSC driver versions.
+
+This fixes ipu6-camera-hal / icamerasrc not working on laptops with
+an IVSC chip running kernels using the mainline IVSC driver with
+the mentioned commit.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+---
+ src/v4l2/MediaControl.cpp | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/v4l2/MediaControl.cpp b/src/v4l2/MediaControl.cpp
+index a371e54..6145225 100644
+--- a/src/v4l2/MediaControl.cpp
++++ b/src/v4l2/MediaControl.cpp
+@@ -886,6 +886,15 @@ int MediaControl::mediaCtlSetup(int cameraId, MediaCtlConf* mc, int
width, int h
+ ivscName.c_str(), link.sinkEntityName.c_str());
+ link.srcEntity = ivsc->info.id;
+ link.srcEntityName = ivscName;
++ /*
++ * Since mainline kernel commit 48f5fd8967f8 ("media:
++ * ivsc: csi: Swap SINK and SOURCE pads") the src-pad
++ * on the mainline ivsc mc-entity is pad 1, where on
++ * older versions it is pad 0, so this needs to be set
++ * dynamically.
++ * The src-pad is the other pad of the found ivsc sink.
++ */
++ link.srcPad = !ivsc->links[i].sink->index;
+ break;
+ }
+ }
+--
+2.45.1
+
diff --git a/0001-Patch-lib-path-to-align-fedora-path-usage.patch
b/0001-Patch-lib-path-to-align-fedora-path-usage.patch
index 4ce1f07..3153ac8 100644
--- a/0001-Patch-lib-path-to-align-fedora-path-usage.patch
+++ b/0001-Patch-lib-path-to-align-fedora-path-usage.patch
@@ -17,9 +17,9 @@ index e14418a..17e9697 100644
- std::string libName = "/usr/lib/";
+ std::string libName = "/usr/lib64/";
- if (strstr(pciID, "0xa75d") != nullptr /* RPL */ ||
- strstr(pciID, "0x462e") != nullptr /* ADLN */ ||
- strstr(pciID, "0x465d") != nullptr /* ADLP */) {
+ if (IPU6_UPSTREAM) {
+ if (strstr(pciID, "0x7d19") != nullptr /* MTL */) {
+ libName += "ipu_mtl_upstream";
--
2.44.0
diff --git a/60-intel-ipu6.rules b/60-intel-ipu6.rules
index 566d81a..42b4254 100644
--- a/60-intel-ipu6.rules
+++ b/60-intel-ipu6.rules
@@ -6,19 +6,21 @@ SUBSYSTEM=="pci", ATTR{vendor}=="0x8086",
ATTR{device}=="0x465d", GOTO="ipu6_adl
SUBSYSTEM=="pci", ATTR{vendor}=="0x8086",
ATTR{device}=="0x462e", GOTO="ipu6_adl"
# Raptor Lake-P
SUBSYSTEM=="pci", ATTR{vendor}=="0x8086",
ATTR{device}=="0xa75d", GOTO="ipu6_adl"
+# Meteor Lake
+SUBSYSTEM=="pci", ATTR{vendor}=="0x8086",
ATTR{device}=="0x7d19", GOTO="ipu6_mtl"
GOTO="ipu6_end"
LABEL="ipu6_tgl"
-RUN+="/bin/ln -sf /usr/lib64/ipu_tgl/libcamhal.so /run/libcamhal.so"
-RUN+="/bin/ln -sf /usr/lib64/ipu_tgl/libhal_adaptor.so /run/libhal_adaptor.so"
-RUN+="/bin/ln -sf /usr/share/defaults/etc/ipu6/v4l2-relayd /run/v4l2-relayd"
+RUN+="/bin/ln -sf /usr/share/defaults/etc/camera/ipu_tgl/v4l2-relayd
/run/v4l2-relayd"
GOTO="ipu6_end"
LABEL="ipu6_adl"
-RUN+="/bin/ln -sf /usr/lib64/ipu_adl/libcamhal.so /run/libcamhal.so"
-RUN+="/bin/ln -sf /usr/lib64/ipu_adl/libhal_adaptor.so /run/libhal_adaptor.so"
-RUN+="/bin/ln -sf /usr/share/defaults/etc/ipu6ep/v4l2-relayd /run/v4l2-relayd"
+RUN+="/bin/ln -sf /usr/share/defaults/etc/camera/ipu_adl/v4l2-relayd
/run/v4l2-relayd"
+GOTO="ipu6_end"
+
+LABEL="ipu6_mtl"
+RUN+="/bin/ln -sf /usr/share/defaults/etc/camera/ipu_mtl/v4l2-relayd
/run/v4l2-relayd"
GOTO="ipu6_end"
LABEL="ipu6_end"
diff --git a/intel_ipu6_isys.conf b/icamera_ipu6_isys.conf
similarity index 64%
rename from intel_ipu6_isys.conf
rename to icamera_ipu6_isys.conf
index 0ea144d..5631cb2 100644
--- a/intel_ipu6_isys.conf
+++ b/icamera_ipu6_isys.conf
@@ -1,3 +1,3 @@
# Move the special isys /dev/video# node out of the way of
# normal v4l2 devices such as v4l2loopback
-options intel_ipu6_isys video_nr=8,9,10,11,12,13,14,15
+options icamera_ipu6_isys video_nr=8,9,10,11,12,13,14,15
diff --git a/ipu6-camera-hal.rpmlintrc b/ipu6-camera-hal.rpmlintrc
new file mode 100644
index 0000000..58a14ae
--- /dev/null
+++ b/ipu6-camera-hal.rpmlintrc
@@ -0,0 +1,7 @@
+# Upstream provides no docs
+addFilter("W: no-documentation")
+# A bunch of the sensor cfg and xml files are available through 2 different paths, meh
+addFilter("W: files-duplicate")
+addFilter("E: files-duplicated-waste")
+# libcamhal.so links are also in main pkg because libhal_adaptor opens them
+addFilter("W: devel-file-in-non-devel-package")
diff --git a/ipu6-camera-hal.spec b/ipu6-camera-hal.spec
index cbc23c8..2063e9c 100644
--- a/ipu6-camera-hal.spec
+++ b/ipu6-camera-hal.spec
@@ -1,5 +1,5 @@
-%global commit da2e2821244f21b95bcb37a1271bf73360c4669e
-%global commitdate 20240226
+%global commit 289e645dffbd0ea633f10bb4f93855f1e4429e9a
+%global commitdate 20240509
%global shortcommit %(c=%{commit}; echo ${c:0:7})
# We want to specify multiple separate build-dirs for the different variants
@@ -9,20 +9,24 @@ Name: ipu6-camera-hal
Summary: Hardware abstraction layer for Intel IPU6
URL:
https://github.com/intel/ipu6-camera-hal
Version: 0.0
-Release: 17.%{commitdate}git%{shortcommit}%{?dist}
+Release: 18.%{commitdate}git%{shortcommit}%{?dist}
License: Apache-2.0
Source0:
https://github.com/intel/%{name}/archive/%{commit}/%{name}-%{shortcommit}...
Source1: 60-intel-ipu6.rules
Source2: v4l2-relayd-adl
Source3: v4l2-relayd-tgl
-Source4: intel_ipu6_isys.conf
+Source4: icamera_ipu6_isys.conf
# Patches
Patch01: 0001-Patch-lib-path-to-align-fedora-path-usage.patch
+#
https://github.com/intel/ipu6-camera-hal/pull/113
+Patch02: 0001-CMakeLists-fixes.patch
+#
https://github.com/intel/ipu6-camera-hal/pull/114
+Patch03: 0001-MediaControl-Dymically-set-mainline-IVSC-media-entit.patch
BuildRequires: systemd-rpm-macros
-BuildRequires: ipu6-camera-bins-devel
+BuildRequires: ipu6-camera-bins-devel >= 0.0-11
BuildRequires: cmake
BuildRequires: gcc
BuildRequires: g++
@@ -30,7 +34,7 @@ BuildRequires: expat-devel
ExclusiveArch: x86_64
-Requires: ipu6-camera-bins
+Requires: ipu6-camera-bins >= 0.0-11
%description
ipu6-camera-hal provides the basic hardware access APIs for IPU6.
@@ -45,14 +49,14 @@ This provides the necessary header files for IPU6 HAL development.
%prep
%autosetup -p1 -n %{name}-%{commit}
+sed -i "s|/etc/camera/|/usr/share/defaults/etc/camera/|g" \
+ src/platformdata/PlatformData.h
%build
for i in ipu_tgl ipu_adl ipu_mtl; do
export PKG_CONFIG_PATH=%{_libdir}/$i/pkgconfig/
export LDFLAGS="$RPM_LD_FLAGS -Wl,-rpath=%{_libdir}/$i"
- sed -i.orig "s|/usr/share/defaults/etc/camera/|/usr/share/defaults/etc/$i/|g"
\
- src/platformdata/PlatformData.h
mkdir $i && pushd $i
if [ $i = "ipu_tgl" ]; then
IPU_VERSION=ipu6
@@ -64,49 +68,44 @@ for i in ipu_tgl ipu_adl ipu_mtl; do
IPU_VERSION=ipu
fi
%cmake -DCMAKE_BUILD_TYPE=Release -DIPU_VER=$IPU_VERSION \
+ -DCMAKE_INSTALL_SUB_PATH:PATH="$i" \
+ -DCMAKE_INSTALL_SYSCONFDIR:PATH="share/defaults/etc" \
-DBUILD_CAMHAL_TESTS=OFF -DUSE_PG_LITE_PIPE=ON ..
%make_build
popd
-
- mkdir $i"_adaptor" && pushd $i"_adaptor"
- %cmake ../src/hal/hal_adaptor
- popd
- mv src/platformdata/PlatformData.h.orig src/platformdata/PlatformData.h
done
+# hal_adaptor.so dispatches between different libcamhal.so builds, only build it once
+mkdir hal_adaptor && pushd hal_adaptor
+%cmake ../src/hal/hal_adaptor
+%make_build
+popd
+
%install
for i in ipu_tgl ipu_adl ipu_mtl; do
pushd $i
%make_install
- mkdir %{buildroot}%{_libdir}/$i
- mv %{buildroot}%{_usr}/lib/libcamhal.so %{buildroot}%{_libdir}/$i/
- mv %{buildroot}%{_datadir}/defaults/etc/camera %{buildroot}%{_datadir}/defaults/etc/$i
- popd
- pushd $i"_adaptor"
- %make_install
- mv %{buildroot}%{_usr}/lib64/libhal_adaptor.so %{buildroot}%{_libdir}/$i/
+ rm %{buildroot}%{_libdir}/$i/libcamhal.a
+ # new icamerasrc must use hal_adaptor, drop libcamhal.pc
+ rm -r %{buildroot}%{_libdir}/$i/pkgconfig
popd
done
-# We don't want static libs
-rm %{buildroot}%{_usr}/lib/libcamhal.a
+pushd hal_adaptor
+%make_install
+popd
-# symbolic link + udev is used to resolve the library name conflict.
-ln -sf %{_rundir}/libcamhal.so %{buildroot}%{_libdir}/libcamhal.so
-ln -sf %{_rundir}/libhal_adaptor.so %{buildroot}%{_libdir}/libhal_adaptor.so
+# udev-rules set the ipu_xxx /run/v4l2-relayd cfg link + /dev/ipu-psys0 uaccess
install -p -m 0644 -D %{SOURCE1} %{buildroot}%{_udevrulesdir}/60-intel-ipu6.rules
-# Make sure libcamhal.so can be found when building code on systems without an IPU6
-sed -i -e "s|\${prefix}/lib|\${prefix}/lib64/ipu_tgl|g"
%{buildroot}%{_libdir}/pkgconfig/libcamhal.pc
-sed -i -e "s|\${prefix}/lib|\${prefix}/lib64/ipu_tgl|g"
%{buildroot}%{_libdir}/pkgconfig/hal_adaptor.pc
-
-# v4l2-relayd configuration examples
-install -p -D -m 0644 %{SOURCE2} %{buildroot}%{_datadir}/defaults/etc/ipu6ep/v4l2-relayd
-install -p -D -m 0644 %{SOURCE3} %{buildroot}%{_datadir}/defaults/etc/ipu6/v4l2-relayd
+# v4l2-relayd configuration examples (mtl uses same config as adl)
+install -p -m 0644 %{SOURCE2}
%{buildroot}%{_datadir}/defaults/etc/camera/ipu_adl/v4l2-relayd
+install -p -m 0644 %{SOURCE2}
%{buildroot}%{_datadir}/defaults/etc/camera/ipu_mtl/v4l2-relayd
+install -p -m 0644 %{SOURCE3}
%{buildroot}%{_datadir}/defaults/etc/camera/ipu_tgl/v4l2-relayd
# Make kmod-intel-ipu6 use /dev/video7 leaving /dev/video0 for loopback
-install -p -D -m 0644 %{SOURCE4} %{buildroot}%{_modprobedir}/intel_ipu6_isys.conf
+install -p -D -m 0644 %{SOURCE4} %{buildroot}%{_modprobedir}/icamera_ipu6_isys.conf
%post
@@ -120,23 +119,30 @@ fi
%files
%license LICENSE
-%{_libdir}/*/libcamhal.so
-%{_libdir}/*/libhal_adaptor.so
-%{_libdir}/libcamhal.so
-%{_libdir}/libhal_adaptor.so
-%{_datadir}/defaults/etc/*
-%{_modprobedir}/intel_ipu6_isys.conf
+# per variant libcamhal.so links are also in main pkg because libhal_adaptor opens them
+%{_libdir}/*/libcamhal.so*
+%{_libdir}/libhal_adaptor.so.*
+%{_datadir}/defaults
+%{_modprobedir}/icamera_ipu6_isys.conf
%{_udevrulesdir}/60-intel-ipu6.rules
%files devel
-%{_includedir}/libcamhal
%{_includedir}/hal_adaptor
-%{_libdir}/pkgconfig/libcamhal.pc
+%{_libdir}/libhal_adaptor.so
%{_libdir}/pkgconfig/hal_adaptor.pc
%changelog
+* Mon Jun 24 2024 Hans de Goede <hdegoede(a)redhat.com> - 0.0-18.20240509git289e645
+- Update to commit 289e645dffbd0ea633f10bb4f93855f1e4429e9a
+- Update /lib/modprobe.d/intel_ipu6_isys.conf for the out of tree module
+ being renamed to icamera_ipu6_isys
+- Adjust things for the libraries now having a proper .so.0 soname
+- hal_adaptor.so dispatches between different libcamhal.so builds, only build it once
+- New icamerasrc must use hal_adaptor, drop libcamhal files from -devel
+- Fix ownership of /usr/share/defaults and /usr/share/defaults/etc
+
* Tue Mar 12 2024 Kate Hsuan <hpa(a)redhat.com> - 0.0-17.20230208git884b81a
- Update to the latest upstream commit
- Include a new library hal_adaptor.so
diff --git a/sources b/sources
index 2a613c0..44293da 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (ipu6-camera-hal-da2e282.tar.gz) =
d6d61db6b88989ad44da930bb7953eb0d63629797680e987975453a2aea6f2664cac043c0ff91e8f8af544cebabc2bf9d8e3e43fb14a1d523d03e9cfa501e9bd
+SHA512 (ipu6-camera-hal-289e645.tar.gz) =
af478c663d2666b5abee59fcbe3cc1f225ee43911cc0a19a2284fc781e2c45c2322724bbca22312569c478137902b890934093c3a95edc7cba6aa8a23dcc44b1