Open lukemarsden opened 1 year ago
With kernel 6.7 on Fedora 39, success rate with my Lenovo X11 Gen 11 has dropped to 0%. Also, booting Windows in between does not help anymore.
# dmesg | grep -E 'ov2740|ipu6'
[ 7.510170] intel-ipu6 0000:00:05.0: enabling device (0000 -> 0002)
[ 7.510470] intel-ipu6 0000:00:05.0: Device 0xa75d (rev: 0x1)
[ 7.510488] intel-ipu6 0000:00:05.0: physical base address 0x603c000000
[ 7.510490] intel-ipu6 0000:00:05.0: mapped as: 0x0000000077df4fb4
[ 7.510565] intel-ipu6 0000:00:05.0: IPU in secure mode
[ 7.510569] intel-ipu6 0000:00:05.0: IPU secure touch = 0x0
[ 7.510571] intel-ipu6 0000:00:05.0: IPU camera mask = 0xff
[ 7.530341] intel-ipu6 0000:00:05.0: IPC reset done
[ 7.530345] intel-ipu6 0000:00:05.0: cpd file name: intel/ipu6ep_fw.bin
[ 7.534974] intel-ipu6 0000:00:05.0: FW version: 20230102
[ 7.586383] intel-ipu6 0000:00:05.0: Device 0xa75d (rev: 0x1)
[ 7.586426] intel-ipu6 0000:00:05.0: physical base address 0x603c000000
[ 7.586428] intel-ipu6 0000:00:05.0: mapped as: 0x0000000077df4fb4
[ 7.587498] intel-ipu6 0000:00:05.0: IPU in secure mode
[ 7.587502] intel-ipu6 0000:00:05.0: IPU secure touch = 0x0
[ 7.587504] intel-ipu6 0000:00:05.0: IPU camera mask = 0xff
[ 7.590365] intel-ipu6 0000:00:05.0: IPC reset done
[ 7.590368] intel-ipu6 0000:00:05.0: cpd file name: intel/ipu6ep_fw.bin
[ 7.590835] intel-ipu6 0000:00:05.0: FW version: 20230102
Has anyone had any better luck?
@jwrdegoede great progress with the open source driver.
Unfortunately still only 30% reliable on my X1 Gen Carbon 11 and about 70% reliable on the X1 Yoga Gen 8.
Also seeing more washed out colour, but it's exciting to see it working without the v4l-relay.
Any ideas who we can ping at Intel to get some movement on the more fundamental reliability issue on these machines? What further device details or instrumentation can I provide?
Following https://copr.fedorainfracloud.org/coprs/jwrdegoede/ipu6-softisp/, seeing the same dmesg 70% of the time when the sensor times (original issue on this thread). Fresh fc39.
[ 1257.974947] intel_ipu6_isys.isys intel_ipu6.isys.40: stream stop time out
[ 1260.152009] intel_ipu6_isys.isys intel_ipu6.isys.40: stream close time out
[ 1267.447995] intel_ipu6_isys.isys intel_ipu6.isys.40: stream stop time out
[ 1269.495069] intel_ipu6_isys.isys intel_ipu6.isys.40: stream close time out
System Information
Manufacturer: LENOVO
Product Name: 21HMCTO1WW
Version: ThinkPad X1 Carbon Gen 11
[...]
Wake-up Type: Power Switch
SKU Number: LENOVO_MT_21HM_BU_Think_FM_ThinkPad X1 Carbon Gen 11
Family: ThinkPad X1 Carbon Gen 11
Linux fedora 6.7.1-200.1.ipu6.fc39.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jan 24 21:55:31 UTC 2024 x86_64 GNU/Linux
@jwrdegoede just wanted to add a thank-you, your COPR https://copr.fedorainfracloud.org/coprs/jwrdegoede/ipu6-softisp/ is the only stable way to run the webcam on my X1 Yoga Gen 8 right now. Ubuntu 24.04 nightly was working with the webcam, but broke itself (and emojis stopped working :joy:), and the original https://hansdegoede.livejournal.com/27276.html is no longer working on latest 6.7.9 kernel on fc39.
Even though the colour is a bit washed out, I'm able to use my newer hardware again, so thank you! I also love the fact that the kernel is pinned, knowing that a kernel update can break your webcam any day is annoying :) The kernel also works with bluetooth, 5G and suspend, which is a small miracle.
Is there a near-term plan to improve the washed out colours?
Not succeeding in fedora 39 on a dell xps 9320, but I feel like I'm missing something basic. It's not it's not trying to connect to he camera at all. Not finding any relevant errors either.
# dmesg | grep -E 'ov2740|ipu6'
[ 0.000000] Linux version 6.7.1-200.1.ipu6.fc39.x86_64 (mockbuild@ec318dcebdd54443ad88e7a1e85dfd0a) (gcc (GCC) 13.2.1 20231205 (Red Hat 13.2.1-6), GNU ld version 2.40-13.fc39) #1 SMP PREEMPT_DYNAMIC Wed Jan 24 21:55:31 UTC 2024
[ 0.000000] Command line: BOOT_IMAGE=(hd0,gpt7)/vmlinuz-6.7.1-200.1.ipu6.fc39.x86_64 root=UUID=363ed805-a453-4c64-b849-f8ae575f439f ro rootflags=subvol=root rd.luks.uuid=luks-625a417b-ab29-4568-983c-c40770ed3480 rhgb quiet mem_sleep_default=s2idle i915.enable_psr=0 resume=UUID=363ed805-a453-4c64-b849-f8ae575f439f resume_offset=75549882 rd.driver.blacklist=nouveau modprobe.blacklist=nouveau
[ 0.055212] Kernel command line: BOOT_IMAGE=(hd0,gpt7)/vmlinuz-6.7.1-200.1.ipu6.fc39.x86_64 root=UUID=363ed805-a453-4c64-b849-f8ae575f439f ro rootflags=subvol=root rd.luks.uuid=luks-625a417b-ab29-4568-983c-c40770ed3480 rhgb quiet mem_sleep_default=s2idle i915.enable_psr=0 resume=UUID=363ed805-a453-4c64-b849-f8ae575f439f resume_offset=75549882 rd.driver.blacklist=nouveau modprobe.blacklist=nouveau
[ 0.055321] Unknown kernel command line parameters "rhgb BOOT_IMAGE=(hd0,gpt7)/vmlinuz-6.7.1-200.1.ipu6.fc39.x86_64", will be passed to user space.
[ 1.606878] usb usb1: Manufacturer: Linux 6.7.1-200.1.ipu6.fc39.x86_64 xhci-hcd
[ 1.607141] usb usb2: Manufacturer: Linux 6.7.1-200.1.ipu6.fc39.x86_64 xhci-hcd
[ 1.609344] usb usb3: Manufacturer: Linux 6.7.1-200.1.ipu6.fc39.x86_64 xhci-hcd
[ 1.610639] usb usb4: Manufacturer: Linux 6.7.1-200.1.ipu6.fc39.x86_64 xhci-hcd
[ 2.399849] BOOT_IMAGE=(hd0,gpt7)/vmlinuz-6.7.1-200.1.ipu6.fc39.x86_64
[ 15.424259] intel-ipu6 0000:00:05.0: enabling device (0000 -> 0002)
[ 15.424504] intel-ipu6 0000:00:05.0: IPU6 in non-secure mode touch 0x0 mask 0xff
[ 15.428447] intel-ipu6 0000:00:05.0: FW version: 20220510
[ 15.432657] intel-ipu6 0000:00:05.0: IPU6-v3[465d] hardware version 5
# uname -a
Linux 6.7.1-200.1.ipu6.fc39.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jan 24 21:55:31 UTC 2024 x86_64 GNU/Linux
# qcam
[0:01:09.812481594] [5024] INFO Camera camera_manager.cpp:284 libcamera v0.0.0+3-70b69666
[0:01:09.820633664] [5040] ERROR SimplePipeline simple.cpp:1496 No sensor found
# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 512-871, parent: platform/INTC1055:00, INTC1055:00:
gpiochip1: GPIOs 872-935, parent: auxiliary/usb_ljca.ljca-gpio.0, INTC1096:00, can sleep:
Any ideas?
@jwrdegoede one more bit of feedback on the copr, when the webcam has to do a "retry" before it starts, sometimes the video comes up "juddery". It feels like there are maybe two simultaneous streams from the webcam that are slightly out of sync with eachother. Maybe this has to do with the first attempt to connect appearing to fail, but actually starting streaming frames, and then the second attempt also ends up streaming them? I'm totally guessing there. Just FYI.
Restarting firefox is normally sufficient to fix it when it does that.
I think I came across this issue while testing the embedded data support with Lenovo X1 Carbon Gen 10. I don't know what the actual reason is but I can start streaming reliably (tried about 200 times) after disabling runtime PM on the ov2740 sensor: https://git.linuxtv.org/sailus/media_tree.git/commit/?h=ipu6&id=af377d7fa423f371a3a9b8288b8d65da8a90f47e. This is indeed just a hack, a proper fix would likely end up being somewhere else than this driver. Without the patch in about 50 % of the attempts streaming is supposed to start but no buffers (or anything else) are returned by the ISYS driver.
I think I came across this issue while testing the embedded data support with Lenovo X1 Carbon Gen 10. I don't know what the actual reason is but I can start streaming reliably (tried about 200 times) after disabling runtime PM on the ov2740 sensor: https://git.linuxtv.org/sailus/media_tree.git/commit/?h=ipu6&id=af377d7fa423f371a3a9b8288b8d65da8a90f47e. This is indeed just a hack, a proper fix would likely end up being somewhere else than this driver. Without the patch in about 50 % of the attempts streaming is supposed to start but no buffers (or anything else) are returned by the ISYS driver.
@s-ailus good catch. Can you try extending the msleep in ov2740_resume() and also try putting a msleep between the clk_prepare_enable() and the gpiod_set_value_cansleep() ?
Hopefully that will fix it. If not then I guess that the reset pin may not be wired up, and that the ACPI PS0 / PS3 methods do actually turn the sensor on/off and without a proper reset it then gets stuck.
Which would suggest Windows never powers down the sensor ... Or maybe we are missing a sw-reset as part of our stream on commands and/or the sleep after the swreset is too short ?
Great news, thanks @s-ailus !
@jwrdegoede any chance you could bake this workaround into a build of your copr kernel please? I'd love to test it on my X1 Carbon Gen 11 where I couldn't get more than 30% success rate with the camera. Also making the Yoga webcam more reliable would be a huge quality of life improvement. I don't mind a slight reduction in battery life.
I think I came across this issue while testing the embedded data support with Lenovo X1 Carbon Gen 10. I don't know what the actual reason is but I can start streaming reliably (tried about 200 times) after disabling runtime PM on the ov2740 sensor: https://git.linuxtv.org/sailus/media_tree.git/commit/?h=ipu6&id=af377d7fa423f371a3a9b8288b8d65da8a90f47e. This is indeed just a hack, a proper fix would likely end up being somewhere else than this driver. Without the patch in about 50 % of the attempts streaming is supposed to start but no buffers (or anything else) are returned by the ISYS driver.
This solves the issue for me, too, on Fedora 39 and Fedora 40, thanks! Camera indeed seems to work 100%, now.
Patch for current tree, here:
iff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c
index 2b2fbf2d9..f00b95f79 100644
--- a/drivers/media/i2c/ov2740.c
+++ b/drivers/media/i2c/ov2740.c
@@ -1585,7 +1585,7 @@ static int ov2740_probe(struct i2c_client *client)
*/
pm_runtime_set_active(&client->dev);
pm_runtime_enable(&client->dev);
- pm_runtime_idle(&client->dev);
+ pm_runtime_get(&client->dev);
return 0;
Do you mind sharing a kernel rpm please?
lukemarsden.net @.*** @lmarsden https://twitter.com/lmarsden
On Sat, 27 Apr 2024 at 19:37, Marc Kupietz @.***> wrote:
I think I came across this issue while testing the embedded data support with Lenovo X1 Carbon Gen 10. I don't know what the actual reason is but I can start streaming reliably (tried about 200 times) after disabling runtime PM on the ov2740 sensor: https://git.linuxtv.org/sailus/media_tree.git/commit/?h=ipu6&id=af377d7fa423f371a3a9b8288b8d65da8a90f47e http://url. This is indeed just a hack, a proper fix would likely end up being somewhere else than this driver. Without the patch in about 50 % of the attempts streaming is supposed to start but no buffers (or anything else) are returned by the ISYS driver.
This solves the issue for me, too, on Fedora 39 and Fedora 40, thanks! Camera indeed seems to work 100%, now.
Patch for current tree, here:
iff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 2b2fbf2d9..f00b95f79 100644--- a/drivers/media/i2c/ov2740.c+++ b/drivers/media/i2c/ov2740.c@@ -1585,7 +1585,7 @@ static int ov2740_probe(struct i2c_client client) / pm_runtime_set_active(&client->dev); pm_runtime_enable(&client->dev);- pm_runtime_idle(&client->dev);+ pm_runtime_get(&client->dev);
return 0;
— Reply to this email directly, view it on GitHub https://github.com/intel/ipu6-drivers/issues/187#issuecomment-2081124813, or unsubscribe https://github.com/notifications/unsubscribe-auth/AACATURQNV4AT2CV4VRSAVTY7PWALAVCNFSM6AAAAAA5TDSMNWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOBRGEZDIOBRGM . You are receiving this because you were mentioned.Message ID: @.***>
And does suspend still work with this change?
lukemarsden.net @.*** @lmarsden https://twitter.com/lmarsden
On Sat, 27 Apr 2024 at 19:40, Luke Marsden @.***> wrote:
Do you mind sharing a kernel rpm please?
lukemarsden.net @.*** @lmarsden https://twitter.com/lmarsden
On Sat, 27 Apr 2024 at 19:37, Marc Kupietz @.***> wrote:
I think I came across this issue while testing the embedded data support with Lenovo X1 Carbon Gen 10. I don't know what the actual reason is but I can start streaming reliably (tried about 200 times) after disabling runtime PM on the ov2740 sensor: https://git.linuxtv.org/sailus/media_tree.git/commit/?h=ipu6&id=af377d7fa423f371a3a9b8288b8d65da8a90f47e http://url. This is indeed just a hack, a proper fix would likely end up being somewhere else than this driver. Without the patch in about 50 % of the attempts streaming is supposed to start but no buffers (or anything else) are returned by the ISYS driver.
This solves the issue for me, too, on Fedora 39 and Fedora 40, thanks! Camera indeed seems to work 100%, now.
Patch for current tree, here:
iff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c index 2b2fbf2d9..f00b95f79 100644--- a/drivers/media/i2c/ov2740.c+++ b/drivers/media/i2c/ov2740.c@@ -1585,7 +1585,7 @@ static int ov2740_probe(struct i2c_client client) / pm_runtime_set_active(&client->dev); pm_runtime_enable(&client->dev);- pm_runtime_idle(&client->dev);+ pm_runtime_get(&client->dev);
return 0;
— Reply to this email directly, view it on GitHub https://github.com/intel/ipu6-drivers/issues/187#issuecomment-2081124813, or unsubscribe https://github.com/notifications/unsubscribe-auth/AACATURQNV4AT2CV4VRSAVTY7PWALAVCNFSM6AAAAAA5TDSMNWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOBRGEZDIOBRGM . You are receiving this because you were mentioned.Message ID: @.***>
Do you mind sharing a kernel rpm please? lukemarsden.net @.*** @lmarsden https://twitter.com/lmarsden
I have built the modules outside the kernel tree with dkms, as described here: https://github.com/intel/ipu6-drivers#3-build-with-dkms
With a little variation/addition to get rid of the old conflicting modules:
dkms install ipu6-drivers/0.0.0
for m in /usr/lib/modules/$(uname -r)/extra/*.ko.xz; do find /usr/lib/modules/$(uname -r) -name $(basename $m) -not -path $m -delete; done; find /usr/lib/modules/$(uname -r) -name usb-ljca.ko.xz -delete
What's still sometimes required is:
systemctl restart v4l2-relayd
And does suspend still work with this change? lukemarsden.net @.*** @lmarsden https://twitter.com/lmarsden
Yes, suspend still works, but indeed not, while the camera is running.
OK, wow, this issue is finally worked-around on my X1 Carbon Gen 11, and webcam is working reliably :tada: Thank you everyone!
This is on Manjaro with kernel 6.6.27-1-MANJARO
for now, because it (a) has functional non-softisp setup, so picture quality is better and (b) is easier to patch kernel modules by pointing PKGBUILD files at forks of git repos
Instructions based on https://github.com/stefanpartheym/archlinux-ipu6-webcam:
./uninstall.sh
and then reboot. Possibly run paru -R intel-ipu6-dkms-git-fix intel-ipu6ep-camera-hal-git-fix icamerasrc-git-fix intel-ipu6ep-camera-bin-fix
if ./uninstall.sh
gives errors.fixes-for-recent-releases-77-79
branch - this contains the patch above in https://github.com/lukemarsden/ipu6-drivers/commit/473f5226586154cd4abf8553b7939551c34c56bd (pointed to in https://github.com/lukemarsden/archlinux-ipu6-webcam/commit/9f28e123eb95344ff6dc85973d953e3954908823), this is built on top of the code in https://github.com/stefanpartheym/archlinux-ipu6-webcam/pull/80./install.sh -as
sudo gst-launch-1.0 icamerasrc ! autovideosink
now works 100% of the time on a machine where it used to work <30% of the time@kupietz @lukemarsden thank you both for confirming that disabling runtime pm fixes things.
For upstream I would like to come up with a better fix then disabling runtime-pm. As I cannot reproduce this myself I hope that you can help me with finding a better fix:
Please create a /etc/modprobe.d/intel_skl_int3472_discrete.conf
file with the following contents options intel_skl_int3472_discrete dyndbg
or add intel_skl_int3472_discrete.dyndbg
to your kernel commandline then reboot and after rebooting run: sudo dmesg > dmesg.txt
and then attach the generated dmesg.txt
file here.
Since you are now both building the drivers yourself can you please try replacing the disable-runtime-pm fix with this patch: 0001-media-ov2740-Attempt-to-fix-stream-on-issues.patch
Note for 1. I'm most interested in log lines like these 3:
[ 62.173820] int3472-discrete INT3472:05: Sensor module id: '6BF115T2'
[ 62.174338] int3472-discrete INT3472:05: reset \_SB.PC00.XHCI.RHUB.HS08.VGPO pin 10 active-low
[ 62.174430] int3472-discrete INT3472:05: privacy-led \_SB.PC00.XHCI.RHUB.HS08.VGPO pin 15 active-high
AFAIK the Carbon Gen 11 has the same camera module as the X1 Yoga Gen 8 from which these 2 log lines are, so I wonder if there maybe is an issue with the pin configuration in the ACPI tables on the Carbon Gen 11.
Thank you, @jwrdegoede , for trying to find a better fix!
Here the dmesgs before and after replacing the patches:
dmesg_before_patch_replace.txt dmesg_after_patch_replace.txt
With your patch, the camera does not work anymore.
@kupietz thank you for testing the patch so quickly, looking at the broken log it seems that ov2740_identify_module() failed, which it does sometime independent of the stream start issue. Note this happens before runtime pm is enabled.
So it seems that you hit an unrelated issue (for which I also have an idea how to fix this now, so thank you for that).
Can you reboot into the kernel with my patch attempting to fix it again and try again ? The ov2740 i2c-INT3474:01: chip id mismatch: 2740!=0
error should be intermittent so hopefully after a reboot it will be gone. Unless my adding of sleeps has made this other problem worse.
Applying this patch: 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt
Together with my previous patch to add a bunch of sleeps will hopefully fix the chip id mismatch issue.
@kupietz thank you for testing the patch so quickly, looking at the broken log it seems that ov2740_identify_module() failed, which it does sometime independent of the stream start issue. Note this happens before runtime pm is enabled.
So it seems that you hit an unrelated issue (for which I also have an idea how to fix this now, so thank you for that).
I don't think it can be unrelated to the runtime pm patch, as the cam works reliably with the patch and reliably not without it. I have no idea, why.
Can you reboot into the kernel with my patch attempting to fix it again and try again ? The
ov2740 i2c-INT3474:01: chip id mismatch: 2740!=0
error should be intermittent so hopefully after a reboot it will be gone. Unless my adding of sleeps has made this other problem worse.
It doesn't seem to work. Tried it already for some time and a couple of reboots.
Applying this patch: 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt
Together with my previous patch to add a bunch of sleeps will hopefully fix the chip id mismatch issue.
Thanks, @jwrdegoede ! With this patch (alone and together with the first), the camera seems to work reliably again.
I still have to restart v4l2-relayd after/before e.g. zoom sessions or just streaming from v4l2src.
Applying this patch: 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt
Together with my previous patch to add a bunch of sleeps will hopefully fix the chip id mismatch issue.
@jwrdegoede, would you like to make a corresponding pull request? With this patch alone, the camera runs 100% reliably on my Carbon X1 Gen 11 with Fedora 40 and currently kernel 6.8.8 – without this patch, close to not at all since months and kernel 6.7.
Here the dmesg output with int3472 debugging. Let me know when you need more logs. dmesg-after-Initialize-reset-signal-to-high-not-low.txt
@lukemarsden have you tried this patch?
Interesting, with 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt I see the first sign of life for the webcam on 6.8.8-2-MANJARO
- a kernel I'm keen to use because it fixes suspend issues for the FM350 5G WWAN
However with that configuration I'm back to seeing intermittent failures per the original post in this thread, when also applying the patch to disable PM (https://github.com/lukemarsden/ipu6-drivers/commit/8442600622249ca9498208738e22ac253f1f1b72), I think it's slightly more reliable (hard to tell exactly) but not 100% like it was with 6.6 + only the PM patch
Haven't yet tested 0001-media-ov2740-Attempt-to-fix-stream-on-issues.patch, or the high-not-low patch on 6.6
For ref, here's the tree I'm using: https://github.com/lukemarsden/ipu6-drivers/commits/high-not-low/
adding the sleeps (https://github.com/lukemarsden/ipu6-drivers/commit/04691add59d2aa54dacef8823d6a334ee429066a) doesn't make any difference, we're still back to ~30% reliability with https://github.com/lukemarsden/ipu6-drivers/commits/high-not-low/ which includes:
I'm also nervous that I used a newer version of ipu6-drivers
on this newer kernel versus the https://github.com/lukemarsden/ipu6-drivers/commits/fix-pm-runtime-idle/ branch I used on 6.6, so, might be other confounding factors. The fix-pm-runtime-idle
branch alone on 6.8 (with just the PM fix) didn't seem to work at all.
@kupietz what tree are you applying these patches to?
@kupietz what tree are you applying these patches to?
To the master branch here, to build the modules. I've successfully tested the patches here with kernel 6.8.7 and 6.8.8. I had this 30% reliability before, too, (with kernel 6.6 I think), but with the two patches it seems to be 100%, now.
@kupietz would you mind writing down how you're getting things working on stock Fedora, step by step please? I'll try to repro your exact setup, rather than from Manjaro.
@kupietz are you using @jwrdegoede’s original rpmfusion userland stack https://hansdegoede.livejournal.com/27276.html but compiling ipu6-drivers from intel’s github with dkms? or something else?
if the former, how do you remove the ipu6 module from rpmfusion but keep the rest of the bits installed?
@kupietz are you using @jwrdegoede’s original rpmfusion userland stack https://hansdegoede.livejournal.com/27276.html but compiling ipu6-drivers from intel’s github with dkms? or something else?
No, I'm using the ipu6-driver sources here (https://github.com/intel/ipu6-drivers ) and apply the two patches 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt and 0001-media-ov2740-Attempt-to-fix-stream-on-issues.patch
if the former, how do you remove the ipu6 module from rpmfusion but keep the rest of the bits installed?
The removal of the conflicting modules and the rest exactly as described here:
https://github.com/intel/ipu6-drivers/issues/187#issuecomment-2081130149
ok thanks, sorry I forgot you already explained! this is all with rpmfusion packages for userland?
I tried booting into my fedora partition and:
akmod-intel-ipu6
in order to pull in the depdendencies per https://hansdegoede.livejournal.com/27276.html, except not using --enablerepo=updates-testing
because it pulled in a too-new kernel that had graphics glitches6.8.8-300.fc40.x86_64
git clone https://github.com/intel/ivsc-driver.git
, cp -r ivsc-driver/backport-include ivsc-driver/drivers ivsc-driver/include .
)for m in /usr/lib/modules/$(uname -r)/extra/*.ko.xz; do find /usr/lib/modules/$(uname -r) -name $(basename $m) -not -path $m -delete; done; find /usr/lib/modules/$(uname -r) -name usb-ljca.ko.xz -delete
I also checked in /usr/lib/modules/$(uname -r)/extra/
and saw an intel-ipu6
directory with timestamps dated April 19, so tried deleting that entire directory, and rebooted again.
All in, no luck. Webcam light doesn't even turn on. dmesg log shows errors about int3472-discrete INT3472:06: cannot find GPIO chip INTC1096:00, deferring
(not 100% sure if this is related to the webcam?). What did I do wrong?
luke@fedora:~$ sudo dmesg |grep ipu6
[ 7.160451] intel_ipu6: loading out-of-tree module taints kernel.
[ 7.160459] intel_ipu6: module verification failed: signature and/or required key missing - tainting kernel
[ 7.173942] intel-ipu6 0000:00:05.0: enabling device (0000 -> 0002)
[ 7.174363] intel-ipu6 0000:00:05.0: Device 0xa75d (rev: 0x1)
[ 7.174389] intel-ipu6 0000:00:05.0: physical base address 0x603c000000
[ 7.174391] intel-ipu6 0000:00:05.0: mapped as: 0x0000000029f25f37
[ 7.174586] intel-ipu6 0000:00:05.0: IPU in secure mode
[ 7.174589] intel-ipu6 0000:00:05.0: IPU secure touch = 0x0
[ 7.174591] intel-ipu6 0000:00:05.0: IPU camera mask = 0xff
[ 7.190647] intel-ipu6 0000:00:05.0: IPC reset done
[ 7.191818] intel-ipu6 0000:00:05.0: FW version: 20230102
[ 7.194317] intel-ipu6 0000:00:05.0: Found supported sensor INT3474:01
[ 7.194381] intel-ipu6 0000:00:05.0: Connected 1 cameras
[ 7.196783] intel-ipu6 0000:00:05.0: Sending BOOT_LOAD to CSE
[ 7.220401] intel-ipu6 0000:00:05.0: Sending AUTHENTICATE_RUN to CSE
[ 7.296452] intel-ipu6 0000:00:05.0: CSE authenticate_run done
[ 7.296485] intel-ipu6 0000:00:05.0: IPU6-v3 driver version 1.0
[ 7.329406] intel-ipu6-psys intel-ipu6-psys0: pkg_dir entry count:8
[ 7.332455] intel-ipu6-psys intel-ipu6-psys0: psys probe minor: 0
sudo dmesg -w
[ 81.601862] int3472-discrete INT3472:06: cannot find GPIO chip INTC1096:00, deferring
[ 81.603316] int3472-discrete INT3472:05: cannot find GPIO chip INTC1096:00, deferring
sudo gst-launch-1.0 icamerasrc ! autovideosink
luke@fedora:~$ sudo gst-launch-1.0 icamerasrc ! autovideosink
Setting pipeline to PAUSED ...
[05-06 13:07:55.869] CamHAL[INF] aiqb file name ov13b10.aiqb
[05-06 13:07:55.871] CamHAL[INF] aiqb file name ov13b10.aiqb
[05-06 13:07:55.872] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.872] CamHAL[INF] aiqb file name ov13b10.aiqb
[05-06 13:07:55.872] CamHAL[INF] aiqb file name ov13b10.aiqb
[05-06 13:07:55.873] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.873] CamHAL[INF] aiqb file name ov8856.aiqb
[05-06 13:07:55.873] CamHAL[INF] aiqb file name ov8856.aiqb
[05-06 13:07:55.874] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.874] CamHAL[INF] aiqb file name ov8856.aiqb
[05-06 13:07:55.874] CamHAL[INF] aiqb file name ov8856.aiqb
[05-06 13:07:55.874] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.874] CamHAL[INF] aiqb file name ov01a10.aiqb
[05-06 13:07:55.875] CamHAL[INF] aiqb file name ov01a10.aiqb
[05-06 13:07:55.876] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.876] CamHAL[INF] aiqb file name ov01a10.aiqb
[05-06 13:07:55.876] CamHAL[INF] aiqb file name ov01a10.aiqb
[05-06 13:07:55.877] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.877] CamHAL[INF] aiqb file name OV02C10_1BG203N3_ADL.aiqb
[05-06 13:07:55.877] CamHAL[INF] aiqb file name OV02C10_1BG203N3_ADL.aiqb
[05-06 13:07:55.878] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.878] CamHAL[INF] aiqb file name OV02C10_1SG204N3_ADL.aiqb
[05-06 13:07:55.878] CamHAL[INF] aiqb file name OV02C10_1SG204N3_ADL.aiqb
[05-06 13:07:55.879] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.879] CamHAL[INF] aiqb file name OV02C10_CIFME14_ADL.aiqb
[05-06 13:07:55.879] CamHAL[INF] aiqb file name OV02C10_CIFME14_ADL.aiqb
[05-06 13:07:55.879] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.879] CamHAL[INF] aiqb file name OV02C10_1BG203N3_ADL.aiqb
[05-06 13:07:55.880] CamHAL[INF] aiqb file name OV02C10_1BG203N3_ADL.aiqb
[05-06 13:07:55.880] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.880] CamHAL[INF] aiqb file name OV02C10_1SG204N3_ADL.aiqb
[05-06 13:07:55.880] CamHAL[INF] aiqb file name OV02C10_1SG204N3_ADL.aiqb
[05-06 13:07:55.880] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.880] CamHAL[INF] aiqb file name OV02C10_CIFME14_ADL.aiqb
[05-06 13:07:55.880] CamHAL[INF] aiqb file name OV02C10_CIFME14_ADL.aiqb
[05-06 13:07:55.881] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.881] CamHAL[INF] aiqb file name OV2740_CJFLE23_ADL.aiqb
[05-06 13:07:55.881] CamHAL[INF] aiqb file name OV2740_CJFLE23_ADL.aiqb
[05-06 13:07:55.881] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.881] CamHAL[INF] aiqb file name HM2170_1SG205N3_ADL.aiqb
[05-06 13:07:55.882] CamHAL[INF] aiqb file name HM2170_1SG205N3_ADL.aiqb
[05-06 13:07:55.882] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.882] CamHAL[INF] aiqb file name HM2170_CJFME18_ADL.aiqb
[05-06 13:07:55.882] CamHAL[INF] aiqb file name HM2170_CJFME18_ADL.aiqb
[05-06 13:07:55.883] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.883] CamHAL[INF] aiqb file name HM2170_1SG205N3_ADL.aiqb
[05-06 13:07:55.883] CamHAL[INF] aiqb file name HM2170_1SG205N3_ADL.aiqb
[05-06 13:07:55.883] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.883] CamHAL[INF] aiqb file name HM2170_CJFME18_ADL.aiqb
[05-06 13:07:55.883] CamHAL[INF] aiqb file name HM2170_CJFME18_ADL.aiqb
[05-06 13:07:55.883] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.883] CamHAL[INF] aiqb file name HI556_1BG502T3_ADL.aiqb
[05-06 13:07:55.884] CamHAL[INF] aiqb file name HI556_1BG502T3_ADL.aiqb
[05-06 13:07:55.884] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.884] CamHAL[INF] aiqb file name HI556_CJFLE25_ADL.aiqb
[05-06 13:07:55.884] CamHAL[INF] aiqb file name HI556_CJFLE25_ADL.aiqb
[05-06 13:07:55.884] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.884] CamHAL[INF] aiqb file name ov01a1s.aiqb
[05-06 13:07:55.885] CamHAL[INF] aiqb file name ov01a1s.aiqb
[05-06 13:07:55.886] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.886] CamHAL[INF] aiqb file name OV08A10_YHUT_ADL.aiqb
[05-06 13:07:55.886] CamHAL[INF] aiqb file name OV08A10_YHUT_ADL.aiqb
[05-06 13:07:55.887] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.887] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.887] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.888] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.888] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.888] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.888] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.888] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.888] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.889] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.889] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.889] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.889] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.889] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.890] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.890] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.890] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.890] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.891] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.891] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.891] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.892] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.892] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.892] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.892] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.892] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.892] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.893] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.893] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.893] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.893] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.893] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.893] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.894] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.894] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.894] CamHAL[INF] aiqb file name IMX390_HDR_TGL.aiqb
[05-06 13:07:55.894] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.894] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.895] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.895] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.895] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.895] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.896] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.896] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.896] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.896] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.896] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.896] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.897] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.897] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.897] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.897] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.897] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.897] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.898] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.898] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.898] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.898] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.898] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.898] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.898] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.898] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.898] CamHAL[INF] aiqb file name AR0234_TGL_10bits.aiqb
[05-06 13:07:55.899] CamHAL[ERR] invalid media format, default value used.
[05-06 13:07:55.899] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.899] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.899] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.899] CamHAL[INF] (null), media format in tuning: 0, media format for aic 0.
[05-06 13:07:55.899] CamHAL[ERR] Failed to find DevName for cameraId: 0, get video node: ov13b10 , devname: /dev/v4l-subdev1
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[05-06 13:07:55.920] CamHAL[ERR] Get entity fail for calling getEntityById
[05-06 13:07:55.920] CamHAL[ERR] Get entity fail for calling getEntityById
[05-06 13:07:55.920] CamHAL[ERR] setup Link ov13b10 [-1:0] ==> Intel IPU6 CSI-2 [-1x0] enable 1 failed.
[05-06 13:07:55.920] CamHAL[ERR] set MediaCtlConf McLink failed: ret = -1
[05-06 13:07:55.920] CamHAL[ERR] set up mediaCtl failed
[05-06 13:07:55.920] CamHAL[ERR] @configure Device Configure failed
[05-06 13:07:55.920] CamHAL[ERR] failed to config streams.
ERROR: from element /GstPipeline:pipeline0/Gstcamerasrc:camerasrc0: src pad: Internal data flow error.
Additional debug info:
gstcambasesrc.cpp(3153): gst_cam_base_src_loop (): /GstPipeline:pipeline0/Gstcamerasrc:camerasrc0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 0:00:00.014406447
Setting pipeline to NULL ...
Freeing pipeline ...
sudo uname -a
Linux fedora 6.8.8-300.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Apr 27 17:53:31 UTC 2024 x86_64 GNU/Linux
I was a bit suspicious that there was no ov2740
module:
luke@fedora:~$ sudo find /usr/lib/modules/$(uname -r)/extra/ |grep ov2740
luke@fedora:~$
Or did it get renamed?
I was a bit suspicious that there was no
ov2740
module:luke@fedora:~$ sudo find /usr/lib/modules/$(uname -r)/extra/ |grep ov2740 luke@fedora:~$
Or did it get renamed?
No, it should definitely be there:
$ ls -l /usr/lib/modules/6.8.8-300.fc40.x86_64/extra/
total 360
-rw-r--r--. 1 root root 5968 May 3 17:50 gpio-ljca.ko.xz
-rw-r--r--. 1 root root 10336 May 3 17:50 hi556.ko.xz
-rw-r--r--. 1 root root 8464 May 3 17:50 hm11b1.ko.xz
-rw-r--r--. 1 root root 8488 May 3 17:50 hm2170.ko.xz
-rw-r--r--. 1 root root 9224 May 3 17:50 hm2172.ko.xz
-rw-r--r--. 1 root root 4864 May 3 17:50 i2c-ljca.ko.xz
-rw-r--r--. 1 root root 60948 May 3 17:50 intel-ipu6-isys.ko.xz
-rw-r--r--. 1 root root 45540 May 3 17:50 intel-ipu6-psys.ko.xz
-rw-r--r--. 1 root root 46224 May 3 17:50 intel-ipu6.ko.xz
-rw-r--r--. 1 root root 3908 May 3 17:50 intel_vsc.ko.xz
-rw-r--r--. 1 root root 12296 May 3 17:50 ljca.ko.xz
-rw-r--r--. 1 root root 18024 May 3 17:50 mei-vsc.ko.xz
-rw-r--r--. 1 root root 5964 May 3 17:50 mei_ace.ko.xz
-rw-r--r--. 1 root root 6272 May 3 17:50 mei_ace_debug.ko.xz
-rw-r--r--. 1 root root 4924 May 3 17:50 mei_csi.ko.xz
-rw-r--r--. 1 root root 8832 May 3 17:50 mei_pse.ko.xz
-rw-r--r--. 1 root root 8012 May 3 17:50 ov01a10.ko.xz
-rw-r--r--. 1 root root 8780 May 3 17:50 ov01a1s.ko.xz
-rw-r--r--. 1 root root 9704 May 3 17:50 ov02c10.ko.xz
-rw-r--r--. 1 root root 9444 May 3 17:50 ov02e10.ko.xz
-rw-r--r--. 1 root root 10388 May 3 17:50 ov2740.ko.xz
-rw-r--r--. 1 root root 4296 May 3 17:50 spi-ljca.ko.xz
drwxr-xr-x. 1 root root 36 May 3 17:46 v4l2loopback
Maybe you did not actually make the modules in ipu6-drivers (make -j $(nrpoc)
) or you need to force install them (sudo dkms install --force ipu6-drivers/0.0.0
)?
What I forgot to mention: I've also installed v4l2loopback.x86_64
v4l2-relayd.x86_64
from rpmfusion-free.
First of all thank you both for all the testing. I'm a bit surprised that just fixing the initial reset line state not only fixes probe() sometimes outright failing but that it also fixes the stream not starting problem for @kupietz .
One problem at probe() is that if the reset line is 0 before the driver acquires the GPIO then it is driven high (to reset the ov2740) only for a very short time. Here is a patch which fixes both the initial state and then waits a bit to ensure that the ov2740 actually sees the reset line go high and has time to fully enter reset: 0001-media-ov2740-Ensure-proper-reset-sequence-on-probe.patch
@lukemarsden when trying this please fully poweroff the laptop and then after 10 seconds power it back on. Since the sensor was not properly being reset it may be in some sort of weird limbo state until power-cycled.
About the ov2740 driver not showing up under: /usr/lib/modules/$(uname -r)/extra/
this is caused by recent changes by ipu6-drivers upstream where they no longer build the ov2740 driver with recent kernels since I merged all the necessary changes for ov2740 to work into the mainline kernel.
To get the extra version of the ov2740 to build again with the latest ipu6-drivers, apply this change to ipu6-drivers/Makefile
:
diff --git a/Makefile b/Makefile
index 6286beade..d679c061a 100644
--- a/Makefile
+++ b/Makefile
@@ -83,9 +83,9 @@ export CONFIG_VIDEO_OV02E10 = m
export CONFIG_VIDEO_HM2170 = m
export CONFIG_VIDEO_HM2172 = m
export CONFIG_VIDEO_HI556 = m
+export CONFIG_VIDEO_OV2740 = m
ifeq ($(call version_lt,$(KERNEL_VERSION),$(KV_OV2740)),true)
-export CONFIG_VIDEO_OV2740 = m
export CONFIG_VIDEO_GC5035 = m
endif
obj-y += drivers/media/i2c/
I have also posted more or less the same patch upstream for the upstream version of the ov2740 driver, note that the upstream driver did already properly initialize the gpio to high:
https://lore.kernel.org/linux-media/20240506132438.278920-1-hdegoede@redhat.com/
@lukemarsden I'm having the same issues that you are, but I also have this in dmesg:
My output from sudo gst-launch-1.0 icamerasrc ! autovideosink
looks the same as yours.
ThinkPad X1 Carbon Gen 11
product: 21HMCTO1WW
Linux biwia 6.7.12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.7.12-1 (2024-04-24) x86_64 GNU/Linux
The kernel is from Debian experimental.
First of all thank you both for all the testing. I'm a bit surprised that just fixing the initial reset line state not only fixes probe() sometimes outright failing but that it also fixes the stream not starting problem for @kupietz .
One problem at probe() is that if the reset line is 0 before the driver acquires the GPIO then it is driven high (to reset the ov2740) only for a very short time. Here is a patch which fixes both the initial state and then waits a bit to ensure that the ov2740 actually sees the reset line go high and has time to fully enter reset: 0001-media-ov2740-Ensure-proper-reset-sequence-on-probe.patch
For some reason, this patch does not seem to work as reliably for me as 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt together with 0001-media-ov2740-Attempt-to-fix-stream-on-issues.patch.
In ~70% of reboots, either the camera does not start at all (chip id mismatch: 2740!=0
) or the picture stays black.
I have also posted more or less the same patch upstream for the upstream version of the ov2740 driver, note that the upstream driver did already properly initialize the gpio to high:
https://lore.kernel.org/linux-media/20240506132438.278920-1-hdegoede@redhat.com/
I'm currently back to the old combination , but will try this variant later (ah, this is the same except that the high instead of low reset was already applied).
For some reason, this patch does not seem to work as reliably for me as 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt together with 0001-media-ov2740-Attempt-to-fix-stream-on-issues.patch.
Hmm, 2 more things to try and thank you for all the testing! :
For 2: I wonder if the DSDT has the clk and reset GPIOs swapped (in the end the clk is controlled by a GPIO too on these laptops) and thus instead of enabling the clk, then wait a bit for it too be stable and then take the ov2740 out of reset, we first take it out of reset and only then enable the clk .... So if swapping these 2 calls helps then it is likely the clk-enable and reset GPIOs are indeed swapped.
On Fedora, I couldn't get past
[ 81.601862] int3472-discrete INT3472:06: cannot find GPIO chip INTC1096:00, deferring
even after getting ov2740.ko.xz
to exist with https://github.com/lukemarsden/ipu6-drivers/commit/83ee2476b31b4364f09a6c1dca30882ee5319609
Back on Manjaro, I couldn't get anything out of the webcam even after shutting down for 10 seconds. I'm now getting this:
❯ sudo dmesg |grep ov2740
[ 5.574789] ov2740 i2c-INT3474:01: no link frequency 360000000 supported
[ 5.574794] ov2740 i2c-INT3474:01: error -EINVAL: failed to check HW configuration: -22
[ 5.575006] ov2740: probe of i2c-INT3474:01 failed with error -22
I fear some other changes might have landed upstream that have broken me :(
❯ sudo dmesg|grep ipu6
[ 5.168560] intel-ipu6 0000:00:05.0: enabling device (0000 -> 0002)
[ 5.169011] intel-ipu6 0000:00:05.0: Device 0xa75d (rev: 0x1)
[ 5.169033] intel-ipu6 0000:00:05.0: physical base address 0x603c000000
[ 5.169035] intel-ipu6 0000:00:05.0: mapped as: 0x000000005ba7bcbf
[ 5.169396] intel-ipu6 0000:00:05.0: IPU in secure mode
[ 5.169399] intel-ipu6 0000:00:05.0: IPU secure touch = 0x0
[ 5.169401] intel-ipu6 0000:00:05.0: IPU camera mask = 0xff
[ 5.186798] intel-ipu6 0000:00:05.0: IPC reset done
[ 5.189235] intel-ipu6 0000:00:05.0: FW version: 20230925
[ 5.195590] intel-ipu6 0000:00:05.0: Found supported sensor INT3474:01
[ 5.195679] intel-ipu6 0000:00:05.0: Connected 1 cameras
[ 5.205368] intel-ipu6 0000:00:05.0: Sending BOOT_LOAD to CSE
[ 5.222629] intel-ipu6 0000:00:05.0: Sending AUTHENTICATE_RUN to CSE
[ 5.302421] intel-ipu6 0000:00:05.0: CSE authenticate_run done
[ 5.302462] intel-ipu6 0000:00:05.0: IPU6-v3 driver version 1.0
[ 5.434618] intel-ipu6-psys intel-ipu6-psys0: pkg_dir entry count:8
[ 5.434747] intel-ipu6-psys intel-ipu6-psys0: psys probe minor: 0
[ 3012.564839] intel-ipu6 0000:00:05.0: IPU in secure mode
[ 4483.012916] intel-ipu6 0000:00:05.0: IPU in secure mode
❯ uname -a
Linux hope 6.8.8-2-MANJARO #1 SMP PREEMPT_DYNAMIC Thu May 2 10:47:46 UTC 2024 x86_64 GNU/Linux
Any ideas @jwrdegoede? Here are the patches I'm running: https://github.com/lukemarsden/ipu6-drivers/commits/high-not-low/
I also have a Lenovo 21HMCTO1WW with the same issues using the Ubuntu 6.8.0-32 noble-proposed kernel. Not much else I can add.
For some reason, this patch does not seem to work as reliably for me as 0001-media-ov2740-Initialize-reset-signal-to-high-not-low.patch.txt together with 0001-media-ov2740-Attempt-to-fix-stream-on-issues.patch.
Hmm, 2 more things to try and thank you for all the testing! :
1. What happens if you combine the new patch with the patch adding the sleeps to ov2740_resume()?
This seems to work almost as reliably as the old combination. But only almost. The advantage of the old combination seems to be that I can always recover from a black picture with one and sometimes a couple of systemctl restart v4l2-relayd
. With the new combination, I got stuck with a black picture after some camera starts and stops.
2. What happens if you swap the clk_prepare_enable() and the gpiod_set_value() calls in ov2740_resume() ?
You mean in ov2740_power_on, I guess? With this change, I couldn't get the camera to start, after three power cycles (
chip id mismatch: 2740!=0
).For 2: I wonder if the DSDT has the clk and reset GPIOs swapped (in the end the clk is controlled by a GPIO too on these laptops) and thus instead of enabling the clk, then wait a bit for it too be stable and then take the ov2740 out of reset, we first take it out of reset and only then enable the clk .... So if swapping these 2 calls helps then it is likely the clk-enable and reset GPIOs are indeed swapped.
Apparently not with my variant.
@jwrdegoede should I not be installing your akmod-intel-ipu6
when building the modules with DKMS (and then attempting to clean up the kernel modules)? Could that be why my system is broken on Fedora? If so, which specific packages (and from where) should I be installing? A short list of instructions (from fresh install) on how to test patches against Fedora would be tremendously helpful.
@jwrdegoede should I not be installing your
akmod-intel-ipu6
when building the modules with DKMS (and then attempting to clean up the kernel modules)? Could that be why my system is broken on Fedora? If so, which specific packages (and from where) should I be installing? A short list of instructions (from fresh install) on how to test patches against Fedora would be tremendously helpful.
Yes, you should not install the modules from the sources here and from akmod-intel-ipu6
. I accidentally, had this configuration once, too and was wondering why nothing works. Apart from what I described above, v4l2-relayd.x86_64
from @rpmfusion-free
should be installed. And even with the best working solution, I often have to restart it (systemctl restart v4l2-relayd
), after/before a Zoom session.
My model is, however, slightly different from yours, according to lshw:
product: 21HM0067GE (LENOVO_MT_21HM_BU_Think_FM_ThinkPad X1 Carbon Gen 11)
The situation is much more inconvenient on the 21HMCTO1WW. When it works, it's good for a Zoom session or two, with lucky. And then it will hang in "on" state. Nothing seems to work, e.g. systemctl restart v4l2-relayd
doesn't help, except a reboot.
Hi All, here is a new attempt at fixing the start/stop issues. If possible please give this a try 0001-media-ov2740-Attempt-3-to-fix-stream-on-issues.patch
Hi All, here is a new attempt at fixing the start/stop issues. If possible please give this a try 0001-media-ov2740-Attempt-3-to-fix-stream-on-issues.patch
Thank you for your tireless attempts!
(Based this on the changed master branch, as here: https://github.com/kupietz/ipu6-drivers/tree/media-ov2740-Attempt-3-to-fix-stream-on-issues )
This seems to work as well as the previous best combination. I have to restart v4l2-relayd after/before almost every camera start/stop at least once, but it reliably recovers from black picture every time and the camera starts reliably.
I'd be happy to try this, but I'd need some pointers. Does someone have a recipe outlining the steps for building in Ubuntu?
Hi @kupietz I'm trying to follow your instructions on a fresh Fedora 40 install, per https://github.com/intel/ipu6-drivers/issues/187#issuecomment-2081130149
I'm confused by what the line
for m in /usr/lib/modules/$(uname -r)/extra/*.ko.xz; do find /usr/lib/modules/$(uname -r) -name $(basename $m) -not -path $m -delete; done; find /usr/lib/modules/$(uname -r) -name usb-ljca.ko.xz -delete
is intended to do exactly. I tried it without the -delete
parts to see which files it would match, but it seemed like it matched more files than you probably intended. What's the intention behind this command? What specific modules need to be deleted (and, out of curiousity, but optionally, why?)
Cheers, Luke
The patched ipu6-driver modules are in installed with dkms in: /usr/lib/modules/$(uname -r)/extra/
. The script goes through all of these and deletes any stale duplicates in /usr/lib/modules/$(uname -r)/
. In addition, it deletes the stale and conflicting module usb-ljca.ko.xz
, if it exists.
On Fedora, the script should do exactly what needs to be done. Of course, you only need to run it once after a new kernel installation with dnf, but it does not harm to always call it.
Thank you @kupietz! One more question: in https://github.com/intel/ipu6-drivers#3-build-with-dkms, do you run the
git clone https://github.com/intel/ivsc-driver.git
cp -r ivsc-driver/backport-include ivsc-driver/drivers ivsc-driver/include .
rm -rf ivsc-driver
steps? It's unclear to me whether to do so, because it mentions <= kernel v6.6, but we're on v6.8 here.
@kupietz Oh, and are you doing the equivalent of https://github.com/lukemarsden/ipu6-drivers/commit/ba14c27e2203975852a3b7d547bb2ee253c40c07 and https://github.com/lukemarsden/ipu6-drivers/commit/83ee2476b31b4364f09a6c1dca30882ee5319609 to make the module build? I didn't see it in your tree.
Latest status report on freshly installed Fedora 40 6.8.9-300.fc40.x86_64
. Currently blocked on:
[ 24.938184] int3472-discrete INT3472:06: cannot find GPIO chip INTC1096:00, deferring
I'm using this ipu6-drivers
code: https://github.com/lukemarsden/ipu6-drivers/commits/attempt-3-to-fix-stream-on-issues/
Based on latest master of https://github.com/intel/ipu6-drivers - I noticed https://github.com/intel/ipu6-drivers/pull/213 landed
Includes:
Steps to reproduce / what I did (@jwrdegoede @kupietz please check carefully if this looks correct to you):
dnf update
, rebootkernel-headers
package. Oh well, they seem to be on the systemv4l2-relayd.x86_64
from rpmfusion-freesudo dkms add .
; sudo dkms autoinstall ipu6-drivers/0.0.0 --force
- this definitely seems to build the modules, /usr/lib/modules/6.8.9-300.fc40.x86_64/extra/ov2740.ko.xz
now exists for example. (I did not cp -r ivsc-driver
etc from https://github.com/intel/ipu6-drivers#3-build-with-dkms since we're not on <= 6.6)for m in /usr/lib/modules/$(uname -r)/extra/*.ko.xz; do find /usr/lib/modules/$(uname -r) -name $(basename $m) -not -path $m -delete; done; find /usr/lib/modules/$(uname -r) -name usb-ljca.ko.xz -delete
, rebootcp -r ipu6-camera-bins/include/* /usr/include/
, cp -r ipu6-camera-bins/lib/* /usr/lib/
, rebootWebcam now fails to load with:
[ 24.938184] int3472-discrete INT3472:06: cannot find GPIO chip INTC1096:00, deferring
I've also tried powering off for 10 seconds.
I also copied /etc/default/v4l2-relayd
from my Manjaro install, not sure if this is necessary:
# GStreamer source element name:
VIDEOSRC="icamerasrc"
#SPLASHSRC="filesrc location=/.../splash.png ! pngdec ! imagefreeze num-buffers=4 ! videoscale ! videoconvert"
# Output format, width, height, and frame rate:
FORMAT=NV12
WIDTH=1280
HEIGHT=720
FRAMERATE=30/1
# Virtual video device name:
CARD_LABEL="Virtual Camera"
# Extra options to pass to v4l2-relayd:
#EXTRA_OPTS=-d
But we don't seem to be getting that far (no kernel logs from ov2740 module, getting stuck on int3472-discrete
error which seems to be earlier in the process).
What am I doing wrong? I'd like to get to the point that we can document, from a fresh install, exactly what to do. That would really help other users.
I have an X1 Carbon Gen 11 21HMCTO1WW with an ov2740 sensor.
I am running the latest 6.5.5 kernel with the Fedora driver stack from https://hansdegoede.livejournal.com/27276.html
Very often the stream just fails to start streaming. I can run
sudo gst-launch-1.0 icamerasrc ! autovideosink
10 times in a row and on average, I will only get a video stream 3/10 times. The webcam works reliably in Windows so I doubt it's a hardware problem. The exact same software stack works more reliably on an X1 Yoga Gen 8 with the same sensor (different hardware configuration though, the Yoga has a i7-1370P CPU and the Carbon has a i7-1365U).dmesg -w
while doing this shows the following pattern:Here you can see when it worked (on, off with no red errors), and when it didn't (timeouts), from
dmesg -w
.Here's the output from running sudo gst-launch-1.0 icamerasrc ! autovideosink > gst-1.txt 2>&1 one time that it didn't work: https://gist.github.com/lukemarsden/d51e5f438d72f3211c402ea4e9af7cf6
And the journal from that time: sudo journalctl -f > journal-1.txt 2>&1: https://gist.github.com/lukemarsden/a5022bebdadaa5ae34aab822aff636b9
The only log lines that seem interesting are the timeouts from gstreamer and the:
line from the ipu6 driver. That "stream stop time out" only happens after I hit ctrl+c (twice) on the gstreamer stream because I'm seeing a black video feed.
dmesg |grep ipu6: https://gist.github.com/lukemarsden/01beb5c00d37e57f71706922aa713832
I followed the instructions at https://hansdegoede.livejournal.com/27276.html
Versions:
Please let me know if you need any more details or logs from my system.