inxi-graphics updates, added debugger for switcherooctl

This commit is contained in:
Harald Hope 2024-08-09 15:24:09 -07:00
parent 4f5f59915a
commit 49bd5ebe40
2 changed files with 185 additions and 0 deletions

View file

@ -71,6 +71,7 @@ MONITOR DATA
wayland_data()
GRAPHICS HARDWARE
CARD RAM
DISPLAY CLASS
================================================================================
DISPLAY API
@ -3993,6 +3994,189 @@ ip/hd-display-transmitter-controller
/usr/lib/xorg-server/Xorg.wrap: Only console users are allowed to run the X server
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863891
========================================
DISPLAY CLASS
----------------------------------------
Resource:
https://www.dmtf.org/sites/default/files/standards/documents/DSP1075_1.0.0.pdf
https://ics.uci.edu/~harris/ics216/pci/PCI_22.pdf
https://stackoverflow.com/questions/41658094/what-is-the-difference-between-
display-controller-and-vga-compatible-controller
"* VGA compatible controller, Intel integrated GPU: Controls the display monitor &
the HDMI port.
* Display controller AMD discrete GPU: This PCI connected device can be used to
render specific things, like games, or some other apps. This is known as
"Hardware Acceleration" with GPU. This probably cannot drive the monitor
display, I guess because no such physical connections exist from it which can
control the display / HDMI. Desktop GPUs have their on video output ports."
The primary PCI class is: 03h: Display Controller.
There are 4 classes. It is not easy to understand or find docs on what these
really are.
----------------------------------------
MUXED/MUXLESS - ports, no port for renderer
----------------------------------------
----------------------------------------
https://www.kernel.org/doc/html/v4.20/gpu/vga-switcheroo.html
vga_switcheroo is the Linux subsystem for laptop hybrid graphics. These come in
two flavors:
muxed: Dual GPUs with a multiplexer chip to switch outputs between GPUs.
muxless: Dual GPUs but only one of them is connected to outputs. The other one
is merely used to offload rendering, its results are copied over PCIe into the
framebuffer. On Linux this is supported with DRI PRIME. Hybrid graphics started
to appear in the late Naughties and were initially all muxed. Newer laptops
moved to a muxless architecture for cost reasons. A notable exception is the
MacBook Pro which continues to use a mux. Muxes come with varying capabilities:
Some switch only the panel, others can also switch external displays. Some
switch all display pins at once while others can switch just the DDC lines. (To
allow EDID probing for the inactive GPU.) Also, muxes are often used to cut
power to the discrete GPU while it is not used.
/sys/kernel/debug/vgaswitcheroo/switch
Values:
* OFF: Power off the device not in use.
* ON: Power on the device not in use.
* IGD: Switch to the integrated graphics device. Power on the integrated GPU if
necessary, power off the discrete GPU. Prerequisite is that no user space
processes (e.g. Xorg, alsactl) have opened device files of the GPUs or the audio
client. If the switch fails, the user may invoke lsof(8) or fuser(1) on
/dev/dri/ and /dev/snd/controlC1 to identify processes blocking the switch.
* DIS: Switch to the discrete graphics device.
* DIGD: Delayed switch to the integrated graphics device. This will perform the
switch once the last user space process has closed the device files of the GPUs
and the audio client.
* DDIS: Delayed switch to the discrete graphics device.
* MIGD: Mux-only switch to the integrated graphics device. Does not remap
console or change the power state of either gpu. If the integrated GPU is
currently off, the screen will turn black. If it is on, the screen will show
whatever happens to be in VRAM. Either way, the user has to blindly enter the
command to switch back.
* MDIS: Mux-only switch to the discrete graphics device.
----------------------------------------
Mrmazda found this in his systems, two, 1 with discrete nvidia, both with intel
igpu:
# pinxi -Gaz --vs --zl --hostname
pinxi 3.3.28-18 (2023-08-08)
Graphics:
Device-1: Intel 82865G Integrated Graphics vendor: Dell driver: i915
v: kernel arch: Gen-2 process: Intel 130nm built: 2002-03 ports:
active: none empty: VGA-2 bus-ID: 00:02.0 chip-ID: 8086:2572
class-ID: 0380
Device-2: NVIDIA NV5 [Riva TNT2 Model 64 / Pro] driver: nouveau v: kernel
non-free: series: 71.86.xx status: legacy (EOL) last: release: 71.86.15
kernel: 2.6.38 xorg: 1.7 arch: Fahrenheit code: NVx
process: TSMC 220-350nm built: 1998-2000 ports: active: VGA-1 empty: none
bus-ID: 01:08.0 chip-ID: 10de:002d class-ID: 0300
# pinxi -Gaz --vs --zl --hostname
pinxi 3.3.30-07 (2023-10-18)
Graphics:
Device-1: Intel 82865G Integrated Graphics vendor: Dell driver: i915
v: kernel arch: Gen-2 process: Intel 130nm built: 2002-03 ports:
active: VGA-1 empty: none bus-ID: 00:02.0 chip-ID: 8086:2572
class-ID: 0300
They're originally twin Dell GX270 PCs, but one remains Intel onboard only,
while the other has added an AGP NV. The Intel's ID is 380 when coupled with NV
card. Both above are from booting Tumbleweed, but pinxi run a year ago. Now in
TW and in Debian, the onboard doesn't show in pinxi when the NV is present:
# pinxi -Gaz --vs --zl --hostname # Bullseye
pinxi 3.3.34-04 (2024-05-06)
Graphics:
Device-1: NVIDIA NV34 [GeForce FX 5200] driver: nouveau v: kernel non-free:
series: 173.14.xx status: legacy (EOL~2013-12-xx) last: release: 173.14.39
kernel: 3.12 xorg: 1.15 arch: Rankine code: NV3x process: 130-150nm
built: 2003-2005 ports: active: DVI-I-1,VGA-1 empty: TV-1 bus-ID: 01:00.0
chip-ID: 10de:0322 class-ID: 0300
Display: x11 server: X.Org v: 1.20.11 compositor: Twin v: 3.0 driver: X:
# pinxi -Ga --vs
pinxi 3.3.35-02 (2024-08-03)
Graphics:
Device-1: NVIDIA NV34 [GeForce FX 5200] driver: nouveau v: kernel non-free:
series: 173.14.xx status: legacy (EOL~2013-12-xx) last: release: 173.14.39
kernel: 3.12 xorg: 1.15 arch: Rankine code: NV3x process: 130-150nm
built: 2003-2005 ports: active: DVI-I-1,VGA-1 empty: TV-1 bus-ID: 01:00.0
chip-ID: 10de:0322 class-ID: 0300
Display: x11 server: X.Org v: 21.1.12 compositor: kwin driver: X:
----------------------------------------
0300: VGA Compatible Controller
----------------------------------------
This is what most normal video cards show as. It has nothing to do with VGA
ports phyically, I believe HDMI, DisplayPort, etc, without VGA ports, will show
as this class. This is basically the default.
Unknown if machine learning gpus show as this, but I suspect they do.
----------------------------------------
0301: XGA Controller
----------------------------------------
https://en.wikipedia.org/wiki/Extended_Graphics_Array#:~:text=The%20eXtended%
20Graphics%20Array%20(usually,successor%20to%20the%208514%2FA.
The eXtended Graphics Array (usually called XGA) is a graphics card manufactured
by IBM and introduced for the IBM PS/2 line of personal computers in 1990 as a
successor to the 8514/A.
Have not seen one of these in the wild, but it is probably an enhanced version
of VGA controllers. Probably obsolete?
----------------------------------------
0302: 3D Controller
----------------------------------------
So far seen only in Intel + Nvidia Optimus laptops. Assumption is the Nvidia
gpu does not have a discreet port, but runs through the Intel, but that's not
a fact, just a guess.
https://lore.kernel.org/lkml/c2cdc3ca-20de-0133-b198-1118fcea7902@loongson.cn/
Sub-Class 02h is for controllers that have hardware support for 3D
operations and are not VGA compatible.
----------------------------------------
0380: Other Display Controller
----------------------------------------
https://www.reddit.com/r/Amd/comments/12pmc67/
amd_dgpu_igpu_any_benefits_or_features/
This is a catchall bucket. On laptops with amd igpu and dgpu, integrated and
discrete, that is, an APU and a standalone, that thread suggests that those
machines have a port for each controller.
Seen igpu and second as 0380 so it's not clear what it means.
https://lore.kernel.org/lkml/20230613030151.216625-3-15330273260@189.cn/
https://lore.kernel.org/lkml/f08b6a76-6c90-b59b-ff43-c779ef759d09@loongson.cn/
>>> For an example, nvidia render only GPU typically has 0x0380.
>> PCI_CLASS_DISPLAY_3D and PCI_CLASS_DISPLAY_OTHER are used to annotate
>> the render-only GPU.
>> Nowadays, the 'VGA devices' here is stand for the Graphics card
>>
>> which is capable of display something on the screen.
----------------------------------------
----------------------------------------
================================================================================
--------------------------------------------------------------------------------

1
pinxi
View file

@ -2018,6 +2018,7 @@ sub display_data {
['swaymsg','-t get_tree'],
['swaymsg','-t get_workspaces -p'],
['swaymsg','-t get_workspaces -r'],
['switcherooctl','list'],
['twin','--version'], # TDE
['vainfo',''],
['vdpauinfo',''],