From: Mario Limonciello <mario.limonciello@amd.com>
To: Lukas Wunner <lukas@wunner.de>
Cc: "Karol Herbst" <kherbst@redhat.com>,
"Lyude Paul" <lyude@redhat.com>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Hans de Goede" <hdegoede@redhat.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Mika Westerberg" <mika.westerberg@linux.intel.com>,
"Danilo Krummrich" <dakr@redhat.com>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Xinhui Pan" <Xinhui.Pan@amd.com>,
"Rafael J . Wysocki" <rafael@kernel.org>,
"Mark Gross" <markgross@kernel.org>,
"Andreas Noever" <andreas.noever@gmail.com>,
"Michael Jamet" <michael.jamet@intel.com>,
"Yehezkel Bernat" <YehezkelShB@gmail.com>,
"Pali Rohár" <pali@kernel.org>, "Marek Behún" <kabel@kernel.org>,
"Maciej W . Rozycki" <macro@orcam.me.uk>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"open list:DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS"
<dri-devel@lists.freedesktop.org>,
"open list:DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS"
<nouveau@lists.freedesktop.org>,
"open list" <linux-kernel@vger.kernel.org>,
"open list:RADEON and AMDGPU DRM DRIVERS"
<amd-gfx@lists.freedesktop.org>,
"open list:PCI SUBSYSTEM" <linux-pci@vger.kernel.org>,
"open list:ACPI" <linux-acpi@vger.kernel.org>,
"open list:X86 PLATFORM DRIVERS"
<platform-driver-x86@vger.kernel.org>,
"open list:THUNDERBOLT DRIVER" <linux-usb@vger.kernel.org>
Subject: Re: [PATCH v2 8/9] PCI: Exclude PCIe ports used for tunneling in pcie_bandwidth_available()
Date: Mon, 6 Nov 2023 12:44:25 -0600 [thread overview]
Message-ID: <712ebb25-3fc0-49b5-96a1-a13c3c4c4921@amd.com> (raw)
In-Reply-To: <20231106181022.GA18564@wunner.de>
On 11/6/2023 12:10, Lukas Wunner wrote:
> On Fri, Nov 03, 2023 at 02:07:57PM -0500, Mario Limonciello wrote:
>> The USB4 spec specifies that PCIe ports that are used for tunneling
>> PCIe traffic over USB4 fabric will be hardcoded to advertise 2.5GT/s and
>> behave as a PCIe Gen1 device. The actual performance of these ports is
>> controlled by the fabric implementation.
>>
>> Downstream drivers such as amdgpu which utilize pcie_bandwidth_available()
>> to program the device will always find the PCIe ports used for
>> tunneling as a limiting factor potentially leading to incorrect
>> performance decisions.
>>
>> To prevent problems in downstream drivers check explicitly for ports
>> being used for PCIe tunneling and skip them when looking for bandwidth
>> limitations of the hierarchy. If the only device connected is a root port
>> used for tunneling then report that device.
>
> I think a better approach would be to define three new bandwidths for
> Thunderbolt in enum pci_bus_speed and add appropriate descriptions in
> pci_speed_string(). Those three bandwidths would be 10 GBit/s for
> Thunderbolt 1, 20 GBit/s for Thunderbolt 2, 40 GBit/s for Thunderbolt 3
> and 4.
It's an interesting idea, but there's a few short comings I can think of.
1) The USB4 specification doesn't actually require 40GB/s support, this
is only a Thunderbolt 4 requirement.
https://www.tomsguide.com/features/thunderbolt-4-vs-usb4-whats-the-difference
The TBT/USB4 link speed can be discovered, but it's not a property of
the *switch* not of the PCIe tunneling port.
Tangentially related; the link speed is currently symmetric but there
are two sysfs files. Mika left a comment in
drivers/thunderbolt/switch.c it may be asymmetric in the future. So we
may need to keep that in mind on any design that builds on top of them.
On an AMD Phoenix system connected to a TBT3 Alpine Ridge based eGPU
enclosure I can see:
$ cat /sys/bus/thunderbolt/devices/1-0/generation
4
$ cat /sys/bus/thunderbolt/devices/1-2/generation
3
$ cat /sys/bus/thunderbolt/devices/1-2/tx_speed
20.0 Gb/s
$ cat /sys/bus/thunderbolt/devices/1-2/rx_speed
20.0 Gb/s
2) This works until you end up with USB4v2 which supports 80GBit/s.
So this might mean an extra 80GB/s enum and porting some variation of
usb4_switch_version() outside of the thunderbolt driver so that PCI core
can use it too.
>
> Code to determine the Thunderbolt generation from the PCI ID already exists
> in tb_switch_get_generation().
As 'thunderbolt' can be a module or built in, we need to bring code into
PCI core so that it works in early boot before it loads.
On the presumption that no more "new" TBT3 devices will be released to
the market I suppose that *a lot* of that code could come over to PCI
core especially if we can bring some variation of usb4_switch_version()
over too.
The other option is that we can stop allowing thunderbolt as a module
and require it to be built-in. If we do this we can export symbols from
it and use some of them in PCI core too.
>
> This will not only address the amdgpu issue you're trying to solve,
> but also emit an accurate speed from __pcie_print_link_status().
>
> The speed you're reporting with your approach is not necessarily
> accurate because the next non-tunneled device in the hierarchy might
> be connected with a far higher PCIe speed than what the Thunderbolt
> fabric allows.
> > Thanks,
>
> Lukas
next prev parent reply other threads:[~2023-11-06 18:44 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-03 19:07 [PATCH v2 0/9] Improvements to pcie_bandwidth_available() for eGPUs Mario Limonciello
2023-11-03 19:07 ` [PATCH v2 1/9] drm/nouveau: Switch from pci_is_thunderbolt_attached() to dev_is_removable() Mario Limonciello
2023-11-06 12:25 ` Ilpo Järvinen
2023-11-06 16:47 ` Mika Westerberg
2023-11-06 16:49 ` Mario Limonciello
2023-11-03 19:07 ` [PATCH v2 2/9] drm/radeon: " Mario Limonciello
2023-11-06 12:27 ` Ilpo Järvinen
2023-11-03 19:07 ` [PATCH v2 3/9] PCI: Drop pci_is_thunderbolt_attached() Mario Limonciello
2023-11-04 0:37 ` kernel test robot
2023-11-06 12:33 ` Ilpo Järvinen
2023-11-06 16:46 ` Mario Limonciello
2023-11-03 19:07 ` [PATCH v2 4/9] PCI: Move the `PCI_CLASS_SERIAL_USB_USB4` definition to common header Mario Limonciello
2023-11-03 19:07 ` [PATCH v2 5/9] PCI: pciehp: Move check for is_thunderbolt into a quirk Mario Limonciello
2023-11-06 12:41 ` Ilpo Järvinen
2023-11-06 16:50 ` Mario Limonciello
2023-11-03 19:07 ` [PATCH v2 6/9] PCI: Rename is_thunderbolt to is_tunneled Mario Limonciello
2023-11-03 19:38 ` Hans de Goede
2023-11-05 17:39 ` Lukas Wunner
2023-11-06 16:59 ` Mario Limonciello
2023-11-06 18:18 ` Lukas Wunner
2023-11-03 19:07 ` [PATCH v2 7/9] PCI: ACPI: Detect PCIe root ports that are used for tunneling Mario Limonciello
2023-11-03 19:07 ` [PATCH v2 8/9] PCI: Exclude PCIe ports used for tunneling in pcie_bandwidth_available() Mario Limonciello
2023-11-04 6:57 ` Lazar, Lijo
2023-11-06 12:52 ` Ilpo Järvinen
2023-11-06 16:51 ` Mario Limonciello
2023-11-06 18:10 ` Lukas Wunner
2023-11-06 18:44 ` Mario Limonciello [this message]
2023-11-06 18:56 ` Lukas Wunner
2023-11-07 5:45 ` Mika Westerberg
2023-11-07 6:24 ` Mika Westerberg
2023-11-03 19:07 ` [PATCH v2 9/9] PCI: Add a quirk to mark 0x8086 : 0x9a23 as supporting PCIe tunneling Mario Limonciello
2023-11-03 19:20 ` [PATCH v2 0/9] Improvements to pcie_bandwidth_available() for eGPUs Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=712ebb25-3fc0-49b5-96a1-a13c3c4c4921@amd.com \
--to=mario.limonciello@amd.com \
--cc=Xinhui.Pan@amd.com \
--cc=YehezkelShB@gmail.com \
--cc=airlied@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=andreas.noever@gmail.com \
--cc=bhelgaas@google.com \
--cc=christian.koenig@amd.com \
--cc=dakr@redhat.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=hdegoede@redhat.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=kabel@kernel.org \
--cc=kherbst@redhat.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=lyude@redhat.com \
--cc=macro@orcam.me.uk \
--cc=mani@kernel.org \
--cc=markgross@kernel.org \
--cc=michael.jamet@intel.com \
--cc=mika.westerberg@linux.intel.com \
--cc=nouveau@lists.freedesktop.org \
--cc=pali@kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rafael@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®