From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
To: Bjorn Helgaas <bhelgaas@google.com>, linux-pci@vger.kernel.org
Cc: Myron Stowe <myron.stowe@redhat.com>, Jiang Liu <jiang.liu@intel.com>
Subject: Re: [PATCH 2/2] PCI: Add pcie_downstream_port() (true for Root and Switch Downstream Ports)
Date: Wed, 15 Jul 2015 00:26:23 +0200 [thread overview]
Message-ID: <55A58C8F.4010703@intel.com> (raw)
In-Reply-To: <20150714194511.13471.8395.stgit@bhelgaas-glaptop2.roam.corp.google.com>
On 7/14/2015 9:45 PM, Bjorn Helgaas wrote:
> As used in the PCIe spec, "Downstream Port" includes both Root Ports and
> Switch Downstream Ports. We sometimes checked for PCI_EXP_TYPE_DOWNSTREAM
> when we should have checked for PCI_EXP_TYPE_ROOT_PORT or
> PCI_EXP_TYPE_DOWNSTREAM.
>
> For a Root Port without a slot, the effect of this was that using
> pcie_capability_read_word() to read PCI_EXP_SLTSTA returned zero instead of
> showing the Presence Detect State bit hardwired to one as the PCIe Spec,
> r3.0, sec 7.8, requires. (This read is completed in software because
> previous PCIe spec versions didn't require PCI_EXP_SLTSTA to exist at all.)
>
> Nothing in the kernel currently depends on this (pciehp only reads
> PCI_EXP_SLTSTA on ports with slots), so this is a cleanup and not a
> functional change.
>
> Add a pcie_downstream_port() helper function and use it.
>
> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
ACK
> ---
> drivers/pci/access.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/pci/access.c b/drivers/pci/access.c
> index d9b64a1..79f0102 100644
> --- a/drivers/pci/access.c
> +++ b/drivers/pci/access.c
> @@ -531,6 +531,14 @@ static inline int pcie_cap_version(const struct pci_dev *dev)
> return pcie_caps_reg(dev) & PCI_EXP_FLAGS_VERS;
> }
>
> +static bool pcie_downstream_port(constr struct pci_dev *dev)
> +{
> + int type = pci_pcie_type(dev);
> +
> + return type == PCI_EXP_TYPE_ROOT_PORT ||
> + type == PCI_EXP_TYPE_DOWNSTREAM;
> +}
> +
> bool pcie_cap_has_lnkctl(const struct pci_dev *dev)
> {
> int type = pci_pcie_type(dev);
> @@ -546,10 +554,7 @@ bool pcie_cap_has_lnkctl(const struct pci_dev *dev)
>
> static inline bool pcie_cap_has_sltctl(const struct pci_dev *dev)
> {
> - int type = pci_pcie_type(dev);
> -
> - return (type == PCI_EXP_TYPE_ROOT_PORT ||
> - type == PCI_EXP_TYPE_DOWNSTREAM) &&
> + return pcie_downstream_port(dev) &&
> pcie_caps_reg(dev) & PCI_EXP_FLAGS_SLOT;
> }
>
> @@ -628,10 +633,9 @@ int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val)
> * State bit in the Slot Status register of Downstream Ports,
> * which must be hardwired to 1b. (PCIe Base Spec 3.0, sec 7.8)
> */
> - if (pci_is_pcie(dev) && pos == PCI_EXP_SLTSTA &&
> - pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM) {
> + if (pci_is_pcie(dev) && pcie_downstream_port(dev) &&
> + pos == PCI_EXP_SLTSTA)
> *val = PCI_EXP_SLTSTA_PDS;
> - }
>
> return 0;
> }
> @@ -657,10 +661,9 @@ int pcie_capability_read_dword(struct pci_dev *dev, int pos, u32 *val)
> return ret;
> }
>
> - if (pci_is_pcie(dev) && pos == PCI_EXP_SLTCTL &&
> - pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM) {
> + if (pci_is_pcie(dev) && pcie_downstream_port(dev) &&
> + pos == PCI_EXP_SLTSTA)
> *val = PCI_EXP_SLTSTA_PDS;
> - }
>
> return 0;
> }
>
prev parent reply other threads:[~2015-07-14 22:26 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-14 19:44 [PATCH 0/2] PCI: Comment and PCIe capability accessor fixes Bjorn Helgaas
2015-07-14 19:45 ` [PATCH 1/2] PCI: Fix pcie_port_device_resume() comment Bjorn Helgaas
2015-07-14 22:25 ` Rafael J. Wysocki
2015-07-14 19:45 ` [PATCH 2/2] PCI: Add pcie_downstream_port() (true for Root and Switch Downstream Ports) Bjorn Helgaas
2015-07-14 22:26 ` Rafael J. Wysocki [this message]
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=55A58C8F.4010703@intel.com \
--to=rafael.j.wysocki@intel.com \
--cc=bhelgaas@google.com \
--cc=jiang.liu@intel.com \
--cc=linux-pci@vger.kernel.org \
--cc=myron.stowe@redhat.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.