linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Chocron <jonnyc@amazon.com>
To: <lorenzo.pieralisi@arm.com>, <bhelgaas@google.com>,
	<jingoohan1@gmail.com>, <gustavo.pimentel@synopsys.com>,
	<robh+dt@kernel.org>, <mark.rutland@arm.com>
Cc: <andrew.murray@arm.com>, <dwmw@amazon.co.uk>,
	<benh@kernel.crashing.org>, <alisaidi@amazon.com>,
	<ronenk@amazon.com>, <barakw@amazon.com>, <talel@amazon.com>,
	<hanochu@amazon.com>, <hhhawa@amazon.com>,
	<linux-pci@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<devicetree@vger.kernel.org>, <jonnyc@amazon.com>
Subject: [PATCH v5 7/7] PCI: dwc: Add validation that PCIe core is set to correct mode
Date: Thu, 5 Sep 2019 17:01:44 +0300	[thread overview]
Message-ID: <20190905140144.7933-3-jonnyc@amazon.com> (raw)
In-Reply-To: <20190905140018.5139-1-jonnyc@amazon.com>

Some PCIe controllers can be set to either Host or EP according to some
early boot FW. To make sure there is no discrepancy (e.g. FW configured
the port to EP mode while the DT specifies it as a host bridge or vice
versa), a check has been added for each mode.

Signed-off-by: Jonathan Chocron <jonnyc@amazon.com>
Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
---
 drivers/pci/controller/dwc/pcie-designware-ep.c  |  8 ++++++++
 .../pci/controller/dwc/pcie-designware-host.c    | 16 ++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
index 65f479250087..3dd2e2697294 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -498,6 +498,7 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
 	int ret;
 	u32 reg;
 	void *addr;
+	u8 hdr_type;
 	unsigned int nbars;
 	unsigned int offset;
 	struct pci_epc *epc;
@@ -562,6 +563,13 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
 	if (ep->ops->ep_init)
 		ep->ops->ep_init(ep);
 
+	hdr_type = dw_pcie_readb_dbi(pci, PCI_HEADER_TYPE);
+	if (hdr_type != PCI_HEADER_TYPE_NORMAL) {
+		dev_err(pci->dev, "PCIe controller is not set to EP mode (hdr_type:0x%x)!\n",
+			hdr_type);
+		return -EIO;
+	}
+
 	ret = of_property_read_u8(np, "max-functions", &epc->max_functions);
 	if (ret < 0)
 		epc->max_functions = 1;
diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
index d3156446ff27..0f36a926059a 100644
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
@@ -323,6 +323,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
 	struct pci_bus *child;
 	struct pci_host_bridge *bridge;
 	struct resource *cfg_res;
+	u32 hdr_type;
 	int ret;
 
 	raw_spin_lock_init(&pci->pp.lock);
@@ -464,6 +465,21 @@ int dw_pcie_host_init(struct pcie_port *pp)
 			goto err_free_msi;
 	}
 
+	ret = dw_pcie_rd_own_conf(pp, PCI_HEADER_TYPE, 1, &hdr_type);
+	if (ret != PCIBIOS_SUCCESSFUL) {
+		dev_err(pci->dev, "Failed reading PCI_HEADER_TYPE cfg space reg (ret: 0x%x)\n",
+			ret);
+		ret = pcibios_err_to_errno(ret);
+		goto err_free_msi;
+	}
+	if (hdr_type != PCI_HEADER_TYPE_BRIDGE) {
+		dev_err(pci->dev,
+			"PCIe controller is not set to bridge type (hdr_type: 0x%x)!\n",
+			hdr_type);
+		ret = -EIO;
+		goto err_free_msi;
+	}
+
 	pp->root_bus_nr = pp->busn->start;
 
 	bridge->dev.parent = dev;
-- 
2.17.1


  parent reply	other threads:[~2019-09-05 14:02 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-05 14:00 [PATCH v5 0/7] Amazon's Annapurna Labs DT-based PCIe host controller driver Jonathan Chocron
2019-09-05 14:00 ` [PATCH v5 1/7] PCI: Add Amazon's Annapurna Labs vendor ID Jonathan Chocron
2019-09-05 14:00 ` [PATCH v5 2/7] PCI: Add ACS quirk for Amazon Annapurna Labs root ports Jonathan Chocron
2019-09-07 16:54   ` Bjorn Helgaas
2019-09-11 14:59     ` Chocron, Jonathan
2019-09-05 14:00 ` [PATCH v5 3/7] PCI/VPD: Prevent VPD access for Amazon's Annapurna Labs Root Port Jonathan Chocron
2019-09-05 14:22   ` Andrew Murray
2019-09-07 16:55   ` Bjorn Helgaas
2019-09-11 15:01     ` Chocron, Jonathan
2019-09-05 14:00 ` [PATCH v5 4/7] PCI: Add quirk to disable MSI-X support " Jonathan Chocron
2019-09-07 16:55   ` Bjorn Helgaas
2019-09-10 17:38     ` Lorenzo Pieralisi
2019-09-11 15:34     ` Chocron, Jonathan
2019-09-05 14:01 ` [PATCH v5 5/7] dt-bindings: PCI: Add Amazon's Annapurna Labs PCIe host bridge binding Jonathan Chocron
2019-09-05 14:01 ` [PATCH v5 6/7] PCI: dwc: al: Add support for DW based driver type Jonathan Chocron
2019-09-07 16:55   ` Bjorn Helgaas
2019-09-12 12:55     ` Chocron, Jonathan
2019-09-05 14:01 ` Jonathan Chocron [this message]
2019-09-05 14:27   ` [PATCH v5 7/7] PCI: dwc: Add validation that PCIe core is set to correct mode Andrew Murray
2019-09-05 16:53 ` [PATCH v5 0/7] Amazon's Annapurna Labs DT-based PCIe host controller driver Lorenzo Pieralisi

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=20190905140144.7933-3-jonnyc@amazon.com \
    --to=jonnyc@amazon.com \
    --cc=alisaidi@amazon.com \
    --cc=andrew.murray@arm.com \
    --cc=barakw@amazon.com \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dwmw@amazon.co.uk \
    --cc=gustavo.pimentel@synopsys.com \
    --cc=hanochu@amazon.com \
    --cc=hhhawa@amazon.com \
    --cc=jingoohan1@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=robh+dt@kernel.org \
    --cc=ronenk@amazon.com \
    --cc=talel@amazon.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;
as well as URLs for NNTP newsgroup(s).