[U-Boot] [PATCH] board_f: reserve noncached space below malloc area

Vikas MANOCHA vikas.manocha at st.com
Fri Aug 9 18:21:29 UTC 2019


Hi Simon,

> -----Original Message-----
> From: Simon Glass <sjg at chromium.org>
> Sent: Friday, August 9, 2019 10:00 AM
> To: Vikas MANOCHA <vikas.manocha at st.com>
> Cc: U-Boot Mailing List <u-boot at lists.denx.de>; Bin Meng
> <bmeng.cn at gmail.com>; CITOOLS <smet-aci-
> reviews at lists.codex.cro.st.com>; Mario Six <mario.six at gdsys.cc>; Patrick
> DELAUNAY <patrick.delaunay at st.com>
> Subject: Re: [PATCH] board_f: reserve noncached space below malloc area
> 
> Hi Vikas,
> 
> On Thu, 8 Aug 2019 at 18:24, Vikas Manocha <vikas.manocha at st.com>
> wrote:
> >
> > Noncached area at present is being initialized to random space after
> > malloc area. It works in most the cases as it goes to stack area &
> > stack is not overwriting it being far from it.
> 
> Please can you add a motivation for this patch and what it does.

We are not reserving non-cached memory area (like for malloc, gd etc before relocation). 
With this patch we are reserving area just below memory area allocated to dynamic allocation.

> 
> >
> > Signed-off-by: Vikas Manocha <vikas.manocha at st.com>
> > ---
> >  common/board_f.c | 13 +++++++++++++
> >  1 file changed, 13 insertions(+)
> >
> > diff --git a/common/board_f.c b/common/board_f.c index
> > 59745d5..4910051 100644
> > --- a/common/board_f.c
> > +++ b/common/board_f.c
> > @@ -439,12 +439,25 @@ static int reserve_uboot(void)
> >         return 0;
> >  }
> >
> > +#ifdef CONFIG_SYS_NONCACHED_MEMORY
> > +static int reserve_noncached(void)
> > +{
> > +       /* round down to SECTION SIZE (typicaly 1MB) limit */
> > +       gd->start_addr_sp &= ~(MMU_SECTION_SIZE - 1);
> > +       gd->start_addr_sp -= CONFIG_SYS_NONCACHED_MEMORY;
> 
> blank line before return.

Sure, I will add it in v2.

> > +       return 0;
> > +}
> > +#endif
> > +
> >  /* reserve memory for malloc() area */  static int
> > reserve_malloc(void)  {
> >         gd->start_addr_sp = gd->start_addr_sp - TOTAL_MALLOC_LEN;
> >         debug("Reserving %dk for malloc() at: %08lx\n",
> >               TOTAL_MALLOC_LEN >> 10, gd->start_addr_sp);
> > +#ifdef CONFIG_SYS_NONCACHED_MEMORY
> > +       reserve_noncached(void);
> > +#endif
> 
> How about a new function for this (with the #ifndef inside it), and a debug()?

That is what I did first but this (non cached) memory area being tied to just below malloc, having it here enforces this contiguity.

> 
> Also I see noncached_init() calculates the size which seems brittle.
> Should it be added to gd?

Good point, creating new entry/ies in gd for it would make it bit cleaner but useless after initialization.
Static variables are used for this non cached memory init & allocation. It is just like for malloc, we don’t have entry in gd for it & I
think the reason is same.

Cheers,
Vikas

> 
> >         return 0;
> >  }
> >
> > --
> > 2.7.4
> >
> 
> Regards,
> Simon


More information about the U-Boot mailing list