All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Huang <wei.huang2@amd.com>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: fengchengwen <fengchengwen@huawei.com>,
	linux-pci@vger.kernel.org, Eric.VanTassell@amd.com,
	bhelgaas@google.com, jonathan.cameron@huawei.com,
	wangzhou1@hisilicon.com, wanghuiqiang@huawei.com,
	liuyonglong@huawei.com
Subject: Re: RFC about how to obtain PCIE TPH steer-tag on ARM64 platform
Date: Tue, 13 Jan 2026 16:38:23 -0600	[thread overview]
Message-ID: <aWbJX75VdCEOBCgx@weiserver> (raw)
In-Reply-To: <20260113190713.GA775730@bhelgaas>

On Tue, Jan 13, 2026 at 01:07:13PM -0600, Bjorn Helgaas wrote:
> On Mon, Jan 12, 2026 at 11:01:31AM +0800, fengchengwen wrote:
> > 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.
> 
> PG?
> 
> > 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.

In my opinion, if this is achievable in your BIOS/ACPI, it is clean vs. Option-2 and preferred.

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

This solution requires you to change the ECN and ratify it (as suggested by Bjorn below). The implementation can also be complicated.

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

If you plan to revamp it, one (wild) idea is that ST retrieval can be extended to support:
  1. ACPI _DSM
  2. DT
  3. Vendor specific

After that, your MPIDR solution can be plugged-in under (3).

> 
> Sounds like this would be of interest to any OS, not just Linux.
> 
> Possibly a topic for the PCI-SIG firmware working group
> (https://members.pcisig.com/wg/Firmware/dashboard) or the ACPI spec
> working group (https://uefi.org/workinggroups)?
> 
> > [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;
> > 
> > 

  reply	other threads:[~2026-01-13 22:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-12  3:01 RFC about how to obtain PCIE TPH steer-tag on ARM64 platform fengchengwen
2026-01-13 19:07 ` Bjorn Helgaas
2026-01-13 22:38   ` Wei Huang [this message]
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=aWbJX75VdCEOBCgx@weiserver \
    --to=wei.huang2@amd.com \
    --cc=Eric.VanTassell@amd.com \
    --cc=bhelgaas@google.com \
    --cc=fengchengwen@huawei.com \
    --cc=helgaas@kernel.org \
    --cc=jonathan.cameron@huawei.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=liuyonglong@huawei.com \
    --cc=wanghuiqiang@huawei.com \
    --cc=wangzhou1@hisilicon.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.