summaryrefslogtreecommitdiff
path: root/drivers/pci/controller/pcie-iproc.h
diff options
context:
space:
mode:
authorRay Jui <ray.jui@broadcom.com>2018-06-11 17:21:04 -0700
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>2018-07-13 11:43:49 +0100
commit3bc70825e4361eaedffeb4e85e1b2774547e66a0 (patch)
tree4ff1aa99fe80012477495427e5bd1568859edb02 /drivers/pci/controller/pcie-iproc.h
parentb95e2cd021938d2c3455fd2fce69b4845de0b85f (diff)
PCI: iproc: Fix up corrupted PAXC root complex config registers
On certain versions of Broadcom PAXC based root complexes, certain regions of the configuration space are corrupted. As a result, it prevents the Linux PCIe stack from traversing the linked list of the capability registers completely and therefore the root complex is not advertised as "PCIe capable". This prevents the correct PCIe RID from being parsed in the kernel PCIe stack. A correct RID is required for mapping to a stream ID from the SMMU or the device ID from the GICv3 ITS. This patch fixes up the issue by manually populating the related PCIe capabilities. Signed-off-by: Ray Jui <rjui@broadcom.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Reviewed-by: Oza Pawandeep <poza@codeaurora.org>
Diffstat (limited to 'drivers/pci/controller/pcie-iproc.h')
-rw-r--r--drivers/pci/controller/pcie-iproc.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/pci/controller/pcie-iproc.h b/drivers/pci/controller/pcie-iproc.h
index 814b600b383a..9d5cfeea3046 100644
--- a/drivers/pci/controller/pcie-iproc.h
+++ b/drivers/pci/controller/pcie-iproc.h
@@ -60,6 +60,8 @@ struct iproc_msi;
* @ep_is_internal: indicates an internal emulated endpoint device is connected
* @has_apb_err_disable: indicates the controller can be configured to prevent
* unsupported request from being forwarded as an APB bus error
+ * @fix_paxc_cap: indicates the controller has corrupted capability list in its
+ * config space registers and requires SW based fixup
*
* @need_ob_cfg: indicates SW needs to configure the outbound mapping window
* @ob: outbound mapping related parameters
@@ -85,6 +87,7 @@ struct iproc_pcie {
int (*map_irq)(const struct pci_dev *, u8, u8);
bool ep_is_internal;
bool has_apb_err_disable;
+ bool fix_paxc_cap;
bool need_ob_cfg;
struct iproc_pcie_ob ob;