> -----Original Message-----
> From: Auer, Lukas [mailto:lukas.a...@aisec.fraunhofer.de]
> Sent: Monday, January 21, 2019 1:35 AM
> To: s...@chromium.org; bmeng...@gmail.com; r...@andestech.com; Anup
> Patel <anup.pa...@wdc.com>; joe.hershber...@ni.com;
> yamada.masah...@socionext.com
> Cc: paul.walms...@sifive.com; pal...@sifive.com; h...@infradead.org; u-
> b...@lists.denx.de; ag...@suse.de; Atish Patra <atish.pa...@wdc.com>
> Subject: Re: [PATCH v2 03/11] riscv: generic: Ensure that U-Boot runs within
> 4GB for 64bit systems
> 
> On Fri, 2019-01-18 at 11:18 +0000, Anup Patel wrote:
> > On 64bit systems, the DRAM top can be easily beyond 4GB and U-Boot
> DMA
> > mapping APIs will generate DMA addresses beyond 4GB. This breaks DMA
> > programming in 32bit DMA capable devices (such as Cadence MACB
> > ethernet). For example, If DRAM is more then 2GB on QEMU sifive_u
> > machine then Cadence MACB ethernet stops working for U-Boot because
> it
> > is a 32bit DMA capable device.
> >
> > To handle 32bit DMA capable devices on 64bit systems, we provide
> > custom implementation of board_get_usable_ram_top() which ensures
> that
> > usable ram top is not more then 4GB. This in-turn ensures that U-Boot
> > always runs within 4GB hence DMA addresses generated by DMA mapping
> > APIs will be within 4GB too.
> >
> > Signed-off-by: Atish Patra <atish.pa...@wdc.com>
> > Signed-off-by: Anup Patel <anup.pa...@wdc.com>
> > Reviewed-by: Alexander Graf <ag...@suse.de>
> > ---
> >  arch/riscv/cpu/generic/dram.c | 20 ++++++++++++++++++++
> >  1 file changed, 20 insertions(+)
> >
> 
> Reviewed-by: Lukas Auer <lukas.a...@aisec.fraunhofer.de>
> 
> With one nit below.
> 
> > diff --git a/arch/riscv/cpu/generic/dram.c
> > b/arch/riscv/cpu/generic/dram.c index 84d87d2a7f..5725d3c7ae 100644
> > --- a/arch/riscv/cpu/generic/dram.c
> > +++ b/arch/riscv/cpu/generic/dram.c
> > @@ -5,6 +5,9 @@
> >
> >  #include <common.h>
> >  #include <fdtdec.h>
> > +#include <linux/sizes.h>
> > +
> > +DECLARE_GLOBAL_DATA_PTR;
> >
> >  int dram_init(void)
> >  {
> > @@ -15,3 +18,20 @@ int dram_init_banksize(void)  {
> >     return fdtdec_setup_memory_banksize();  }
> > +
> > +ulong board_get_usable_ram_top(ulong total_size) { #ifdef
> > +CONFIG_64BIT
> > +   /*
> > +    * Ensure that we run from first 4GB so that all
> > +    * addresses used by U-Boot are 32bit addresses.
> > +    *
> > +    * This in-turn ensures that 32bit DMA capabale
> 
> nit: capable

Sure, will update.

> 
> > +    * devices work fine because DMA mapping APIs will
> > +    * provide 32bit DMA addresses only.
> > +    */
> > +   if (gd->ram_top > SZ_4G)
> > +           return SZ_4G;
> > +#endif
> > +   return gd->ram_top;
> > +}

Regards,
Anup
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to