From: Kishon Vijay Abraham I <kis...@ti.com>

[ Upstream commit e3bca37d15dca118f2ef1f0a068bb6e07846ea20 ]

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-kis...@ti.com
Fixes: 1b79c5284439 ("PCI: cadence: Add host driver for Cadence PCIe 
controller")
Signed-off-by: Kishon Vijay Abraham I <kis...@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieral...@arm.com>
Reviewed-by: Rob Herring <r...@kernel.org>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/pci/controller/cadence/pcie-cadence-host.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c 
b/drivers/pci/controller/cadence/pcie-cadence-host.c
index 11eb81da0233f..aa18fb724d2ed 100644
--- a/drivers/pci/controller/cadence/pcie-cadence-host.c
+++ b/drivers/pci/controller/cadence/pcie-cadence-host.c
@@ -69,6 +69,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:
@@ -88,8 +89,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.25.1



Reply via email to