Acordar imediatamente da suspensão causada por dispositivos USB 3.0

4

Meu computador geralmente suspende e acorda normalmente. Mas quando eu conecto um disco rígido USB3.0, mesmo depois de ter sido desmontado e desconectado, a máquina imediatamente desperta toda vez que tento suspender.

Todos os dispositivos USB estão desativados em /proc/acpi/wakeup (abaixo) e não vejo nenhum erro em /var/log/syslog referente ao disco USB ou ao processo de espera ou ativação.

O mesmo disco conectado a uma porta USB 2.0 não causa o mesmo problema, nem os discos USB 2.0 conectados às portas USB 3.0. Mesmo quando não houver dispositivos USB conectados, todo o computador é acionado imediatamente a partir do modo de espera se um disco USB 3.0 tiver sido conectado desde a inicialização.

Os sistemas são um Dell Precision M6700 e o problema ocorreu com 14.04 e persiste com 14.10.

O que poderia estar causando isso e como posso depurá-lo ainda mais?

> cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
P0P1      S4    *disabled
USB1      S3    *disabled
USB2      S3    *disabled
USB3      S3    *disabled
USB5      S3    *disabled
USB6      S3    *disabled
USB7      S3    *disabled
RP01      S4    *disabled  pci:0000:00:1c.0
PXSX      S4    *disabled
RP02      S4    *disabled  pci:0000:00:1c.1
PXSX      S4    *disabled  pci:0000:03:00.0
RP05      S4    *disabled
PXSX      S4    *disabled
RP06      S4    *disabled
PXSX      S4    *disabled
RP07      S4    *disabled
PXSX      S4    *disabled
RP08      S4    *disabled  pci:0000:00:1c.7
PXSX      S4    *disabled  pci:0000:0c:00.0
PEG0      S4    *disabled  pci:0000:00:01.0
PEGP      S4    *disabled
PEG1      S4    *disabled
PEG2      S4    *disabled
PEG3      S4    *disabled
USB4      S3    *disabled
RP03      S4    *disabled  pci:0000:00:1c.2
RP04      S4    *disabled  pci:0000:00:1c.3
PXSX      S4    *disabled
GLAN      S4    *enabled   pci:0000:00:19.0
EHC1      S0    *enabled   pci:0000:00:1d.0
EHC2      S0    *enabled   pci:0000:00:1a.0
XHC       S0    *enabled   pci:0000:00:14.0
HDEF      S4    *disabled  pci:0000:00:1b.0
LID0      S3    *enabled 
PBTN      S3    *enabled

Editar - Desativar explicitamente os dispositivos não resolve o problema

Eu já tentei desativar a ativação de todos os dispositivos (exceto o botão liga / desliga).

Primeiro, desativei os dispositivos em /proc/acpi/wakeup e, em seguida, verifiquei /sys/devices/ para todos os arquivos wakeup :

find /sys/devices/ -name "wakeup" -print -exec grep enabled {} \;

Então, eu explicitamente configuro todos para disabled , por exemplo:

sudo bash -c "echo disabled > /sys/devices/pci0000:00/0000:00:19.0/power/wakeup"

Deixando apenas o botão de energia ativado:

cat /sys/devices/LNXSYSTM:00/LNXPWRBN:00/power/wakeup
# enabled

Depois disso, o computador ainda acorda imediatamente da suspensão (sempre que um disco USB 3.0 já foi conectado).

Além disso, depois de acordar, os seguintes dispositivos foram redefinidos para enabled :

/sys/devices/pci0000:00/0000:00:19.0/power/wakeup
/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0/power/wakeup

O dispositivo PCI parece ser minha LAN porque também é redefinido em /proc/acpi/wakeup :

Device  S-state   Status   Sysfs node
...
GLAN      S4    *enabled   pci:0000:00:19.0
...

Podem existir outros fatores não listados nos dispositivos responsáveis pelo despertar?

Editar - Adicionadas informações detalhadas do lsusb

Adicionadas informações solicitadas por Fabby :

