From: SangeethaRao <sangeetha....@lsi.com>

Signed-off-by: SangeethaRao <sangeetha....@lsi.com>
---
 arch/powerpc/sysdev/lsi_pci.c |   42 ++++++++++++++++++++++++++++++++++-------
 1 file changed, 35 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/sysdev/lsi_pci.c b/arch/powerpc/sysdev/lsi_pci.c
index e9beadc..2c99507 100644
--- a/arch/powerpc/sysdev/lsi_pci.c
+++ b/arch/powerpc/sysdev/lsi_pci.c
@@ -753,16 +753,44 @@ configure_acp_pciex_PIMs(struct pciex_port *port,
                  window.  We use this elsewhere to set up the
                  dma_base.
                */
-
-               pci_dram_offset = size;
-               hose->dma_window_base_cur = size;
-
-               out_le32(mbase + PCI_BASE_ADDRESS_0, RES_TO_U32_LOW(size));
-               out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(size));
+               if (0x10 == port->acpChipType) {
+                       /* For 3500, set base address to pci base */
+                       pci_dram_offset = res->start;
+                       hose->dma_window_base_cur = res->start;
+               } else {
+                       pci_dram_offset = size;
+                       hose->dma_window_base_cur = size;
+               }
 
                if (5 == port->acpChipType) {
-                       pr_warn("Setting SIZE for 2500\n");
+                       pr_info("Setting SIZE for 2500\n");
                        out_le32(mbase + 0x11f4, 0xf0000000UL);
+                       out_le32(mbase + PCI_BASE_ADDRESS_0,
+                                       RES_TO_U32_LOW(size));
+                       out_le32(mbase + PCI_BASE_ADDRESS_1,
+                               RES_TO_U32_HIGH(size));
+               } else if (0x10 == port->acpChipType) {
+                       pr_info("Setting SIZE for 3500\n");
+                       out_le32(mbase + 0x11f4, size);
+                       /* Verify BAR0 size */
+                       {
+                               u32 bar0_size;
+                               out_le32(mbase + PCI_BASE_ADDRESS_0, ~0);
+                               out_le32(mbase + PCI_BASE_ADDRESS_1, ~0);
+                               bar0_size = in_le32(mbase + PCI_BASE_ADDRESS_0);
+                               if ((bar0_size & ~0xf) != size)
+                                       pr_err("PCIE%d: Config BAR0 failed\n", 
port->index);
+                               bar0_size = in_le32(mbase + PCI_BASE_ADDRESS_1);
+                       }
+                       /* Set the BASE0 address to start of PCIe base */
+                       out_le32(mbase + PCI_BASE_ADDRESS_0, res->start);
+                       /* Set the BASE1 address to 0x0 */
+                       out_le32(mbase + PCI_BASE_ADDRESS_1, 0x0);
+               } else {
+                       out_le32(mbase + PCI_BASE_ADDRESS_0,
+                               RES_TO_U32_LOW(size));
+                       out_le32(mbase + PCI_BASE_ADDRESS_1,
+                               RES_TO_U32_HIGH(size));
                }
 
                /*
-- 
1.7.9.5

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to