Asus G752VS, GTX 1070 - dispositivo de áudio PCI-e (segunda função) ausente

1

Informações do sistema

Kernel: Linux 4.12.6-1-ARCH
Distro: Arch Linux
Machine: Asus G752VS laptop
CPU: Intel Core i7 6700HQ
Graphics card: Nvidia GTX 1070 Mobile (GP104M)

Resumo do problema

Instalei recentemente o Arch Linux em um ASUS G752VS em configuração de hardware de estoque. Eu estou tentando obter saída de áudio HDMI funcionando, mas a partir do Linux, o dispositivo PCI-e da placa mostra apenas uma única função (controlador compatível com VGA). Informações on-line sugerem que para ALSA / PulseAudio usar o cartão, deve haver uma segunda função (dispositivo de áudio) no mesmo dispositivo PCI-e. Acredito que isso seja um problema de software, porque no Windows 10, há uma segunda função, e a saída de áudio HDMI funciona conforme o esperado. Quais são meus próximos passos para solucionar esse problema?

Comportamento esperado

Para obter uma linha de base para quais dispositivos / funções eu espero ver, aqui está a saída de !pcitree do Depurador de Kernel do Windows, na mesma máquina:

lkd> !pcitree
Bus 0x0 (FDO Ext ffffd1884838a190)
  (d=0,  f=0) 80861910 devext 0xffffd188483e91b0 devstack 0xffffd188483e9060 0600 Bridge/HOST to PCI
  (d=1,  f=0) 80861901 devext 0xffffd188483d91b0 devstack 0xffffd188483d9060 0604 Bridge/PCI to PCI
  Bus 0x1 (FDO Ext ffffd18848657c60)
    (d=0,  f=0) 10de1be1 devext 0xffffd188486551b0 devstack 0xffffd18848655060 0300 Display Controller/VGA
    (d=0,  f=1) 10de10f0 devext 0xffffd1884a88d8b0 devstack 0xffffd1884a88d760 0403 Multimedia Device/Unknown Sub Class
  (d=4,  f=0) 80861903 devext 0xffffd188483931b0 devstack 0xffffd18848393060 1180 Unknown Base Class/Unknown Sub Class
  (d=14, f=0) 8086a12f devext 0xffffd1884838c1b0 devstack 0xffffd1884838c060 0c03 Serial Bus Controller/USB
  (d=14, f=2) 8086a131 devext 0xffffd1884838b1b0 devstack 0xffffd1884838b060 1180 Unknown Base Class/Unknown Sub Class
  (d=15, f=0) 8086a160 devext 0xffffd188483881b0 devstack 0xffffd18848388060 1180 Unknown Base Class/Unknown Sub Class
  (d=15, f=1) 8086a161 devext 0xffffd188483c01b0 devstack 0xffffd188483c0060 1180 Unknown Base Class/Unknown Sub Class
  (d=16, f=0) 8086a13a devext 0xffffd188483bf1b0 devstack 0xffffd188483bf060 0780 Simple Serial Communications Controller/'Other'
  (d=17, f=0) 8086a102 devext 0xffffd188483fd1b0 devstack 0xffffd188483fd060 0106 Mass Storage Controller/Unknown Sub Class
  (d=1c, f=0) 8086a112 devext 0xffffd188483f81b0 devstack 0xffffd188483f8060 0604 Bridge/PCI to PCI
  Bus 0x2 (FDO Ext ffffd188483ac190)
    (d=0,  f=0) 808624f3 devext 0xffffd188483aa1b0 devstack 0xffffd188483aa060 0280 Network Controller/'Other'
  (d=1c, f=3) 8086a113 devext 0xffffd188483f71b0 devstack 0xffffd188483f7060 0604 Bridge/PCI to PCI
  Bus 0x3 (FDO Ext ffffd188483ac7b0)
    (d=0,  f=0) 10ec8168 devext 0xffffd188483ab1b0 devstack 0xffffd188483ab060 0200 Network Controller/Ethernet
  (d=1c, f=4) 8086a114 devext 0xffffd188483f61b0 devstack 0xffffd188483f6060 0604 Bridge/PCI to PCI
  Bus 0x4 (FDO Ext ffffd188483a9990)
    No devices have been enumerated on this bus.
  (d=1f, f=0) 8086a150 devext 0xffffd188483f41b0 devstack 0xffffd188483f4060 0601 Bridge/PCI to ISA
  (d=1f, f=2) 8086a121 devext 0xffffd188484bf1b0 devstack 0xffffd188484bf060 0580 Memory Controller/'Other'
  (d=1f, f=3) 8086a170 devext 0xffffd188484a41b0 devstack 0xffffd188484a4060 0403 Multimedia Device/Unknown Sub Class
  (d=1f, f=4) 8086a123 devext 0xffffd188484a31b0 devstack 0xffffd188484a3060 0c05 Serial Bus Controller/Unknown Sub Class
