PCI: rockchip: Write PCI Device ID to correct register
authorRick Wertenbroek <rick.wertenbroek@gmail.com>
Tue, 18 Apr 2023 07:46:49 +0000 (09:46 +0200)
committerLorenzo Pieralisi <lpieralisi@kernel.org>
Thu, 22 Jun 2023 07:36:51 +0000 (09:36 +0200)
Write PCI Device ID (DID) to the correct register. The Device ID was not
updated through the correct register. Device ID was written to a read-only
register and therefore did not work. The Device ID is now set through the
correct register. This is documented in the RK3399 TRM section 17.6.6.1.1

Link: https://lore.kernel.org/r/20230418074700.1083505-3-rick.wertenbroek@gmail.com
Fixes: cf590b078391 ("PCI: rockchip: Add EP driver for Rockchip PCIe controller")
Tested-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Rick Wertenbroek <rick.wertenbroek@gmail.com>
Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Cc: stable@vger.kernel.org
drivers/pci/controller/pcie-rockchip-ep.c
drivers/pci/controller/pcie-rockchip.h

index d5c4770..9b83537 100644 (file)
@@ -115,6 +115,7 @@ static void rockchip_pcie_prog_ep_ob_atu(struct rockchip_pcie *rockchip, u8 fn,
 static int rockchip_pcie_ep_write_header(struct pci_epc *epc, u8 fn, u8 vfn,
                                         struct pci_epf_header *hdr)
 {
+       u32 reg;
        struct rockchip_pcie_ep *ep = epc_get_drvdata(epc);
        struct rockchip_pcie *rockchip = &ep->rockchip;
 
@@ -127,8 +128,9 @@ static int rockchip_pcie_ep_write_header(struct pci_epc *epc, u8 fn, u8 vfn,
                                    PCIE_CORE_CONFIG_VENDOR);
        }
 
-       rockchip_pcie_write(rockchip, hdr->deviceid << 16,
-                           ROCKCHIP_PCIE_EP_FUNC_BASE(fn) + PCI_VENDOR_ID);
+       reg = rockchip_pcie_read(rockchip, PCIE_EP_CONFIG_DID_VID);
+       reg = (reg & 0xFFFF) | (hdr->deviceid << 16);
+       rockchip_pcie_write(rockchip, reg, PCIE_EP_CONFIG_DID_VID);
 
        rockchip_pcie_write(rockchip,
                            hdr->revid |
index 32c3a85..51a123e 100644 (file)
 #define PCIE_RC_RP_ATS_BASE            0x400000
 #define PCIE_RC_CONFIG_NORMAL_BASE     0x800000
 #define PCIE_RC_CONFIG_BASE            0xa00000
+#define PCIE_EP_CONFIG_BASE            0xa00000
+#define PCIE_EP_CONFIG_DID_VID         (PCIE_EP_CONFIG_BASE + 0x00)
 #define PCIE_RC_CONFIG_RID_CCR         (PCIE_RC_CONFIG_BASE + 0x08)
 #define PCIE_RC_CONFIG_DCR             (PCIE_RC_CONFIG_BASE + 0xc4)
 #define   PCIE_RC_CONFIG_DCR_CSPL_SHIFT                18