Sem USB 3 Arch Linux 3.15.1

Sem USB 3 Arch Linux 3.15.1

Até minha última reinicialização, eu conseguia usar minha porta USB 3. Acabei de instalar o sistema há não muito tempo, então até então eu estava configurando e instalando drivers, mas essa era a sessão em que eu estava trabalhando. Instalei o driver xf86-input-synaptics, mas Acabei de retirá-lo e inicializei novamente para ver se isso estava atrapalhando, já que não voltou, não voltou. Agora estou preso. Tenho visto em muitos fóruns que as pessoas estão tendo problemas com isso, mas a porta geralmente aparece em lsusb, dmesg ou lspci.

lsusb:

Bus 002 Device 005: ID 047b:0011 Silitek Corp. SK-1688U Keyboard
Bus 002 Device 004: ID 045e:0040 Microsoft Corp. Wheel Mouse Optical
Bus 002 Device 003: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0bda:0139 Realtek Semiconductor Corp. RTS5139 Card Reader Controller
Bus 001 Device 003: ID 13d3:5134 IMC Networks 
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

lspci | grep -i usb

00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)

dmesg | grep -i usb

[    1.278138] ACPI: bus type USB registered
[    1.278159] usbcore: registered new interface driver usbfs
[    1.278167] usbcore: registered new interface driver hub
[    1.278268] usbcore: registered new device driver usb
[    1.278630] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.278904] ehci-pci 0000:00:1a.0: new USB bus registered, assigned bus number 1
[    1.291224] ehci-pci 0000:00:1a.0: USB 2.0 started, EHCI 1.00
[    1.291408] hub 1-0:1.0: USB hub found
[    1.291716] ehci-pci 0000:00:1d.0: new USB bus registered, assigned bus number 2
[    1.304530] ehci-pci 0000:00:1d.0: USB 2.0 started, EHCI 1.00
[    1.304982] hub 2-0:1.0: USB hub found
[    1.597732] usb 1-1: new high-speed USB device number 2 using ehci-pci
[    1.721971] hub 1-1:1.0: USB hub found
[    1.830738] usb 2-1: new high-speed USB device number 2 using ehci-pci
[    1.955115] hub 2-1:1.0: USB hub found
[    2.037276] usb 1-1.2: new high-speed USB device number 3 using ehci-pci
[    2.240377] usb 1-1.4: new high-speed USB device number 4 using ehci-pci
[    2.390210] usb 2-1.2: new high-speed USB device number 3 using ehci-pci
[    2.476044] hub 2-1.2:1.0: USB hub found
[    2.743395] usb 2-1.2.3: new low-speed USB device number 4 using ehci-pci
[    2.899768] usb 2-1.2.4: new low-speed USB device number 5 using ehci-pci
[    6.531535] scsi6 : SCSI emulation for RTS5139 USB card reader
[    6.531790] usbcore: registered new interface driver rts5139
[    6.632207] uvcvideo: Found UVC 1.00 device USB2.0 UVC 1M WebCam (13d3:5134)
[    6.636268] input: USB2.0 UVC 1M WebCam as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input15
[    6.636452] usbcore: registered new interface driver uvcvideo
[    6.636456] USB Video Class driver (1.1.1)
[    7.114946] usbcore: registered new interface driver usbhid
[    7.114954] usbhid: USB HID core driver
[    7.125179] input: Microsoft Microsoft 3-Button Mouse with IntelliEye(TM) as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2.3/2-1.2.3:1.0/0003:045E:0040.0001/input/input18
[    7.125756    ] hid-generic 0003:045E:0040.0001: input,hidraw0: USB HID v1.10 Mouse [Microsoft Microsoft 3-Button Mouse with IntelliEye(TM)] on usb-0000:00:1d.0-1.2.3/input0
[    7.126179] input: Silitek Standard USB Keyboard  as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2.4/2-1.2.4:1.0/0003:047B:0011.0002/input/input19
[    7.126612] hid-generic 0003:047B:0011.0002: input,hidraw1: USB HID v1.00 Keyboard [Silitek Standard USB Keyboard ] on usb-0000:00:1d.0-1.2.4/input0

lshw -ônibus de classe curta

H/W path           Device  Class          Description
=====================================================
/0                         bus            G74Sx
/0/100/1a                  bus            6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2
/0/100/1a/1        usb1    bus            EHCI Host Controller
/0/100/1a/1/1              bus            Integrated Rate Matching Hub
/0/100/1d                  bus            6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1
/0/100/1d/1        usb2    bus            EHCI Host Controller
/0/100/1d/1/1              bus            Integrated Rate Matching Hub
/0/100/1d/1/1/2            bus            USB2.0 Hub
/0/100/1f.3                bus            6 Series/C200 Series Chipset Family SMBus Controller

