patjak / facetimehd

Reverse engineered Linux driver for the FacetimeHD (Broadcom 1570) PCIe webcam
GNU General Public License v2.0
1.35k stars 160 forks source link

Freeze in Arch Linux #265

Open davix3f opened 2 years ago

davix3f commented 2 years ago

Didn't find any similar issue, so I'm opening a new one.

HW: MacBook Air 2011 i5-4260U - 4GB RAM Arch Linux 5.15.35-1

Driver installs fine, both from AUR and compiling manually. It is also loaded correctly at reboot etcetera:

lsmod | grep facetime
facetimehd            122880  0
videobuf2_dma_sg       20480  1 facetimehd
videobuf2_v4l2         40960  1 facetimehd
videobuf2_common       81920  4 videobuf2_v4l2,facetimehd,videobuf2_dma_sg,videobuf2_memops
videodev              303104  3 videobuf2_v4l2,facetimehd,videobuf2_common

However, /dev/vide0 is not created. modprobe -r bdc_pci doesn't work, as the module does not exist in the first place. If I try to modprobe -r facetimehd && modprobe facetimehd the laptop freezes and hard reboot is required. Sometimes, however, the driver gets reloaded, and /dev/video0 is created, if I execute this command sequence:

modprobe -r facetimehd
modprobe -r videobuf2_v4l2
modprobe -r videobuf2_dma_sg
modprobe videobuf2_v4l2
modprobe videobuf2_dma_sg
modprobe facetimehd

but most of the times even this solution just ends up in a frozen laptop. This the result of a dmesg | grep facetime after a clean reboot, to see what's happening when the driver is loaded during boot.

[    6.246902] facetimehd 0000:02:00.0: Found FaceTime HD camera with device id: 1570
[    6.247137] facetimehd 0000:02:00.0: Setting 64bit DMA mask
[    6.256599] facetimehd 0000:02:00.0: S2 PCIe link init succeeded
[    6.256665] facetimehd 0000:02:00.0: Refclk: 25MHz (0xa)
[    6.266687] facetimehd 0000:02:00.0: PLL reset finished
[    6.266693] facetimehd 0000:02:00.0: Waiting for S2 PLL to lock at 450 MHz
[    6.266708] facetimehd 0000:02:00.0: S2 PLL is locked after 10 us
[    6.276722] facetimehd 0000:02:00.0: S2 PLL is in bypass mode
[    6.296787] facetimehd 0000:02:00.0: DDR40 PHY PLL locked on safe settings
[    6.296805] facetimehd 0000:02:00.0: STRAP valid
[    6.296807] facetimehd 0000:02:00.0: Configuring DDR PLLs for 450 MHz
[    6.296816] facetimehd 0000:02:00.0: DDR40 PLL is locked after 0 us
[    6.296828] facetimehd 0000:02:00.0: First DDR40 VDL calibration completed after 3 us
[    6.296837] facetimehd 0000:02:00.0: Second DDR40 VDL calibration completed after 1 us
[    6.296839] facetimehd 0000:02:00.0: Using step size 146
[    6.296844] facetimehd 0000:02:00.0: VDL set to: coarse=0x10008, fine=0x10119
[    6.296851] facetimehd 0000:02:00.0: Virtual VTT enabled
[    6.317374] facetimehd 0000:02:00.0: S2 DRAM memory address: 0x22159559
[    6.317397] facetimehd 0000:02:00.0: Rewrite DDR mode registers succeeded
[    6.317663] facetimehd 0000:02:00.0: Full memory verification succeeded! (0)
[    6.438084] facetimehd 0000:02:00.0: Loaded firmware, size: 1392kb
[    6.515921] facetimehd 0000:02:00.0: ISP woke up after 0ms
[    6.515932] facetimehd 0000:02:00.0: Number of IPC channels: 7, queue size: 44865
[    6.515937] facetimehd 0000:02:00.0: Firmware requested heap size: 3072kb
[   16.520101] facetimehd 0000:02:00.0: Init failed! No second int
[   16.520225] facetimehd: probe of 0000:02:00.0 failed with error -5

I have no idea what the last three lines mean, but maybe you guys can get something out of it. I have zero knowledge nor experience in driver programming. Let me know if I can help in any way!

ipatch commented 1 year ago

attempted to install this driver with a new install of archlinux this afternoon, and sure enough i'm getting a similar error message,

[  +0.000012] facetimehd 0000:04:00.0: Virtual VTT enabled
[  +0.020538] facetimehd 0000:04:00.0: S2 DRAM memory address: 0x22159559
[  +0.000029] facetimehd 0000:04:00.0: Rewrite DDR mode registers succeeded
[  +0.000223] facetimehd 0000:04:00.0: Full memory verification succeeded! (0)
[  +0.115435] facetimehd 0000:04:00.0: Loaded firmware, size: 1392kb
[  +0.040714] facetimehd 0000:04:00.0: ISP woke up after 0ms
[  +0.000015] facetimehd 0000:04:00.0: Number of IPC channels: 7, queue size: 44865
[  +0.000009] facetimehd 0000:04:00.0: Firmware requested heap size: 3072kb
[  +0.010034] facetimehd 0000:04:00.0: ISP second int after 0ms
[  +0.000008] facetimehd 0000:04:00.0: Channel description table at 00800000
[  +0.010343] facetimehd 0000:04:00.0: magic value: 00000000 after 0 ms
[  +0.000008] facetimehd 0000:04:00.0: Enabling interrupts
[  +0.000247] facetimehd 0000:04:00.0: Direct firmware load for facetimehd/1871_01XX.dat failed with error -2