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.
We will provide then two different values - lspci will show one value,
lsgpu another.  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.

--
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
> 
> 

Reply via email to