Recently, I had an Ubuntu laptop I use regularly develop a weird quirk: sometimes when I plugged it into USB-C, neither the monitor nor power would connect. I discovered I could fix this by simply running lspci
on the laptop, which somehow forced both to come back.
As this made no sense, I dug down a bit more. I can’t say I found an answer, but I did find some more things worth questioning.
PCI devices
On my laptop, devices are exposed at /sys/bus/pci/devices
. Searching around a bit, I found that device /sys/bus/cpi/devices/0000:3b:00.0
was reporting itself as USB controller: Intel Corporation JHL6540 Thunderbolt 3 USB Controller (C step) [Alpine Ridge 4C 2016] (rev 02)
. Navigating into that subdirectory, I found I could sudo -s
, then echo 1 > reset
, which fixed the system in apparently the same way as running lspci
.
What the hell?
At this point, I don’t really know. Sometimes the Linux architecture just puzzles me. I don’t know that lspci
is running a reset on devices, but perhaps when it tries to poll details on the device, the act of polling itself trips a fault in the driver (becuase the driver realizes it can’t communicate with the device) and forces a reset to heal itself? I haven’t found any code confirming or falsifying this hypothesis; it’s still an open question for me.
On not giving up
Owning a Linux machine is like this. When things go wrong, the only person who’s responsible for fixing it is the owner. This is, ultimately, true of all self-owned computers, of course.
When I was younger, the ecosystem of Linux users was too hard to find to make this task easy; certainly not as easy as it was for Windows ownership, when everyone on the block had one of those machines. But the nice thing about living in the Internet era is Linux use bloomed, and at the same time users can find each other much more easily. I learned about the existence of the PCI list poking around on various sites.
There’s much more to learn, but it’s nice that resources are far easier to find now.
No comments:
Post a Comment