]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
dm: pci: Set up the SDRAM mapping correctly
authorSimon Glass <sjg@chromium.org>
Fri, 20 Nov 2015 03:26:57 +0000 (20:26 -0700)
committerSimon Glass <sjg@chromium.org>
Tue, 1 Dec 2015 13:26:36 +0000 (06:26 -0700)
SDRAM doesn't always start at 0. Adjust the region mapping so that it works
on platforms where SDRAM is somewhere else.

This needs testing on other platforms.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Stephen Warren <swarren@nvidia.com>
drivers/pci/pci-uclass.c

index 1d93194b6755474ff18f7422c37fa7bf533074ec..6d860c4733b45e5aad2356ebbf8e1c6efe511c35 100644 (file)
@@ -680,8 +680,8 @@ static int decode_regions(struct pci_controller *hose, const void *blob,
                          int parent_node, int node)
 {
        int pci_addr_cells, addr_cells, size_cells;
+       phys_addr_t base = 0, size;
        int cells_per_record;
-       phys_addr_t addr;
        const u32 *prop;
        int len;
        int i;
@@ -732,11 +732,14 @@ static int decode_regions(struct pci_controller *hose, const void *blob,
        }
 
        /* Add a region for our local memory */
-       addr = gd->ram_size;
-       if (gd->pci_ram_top && gd->pci_ram_top < addr)
-               addr = gd->pci_ram_top;
-       pci_set_region(hose->regions + hose->region_count++, 0, 0, addr,
-                      PCI_REGION_MEM | PCI_REGION_SYS_MEMORY);
+       size = gd->ram_size;
+#ifdef CONFIG_SYS_SDRAM_BASE
+       base = CONFIG_SYS_SDRAM_BASE;
+#endif
+       if (gd->pci_ram_top && gd->pci_ram_top < base + size)
+               size = gd->pci_ram_top - base;
+       pci_set_region(hose->regions + hose->region_count++, base, base,
+                      size, PCI_REGION_MEM | PCI_REGION_SYS_MEMORY);
 
        return 0;
 }