]> git.sur5r.net Git - u-boot/blobdiff - drivers/pci/fsl_pci_init.c
Merge git://www.denx.de/git/u-boot-marvell
[u-boot] / drivers / pci / fsl_pci_init.c
index 152045ed93d26230581a8d641d94eea11420e2ae..af20cf0f3e7db183f2333a894e9f082443a1c4c2 100644 (file)
@@ -543,6 +543,13 @@ void fsl_pci_init(struct pci_controller *hose, struct fsl_pci_info *pci_info)
                pciauto_prescan_setup_bridge(hose, dev, hose->current_busno);
        }
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A007815
+       /* The Read-Only Write Enable bit defaults to 1 instead of 0.
+        * Set to 0 to protect the read-only registers.
+        */
+       clrbits_be32(&pci->dbi_ro_wr_en, 0x01);
+#endif
+
        /* Use generic setup_device to initialize standard pci regs,
         * but do not allocate any windows since any BAR found (such
         * as PCSRBAR) is not in this cpu's memory space.
@@ -697,8 +704,14 @@ void fsl_pci_config_unlock(struct pci_controller *hose)
        pcie_cap_pos = pci_hose_find_capability(hose, dev, PCI_CAP_ID_EXP);
        pci_hose_read_config_byte(hose, dev, pcie_cap_pos, &pcie_cap);
        if (pcie_cap != 0x0) {
+               ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *)hose->cfg_addr;
+               u32 block_rev = in_be32(&pci->block_rev1);
                /* PCIe - set CFG_READY bit of Configuration Ready Register */
-               pci_hose_write_config_byte(hose, dev, FSL_PCIE_CFG_RDY, 0x1);
+               if (block_rev >= PEX_IP_BLK_REV_3_0)
+                       setbits_be32(&pci->config, FSL_PCIE_V3_CFG_RDY);
+               else
+                       pci_hose_write_config_byte(hose, dev,
+                                                  FSL_PCIE_CFG_RDY, 0x1);
        } else {
                /* PCI - clear ACL bit of PBFR */
                pci_hose_read_config_word(hose, dev, FSL_PCI_PBFR, &pbfr);