[coreboot] question about post_cache_as_ram() function

Stefan Reinauer stefan.reinauer at coresystems.de
Fri Dec 17 21:50:55 CET 2010


Can we automatically determine the value of RAMTOP during build time?

On 17.12.2010, at 12:29, Patrick Georgi <patrick at georgi-clan.de> wrote:

> Am Freitag, 17. Dezember 2010, um 15:08:38 schrieb Fengwei Zhang:
>> I would appreciate if someone could explain a little bit for me.
>> CONFIG_DCACHE_RAM_BASE
>> CONFIG_DCACHE_RAM_SIZE
>> CONFIG_RAMTOP
> DCACHE_RAM_BASE is the start address of the memory addresses that are used for 
> CAR.
> 
> DCACHE_RAM_SIZE is the size of that region.
> 
> RAMTOP is the highest address of the memory region that coreboot will use in 
> RAM.
> 
>> In addition, why do we need to set new esp here?
>>        /* set new esp */ /* before CONFIG_RAMBASE */
>>        "subl   %0, %%esp\n\t"
>> 
>>        ::"a"( (CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE)-
>> (CONFIG_RAMTOP) )
> This moves the stack from CAR area to RAM.
> 
> While in CAR, the stack is laid out at the top end of CAR, growing downwards 
> (ie. starting at DCACHE_RAM_BASE + DCACHE_RAM_SIZE).
> While in RAM, it starts at the top end of the ram area used for coreboot 
> (RAMTOP).
> 
> Before that line the stack is copied from CAR to RAM, then esp is setup so it 
> points to the same place in RAM that it pointed to in CAR (that's why we use 
> sub, not mov).
> This setup doesn't allow returning from the current function (we don't adjust 
> addresses on the stack), but it makes sure that local variables in the scope 
> of the current function are still usable.
> 
> 
> Hope this helps,
> Patrick
> 
> -- 
> coreboot mailing list: coreboot at coreboot.org
> http://www.coreboot.org/mailman/listinfo/coreboot
> 




More information about the coreboot mailing list