From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Warren Date: Wed, 21 Oct 2015 14:19:23 -0600 Subject: [U-Boot] [PATCH 3/8] RFC: dm: pci: Set up the SDRAM mapping correctly In-Reply-To: <1445104205-4079-4-git-send-email-sjg@chromium.org> References: <1445104205-4079-1-git-send-email-sjg@chromium.org> <1445104205-4079-4-git-send-email-sjg@chromium.org> Message-ID: <5627F34B.5050008@wwwdotorg.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 10/17/2015 11:50 AM, Simon Glass wrote: > 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. > diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c > @@ -729,8 +729,11 @@ static int decode_regions(struct pci_controller *hose, const void *blob, > 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); > +#ifdef CONFIG_SYS_SDRAM_BASE > + base = CONFIG_SYS_SDRAM_BASE; > +#endif > + pci_set_region(hose->regions + hose->region_count++, base, base, > + addr, PCI_REGION_MEM | PCI_REGION_SYS_MEMORY); The variable naming here is extremely misleading; "addr" is actually the size of the region not its address. I think it'd be a good idea to rename the addr variable while you're fixing this bug, and also pci_ram_top too since that's really pci_ram_size. FWIW, on Tegra210 when I set gd->pci_ram_top = 0x80000000 (coupled with SDRAM_BASE being 0x80000000) this function seems to do the right thing; at least a PCIe NIC works OK.