[U-Boot] [PATCH v2] armv8: fsl-layerscale: Rewrite reserving memory for MC and debug server
Scott Wood
scottwood at freescale.com
Wed Nov 18 23:56:29 CET 2015
On Wed, 2015-11-18 at 14:48 -0800, York Sun wrote:
>
> On 11/18/2015 02:15 PM, Scott Wood wrote:
> > On Wed, 2015-11-18 at 10:05 -0800, York Sun wrote:
> > > MC and debug server are not board-specific. Instead of reserving
> > > memory in each board file, a weak function is introduced in board_f.c
> > > to replace macro CONFIG_SYS_MEM_TOP_HIDE for more flexibility.
> > > Legacy use of this macro is still supported. Move the reservation
> > > calculation to SoC file. Reduce debug server memory by 2MB to
> > > make room for secure memory.
> > >
> > > In the system with MC and debug server, the top of u-boot memory
> > > is not the end of memory. PRAM is not used for this reservation.
> > >
> > > Signed-off-by: York Sun <yorksun at freescale.com>
> > >
> > > ---
> > >
> > > Changes in v2:
> > > Revise commit message.
> > >
> > > README | 6 +++---
> > > arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 18 ++++++++++++++++++
> > > board/freescale/ls2085a/ls2085a.c | 17 -----------------
> > > board/freescale/ls2085aqds/ls2085aqds.c | 17 -----------------
> > > board/freescale/ls2085ardb/ls2085ardb.c | 17 -----------------
> > > common/board_f.c | 14 +++++++++++---
> > > include/configs/ls2085a_common.h | 5 ++---
> > > 7 files changed, 34 insertions(+), 60 deletions(-)
> > >
> > > diff --git a/README b/README
> > > index 61cbc82..390ee10 100644
> > > --- a/README
> > > +++ b/README
> > > @@ -3889,7 +3889,7 @@ Configuration Settings:
> > > the RAM base is not zero, or RAM is divided into banks,
> > > this variable needs to be recalcuated to get the
> > > address.
> > >
> > > -- CONFIG_SYS_MEM_TOP_HIDE (PPC only):
> > > +- CONFIG_SYS_MEM_TOP_HIDE:
> > > If CONFIG_SYS_MEM_TOP_HIDE is defined in the board
> > > config
> > > header,
> > > this specified memory area will get subtracted from the
> > > top
> > > (end) of RAM and won't get "touched" at all by U-Boot.
> > > By
> > > @@ -5068,8 +5068,8 @@ This firmware often needs to be loaded during U
> > > -Boot
> > > booting.
> > > - CONFIG_SYS_DEBUG_SERVER_DRAM_BLOCK_MIN_SIZE
> > > Define minimum DDR size required for debug server image
> > >
> > > -- CONFIG_SYS_MEM_TOP_HIDE_MIN
> > > - Define minimum DDR size to be hided from top of the DDR memory
> > > +- CONFIG_SYS_MC_RESERV_MEM_ALIGN
> > > + Define alignment of reserved memory MC requires
> >
> > Can you make this RESERVE, or RSV or RES? RESERV is hard to look at, like
> > creat(). :-P
>
> Sure.
>
> >
> >
> > > Reproducible builds
> > > -------------------
> > > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> > > b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> > > index 501feb3..01e8f52 100644
> > > --- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> > > +++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> > > @@ -628,3 +628,21 @@ void reset_cpu(ulong addr)
> > > val |= 0x02;
> > > scfg_out32(rstcr, val);
> > > }
> > > +
> > > +unsigned long board_reserve_ram_top(unsigned long ram_size)
> > > +{
> > > + unsigned long ram_top = ram_size;
> > > +
> > > +/* Carve the Debug Server private DRAM block from the end of DRAM */
> > > +#ifdef CONFIG_FSL_DEBUG_SERVER
> > > + ram_top -= debug_server_get_dram_block_size();
> > > +#endif
> > > +
> > > +/* Carve the MC private DRAM block from the end of DRAM */
> > > +#ifdef CONFIG_FSL_MC_ENET
> > > + ram_top -= mc_get_dram_block_size();
> > > + ram_top &= ~(CONFIG_SYS_MC_RESERV_MEM_ALIGN - 1);
> > > +#endif
> > > +
> > > + return ram_size - ram_top;
> > > +}
> >
> > So Layerscape doesn't respect CONFIG_SYS_MEM_TOP_HIDE at all? If you
> > don't
> > want to add that in (and thus worry about where it should go relative to
> > the
> > other reasons), there should probably at least be an #error if the symbol
> > is
> > defined and non-zero.
>
> Actually Layerscape was using CONFIG_SYS_MEM_TOP_HIDE and it defines
> CONFIG_SYS_MEM_TOP_HIDE as a function. When I tried to move the function out
> of
> board files, you suggested to "do it more generically and transparently".
Right, but it's still documented as a generic U-Boot feature so we shouldn't
silently ignore it.
> After this patch, CONFIG_SYS_MEM_TOP_HIDE shouldn't be used with this
> function.
> I can add a check for CONFIG_SYS_MEM_TOP_HIDE in this function to throw out
> an
> error if defined.
Thanks.
> > I think it'd be a bit more straightforward for this to return the new
> > ram_top
> > rather than the size to be subtracted.
>
> That will be inaccurate. For layerscape SoCs, the gd->ram_size is known at
> this
> point, but the address is not known until later in board file dram bank is
> filled int. So this function can only return how much memory is reserved.
Sorry, I should have said offset from the start of RAM instead of address. So
the caller does "gd->ram_size = board_reserve_ram_top(gd->ram_size);".
-Scott
More information about the U-Boot
mailing list