> Bus 004 Device 002: ID 357d:7788  
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               3.00
>   bDeviceClass            0 (Defined at Interface level)
>   bDeviceSubClass         0 
>   bDeviceProtocol         0 
>   bMaxPacketSize0         9
>   idVendor           0x357d 
>   idProduct          0x7788 
>   bcdDevice            0.00
>   iManufacturer          10 
>   iProduct               11 
>   iSerial                 3 
>   bNumConfigurations      1
>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength          121
>     bNumInterfaces          1
>     bConfigurationValue     1
>     iConfiguration          0 
>     bmAttributes         0xc0
>       Self Powered
>     MaxPower                2mA
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass         8 Mass Storage
>       bInterfaceSubClass      6 SCSI
>       bInterfaceProtocol     80 Bulk-Only
>       iInterface              0 
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x81  EP 1 IN
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x02  EP 2 OUT
>     Couldn't open device, some information will be missing
>     bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       1
>       bNumEndpoints           4
>       bInterfaceClass         8 Mass Storage
>       bInterfaceSubClass      6 SCSI
>       bInterfaceProtocol     98 
>       iInterface              0 
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x01  EP 1 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst               0
>         Command pipe (0x01)
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x82  EP 2 IN
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst               0
>         MaxStreams             32
>         Status pipe (0x02)
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x83  EP 3 IN
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>         MaxStreams             32
>         Data-in pipe (0x03)
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x04  EP 4 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>         MaxStreams             32
>         Data-out pipe (0x04)
> 
    
por Ian Mackinnon 03.11.2014 / 12:42

2 respostas

2

Desculpe por adicionar uma resposta, mas não tenho reputação suficiente para adicionar comentários ...

(Qual é porque eu estou olhando para o seu problema !) ;-): P

Você já tentou redefinir o barramento USB em que o disco foi desconectado antes de suspender?

Se você não sabe como, você poderia:

  1. Encerre a máquina
  2. Desconecte todos os dispositivos USB
  3. Remova todos os cabos de energia, UPSs, baterias, etc.
  4. Ligue a máquina (sim: sem cabos de energia!)
  5. Coloque de volta toda a energia removida na etapa 3
  6. Inicialize a máquina
  7. Fazer a: lsusb --verbose > /tmp/good-bus.txt 2>&1
  8. Conecte o disco
  9. Fazer a: lsusb --verbose > /tmp/bad-bus.txt 2>&1
  10. Desmontar o disco
  11. Ejete o disco
  12. Remover o disco
  13. Fazer a: lsusb --verbose > /tmp/worse-bus.txt 2>&1
  14. Fazer a: diff --text /tmp/good-bus.txt /tmp/bad-bus.txt > /tmp/test-g-b.txt
  15. Fazer a: diff --text /tmp/good-bus.txt /tmp/worse-bus.txt > /tmp/test-g-w.txt

Em seguida, reporte-se aqui com a saída de /tmp/test-g-b.txt e /tmp/test-g-w.txt

    
por Fabby 17.11.2014 / 04:02
2

Em primeiro lugar, não ficou óbvio para mim que a listagem XHC na saída wakeup era um dispositivo USB 3.0.

XHC       S0    *enabled   pci:0000:00:14.0

No entanto, até mesmo desativar o status de ativação deste dispositivo não resolve o problema.

sudo bash -c "echo disabled > \
    /sys/devices/pci0000:00/0000:00:14.0/power/wakeup"  # Problem persists.

A única solução de trabalho que encontrei é unbind e bind do driver de dispositivo usando os seguintes comandos:

sudo bash -c ' \
  echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind && \
  echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind;'

Eu devo fazer isso sempre entre conectar um dispositivo de armazenamento USB 3.0 e suspender o computador, mas ele funciona de forma consistente.

Deve-se observar que o componente xhci_hcd do caminho é válido apenas para dispositivos USB 3.0. Essa parte do caminho precisará ser variada dependendo do tipo de barramento que precisa ser redefinido e pode ser um dos uhci_hcd , sdhci-pci ou ehci-pci para outros tipos de dispositivos de armazenamento.

    
por Ian Mackinnon 20.09.2015 / 17:47