Total PCI Root busses processed = 1
Total PCI Segments processed = 1

Em particular, consulte Barramento 0x1, dispositivo 0, que tem duas funções.

Comportamento observado

Por outro lado, aqui está a saída de lspci -nn no Linux:

00:00.0 Host bridge [0600]: Intel Corporation Skylake Host Bridge/DRAM Registers [8086:1910] (rev 07)
00:01.0 PCI bridge [0604]: Intel Corporation Skylake PCIe Controller (x16) [8086:1901] (rev 07)
00:04.0 Signal processing controller [1180]: Intel Corporation Skylake Processor Thermal Subsystem [8086:1903] (rev 07)
00:14.0 USB controller [0c03]: Intel Corporation Sunrise Point-H USB 3.0 xHCI Controller [8086:a12f] (rev 31)
00:14.2 Signal processing controller [1180]: Intel Corporation Sunrise Point-H Thermal subsystem [8086:a131] (rev 31)
00:15.0 Signal processing controller [1180]: Intel Corporation Sunrise Point-H Serial IO I2C Controller #0 [8086:a160] (rev 31)
00:15.1 Signal processing controller [1180]: Intel Corporation Sunrise Point-H Serial IO I2C Controller #1 [8086:a161] (rev 31)
00:16.0 Communication controller [0780]: Intel Corporation Sunrise Point-H CSME HECI #1 [8086:a13a] (rev 31)
00:17.0 SATA controller [0106]: Intel Corporation Sunrise Point-H SATA controller [AHCI mode] [8086:a102] (rev 31)
00:1c.0 PCI bridge [0604]: Intel Corporation Sunrise Point-H PCI Express Root Port #3 [8086:a112] (rev f1)
00:1c.3 PCI bridge [0604]: Intel Corporation Sunrise Point-H PCI Express Root Port #4 [8086:a113] (rev f1)
00:1c.4 PCI bridge [0604]: Intel Corporation Sunrise Point-H PCI Express Root Port #5 [8086:a114] (rev f1)
00:1f.0 ISA bridge [0601]: Intel Corporation Sunrise Point-H LPC Controller [8086:a150] (rev 31)
00:1f.2 Memory controller [0580]: Intel Corporation Sunrise Point-H PMC [8086:a121] (rev 31)
00:1f.3 Audio device [0403]: Intel Corporation Sunrise Point-H HD Audio [8086:a170] (rev 31)
00:1f.4 SMBus [0c05]: Intel Corporation Sunrise Point-H SMBus [8086:a123] (rev 31)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP104M [GeForce GTX 1070 Mobile] [10de:1be1] (rev a1)
02:00.0 Network controller [0280]: Intel Corporation Wireless 8260 [8086:24f3] (rev 3a)
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 10)

Observe aqui que há apenas uma única função relatada para o barramento 1, dispositivo 0.

Editar: correção parcial

