[U-Boot] [PATCH] pci: Fix decode regions for memory banks

Hannes Schmelzer Hannes.Schmelzer at br-automation.com
Thu Feb 15 08:36:09 UTC 2018


Bernhard Messerklinger <bernhard.messerklinger at br-automation.com> schrieb 
am 15.02.2018 08:59:53:

> Von: Bernhard Messerklinger <bernhard.messerklinger at br-automation.com>
> An: u-boot at lists.denx.de
> Kopie: hannes.schmelzer at br-automation.com, Bernhard Messerklinger 
> <bernhard.messerklinger at br-automation.com>, Simon Glass 
<sjg at chromium.org>, 
> Masahiro Yamada <yamada.masahiro at socionext.com>, Tuomas Tynkkynen 
> <tuomas.tynkkynen at iki.fi>, Bin Meng <bmeng.cn at gmail.com>, 
"xypron.glpk at gmx.de"
> <xypron.glpk at gmx.de>, Hou Zhiqiang <Zhiqiang.Hou at nxp.com>
> Datum: 15.02.2018 09:00
> Betreff: [PATCH] pci: Fix decode regions for memory banks
> 
> Since memory banks may not be located behind each other we need to add
> them separately.
> 
> Signed-off-by: Bernhard Messerklinger 
<bernhard.messerklinger at br-automation.com>
> ---
> 
>  drivers/pci/pci-uclass.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
> index 5a24eb6428..ad43e8a27c 100644
> --- a/drivers/pci/pci-uclass.c
> +++ b/drivers/pci/pci-uclass.c
> @@ -815,7 +815,6 @@ static int decode_regions(struct pci_controller 
*hose, 
> ofnode parent_node,
>             ofnode node)
>  {
>     int pci_addr_cells, addr_cells, size_cells;
> -   phys_addr_t base = 0, size;
>     int cells_per_record;
>     const u32 *prop;
>     int len;
> @@ -874,6 +873,21 @@ static int decode_regions(struct pci_controller 
*hose, 
> ofnode parent_node,
>     }
> 
>     /* Add a region for our local memory */
> +#ifdef CONFIG_NR_DRAM_BANKS
> +   bd_t *bd = gd->bd;
> +
> +   for (i = 0; i < CONFIG_NR_DRAM_BANKS; ++i) {
> +      if (bd->bi_dram[i].size) {
> +         pci_set_region(hose->regions + hose->region_count++,
> +                   bd->bi_dram[i].start,
> +                   bd->bi_dram[i].start,
> +                   bd->bi_dram[i].size,
> +                   PCI_REGION_MEM | PCI_REGION_SYS_MEMORY);
> +      }
> +   }
> +#else
> +   phys_addr_t base = 0, size;
> +
>     size = gd->ram_size;
>  #ifdef CONFIG_SYS_SDRAM_BASE
>     base = CONFIG_SYS_SDRAM_BASE;
> @@ -882,6 +896,7 @@ static int decode_regions(struct pci_controller 
*hose, 
> ofnode parent_node,
>        size = gd->pci_ram_top - base;
>     pci_set_region(hose->regions + hose->region_count++, base, base,
>               size, PCI_REGION_MEM | PCI_REGION_SYS_MEMORY);
> +#endif
> 
>     return 0;
>  }
> -- 
> 2.16.1
> 

Reviewed-by: Hannes Schmelzer <hannes.schmelzer at br-automation.com>




More information about the U-Boot mailing list