[coreboot] suspend/resume in v3
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Tue Sep 9 03:22:38 CEST 2008
On 09.09.2008 02:46, Kevin O'Connor wrote:
> On Mon, Sep 08, 2008 at 05:38:59PM +0200, Carl-Daniel Hailfinger wrote:
>
>> On 08.09.2008 17:23, Stefan Reinauer wrote:
>>
>>> No. There is no RAM at that position.
>>>
>>>
>> That means we either
>> - have to tell gcc that the stack moved in the middle of a function or
>> - redesign v3 stage1 completely.
>>
>
> I don't think that is true.
>
Well, if the stack location during CAR is in a place that will have no
RAM after CAR, we must move the stack or use virtual memory addresses
(fun!).
> As before, I think _moving_ the stack is a bad idea. However, I don't
> see any reason not to start using a new stack and discard the old.
> Doing so is both simple and reliable.
>
> I've attached a code snippet below - it's only to illustrate the
> general idea.
>
Yes, and it won't work because there can't be global variables in stage1
because there's no place to store them. We already had code to do that
jump a few hundred revisions ago and we killed it because it was
extremely difficult to follow. The stack switching is a processor
dependent operation because it has to be coupled with disabling CAR.
That means you have to follow calls a few levels deep just to see how
the end of stage1 is executed.
> That said, I think having disable_car() jump to the next stage is
> probably faster and more flexible.
>
It is a world of pain and I'm still determined to find a way to avoid
it, possibly by mapping some RAM into the CAR area through the use of
virtual memory.
Regards,
Carl-Daniel
--
http://www.hailfinger.org/
More information about the coreboot
mailing list