1

So as the title suggests, Is there a way I can disable and re-enable PCI devices or on-board devices on Linux using Terminal like the disable and enable device functions in Windows' Device Manager. I want to do that everytime my PC boots up because there is an issue with the on-board ethernet controller causing it to stop working until I disable and re-enable it using Device Manager (that's on Windows), but for linux I have to boot into Recovery Mode and enable Networking for the on-board ethernet controller to work.
Here are some basic technical information about my PC in case they might be useful:
PC model: Dell Optiplex 7010 Mini-tower 3rd gen
Linux distro: ubuntu linux 20.04 lts booted in uefi boot mode.
ethernet controller name: Intel(R) 82579LM Gigabit Network Connection (as reported by Windows' Device Manager)

Dmesg command returns "e1000e: device probe failed with error -3"

I have tried disabling and re-enabling the e1000e module with no luck, have also tried going to /sys/dev/pci/network/enabled (where network is the ID of the on-board ethernet controller) and echoing 0 and 1 but still no success.
I also have tried reinstalling Linux distribution and building drivers from source (The e1000e drivers from Intel website) but still with no luck. I also have tried many solutions written on Google but with no luck too.

lspci -vv command outputs the device information like this:

00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (Lewisville) (rev 04)
    DeviceName:  Onboard LAN
    Subsystem: Dell 82579LM Gigabit Network Connection (Lewisville)
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Interrupt: pin A routed to IRQ 27
    Region 0: Memory at f7c00000 (32-bit, non-prefetchable) [size=128K]
    Region 1: Memory at f7c38000 (32-bit, non-prefetchable) [size=4K]
    Region 2: I/O ports at f060 [size=32]
    Capabilities: [c8] Power Management version 2
        Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=1 PME-
    Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Address: 00000000fee00298  Data: 0000
    Capabilities: [e0] PCI Advanced Features
        AFCap: TP+ FLR+
        AFCtrl: FLR-
        AFStatus: TP-
    Kernel driver in use: e1000e
    Kernel modules: e1000e
5
  • If you are saying about Linux, better list how it is reported there, than in Windows: lspci; also lspci -k to see which driver it is using (though it is very likely that it is really e1000e). Also, I suspect the problem is with its power saving modes, so try to explore that. Do you see any settings related to this this in BIOS Setup? Does anything change in files inside /sys/bus/pci/drivers/e1000e/PCI_BUS_ADDRESS/power/ before and after "disabling and re-enabling" the device? Nov 17, 2022 at 13:10
  • @NikitaKipriyanov No, Nothing actually changes in the power file after disabling and re-enabling the e1000e module, and I don't know how to disable and re-enable the device because that's why I am asking this question. Nov 20, 2022 at 8:41
  • (legally obligatory note: I work for Dell): Yes, this is done through udev. If I get a chance to go write up a proper answer I will, but just Google "Disable device through udev" and that will put you on the track you want. Nov 26, 2022 at 12:03
  • @GrantCurell I tried searching on google for "disabling pci devices through udev" and ended up finding this question on stackoverflow but the selected answer doesn't seem to work as echoing the device PCI ID to the file /sys/bus/pci/drivers/e1000e/unbind just returns an Access is denied error. Here's the command I tried: sudo echo 0000:00:19.0 > /sys/bus/pci/drivers/e1000e/unbind Mar 16 at 10:13
  • You need to create the udev rule that is going to match. I suggest asking chatgpt about it - I just tried it and it gives a pretty comprehensive answer. Right now what you're doing isn't going to trigger anything from udev because you don't have any udev rules set up for the device. I used prompt "How do you disable a PCIe device through udev" Mar 16 at 20:57

0

You must log in to answer this question.

Browse other questions tagged .