Até agora, simplesmente me disseram que o dispositivo está quebrado, já que não aparece em nenhum deles. Agora que vi funcionar, sei que não é e que é apenas um problema de configuração.

Quando estava funcionando, a saída do lsusb incluía um driver fesco (eu acho). Não vejo mais o fesco ao usar o grep.

O computador é um laptop Asus G74sx.

Toda e qualquer informação é apreciada. Obrigado.

Editar:
Ok, não sei o quanto isso ajuda, mas tenho outra máquina (rodando Linux) com uma porta USB3 funcionando. Comecei a verificar diferenças entre os dois em xhci_hcd e ehci_hcd (por precaução) e descobri que em /sys/bus/pci/drivers/ o sistema em funcionamento tem uma pasta "xhci_hcd", enquanto o sistema que não funciona não. No começo pensei comigo mesmo: "ei, talvez eu possa copiá-lo de um sistema para outro. Mesmo como root, não consigo nem copiar esses arquivos. Então, claramente, algo em algum outro lugar do sistema está dando errado. Don não sei se isso ajuda ou ofusca, mas é um detalhe.

Edição 2: A mensagem de erro
O problema parece estar relacionado à colocação do sistema no modo de suspensão. Estou inicializando a partir de um disco ativo para poder apagar rapidamente quaisquer alterações. Quando coloco a máquina no modo de suspensão, ela geralmente fica inativa sem problemas. Quando volta, o usb 3 funciona bem. Às vezes, do nada, ocorre um erro. Assim que o erro ocorrer, preciso desconectar a máquina e redefinir meu disco ativo para recuperar a porta.

A mensagem não dura muito, apenas alguns milissegundos, mas consegui na minha câmera.

A mensagem de erro:

xhci_hcd 0000:04:00.0: PCI post-resume error -110!
xhci_hcd 0000:04:00.0: HC died; cleaning up
xhci_hcd 0000:04:00.0: HC died; cleaning up
dpm_run_callback(): pci_pm_resume+0x0/0xb0 returns -110
PM: Device 0000:04:00.0 failed to resume async: error -110
dpm_run_callback(): usb_dev_resume+0x0/0x20 [usbcore] returns -5
PM: Device 4-1.4 failed to resume async: error -5

Editar 3: resposta possível? (precisa de testes) Leituraesse, descobri que se eu desvincular manualmente o usb3 e depois ligar systemctl suspend, quando eu ativá-lo e vincular manualmente o dispositivo usb3, ele funciona. Executei isso 150 vezes, o que se você considerar que normalmente falhará entre 2 e 10 vezes, isso é desvio padrão suficiente da média, então vou assumir que funciona. Coloquei a ligação e a desvinculação em "/etc/pm/sleep.d/20_custom-xhci_hcd". Em seguida, verifiquei se era executável.

#!/bin/sh
#File: "/etc/pm/sleep.d/20_custom-xhci_hcd"

case "${1}" in
    hibernate|sleep)
        #unbind
        echo "Unbinding xhci device"
        echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    ;;
    resume|thaw)
        # bind
        echo "Binding xhci device"
        ehco -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
    ;;
esac

Acho que esse arquivo nunca foi chamado porque nunca vi as saídas de eco. E pensando bem, faz sentido, já que esta máquina não possui pm-utils e usa systemd. Então mudei para /usr/lib/systemd/system-sleep/ conformeesse sitee ajustei para:

#!/bin/sh
#File: "/usr/lib/systemd/system-sleep/xhci_hcd.sleep"