Consegui que o dispositivo aparecesse com a seguinte sequência de comandos:

echo 1 > /sys/bus/pci/devices/0000\:01\:00.0/reset
echo 1 > /sys/bus/pci/devices/0000\:01\:00.0/remove
echo 1 > /sys/bus/pci/rescan

Depois disso, recebo a seguinte entrada adicional - que é o comportamento desejado.

01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)

Infelizmente, o primeiro comando faz com que a tela do laptop seja desativada, e não encontrei nenhuma maneira de recuperá-lo (tentei recarregar os módulos de kernel nvidia , nvidia_modeset e nvidia_drm , tentei colocar a máquina em repouso, e eu tentei systemctl kexec ing uma nova cópia do kernel). Os dois caminhos óbvios para explorar são

  1. Recoloque a tela depois de executar essa sequência e faça o script da coisa toda na inicialização. Isso parece a solução mais hackeada.
  2. Identifique o que é diferente quando o dispositivo é redefinido vs. quando é inicializado pela primeira vez e corrige sua inicialização.

Ainda não segui nenhuma das abordagens, mas se chegar a uma solução, colocarei em uma resposta. Por enquanto, é apenas um contexto sobre a questão.

Como um sidenote, o fato de kexec a um novo kernel ter deixado ambas as funções do dispositivo ao redor, mas não girar a tela, sugere que há alguma inicialização de hardware que normalmente é feita na inicialização, e isso é necessário para ligar a tela depois que a placa de vídeo é inicializada.

Tentativas de correção

Este modelo específico de laptop tem vários problemas documentados de compatibilidade com o Linux envolvendo a ACPI. Tentei passar o parâmetro de kernel acpi_os_name com vários valores diferentes - Linux , Windows , Windows 2015 e Windows 10 . Eu também tentei passar acpi=off e noapic . Nenhum deles teve qualquer efeito na saída de lspci . Não tenho certeza de quanto mais pode ser feito com essa linha de questionamento; parece que qualquer outra solução de problemas da ACPI envolveria descompilar e editar o código na tabela DSDT (e eu não tenho a experiência necessária para fazer mais do que mexer com isso). Eu despejei um subconjunto das tabelas ACPI no link para o caso, no entanto. / p>

Para outra abordagem ... verificando o dmesg, vejo o seguinte trecho:

