On Mon, Apr 1, 2019 at 8:07 AM Heiko Schocher <h...@denx.de> wrote:
>
> Hello Simon,
>
> Am 30.03.2019 um 23:37 schrieb Simon Glass:
> > Hi Simon,
> >
> > On Sat, 30 Mar 2019 at 15:40, Simon Goldschmidt
> > <simon.k.r.goldschm...@gmail.com> wrote:
> >>
> >>
> >>
> >> Simon Glass <s...@chromium.org> schrieb am Sa., 30. März 2019, 22:18:
> >>>
> >>> Hi Simon,
> >>>
> >>> On Sat, 30 Mar 2019 at 14:50, Simon Goldschmidt
> >>> <simon.k.r.goldschm...@gmail.com> wrote:
> >>>>
> >>>>
> >>>>
> >>>> Simon Goldschmidt <simon.k.r.goldschm...@gmail.com> schrieb am Sa., 30. 
> >>>> März 2019, 21:18:
> >>>>>
> >>>>>
> >>>>>
> >>>>> Simon Glass <s...@chromium.org> schrieb am Sa., 30. März 2019, 21:06:
> >>>>>>
> >>>>>> Hi Simon,
> >>>>>>
> >>>>>> On Wed, 27 Mar 2019 at 13:40, Simon Goldschmidt
> >>>>>> <simon.k.r.goldschm...@gmail.com> wrote:
> >>>>>>>
> >>>>>>> This introduces a new Kconfig option SPL_CLEAR_BSS_F. If enabled, it 
> >>>>>>> clears
> >>>>>>> the bss before calling board_init_f() instead of clearing it before 
> >>>>>>> calling
> >>>>>>> board_init_r().
> >>>>>>>
> >>>>>>> This also ensures that variables placed in BSS can be shared between
> >>>>>>> board_init_f() and board_init_r() in SPL.
> >>>>>>>
> >>>>>>> Such global variables are used, for example, when loading things from 
> >>>>>>> FAT
> >>>>>>> before SDRAM is available: the full heap required for FAT uses global
> >>>>>>> variables and clearing BSS after board_init_f() would reset the heap 
> >>>>>>> state.
> >>>>>>> An example for such a usage is socfpa_arria10 where an FPGA 
> >>>>>>> configuration
> >>>>>>> is required before SDRAM can be used.
> >>>>>>>
> >>>>>>> Make the new option depend on ARM for now until more implementations 
> >>>>>>> follow.
> >>>>>>>
> >>>>>>
> >>>>>> I still have objections to this series and I think we should discuss
> >>>>>> other ways of solving this problem.
> >>>>>>
> >>>>>> Does socfgpa have SRAM that could be used before SDRAM is available?
> >>>>>> If so, can we not use that for the configuration? What various are
> >>>>>> actually in BSS that are needed before board_init_r() is called? Can
> >>>>>> they not be in a struct created from malloc()?
> >>>>>
> >>>>>
> >>>>> The problem is the board needs to load an FPGA configuration from FAT 
> >>>>> before SDRAM is available. Yes, this is loaded into SRAM of course, but 
> >>>>> the whole code until that is done uses so many malloc/free iterations 
> >>>>> that The simple mall of implementation would require too much memory.
> >>>>>
> >>>>> And it's the full malloc state variables only that use BSS, not the FAT 
> >>>>> code.
> >>>>>
> >>>>> One way out could be to move the full mall of state variables into 
> >>>>> 'gd'...
> >>>>
> >>>>
> >>>> Maybe I should point out again that the whole purpose of this series is 
> >>>> to have an SPL that uses full malloc right from the start. This is 
> >>>> currently not possible as full malloc needs BSS.
> >>>
> >>> Right, and our assumption/design is that full malloc() requires SRAM.
> >>>
> >>> Here we have an architecture that requires FAT just to init its SDRAM.
> >>> FAT requires malloc() and free() and there is not enough SRAM to skip
> >>> the free() calls. So we have to use full malloc() and that uses BSS.
> >>> But BSS is not available before board_init_r(). But we need to init
> >>> SDRAM before board_init_r().
> >>>
> >>> Firstly I'd point out that someone should speak to the chip designers.
> >>> Did anyone try to boot U-Boot on the SoC model?
> >>
> >>
> >> Well, it's a U-Boot thing to load it from FAT. It could probably be loaded 
> >> from RAW mmc without problems, so I don't know if it's a chip designers 
> >> issue. I think it's an issue that we need to fix in U-Boot: we have a good 
> >> full malloc implementation but it's not usable in all cases were it should 
> >> be.
> >
> > OK then why use FAT? I assumed it was a boot-ROM requirement. How does
> > the boot ROM load SPL?
> >
> >>
> >>>
> >>> I think it is possible to change dlmalloc to put its variables in a
> >>> struct. Then I suppose the struct pointer could be kept in gd. That
> >>> would be one solution. Then full malloc() could be inited in
> >>> spl_common_init() perhaps.
> >>
> >>
> >> That might be worth a try.
> >
> > Yes shouldn't be too painful. I suspect it would be neutral on code size, 
> > too.
>
> Sorry, for digging in so late, here. I just stumbeled over the same
> problem ... but we cannot use BSS before relocation on all platforms,
> so I think, this patch is no option.

Right, by now I know that folks want to keep it that way.

>
> Hmm... I did not take a deep look at the dlmalloc implementation, but
> may my "fix" for the problem with Stefans patch, see here:
>
> http://patchwork.ozlabs.org/patch/1065508/#2130443
>
> is may an option for dlmalloc?

Moving variables from 'bss' into 'data' unoverridable by adding the
'section' attribute?
No, I think that makes it even worse. Why would 'data' always be available when
'bss' is not?

>
> If not, I think, the option suggested from Simon here is the way to
> go ...

I'm not too convinced of that either. I'll take the time to re-think
this specific
problem (using full-malloc in SPL without explicitly defining an address range)
and see what other solutions I can think of.

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

Reply via email to