| From 73b3a2c848f2e7a526233c954bfe73a7e881c168 Mon Sep 17 00:00:00 2001 |
| From: Kishon Vijay Abraham I <kishon@ti.com> |
| Date: Wed, 22 Jul 2020 16:33:11 +0530 |
| Subject: [PATCH] PCI: cadence: Fix updating Vendor ID and Subsystem Vendor ID |
| register |
| |
| commit e3bca37d15dca118f2ef1f0a068bb6e07846ea20 upstream. |
| |
| Commit 1b79c5284439 ("PCI: cadence: Add host driver for Cadence PCIe |
| controller") in order to update Vendor ID, directly wrote to |
| PCI_VENDOR_ID register. However PCI_VENDOR_ID in root port configuration |
| space is read-only register and writing to it will have no effect. |
| Use local management register to configure Vendor ID and Subsystem Vendor |
| ID. |
| |
| Link: https://lore.kernel.org/r/20200722110317.4744-10-kishon@ti.com |
| Fixes: 1b79c5284439 ("PCI: cadence: Add host driver for Cadence PCIe controller") |
| Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> |
| Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Reviewed-by: Rob Herring <robh@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/pci/controller/pcie-cadence-host.c b/drivers/pci/controller/pcie-cadence-host.c |
| index 97e251090b4f..0dfc778f40a7 100644 |
| --- a/drivers/pci/controller/pcie-cadence-host.c |
| +++ b/drivers/pci/controller/pcie-cadence-host.c |
| @@ -102,6 +102,7 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc) |
| { |
| struct cdns_pcie *pcie = &rc->pcie; |
| u32 value, ctrl; |
| + u32 id; |
| |
| /* |
| * Set the root complex BAR configuration register: |
| @@ -121,8 +122,12 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc) |
| cdns_pcie_writel(pcie, CDNS_PCIE_LM_RC_BAR_CFG, value); |
| |
| /* Set root port configuration space */ |
| - if (rc->vendor_id != 0xffff) |
| - cdns_pcie_rp_writew(pcie, PCI_VENDOR_ID, rc->vendor_id); |
| + if (rc->vendor_id != 0xffff) { |
| + id = CDNS_PCIE_LM_ID_VENDOR(rc->vendor_id) | |
| + CDNS_PCIE_LM_ID_SUBSYS(rc->vendor_id); |
| + cdns_pcie_writel(pcie, CDNS_PCIE_LM_ID, id); |
| + } |
| + |
| if (rc->device_id != 0xffff) |
| cdns_pcie_rp_writew(pcie, PCI_DEVICE_ID, rc->device_id); |
| |
| -- |
| 2.27.0 |
| |