[    1.004709] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
[    1.011237] ACPI: Power Resource [PG00] (on)
[    1.012967] ACPI: Power Resource [WRST] (on)
[    1.013613] ACPI: Power Resource [WRST] (on)
[    1.014269] ACPI: Power Resource [WRST] (on)
[    1.014926] ACPI: Power Resource [WRST] (on)
[    1.015589] ACPI: Power Resource [WRST] (on)
[    1.016243] ACPI: Power Resource [WRST] (on)
[    1.016888] ACPI: Power Resource [WRST] (on)
[    1.017649] ACPI: Power Resource [WRST] (on)
[    1.018345] ACPI: Power Resource [WRST] (on)
[    1.018998] ACPI: Power Resource [WRST] (on)
[    1.019639] ACPI: Power Resource [WRST] (on)
[    1.020233] ACPI: Power Resource [WRST] (on)
[    1.020827] ACPI: Power Resource [WRST] (on)
[    1.021431] ACPI: Power Resource [WRST] (on)
[    1.022026] ACPI: Power Resource [WRST] (on)
[    1.022641] ACPI: Power Resource [WRST] (on)
[    1.023246] ACPI: Power Resource [WRST] (on)
[    1.023842] ACPI: Power Resource [WRST] (on)
[    1.024444] ACPI: Power Resource [WRST] (on)
[    1.025038] ACPI: Power Resource [WRST] (on)
[    1.045887] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-fe])
[    1.045895] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    1.045957] acpi PNP0A08:00: _OSC failed (AE_ERROR); disabling ASPM
[    1.046853] PCI host bridge to bus 0000:00
[    1.046856] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]
[    1.046858] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]
[    1.046860] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
[    1.046862] pci_bus 0000:00: root bus resource [mem 0x000c0000-0x000c3fff window]
[    1.046863] pci_bus 0000:00: root bus resource [mem 0x000c4000-0x000c7fff window]
[    1.046865] pci_bus 0000:00: root bus resource [mem 0x000c8000-0x000cbfff window]
[    1.046867] pci_bus 0000:00: root bus resource [mem 0x000cc000-0x000cffff window]
[    1.046868] pci_bus 0000:00: root bus resource [mem 0x000d0000-0x000d3fff window]
[    1.046870] pci_bus 0000:00: root bus resource [mem 0x000d4000-0x000d7fff window]
[    1.046871] pci_bus 0000:00: root bus resource [mem 0x000d8000-0x000dbfff window]
[    1.046873] pci_bus 0000:00: root bus resource [mem 0x000dc000-0x000dffff window]
[    1.046874] pci_bus 0000:00: root bus resource [mem 0x000e0000-0x000e3fff window]
[    1.046876] pci_bus 0000:00: root bus resource [mem 0x000e4000-0x000e7fff window]
[    1.046877] pci_bus 0000:00: root bus resource [mem 0x000e8000-0x000ebfff window]
[    1.046879] pci_bus 0000:00: root bus resource [mem 0x000ec000-0x000effff window]
[    1.046880] pci_bus 0000:00: root bus resource [mem 0x38800000-0xdfffffff window]
[    1.046882] pci_bus 0000:00: root bus resource [mem 0xfd000000-0xfe7fffff window]
[    1.046884] pci_bus 0000:00: root bus resource [bus 00-fe]
[    1.046895] pci 0000:00:00.0: [8086:1910] type 00 class 0x060000
[    1.047083] pci 0000:00:01.0: [8086:1901] type 01 class 0x060400
[    1.047145] pci 0000:00:01.0: PME# supported from D0 D3hot D3cold
[    1.047367] pci 0000:00:01.0: System wakeup disabled by ACPI
[    1.047444] pci 0000:00:04.0: [8086:1903] type 00 class 0x118000
[    1.047461] pci 0000:00:04.0: reg 0x10: [mem 0xda120000-0xda127fff 64bit]
[    1.047776] pci 0000:00:14.0: [8086:a12f] type 00 class 0x0c0330
[    1.047800] pci 0000:00:14.0: reg 0x10: [mem 0xda110000-0xda11ffff 64bit]
[    1.047884] pci 0000:00:14.0: PME# supported from D3hot D3cold
[    1.048066] pci 0000:00:14.0: System wakeup disabled by ACPI
[    1.048114] pci 0000:00:14.2: [8086:a131] type 00 class 0x118000
[    1.048136] pci 0000:00:14.2: reg 0x10: [mem 0xda138000-0xda138fff 64bit]
[    1.048452] pci 0000:00:15.0: [8086:a160] type 00 class 0x118000
[    1.048661] pci 0000:00:15.0: reg 0x10: [mem 0xda137000-0xda137fff 64bit]
[    1.049699] pci 0000:00:15.1: [8086:a161] type 00 class 0x118000
[    1.049907] pci 0000:00:15.1: reg 0x10: [mem 0xda136000-0xda136fff 64bit]
[    1.050885] pci 0000:00:16.0: [8086:a13a] type 00 class 0x078000
[    1.050910] pci 0000:00:16.0: reg 0x10: [mem 0xda135000-0xda135fff 64bit]
[    1.051004] pci 0000:00:16.0: PME# supported from D3hot
[    1.051232] pci 0000:00:17.0: [8086:a102] type 00 class 0x010601
[    1.051250] pci 0000:00:17.0: reg 0x10: [mem 0xda130000-0xda131fff]
[    1.051259] pci 0000:00:17.0: reg 0x14: [mem 0xda134000-0xda1340ff]
[    1.051268] pci 0000:00:17.0: reg 0x18: [io  0xf050-0xf057]
[    1.051277] pci 0000:00:17.0: reg 0x1c: [io  0xf040-0xf043]
[    1.051286] pci 0000:00:17.0: reg 0x20: [io  0xf020-0xf03f]
[    1.051296] pci 0000:00:17.0: reg 0x24: [mem 0xda133000-0xda1337ff]
[    1.051348] pci 0000:00:17.0: PME# supported from D3hot
[    1.051570] pci 0000:00:1c.0: [8086:a112] type 01 class 0x060400
[    1.051654] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold
[    1.051911] pci 0000:00:1c.3: [8086:a113] type 01 class 0x060400
[    1.051995] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold
[    1.052203] pci 0000:00:1c.3: System wakeup disabled by ACPI
[    1.052249] pci 0000:00:1c.4: [8086:a114] type 01 class 0x060400
[    1.052342] pci 0000:00:1c.4: PME# supported from D0 D3hot D3cold
[    1.052551] pci 0000:00:1c.4: System wakeup disabled by ACPI
[    1.052615] pci 0000:00:1f.0: [8086:a150] type 00 class 0x060100
[    1.052933] pci 0000:00:1f.2: [8086:a121] type 00 class 0x058000
[    1.052948] pci 0000:00:1f.2: reg 0x10: [mem 0xda12c000-0xda12ffff]
[    1.053212] pci 0000:00:1f.3: [8086:a170] type 00 class 0x040300
[    1.053240] pci 0000:00:1f.3: reg 0x10: [mem 0xda128000-0xda12bfff 64bit]
[    1.053278] pci 0000:00:1f.3: reg 0x20: [mem 0xda100000-0xda10ffff 64bit]
[    1.053340] pci 0000:00:1f.3: PME# supported from D3hot D3cold
[    1.053641] pci 0000:00:1f.3: System wakeup disabled by ACPI
[    1.053687] pci 0000:00:1f.4: [8086:a123] type 00 class 0x0c0500
[    1.053736] pci 0000:00:1f.4: reg 0x10: [mem 0xda132000-0xda1320ff 64bit]
[    1.053808] pci 0000:00:1f.4: reg 0x20: [io  0xf000-0xf01f]
[    1.054145] pci 0000:01:00.0: [10de:1be1] type 00 class 0x030000
[    1.054167] pci 0000:01:00.0: reg 0x10: [mem 0xdb000000-0xdbffffff]
[    1.054181] pci 0000:01:00.0: reg 0x14: [mem 0xb0000000-0xbfffffff 64bit pref]
[    1.054195] pci 0000:01:00.0: reg 0x1c: [mem 0xc0000000-0xc1ffffff 64bit pref]
[    1.054204] pci 0000:01:00.0: reg 0x24: [io  0xe000-0xe07f]
[    1.054213] pci 0000:01:00.0: reg 0x30: [mem 0xdc000000-0xdc07ffff pref]
[    1.054358] pci 0000:01:00.0: System wakeup disabled by ACPI
[    1.064286] pci 0000:00:01.0: PCI bridge to [bus 01]
[    1.064290] pci 0000:00:01.0:   bridge window [io  0xe000-0xefff]
[    1.064293] pci 0000:00:01.0:   bridge window [mem 0xdb000000-0xdc0fffff]
[    1.064298] pci 0000:00:01.0:   bridge window [mem 0xb0000000-0xc1ffffff 64bit pref]
[    1.064854] pci 0000:02:00.0: [8086:24f3] type 00 class 0x028000
[    1.064952] pci 0000:02:00.0: reg 0x10: [mem 0xdc300000-0xdc301fff 64bit]
[    1.065473] pci 0000:02:00.0: PME# supported from D0 D3hot D3cold
[    1.074535] pci 0000:00:1c.0: PCI bridge to [bus 02]
[    1.074541] pci 0000:00:1c.0:   bridge window [mem 0xdc300000-0xdc3fffff]
[    1.074715] pci 0000:03:00.0: [10ec:8168] type 00 class 0x020000
[    1.074742] pci 0000:03:00.0: reg 0x10: [io  0xd000-0xd0ff]
[    1.074772] pci 0000:03:00.0: reg 0x18: [mem 0xdc204000-0xdc204fff 64bit]
[    1.074791] pci 0000:03:00.0: reg 0x20: [mem 0xdc200000-0xdc203fff 64bit]
[    1.074900] pci 0000:03:00.0: supports D1 D2
[    1.074902] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold
[    1.075041] pci 0000:03:00.0: System wakeup disabled by ACPI
[    1.084310] pci 0000:00:1c.3: PCI bridge to [bus 03]
[    1.084314] pci 0000:00:1c.3:   bridge window [io  0xd000-0xdfff]
[    1.084318] pci 0000:00:1c.3:   bridge window [mem 0xdc200000-0xdc2fffff]
[    1.084503] pci 0000:00:1c.4: PCI bridge to [bus 04-3c]
[    1.084509] pci 0000:00:1c.4:   bridge window [mem 0xc4000000-0xda0fffff]
[    1.084515] pci 0000:00:1c.4:   bridge window [mem 0x80000000-0xa1ffffff 64bit pref]
[    1.088640] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 10 *11 12 14 15)
[    1.088716] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 6 *10 11 12 14 15)
[    1.088788] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 6 10 *11 12 14 15)
[    1.088859] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 6 10 *11 12 14 15)
[    1.088928] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 6 10 *11 12 14 15)
[    1.088998] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 6 10 *11 12 14 15)
[    1.089068] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 6 10 *11 12 14 15)
[    1.089137] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 6 10 *11 12 14 15)
[    1.090136] ACPI: Enabled 8 GPEs in block 00 to 7F
[    1.090390] ACPI : EC: interrupt unblocked
[    1.090403] ACPI : EC: event unblocked
[    1.090417] ACPI: \_SB_.PCI0.LPCB.EC0_: GPE=0x23, EC_CMD/EC_SC=0x66, EC_DATA=0x62
[    1.090419] ACPI: \_SB_.PCI0.LPCB.EC0_: Used as boot DSDT EC to handle transactions and events
[    1.090534] pci 0000:01:00.0: vgaarb: setting as boot VGA device
[    1.090536] pci 0000:01:00.0: vgaarb: VGA device added: decodes=io+mem,owns=io+mem,locks=none
[    1.090538] pci 0000:01:00.0: vgaarb: bridge control possible
[    1.090539] vgaarb: loaded
[    1.090586] EDAC MC: Ver: 3.0.0
[    1.090990] Registered efivars operations
[    1.094739] PCI: Using ACPI for IRQ routing
[    1.118941] PCI: pci_cache_line_size set to 64 bytes

A linha sobre o parâmetro do kernel pci=nocrs pareceu interessante; infelizmente, a passagem não teve efeito na saída de lspci . Fora isso, nada se destaca para mim. A saída completa do dmesg é um pouco longa, então eu fiz o upload dela aqui: link . Se alguma outra seção se tornar relevante para essa pergunta, eu edito para incluí-las na posteridade.

Caso isso ajude, também enviei a saída de lspci -nnbvvvMG -H1 (reconhecidamente apenas flags de spam) em link

Agora mesmo estou um pouco preso aonde continuar procurando; não há muita informação online para esse tipo de falha e eu realmente não sei o que estou fazendo com a saída do dmesg ou com o ACPI. Alguma sugestão sobre os próximos passos para identificar por que a segunda função não está sendo descoberta no Linux?

    
por wlritchi 24.08.2017 / 08:50

0 respostas

Tags