Naziel a écritContent que ça marche! (par contre j'ai rien compris, faut que je lise de la doc )
Pour résumer :
(pcie_aspm=off) = (pci=noaer + coupure de l'aspm)
Donc ma préférence initiale n'est pas justifiée (celle de prendre aspm plutôt que noaer)
Il y a 4 niveaux d'AER :
Correctable Error (0001)
Non-Fatal Error (0010)
Fatal Error (0100)
Unsupported Request (1000)
C'est codé sur 4 bits au niveau du flag
Une valeur finissant par 0x0f (en hexadecimal), soit 1111 en binaire autorise les 4 types d'erreur,
Quand tu passes noaer au noyau, tu arrêtes l'AER pour toutes les cartes et toutes les erreurs (0x0f hexadécimal ou 0000 binaire).
En utilisant setpci, tu arrêtes l'AER sur le port pci sélectionné uniquement et en plus tu peux choisir le masque que tu veux. Correctable error est sur le LSB (Less Significant Bit), car il est définit avec la valeur 0x0001. En mettant 0x0e (en hexadecimal), soit 1110 en binaire, tu masques les Correctable Error du port concerné.
L'erreur reportée par dmesg dis que c'est le pci 1c.5 qui remonte l'erreur
Aug 1 23:01:22 nicolas-X541UJ kernel: [ 32.695140] pcieport 0000:00:1c.5: [ 0] Receiver Error (First)
Le port concerné, tu le trouves avec lshw -numeric. En ce qui concerne ma machine :
produit: Intel Corporation [8086:9D15]
...
information bus: pci@0000:00:1c.5
Que tu trouves dans :
*-pci:2
description: PCI bridge
produit: Intel Corporation [8086:9D15]
fabriquant: Intel Corporation [8086]
identifiant matériel: 1c.5
information bus: pci@0000:00:1c.5
version: f1
bits: 32 bits
horloge: 33MHz
fonctionnalités: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
ressources: irq:17 portE/S:c000(taille=4096) mémoire:ef100000-ef1fffff
C'est sur ce slot qu'est branché le module WIFI :
*-pci:2
description: PCI bridge
produit: Intel Corporation [8086:9D15]
fabriquant: Intel Corporation [8086]
identifiant matériel: 1c.5
information bus: pci@0000:00:1c.5
version: f1
bits: 32 bits
horloge: 33MHz
fonctionnalités: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
ressources: irq:17 portE/S:c000(taille=4096) mémoire:ef100000-ef1fffff
*-network
description: Interface réseau sans fil
produit: RTL8723BE PCIe Wireless Network Adapter [10EC:B723]
fabriquant: Realtek Semiconductor Co., Ltd. [10EC]
identifiant matériel: 0
information bus: pci@0000:03:00.0
nom logique: wlp3s0
version: 00
numéro de série: 3c:a0:67:13:cb:7f
bits: 64 bits
horloge: 33MHz
fonctionnalités: pm msi pciexpress bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=rtl8723be driverversion=4.13.0-45-generic firmware=N/A ip=192.168.1.13 latency=0 link=yes multicast=yes wireless=IEEE 802.11
ressources: irq:17 portE/S:c000(taille=256) mémoire:ef100000-ef103fff
sudo setpci -v -d 8086:9d15 CAP_EXP+0x8.w=0x0e
Avec setpci (-v pour verbose et -d pour lui dire que c'est le [<vendor>]:[<device>]), tu lui indiques d'écrire le nouveau masque (1110 en binaire), en décalant de 8 bits, dans le registre CAP_EX (du bridge PCI 8086:9d15)
J'ai regardé le même registre dans le module 10EC:B723 (c'est le rtl8723be), qui est connecté sur ce port pci, mais il ne gère pas l'aer ou c'est masqué à son niveau.
La seule chose que je n'ai pas vérifié (et là je considère que Dennis E. Mungai l'a fait), c'est que CAP_EX est le bon registre. Ce doit être le cas, puisque le résultat est là...
Complément :
voici le bout de code qui montre le shift :
return pci_write_config_dword(dev, pci_pcie_cap(dev) + pos, val);
où pos = PCI_EXP_DEVCTL (qui vaut 8)
PCI_EXP_DEVCTL : PCI EXPress DEVice ConTroLer
CAP_EX, je suppose que P_EX, c'est pour PCI Express, je ne sais pas encore pour CA non, CAP, c'est pour Capabilities