[coreboot] suspend/resume in v3

Kevin O'Connor kevin at koconnor.net
Mon Sep 8 02:06:07 CEST 2008


Hi,

On Sun, Sep 07, 2008 at 10:59:13PM +0200, Carl-Daniel Hailfinger wrote:
[...]
> CAR will write to memory locations below 1M. There are three ways to
> cope with that:
[...]
> 3. Write excessively clever and fragile code which performs a double
> stack switch during resume.
[...]
> 3. Will NOT work for Geode, may not work for Intel and VIA. The existing
> CAR enabling/disabling code will seem trivial in comparison.

Why can't the code use a new stack after CAR is disabled?

To be clear, I think moving the stack would be a bad idea.  However, I
don't see why the code can't just start using a new stack.

Right now, the only stack variable that is shared between CAR and
post-CAR is 'archive' (in stage1_main() ).  I would think one could
manually copy it from the CAR stack to a post-CAR global variable.
(Or just rebuild it from scratch.)

I'm thinking - one could implement a small assembler trampoline
function that took two parameters - the new stack location and the
function to jump to.  The assembler would only need to set %esp and
jump to the new function.

This would still require memory under 1MB for car, but at least stage2
could run with a full stack and globals that run in reserved memory.

Have I missed something?

-Kevin




More information about the coreboot mailing list