From: Bjorn Helgaas <helgaas@kernel.org>
To: Wei Huang <wei.huang2@amd.com>
Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-doc@vger.kernel.org, netdev@vger.kernel.org,
Jonathan.Cameron@huawei.com, corbet@lwn.net, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
alex.williamson@redhat.com, gospo@broadcom.com,
michael.chan@broadcom.com, ajit.khaparde@broadcom.com,
somnath.kotur@broadcom.com, andrew.gospodarek@broadcom.com,
manoj.panicker2@amd.com, Eric.VanTassell@amd.com,
vadim.fedorenko@linux.dev, horms@kernel.org,
bagasdotme@gmail.com, bhelgaas@google.com, lukas@wunner.de,
paul.e.luse@intel.com, jing2.liu@intel.com
Subject: Re: [PATCH V4 03/12] PCI/TPH: Add pcie_tph_modes() to query TPH modes
Date: Thu, 5 Sep 2024 10:12:25 -0500 [thread overview]
Message-ID: <20240905151225.GA387183@bhelgaas> (raw)
In-Reply-To: <50d9910b-dbd4-48d1-ad43-f298d14986fe@amd.com>
On Thu, Sep 05, 2024 at 09:46:44AM -0500, Wei Huang wrote:
> On 9/4/24 14:40, Bjorn Helgaas wrote:
> > On Thu, Aug 22, 2024 at 03:41:11PM -0500, Wei Huang wrote:
> >> Add pcie_tph_modes() to allow drivers to query the TPH modes supported
> >> by an endpoint device, as reported in the TPH Requester Capability
> >> register. The modes are reported as a bitmask and current supported
> >> modes include:
> >>
> >> - PCI_TPH_CAP_NO_ST: NO ST Mode Supported
> >> - PCI_TPH_CAP_INT_VEC: Interrupt Vector Mode Supported
> >> - PCI_TPH_CAP_DEV_SPEC: Device Specific Mode Supported
> >
> >> + * pcie_tph_modes - Get the ST modes supported by device
> >> + * @pdev: PCI device
> >> + *
> >> + * Returns a bitmask with all TPH modes supported by a device as shown in the
> >> + * TPH capability register. Current supported modes include:
> >> + * PCI_TPH_CAP_NO_ST - NO ST Mode Supported
> >> + * PCI_TPH_CAP_INT_VEC - Interrupt Vector Mode Supported
> >> + * PCI_TPH_CAP_DEV_SPEC - Device Specific Mode Supported
> >> + *
> >> + * Return: 0 when TPH is not supported, otherwise bitmask of supported modes
> >> + */
> >> +int pcie_tph_modes(struct pci_dev *pdev)
> >> +{
> >> + if (!pdev->tph_cap)
> >> + return 0;
> >> +
> >> + return get_st_modes(pdev);
> >> +}
> >> +EXPORT_SYMBOL(pcie_tph_modes);
> >
> > I'm not sure I see the need for pcie_tph_modes(). The new bnxt code
> > looks like this:
> >
> > bnxt_request_irq
> > if (pcie_tph_modes(bp->pdev) & PCI_TPH_CAP_INT_VEC)
> > rc = pcie_enable_tph(bp->pdev, PCI_TPH_CAP_INT_VEC);
> >
> > What is the advantage of this over just this?
> >
> > bnxt_request_irq
> > rc = pcie_enable_tph(bp->pdev, PCI_TPH_CAP_INT_VEC);
> >
> > It seems like drivers could just ask for what they want since
> > pcie_enable_tph() has to verify support for it anyway. If that fails,
> > the driver can fall back to another mode.
>
> I can get rid of pcie_tph_modes() if unnecessary.
>
> The design logic was that a driver can be used on various devices from
> the same company. Some of these devices might not be TPH capable. So
> instead of using trial-and-error (i.e. try INT_VEC ==> DEV_SPEC ==> give
> up), we provide a way for the driver to query the device TPH
> capabilities and pick a mode explicitly. IMO the code will be a bit cleaner.
>
> > Returning a bitmask of supported modes might be useful if the driver
> > could combine them, but IIUC the modes are all mutually exclusive, so
> > the driver can't request a combination of them.
>
> In the real world cases I saw, this is true. In the spec I didn't find
> that these bits are mutually exclusive though.
A device may advertise *support* for multiple modes in TPH Requester
Capability, of course.
What I meant by "driver can't request a combination" is that we can
only *select* one of them via the ST Mode select in TPH Requester
Control.
next prev parent reply other threads:[~2024-09-05 15:12 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 20:41 [PATCH V4 00/12] PCIe TPH and cache direct injection support Wei Huang
2024-08-22 20:41 ` [PATCH V4 01/12] PCI: Introduce PCIe TPH support framework Wei Huang
2024-08-22 20:41 ` [PATCH V4 02/12] PCI: Add TPH related register definition Wei Huang
2024-09-04 19:52 ` Bjorn Helgaas
2024-09-05 15:08 ` Wei Huang
2024-09-05 16:41 ` Bjorn Helgaas
2024-09-16 21:08 ` Wei Huang
2024-08-22 20:41 ` [PATCH V4 03/12] PCI/TPH: Add pcie_tph_modes() to query TPH modes Wei Huang
2024-09-04 19:40 ` Bjorn Helgaas
2024-09-05 14:46 ` Wei Huang
2024-09-05 15:12 ` Bjorn Helgaas [this message]
2024-08-22 20:41 ` [PATCH V4 04/12] PCI/TPH: Add pcie_enable_tph() to enable TPH Wei Huang
2024-09-13 11:35 ` Alejandro Lucero Palau
2024-08-22 20:41 ` [PATCH V4 05/12] PCI/TPH: Add pcie_disable_tph() to disable TPH Wei Huang
2024-08-22 20:41 ` [PATCH V4 06/12] PCI/TPH: Add pcie_tph_enabled() to check TPH state Wei Huang
2024-08-22 20:41 ` [PATCH V4 07/12] PCI/TPH: Add pcie_tph_set_st_entry() to set ST tag Wei Huang
2024-08-26 11:46 ` kernel test robot
2024-08-22 20:41 ` [PATCH V4 08/12] PCI/TPH: Add pcie_tph_get_cpu_st() to get " Wei Huang
2024-09-14 10:10 ` Alejandro Lucero Palau
2024-09-16 18:58 ` Wei Huang
2024-08-22 20:41 ` [PATCH V4 09/12] PCI/TPH: Add save/restore support for TPH Wei Huang
2024-09-04 20:11 ` Bjorn Helgaas
2024-08-22 20:41 ` [PATCH V4 10/12] PCI/TPH: Add pci=nostmode to force TPH No ST Mode Wei Huang
2024-08-22 20:41 ` [PATCH V4 11/12] bnxt_en: Add TPH support in BNXT driver Wei Huang
2024-08-26 20:22 ` Jakub Kicinski
2024-08-26 20:56 ` Andy Gospodarek
2024-08-26 22:49 ` Jakub Kicinski
2024-08-27 14:50 ` Andy Gospodarek
2024-08-27 19:05 ` Jakub Kicinski
2024-08-27 19:20 ` Michael Chan
2024-09-05 15:06 ` Bjorn Helgaas
2024-09-11 15:37 ` Alejandro Lucero Palau
2024-09-16 18:55 ` Wei Huang
2024-09-18 17:31 ` Alejandro Lucero Palau
2024-09-19 16:14 ` Wei Huang
2024-08-22 20:41 ` [PATCH V4 12/12] bnxt_en: Pass NQ ID to the FW when allocating RX/RX AGG rings Wei Huang
2024-09-03 22:42 ` [PATCH V4 00/12] PCIe TPH and cache direct injection support Wei Huang
2024-09-04 18:49 ` Bjorn Helgaas
2024-09-04 19:48 ` Wei Huang
2024-09-04 20:03 ` Bjorn Helgaas
2024-09-04 20:20 ` Bjorn Helgaas
2024-09-05 15:45 ` Wei Huang
2024-09-05 16:44 ` 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=20240905151225.GA387183@bhelgaas \
--to=helgaas@kernel.org \
--cc=Eric.VanTassell@amd.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=ajit.khaparde@broadcom.com \
--cc=alex.williamson@redhat.com \
--cc=andrew.gospodarek@broadcom.com \
--cc=bagasdotme@gmail.com \
--cc=bhelgaas@google.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gospo@broadcom.com \
--cc=horms@kernel.org \
--cc=jing2.liu@intel.com \
--cc=kuba@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=manoj.panicker2@amd.com \
--cc=michael.chan@broadcom.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=paul.e.luse@intel.com \
--cc=somnath.kotur@broadcom.com \
--cc=vadim.fedorenko@linux.dev \
--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 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.