From: fengchengwen <fengchengwen@huawei.com>
To: <linux-pci@vger.kernel.org>
Cc: Wei <wei.huang2@amd.com>, <Eric.VanTassell@amd.com>,
<bhelgaas@google.com>, <jonathan.cameron@huawei.com>,
<wangzhou1@hisilicon.com>, <wanghuiqiang@huawei.com>,
<liuyonglong@huawei.com>
Subject: RFC about how to obtain PCIE TPH steer-tag on ARM64 platform
Date: Mon, 12 Jan 2026 11:01:31 +0800 [thread overview]
Message-ID: <0cba9df3-8fe5-47ef-929c-6da64d31bf69@huawei.com> (raw)
Hi all,
We want to enable PCIE TPH feature on ARM64 platform, but we encounter the
following problem:
1. The pcie_tph_get_cpu_st() function invokes the ACPI DSM method to obtain
the steer-tag of the CPU. According to the definition of the DSM method [1],
the cpu_uid should be "ACPI processor uid".
2. In the current implementation, the ACPI DSM method is invoked directly using
the logical core number, which works on the x86 platform but does not work
on the ARM64 platform because the logical core ID is not the same as the
ACPI processor ID when the PG exists.
Because the ARM64 platform generates steer-tag based on the MPIDR information
(at least for the Kunpeng platform). Therefore, we have two option:
Option-1: convert logic core ID to ACPI process ID: use get_acpi_id_for_cpu()
to get ACPI process ID in pcie_tph_get_cpu_st() before invoke dsm [2],
and BIOS/ACPI use process ID to get corresponding MPIDR, and then
generate steer-tag from MPIDR.
Option-2: convert logic core ID to MPIDR: use cpu_logical_map() to get MPIDR
in pcie_tph_get_cpu_st() before invoke dsm, and BIOS/ACPI use it
to generate steer-tag directly.
Option-1 complies with _DSM ECN, but requires BIOS/ACPI to maintain a mapping
table from acpi_process_id to MPIDR.
Option 2 does not comply with _DSM ECN (if extension is required). But it is easy
to implement and can be extended to the DT system (ACPI is not supported) I think.
Hope for your feedback.
With best regards,
Chengwen
[1] According to _DSM ECN, the input is defined as: "If the target
is a processor, then this field represents the ACPI Processor UID of the
processor as specified in the MADT. If the target is a processor
container, then this field represents the ACPI Processor UID of the
processor container as specified in the PPTT"
[2] git diff about /drivers/pci/tph.c
@@ -289,6 +289,9 @@ int pcie_tph_get_cpu_st(struct pci_dev *pdev, enum tph_mem_type mem_type,
rp_acpi_handle = ACPI_HANDLE(rp->bus->bridge);
+#ifdef CONFIG_ARM64
+ cpu_uid = get_acpi_id_for_cpu(cpu_uid);
+#endif
if (tph_invoke_dsm(rp_acpi_handle, cpu_uid, &info) != AE_OK) {
*tag = 0;
return -EINVAL;
next reply other threads:[~2026-01-12 3:01 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-12 3:01 fengchengwen [this message]
2026-01-13 19:07 ` RFC about how to obtain PCIE TPH steer-tag on ARM64 platform Bjorn Helgaas
2026-01-13 22:38 ` Wei Huang
2026-01-14 3:52 ` fengchengwen
2026-01-14 16:36 ` Wei Huang
2026-01-16 0:14 ` fengchengwen
2026-01-14 3:39 ` fengchengwen
2026-01-14 17:03 ` Bjorn Helgaas
2026-01-16 0:21 ` fengchengwen
2026-01-16 19:32 ` Bjorn Helgaas
2026-01-19 0:17 ` fengchengwen
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=0cba9df3-8fe5-47ef-929c-6da64d31bf69@huawei.com \
--to=fengchengwen@huawei.com \
--cc=Eric.VanTassell@amd.com \
--cc=bhelgaas@google.com \
--cc=jonathan.cameron@huawei.com \
--cc=linux-pci@vger.kernel.org \
--cc=liuyonglong@huawei.com \
--cc=wanghuiqiang@huawei.com \
--cc=wangzhou1@hisilicon.com \
--cc=wei.huang2@amd.com \
/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