Estou trabalhando em uma placa iMX6ULL executando um sistema operacional baseado em Debian com recursos de suspensão. Um hub USB ( USB2514
) é conectado ao barramento USB. Quando um único dispositivo ou dois dispositivos com VID
e diferentes PID
são conectados ao hub USB (e consequentemente ao barramento USB), o sistema retorna da suspensão quase imediatamente. No entanto, a retomada do sistema é muito mais lenta quando tenho dois dispositivos conectados ao hub USB com o mesmo VID
e PID
. Depois de pesquisar, descobri que o sistema operacional redefine os dispositivos USB após a ativação da suspensão e antes de retomar (veja os blocos de código abaixo).
Como posso evitar que o sistema operacional reinicie os dispositivos USB ao acordar para acelerar o processo de retomada quando dois dispositivos com a mesma configuração VID
e PID
estão conectados ao mesmo barramento?
Registros
- Despertar com um único dispositivo ( normal )
>>>>>>>>>>>>>> SYSTEM WAKE-UP REQUEST
[ 9217.484783] ieee80211 phy6: brcmf_fil_cmd_data: bus is down. we have nothing to do.
[ 9217.484817] ieee80211 phy6: brcmf_cfg80211_get_tx_power: error (-5)
[ 9218.076812] PM: suspend devices took 1.640 seconds
[ 9218.082099] Disabling non-boot CPUs ...
[ 9218.330490] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[ 9218.399775] usb 2-1.1: reset high-speed USB device number 19 using ci_hdrc
[ 9218.476006] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Jun 13 2018 23:24:39 version 7.45.98.52 (r691997 CY) FWID 01-8b9f8ef5
[ 9218.552328] PM: resume devices took 0.470 seconds
[ 9218.608394] OOM killer enabled.
[ 9218.611611] Restarting tasks ... done.
[ 9218.714350] random: crng reseeded on system resumption
[ 9218.771424] PM: suspend exit
>>>>>>>>>>>>>> SYSTEM RESUME
- Dois dispositivos iguais
VID
ePID
despertar
>>>>>>>>>>>>>> SYSTEM WAKE-UP REQUEST
[ 8907.844493] ieee80211 phy0: brcmf_fil_cmd_data: bus is down. we have nothing to do.
[ 8907.844524] ieee80211 phy0: brcmf_cfg80211_get_tx_power: error (-5)
[ 8908.436812] PM: suspend devices took 1.670 seconds
[ 8908.442572] Disabling non-boot CPUs ...
[ 8908.681128] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43430-sdio for chip BCM43430/1
[ 8908.749956] usb 2-1.3: reset high-speed USB device number 13 using ci_hdrc
[ 8908.826696] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Jun 13 2018 23:24:39 version 7.45.98.52 (r691997 CY) FWID 01-8b9f8ef5
[ 8908.859973] usb 2-1.3: device no response, device descriptor read/64, error -71
[ 8909.089935] usb 2-1.3: device no response, device descriptor read/64, error -71
[ 8909.309918] usb 2-1.3: reset high-speed USB device number 13 using ci_hdrc
[ 8909.419914] usb 2-1.3: device no response, device descriptor read/64, error -71
[ 8909.649893] usb 2-1.3: device no response, device descriptor read/64, error -71
[ 8909.869896] usb 2-1.3: reset high-speed USB device number 13 using ci_hdrc
[ 8910.309878] usb 2-1.3: device not accepting address 13, error -71
[ 8910.409859] usb 2-1.3: reset high-speed USB device number 13 using ci_hdrc
[ 8910.849852] usb 2-1.3: device not accepting address 13, error -71
[ 8910.949853] usb 2-1.1: reset high-speed USB device number 14 using ci_hdrc
[ 8911.102358] PM: resume devices took 2.660 seconds
[ 8911.227343] OOM killer enabled.
[ 8911.230543] Restarting tasks ...
[ 8911.281057] usb 2-1.3: USB disconnect, device number 13
[ 8911.292238] done.
[ 8911.294268] random: crng reseeded on system resumption
[ 8911.351833] PM: suspend exit
>>>>>>>>>>>>>> SYSTEM RESUME
Até agora, tentei o seguinte ( sem sucesso ):
udev
Regras aplicadas para definir oremovable
atributo comofixed
ou0
.NON_REM
Configurados os pinos do hub USB , resultando/sys/bus/usb/devices/2-1.1/removable
no relatório comofixed
.- Modificado
/sys/bus/usb/devices/2-1.1:1.0/host0/target0:0:0/0:0:0:0/block/sda/removable
escrevendo0
oufixed
, mas isso não resolveu o problema. - Carregou o
sg
módulo do kernel SCSI Generic ( ), expondo os dispositivos em/dev/sg*
, mas eles permaneceram listados/dev/sd*
também. - Colocou o
usb-storage
módulo na lista negra, o que fez com que o módulo SCSI Genérico parasse de funcionar.
Resolvi o problema adicionando a
USB_QUIRK_DISCONNECT_SUSPEND
peculiaridade do USB.