[PCI] AMD RX780/RD790 root port and RX 6600 upstream bridge train at Gen2 x2; RX 570 reaches Gen2 x8 in the same slot

ego RRR <[email protected]> Sun, 2 Aug 2026 02:17:22 -0700
Newsgroups org.kernel.vger.linux-pci
Message-ID <CAPbDjBakdW2DdVoegF94Hk8w83oh4X1nCF8brQ7H8S1UZJwbng@mail.gmail.com>
Hello,

I am requesting guidance on a reproducible PCIe link-width interoperability
problem involving an old AMD RX780/RD790 root port and an AMD Radeon RX 6600.
This is not yet claimed to be a Linux regression: the evidence currently
localizes the problem to link training on one external hop.

Hardware
========

Motherboard: MSI 870-C45 (MS-7599)
Chipset: AMD 770 / SB710; GFX root port identified as RX780/RD790
BIOS: AMI V1.15, 2011-03-04
CPU: AMD Phenom II X6 1055T
GPU under test: ASRock Radeon RX 6600, Navi 23 [1002:73ff]
Control GPU: Radeon RX 570, Ellesmere [1002:67df]

Linux environments tested
=========================

* Gentoo LiveCD, Linux 6.18.38, with amdgpu not loaded or bound
* gentoo-sources 6.18.39 custom kernel
* Gentoo distribution binary kernel 6.18.39

RX 6600 topology and observed links
===================================

00:02.0 [1002:5978] AMD RX780/RD790 root port
  LnkCap: 5.0 GT/s, Width x16
  LnkSta: 5.0 GT/s, Width x2

01:00.0 [1002:1478] AMD upstream port of the GPU PCIe switch
  LnkCap: 16.0 GT/s, Width x8
  LnkSta: 5.0 GT/s, Width x2

02:00.0 [1002:1479] AMD downstream port
  LnkCap/LnkSta: 16.0 GT/s, Width x16

03:00.0 [1002:73ff] Navi 23 GPU endpoint
  LnkCap/LnkSta: 16.0 GT/s, Width x16

Thus the affected external hop is 00:02.0 <-> 01:00.0. Its common maximum is
Gen2 x8. The internal 02:00.0 <-> 03:00.0 x16 link is healthy and must not be
confused with the external card interface.

Control result with RX 570
==========================

Using the same motherboard, physical slot, Gentoo LiveCD and Linux 6.18.38:

00:02.0 [1002:5978]
  LnkCap: 5.0 GT/s, Width x16
  LnkSta: 5.0 GT/s, Width x8

01:00.0 RX 570 [1002:67df]
  LnkCap: 8.0 GT/s, Width x16
  LnkSta: 5.0 GT/s, Width x8

This demonstrates that the board/root port/slot and this Linux environment can
operate at least eight lanes. The reduced width follows the RX 6600 or the
specific RX780/RD790 <-> [1002:1478] pairing.

Early and repeated observations
===============================

* pci=earlydump on the custom kernel captured root-port LnkSta 0xf022,
  corresponding to Gen2 x2, before normal driver initialization.
* Current root-port LnkSta remained Gen2 x2.
* The result was stable for 72/72 samples after a cold boot and 12/12 samples
  after complete power removal and reseating.
* No AER errors were reported, but this does not prove that unused lanes are
  electrically functional.
* The RX 6600 produces video and remains stable at x2.

Experiments already completed without improvement
=================================================

* normal PCIe link retrain;
* an early kernel retrain before amdgpu;
* Gen1 -> Gen2 target-speed cycle;
* Secondary Bus Reset;
* amdgpu PCIe DPM state changes.

Each completed with the external hop still at x2. A Link Disable experiment
hung during early PCI enumeration and must not be repeated.

AMD RD790 indirect register observation
=======================================

PCIEIND_P_A2 = 0x00000226

Decoded from related AMD documentation/source material:

* intended/target width code: 6 (x16 at the root port);
* trained/current width code: 2 (x2);
* renegotiation support: 1;
* renegotiation enable: 0;
* upconfigure support: 0.

No width value was written. A forced vendor-register write is intentionally
not being attempted because current width is below intended width and the
platform does not report upconfigure support.

Questions
=========

1. Is there a known interoperability erratum or quirk for the AMD
   RX780/RD790 [1002:5978] root port paired with AMD [1002:1478]?
2. Is there any upstream-supported read-only diagnostic that can identify why
   lanes 2-7 fail to become active during initial training?
3. Would a PCI quirk be appropriate here, or does the early Gen2 x2 state make
   this a firmware/electrical issue outside Linux control?
4. Which exact config-space dumps or traces would maintainers like next?

I can provide full lspci -vvxxx output, earlydump/current config bytes, dmesg,
kernel configurations, and the existing experiment reports. I will not repeat
Link Disable, force a vendor width register, or run additional PCI writes
without a reviewed procedure.

Thank you.