[U-Boot] early_malloc() vs. enable_caches()

Albert ARIBAUD albert.u.boot at aribaud.net
Sun Jul 29 11:42:45 CEST 2012


Hi Tomas,

On Sat, 28 Jul 2012 17:46:41 +0200, Tomas Hlavacek <tmshlvck at gmail.com> wrote:
> Hello!
> 
> I am working on early_malloc() for U-Boot Driver Model (this malloc is
> going to serve for internal DM structures during early init and it has it's
> minimalistic heap in global data).
> 
> My question is how to correctly switch from early allocator to full-scale
> malloc and when to enable caches.
> 
> The current state (on ARM) is:
> 1) gd = id;
> 3) enable_caches();
> 3) mem_malloc_init();
> 
> Proposed sequence for mallocator (in order no to loose any data from old
> and not-relocated part of GD):
> 
> 1) gd_old = gd;
> 2) gd = id;
> 3) mem_malloc_init();
> 4) relocation of DM structures
> 5) early_malloc_disab()
> 6) enable_caches();

I suspect the sequence here is atomic because there is only one thread of
execution and no interrupt able to run, but still: would you not rather
disable early malloc *before* relocating DM structures?

> Does it make sense? It actually boils down to one fundamental question:
> When I have not-rellocated data locked in cache-lines, do I loose them once
> enable_caches() is called?

Based on the (possibly wrong) assumption that in the case you describe, caches
are being enabled for the first time, then there is no such thing as "locked
cache lines" because the caches were disabled so far.

If you are enabling the caches for the first time there, then all lines are
(or should be, more exactly) empty and unlocked.

> Thanks,
> Tomas

Amicalement,
-- 
Albert.


More information about the U-Boot mailing list