case $1/$2 in
    pre/*)
        #unbind
        echo "Unbinding xhci device"
        echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    ;;
    post/*)
        # bind
        echo "Binding xhci device"
        ehco -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
    ;;
esac

conforme indicado no mesmo site. Em seguida, configure-o como executável. Vou testar isso, mas acho que estou sentindo o amor. Se funcionar, postarei isso na parte de respostas.

Responder1

Encontrando o dispositivo
Primeiro, precisamos descobrir qual é o número do dispositivo. Se a porta estiver habilitada e você puder vê-la com o comando, lsusbuse ls /sys/bus/pci/drivers/xhci_hcd. O dispositivo será um número no formato xxxx:xx:xx.x e provavelmente será a primeira entrada retornada pelo lscomando.

Redefinindo a porta
Se a porta não estiver visível, significa que ela não está funcionando, mas pode ser reinicializada desligando toda a energia da máquina. Desligue o computador, remova todas as baterias e cabos de alimentação e aguarde 10 segundos. Em seguida, conecte o cabo novamente e inicialize a máquina. Em seguida, procure o número do dispositivo novamente.

O número do meu dispositivo é 0000:04:00.0, mas pode ser diferente. Um exemplo que vi está em outro lugar 0000:00:14.0. Lembre-se ou anote seu(s) número(s). Precisaremos dele para vincular e desvincular. Pode haver mais de uma se você tiver várias portas USB 3.

Determinando a estrutura de gerenciamento de energia
Paraapto/aptitude/dpkg(ubuntu/debian/mint):
dpkg --get-selections | grep pm-utils
Se algo for retornado, você tem pm.

Paragerenciador de pacotes pacman(arco)
pacman -Qe | grep pm-utils
Se algo for retornado, você tem pm.

Paragerenciador de pacotes rpm(fedora, centos, etc...):
rpm -qa | grep pm-utils
Se algo for retornado, você tem pm.

Paraoutros, você pode experimentá-los, não sei como todos funcionam e não tenho um sistema para testá-los.

Observação:só porque os pacotes instalados não significa que você os esteja usando, mas há uma boa chance de que você esteja. Outra coisa que você pode fazer é simplesmente cd /etc/pm/e se existir você pode colocar o script lá. Tecnicamente, não acho que haja nada de errado em ter um script desvinculado nos dois lugares. Se alguém quiser deixar um comentário sobre se isso é verdade ou não, ou se existe uma maneira melhor de determinar se pm é usado, isso seria fantástico.

script de suspensão do systemd (sem utilitários pm)
Se você estiver usando systemd ou systemctl sem pm, precisamos colocar o script em /usr/lib/systemd/system-sleep/xhci_hcd.sleep. Para minha máquina, o script é semelhante a:

#!/bin/sh
#File: /usr/lib/systemd/system-sleep/xhci_hcd.sleep

case $1/$2 in
        pre/*)
                # Unbind
                echo "Unbinding xhci Device"
                echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
        ;;
        post/*)
                # bind xhci_dev
                echo "Rebinding xhci Device"
                echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
        ;;
esac

Substitua 0000:04:00.0 pelo número do seu dispositivo em ambos os casos. Se você tiver vários números de dispositivos, execute a vinculação e desvinculação de cada um. ou seja, se você tiver portas xxxx:xx:xx.x e yyyy:yy:yy.y, você precisará echo -n "xxxx:xx:xx.x" > /sys/bus/pci/drivers/xhci_hcd/unbinddesvincular echo -n "yyyy:yy:yy.y" > /sys/bus/pci/drivers/xhci_hcd/unbindos dois dispositivos e echo -n "xxxx:xx:xx.x" > /sys/bus/pci/drivers/xhci_hcd/bindde echo -n "yyyy:yy:yy.y" > /sys/bus/pci/drivers/xhci_hcd/bindvincular os dispositivos. Coloquei o primeiro comando echo para nos permitir ver quando a ligação e a desvinculação acontecem quando olhamos os logs usando journalctl -b -u systemd-suspend. Mais informações sobregerenciamento de energiacom systemd/systemctl. Salve esse arquivo e execute sudo chmod a+x /usr/lib/systemd/system-sleep/xhci_hcd.sleeppara torná-lo executável. Pessoalmente, eu reiniciaria o sistema para garantir que o novo arquivo tenha efeito, mas acredito que possa ter efeito imediato. Se isso não acontecer e você colocar o sistema em suspensão (ou suspender/hibernar), veja como você reinicia a porta acima.

pm suspend script (utilitários pm estão instalados)
Se você estiver usando utilitários pm, precisamos colocar o script em/etc/pm/sleep.d/20_custom-xhci_hcd

#!/bin/sh
#File: "/etc/pm/sleep.d/20_custom-xhci_hcd"

case "${1}" in
    hibernate|sleep)
        #unbind
        echo "Unbinding xhci device"
        echo -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/unbind
    ;;
    resume|thaw)
        # bind
        echo "Binding xhci device"
        ehco -n "0000:04:00.0" > /sys/bus/pci/drivers/xhci_hcd/bind
    ;;
esac

Substitua 0000:04:00.0 pelo número do seu dispositivo em ambos os casos. Se você tiver vários números de dispositivos, execute a vinculação e desvinculação de cada dispositivo. Veja as instruções abaixo do script para o script de suspensão do systemd, mas use chmod a+x /etc/pm/sleep.d/20_custom-xhci_hcdpara tornar o arquivo executável. Em seguida, reinicie e teste.

Recursos mais úteis:

informação relacionada