Hi, Auto correction.
On Tuesday, 13 January 2026 11:53:11 CET Janusz Krzysztofik wrote: > Hi Zbigniew, > > Thanks for your comments. > > On Monday, 12 January 2026 17:45:23 CET Zbigniew Kempczyński wrote: > > On Thu, Jan 08, 2026 at 07:29:27PM +0100, Janusz Krzysztofik wrote: > > > Hi, > > > > > > Before I submit patches, I'd like you to have a look at the below > > > provided > > > example of proposed output from a modified lsgpu tool and share your > > > comments. > > > > > > Users complain about PCIe link bandwith of their Intel discrete GPU > > > devices > > > limited to 2.5 GT/s x1, unable to utilize capabilities of their > > > motherboards, > > > see https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10753. So > > > far > > > Intel has provided the following explanation: > > > https://www.intel.com/content/www/us/en/support/articles/000094587/graphics.html > > > > > > That's not true. While PCI devices associated directly with Intel > > > discrete > > > GPUs provide fake data about link speed and width capabilities and > > > status, > > > their upstream PCIe bridges report correct, actual values of those link > > > bandwidth attributes. > > > > Last time I was looking at this, and I have some doubts: > > > > Examining PCIe link chain for BMG, in my case device is > > > > 0000:03:00.0 -> > > ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0 > > > > LnkCap looks like this: > > > > # lspci -vv -s 0000:00:01.0 | egrep '^[0-9]|LnkCap' > > 00:01.0 PCI bridge: Intel Corporation Device a70d (rev 01) (prog-if 00 > > [Normal decode]) > > LnkCap: Port #2, Speed 32GT/s, Width x16, ASPM L1, Exit > > Latency L1 <16us > > LnkCap2: Supported Link Speeds: 2.5-32GT/s, Crosslink- > > Retimer+ 2Retimers+ DRS- > > # lspci -vv -s 0000:01:00.0 | egrep '^[0-9]|LnkCap' > > 01:00.0 PCI bridge: Intel Corporation Device e2ff (rev 01) (prog-if 00 > > [Normal decode]) > > LnkCap: Port #0, Speed 16GT/s, Width x8, ASPM L1, Exit > > Latency L1 <32us > > LnkCap2: Supported Link Speeds: 2.5-16GT/s, Crosslink- > > Retimer+ 2Retimers+ DRS+ > > # lspci -vv -s 0000:02:01.0 | egrep '^[0-9]|LnkCap' > > 02:01.0 PCI bridge: Intel Corporation Device e2f0 (prog-if 00 [Normal > > decode]) > > LnkCap: Port #8, Speed 2.5GT/s, Width x1, ASPM L1, Exit > > Latency L1 <1us > > LnkCap2: Supported Link Speeds: 2.5GT/s, Crosslink- > > Retimer+ 2Retimers+ DRS- > > # lspci -vv -s 0000:03:00.0 | egrep '^[0-9]|LnkCap' > > 03:00.0 VGA compatible controller: Intel Corporation Device e20b (prog-if > > 00 [VGA controller]) > > LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit > > Latency L0s <64ns, L1 <1us > > LnkCap2: Supported Link Speeds: 2.5GT/s, Crosslink- > > Retimer- 2Retimers- DRS- > > > > What is real link speed/width here? 32GT/s? 16GT/s? 2.5GT/s? Even if we > > put 16GT/s here or even 32GT/s (why not, it is in the chain) we still > > really don't know what is the real link speed/width on the GPU side. > > You've focused on link capabilities, while there is also information on link > status available. If you grep your lspci output with '^[0-9]|LnkCap|LnkSta' > then you will also see current link status, compared to its capabilities. > > > We will provide then two different values - lspci will show one value, > > lsgpu another. > > No, I proposed to omit those fake link bandwidth attributes associated with > the device itself from the output of lsgpu, and complement it with a view of > the device's PCIe upstream bridge, with its correct link speed and size info. > > > I don't know is it possible to alter sysfs values to real > > link speed/width (assuming it is a lie now) but imo real fix should go > > to sysfs side, not to userspace apps which just read what kernel provides. > > Those values are exposed in sysfs only via /sys/bus/pci/<slot>/device/config. > > Its content is provided by the linux kernel PCI layer as a copy of the > device's PCI config space read directly from hardware. Not quite true as there are also separate max/current_link_speed/size attributes, but their content is also generated directly from PCI config space. Thanks, Janusz > I don't think PCI > subsystem maintainers will like your idea. Since the issue is Intel GPU > specific, it needs to be addressed in an Intel specific piece of software, > if not in hardware. Neither i915 nor Xe KMDs can do anything about that. > > My first approach was to limit the corrective actions to extending the now > misleading information provided by customer support with a explanation of > where to look for actual values and a promise that those values, provided by > the device's upstream bridge, correctly describe the device's link status. > > The idea of teaching our lsgpu utility how to show current link status > correctly addresses the lack of such tool on the Linux side, compared to > Windows with its GPU-Z or HWiNFO user space tools which can do that (Windows > Device Manager still provides the same fake info as lspci). > > Thanks, > Janusz > > > > > -- > > Zbigniew > > > > > > > > While users may use lspci tool to examine bridge devices manually > > > themselves, > > > there is an idea of extending our lsgpu tool with support for printing > > > that > > > data. In order for the tool to show correct link bandwidth of a discrete > > > GPU, > > > we need to identify its PCIe upstream bridge and get that information > > > from > > > that bridge. For consistency with lspci output, we are not going to > > > replace > > > silently the fake data with those obtained from the bridge, only omit > > > that > > > data from our list of the GPU PCI device attributes, and complement the > > > printout with more or less complete information about the bridge itself. > > > > > > Please have a look at the example output provided below and share your > > > comments, if any. > > > > > > $ sudo ./build/tools/lsgpu -s > > > sys:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/drm/card0 > > > subsystem : drm > > > drm card : /dev/dri/card0 > > > parent : > > > sys:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0 > > > > > > sys:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/drm/renderD128 > > > subsystem : drm > > > drm render : /dev/dri/renderD128 > > > parent : > > > sys:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0 > > > > > > sys:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0 > > > subsystem : pci > > > drm card : /dev/dri/card0 > > > drm render : /dev/dri/renderD128 > > > vendor : 8086 > > > device : 56A0 > > > codename : dg2 > > > bridge : > > > sys:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 > > > > > > sys:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 > > > subsystem : pci > > > vendor : 8086 > > > device : 4FA0 > > > > > > $ sudo ./build/tools/lsgpu -p > > > ========== > > > drm:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/drm/card0 > > > ========== > > > > > > [properties] > > > DEVPATH : > > > /devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/drm/card0 > > > ID_PATH_TAG : pci-0000_03_00_0 > > > CURRENT_TAGS : :seat:uaccess:master-of-seat: > > > TAGS : :seat:uaccess:master-of-seat: > > > MINOR : 0 > > > DEVNAME : /dev/dri/card0 > > > ID_PATH : pci-0000:03:00.0 > > > SUBSYSTEM : drm > > > DEVTYPE : drm_minor > > > DEVLINKS : /dev/dri/by-path/pci-0000:03:00.0-card > > > ID_FOR_SEAT : drm-pci-0000_03_00_0 > > > USEC_INITIALIZED : 7056426 > > > MAJOR : 226 > > > > > > [attributes] > > > gt_cur_freq_mhz : 600 > > > gt_act_freq_mhz : 0 > > > subsystem : drm > > > gt_max_freq_mhz : 2400 > > > gt_RP1_freq_mhz : 600 > > > gt_RPn_freq_mhz : 300 > > > device : 0000:03:00.0 > > > gt_boost_freq_mhz : 2400 > > > gt_RP0_freq_mhz : 2400 > > > error : No error state collected > > > gt_min_freq_mhz : 300 > > > dev : 226:0 > > > > > > ========== > > > drm:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/drm/renderD128 > > > ========== > > > > > > [properties] > > > DEVPATH : > > > /devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/drm/renderD128 > > > ID_PATH : pci-0000:03:00.0 > > > MINOR : 128 > > > DEVNAME : /dev/dri/renderD128 > > > ID_PATH_TAG : pci-0000_03_00_0 > > > SUBSYSTEM : drm > > > DEVTYPE : drm_minor > > > DEVLINKS : /dev/dri/by-path/pci-0000:03:00.0-render > > > USEC_INITIALIZED : 7057304 > > > MAJOR : 226 > > > > > > [attributes] > > > subsystem : drm > > > dev : 226:128 > > > device : 0000:03:00.0 > > > > > > ========== > > > pci:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0 > > > ========== > > > card device : /dev/dri/card0 > > > render device : /dev/dri/renderD128 > > > codename : dg2 > > > > > > [properties] > > > PCI_ID : 8086:56A0 > > > DEVPATH : > > > /devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0 > > > ID_PCI_INTERFACE_FROM_DATABASE : VGA controller > > > ID_PATH_TAG : pci-0000_03_00_0 > > > PCI_CLASS : 30000 > > > ID_PCI_CLASS_FROM_DATABASE : Display controller > > > ID_PCI_SUBCLASS_FROM_DATABASE : VGA compatible controller > > > PCI_SUBSYS_ID : 8086:1029 > > > MODALIAS : > > > pci:v00008086d000056A0sv00008086sd00001029bc03sc00i00 > > > PCI_SLOT_NAME : 0000:03:00.0 > > > USEC_INITIALIZED : 7056140 > > > DRIVER : i915 > > > ID_PATH : pci-0000:03:00.0 > > > SUBSYSTEM : pci > > > > > > [attributes] > > > consistent_dma_mask_bits : 46 > > > power_state : D0 > > > class : 0x030000 > > > subsystem : pci > > > iommu_group : 17 > > > enable : 1 > > > subsystem_vendor : 0x8086 > > > reset_method : flr bus > > > vendor : 0x8086 > > > boot_vga : 1 > > > resource2_resize : 0000000000007f00 > > > subsystem_device : 0x1029 > > > driver : i915 > > > iommu : dmar0 > > > d3cold_allowed : 1 > > > local_cpulist : 0-23 > > > ari_enabled : 1 > > > numa_node : -1 > > > dma_mask_bits : 46 > > > irq : 124 > > > driver_override : (null) > > > device : 0x56a0 > > > local_cpus : ffffff > > > revision : 0x08 > > > msi_bus : 1 > > > broken_parity_status : 0 > > > devspec : > > > > > > ========== pci:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 > > > ========== > > > > > > [properties] > > > PCI_ID : 8086:4FA0 > > > DEVPATH : > > > /devices/pci0000:00/0000:00:01.0/0000:01:00.0 > > > ID_PCI_INTERFACE_FROM_DATABASE : Normal decode > > > ID_PATH_TAG : pci-0000_01_00_0 > > > PCI_CLASS : 60400 > > > ID_PCI_CLASS_FROM_DATABASE : Bridge > > > ID_PCI_SUBCLASS_FROM_DATABASE : PCI bridge > > > PCI_SUBSYS_ID : 0000:0000 > > > MODALIAS : > > > pci:v00008086d00004FA0sv00000000sd00000000bc06sc04i00 > > > PCI_SLOT_NAME : 0000:01:00.0 > > > USEC_INITIALIZED : 7055925 > > > DRIVER : pcieport > > > ID_PATH : pci-0000:01:00.0 > > > SUBSYSTEM : pci > > > > > > [attributes] > > > firmware_node : device:04 > > > irq : 16 > > > iommu_group : 14 > > > reset_method : bus > > > device : 0x4fa0 > > > d3cold_allowed : 1 > > > broken_parity_status : 0 > > > consistent_dma_mask_bits : 32 > > > numa_node : -1 > > > local_cpus : ffffff > > > subsystem : pci > > > iommu : dmar0 > > > enable : 1 > > > subsystem_vendor : 0x0000 > > > secondary_bus_number : 2 > > > current_link_speed : 16.0 GT/s PCIe > > > max_link_width : 16 > > > vendor : 0x8086 > > > max_link_speed : 16.0 GT/s PCIe > > > msi_bus : 1 > > > current_link_width : 16 > > > dma_mask_bits : 32 > > > driver_override : (null) > > > ari_enabled : 0 > > > class : 0x060400 > > > local_cpulist : 0-23 > > > revision : 0x01 > > > subordinate_bus_number : 4 > > > subsystem_device : 0x0000 > > > driver : pcieport > > > devspec : > > > power_state : D0 > > > > > > > > > A few AER related attributes that provide error statistics in the form of > > > hard to format lists of multiple key-values pairs each have been omitted > > > form > > > the printout. > > > > > > Thanks, > > > Janusz > > > > > > > > > >
