Bug 201467 - PCTV 510e (em28xx) stops working after hibernate/suspend
Summary: PCTV 510e (em28xx) stops working after hibernate/suspend
Status: NEW
Alias: None
Product: v4l-dvb
Classification: Unclassified
Component: em28xx (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: em28xx
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-10-18 11:21 UTC by Ivan Kalvachev
Modified: 2020-11-22 16:47 UTC (History)
3 users (show)

See Also:
Kernel Version: 4.18
Subsystem:
Regression: No
Bisected commit-id:


Attachments

Description Ivan Kalvachev 2018-10-18 11:21:41 UTC
After returning from hibernate PCTV510e dumps i2c errors in dmesg and cannot tune or capture anything.
I can make it work again if I `rmmod` and `modprobe em28xx`.


It's an old problem that had existed since the device has been supported.
At the time I was using suspend and I told that my USB doesn't power the device then in S3.

Well, now I use hibernate that allow the machine to resume after complete power down and the device stops working after first cycle. On top of that I got a usb dongle that measures USB power usage and it shows the USB is powered. Also I'm able to run rpi2 on that USB port while my PC is turned off.

I've been using a custom patch that removes ".suspend", ".resume", and ".reset_resume" from the 'em28xx_usb_drv' struct. This way the driver uses 'disconnect' and 'probe' instead of suspend/resume.


Here are excerpts from `dmesg` after hibernate/resume:
---
[44041.940038] usb usb1: root hub lost power or was reset
[44041.943953] ehci-pci 0000:00:1a.7: cache line size of 64 is not supported
[44041.949407] ehci-pci 0000:00:1d.7: cache line size of 64 is not supported
[44042.288849] usb 1-1: reset high-speed USB device number 2 using ehci-pci
[44042.558887] usb 1-2: reset high-speed USB device number 3 using ehci-pci
[44042.707459] em28xx 1-2:1.0: Resuming extensions
[44042.707461] em28xx 1-2:1.0: Resuming audio extension
[44042.707466] em28xx 1-2:1.0: Resuming DVB extension
[44042.707835] drxk: i2c write error at addr 0x29
[44042.707836] drxk: Error -6 on ConfigureI2CBridge
[44042.708477] drxk: i2c write error at addr 0x29
[44042.708479] drxk: Error -6 on ConfigureI2CBridge
[44042.708483] __tda18271_write_regs: [10-0060|M] ERROR: idx = 0x5, len = 1, i2c_transfer returned: -6
[44042.708486] tda18271_init: [10-0060|M] error -6 on line 832
[44042.708489] em28xx 1-2:1.0: fe0 resume -6
[44042.708492] em28xx 1-2:1.0: Resuming input extension
---


Here are excerpts of the log after `echo devices > /sys/power/pm_test`
---
[411903.148846] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[411903.150350] Suspending console(s) (use no_console_suspend to debug)
[411903.150833] em28xx 1-5:1.0: Suspending extensions
[411903.150835] em28xx 1-5:1.0: Suspending audio extension
[411903.150838] em28xx 1-5:1.0: Suspending DVB extension
[411903.162326] em28xx 1-5:1.0: fe0 suspend 0
[411903.162327] em28xx 1-5:1.0: Suspending input extension
[411903.415992] PM: hibernation debug: Waiting for 5 seconds.
[411908.495581] usb usb3: root hub lost power or was reset
[411908.495583] usb usb4: root hub lost power or was reset
[411908.495585] usb usb5: root hub lost power or was reset
[411908.495620] usb usb1: root hub lost power or was reset
[411908.495631] usb usb6: root hub lost power or was reset
[411908.499515] usb usb7: root hub lost power or was reset
[411908.499517] ehci-pci 0000:00:1a.7: cache line size of 64 is not supported
[411908.499559] usb usb8: root hub lost power or was reset
[411908.499692] usb usb2: root hub lost power or was reset
[411908.503575] ehci-pci 0000:00:1d.7: cache line size of 64 is not supported
[411908.848910] usb 1-1: reset high-speed USB device number 2 using ehci-pci
[411909.118939] usb 1-5: reset high-speed USB device number 11 using ehci-pci
[411909.267850] em28xx 1-5:1.0: Resuming extensions
[411909.267853] em28xx 1-5:1.0: Resuming audio extension
[411909.267858] em28xx 1-5:1.0: Resuming DVB extension
[411909.268269] drxk: i2c write error at addr 0x29
[411909.268271] drxk: Error -6 on ConfigureI2CBridge
[411909.268787] drxk: i2c write error at addr 0x29
[411909.268789] drxk: Error -6 on ConfigureI2CBridge
[411909.268792] __tda18271_write_regs: [10-0060|M] ERROR: idx = 0x5, len = 1, i2c_transfer returned: -6
[411909.268794] tda18271_init: [10-0060|M] error -6 on line 832
[411909.268797] em28xx 1-5:1.0: fe0 resume -6
[411909.268799] em28xx 1-5:1.0: Resuming input extension
[411909.528912] usb 1-1.4: reset low-speed USB device number 23 using ehci-pci
[411909.821235] PM: Basic memory bitmaps freed
---

Now, I do see that usb hub resets the device.
I want to repeat, hibernate should work after complete power down. Also the driver is supposed to handle the fact that the device has been reset and reinitialize the device (e.g. upload the firmware) so it could work properly.
Comment 1 Michael Zapf 2020-09-03 11:03:00 UTC
The same issue seems to appear with other cards, in particular DVBSky S950 DVB-S2 and TECHNOTREND TT-Budget C-1501 DVB-C.

After resuming from hibernation, DVB tuning fails consistently. VLC reports:

dtv stream error: cannot set frontend tuning parameters: Resource temporarily unavailable

The issue can be solved reproducibly by

# rmmod smipcie
# modprobe smipcie

for the DVBSky S950 DVB-S2 card, or

# rmmod budget_ci
# modprobe budget_ci

for the TECHNOTREND TT-Budget C-1501 DVB-C card

After entering these lines, tuning works again. My request is that it should not be necessary to manually remove and load a kernel module to make tuning work again.

Not a new issue, but it remained unresolved until today.
Comment 2 Walther Pelser 2020-11-03 14:25:23 UTC
*** Bug 209967 has been marked as a duplicate of this bug. ***
Comment 3 Walther Pelser 2020-11-03 14:37:51 UTC
For the last years resume worked by a rewritten dvbsky.c
But now:
After resume  vlc cannot display dvb-t. I can not find any logfile, which shows the issue, but the workaround is:
disconnect the usb-stick, wait a minute, connect it again, then it works again.
The needed kernel-modules are:
 dvb-tuner-si2158-a20-01.fw and dvb-demod-si2168-b40-01.fw
USB-HW is:
 August DVB-T210 - DVB-T USB TV Stick
After a normal boot it is always working.
in my case dmesg shows, that after resume only one fw-file is downloaded instead of two, as it is necessary. After having disconnected the usb-stick and connected it again the download works with two fw.files.
Comment 4 Walther Pelser 2020-11-22 16:47:19 UTC
(In reply to Michael Zapf from comment #1)
> The same issue seems to appear with other cards, in particular DVBSky S950
> DVB-S2 and TECHNOTREND TT-Budget C-1501 DVB-C.
> 
> After resuming from hibernation, DVB tuning fails consistently. VLC reports:
> 
> dtv stream error: cannot set frontend tuning parameters: Resource
> temporarily unavailable
> 
> The issue can be solved reproducibly by
> 
> # rmmod smipcie
> # modprobe smipcie
> 
> for the DVBSky S950 DVB-S2 card, or
> 
> # rmmod budget_ci
> # modprobe budget_ci
> 
> for the TECHNOTREND TT-Budget C-1501 DVB-C card
> 
> After entering these lines, tuning works again. My request is that it should
> not be necessary to manually remove and load a kernel module to make tuning
> work again.
> 
> Not a new issue, but it remained unresolved until today.

A better workaround to solve this issue individually is to add (SU) a script in /usr/lib/systemd/System-sleep/
like this dvbsky.sh:

#!/bin/bash
#
# restart kernel modul dvb_usb_dvbsky after resume
#
if [ "$1" = post ]; then
/sbin/rmmod dvb_usb_dvbsky && /sbin/modprobe dvb_usb_dvbsky
echo "kernel module dvb_usb_dvbsky restarted"
fi

("/sbin" maybe obsolete)
If you change the module name dvb_usb_dvbsky in this script with the module you need, it will work. This is save and nobody knows, when this bug will become really solved.

Note You need to log in before you can comment on or make changes to this bug.