[SeaBIOS] Saving a few bytes across a reboot
Stefan Berger
stefanb at linux.vnet.ibm.com
Tue Jan 9 20:02:52 CET 2018
On 01/09/2018 10:14 AM, Kevin O'Connor wrote:
> On Tue, Jan 09, 2018 at 10:00:44AM -0500, Stefan Berger wrote:
>> Kevin,
>>
>> is it possible to save a few bytes, a pointer, across a reboot? I have
>> tried to do this by allocating a memory chunk in the fsegement and storing
>> the pointer there surrounded by 2 'magic' 32 bit values. When trying to find
>> the magic values on reboot early in handle_post() it doesn't seem to find
>> them anymore. Is there another memory segment where SeaBIOS could store the
>> few bytes and find them again?
> Didn't you have that implemented with the "Support Physical Presence
> Interface Spec" patches you made back in 2015?
Yes. Back then the bytes shared between BIOS and ACPI were located in a
MMIO memory area of the TPM TIS, which was basically a hack to save the
few bytes across reboot. This time we are trying to embed these bytes in
the ACPI stream where it would be allocated similar to the log area for
the TPM. Besides that there would be a QEMU ACPI table (with name
'QEMU') to get the address from for that memory area. An ACPI variable
would also get that address and use it in the address field of
OperationRegion(). This works fine. Once we reboot, the ACPI stream gets
re-initialized and everything there is gone. However, if we can save
that memory early on during boot and restore it back into the expected
location after ACPI has been re-done, this also works (I know this
because I can test this with a hard coded address where that share
memory is every time on my machine). Problem is just finding the address
to the share memory. A possibility would be to again abuse a device's
memory area as before to now hold only those 4 bytes...
Another twist is that Intel's EDK2 also implements this but the data
structure layout is different and they use SMM + SMIs etc.
https://github.com/tianocore/edk2/blob/master/SecurityPkg/Tcg/Tcg2Smm/Tpm.asl#L81
QEMU would also be generating the ACPI for this UEFI I suppose. So now
who needs to adapt to whom? And can EDK2 be adapted to do something
different or should it remain as-is and SeaBIOS would have to work
similarly as EDK2 does? I don't know much about SMM / SMIs and how it
work unfortunately and whether it can work from the OS when ACPI raises
an SMI. Any opinions ?
>
> Everything in low memory gets wiped out on a reboot. Any storage
> would have to be above 1M (or in a hardware register somewhere).
>
> BTW, can we move this discussion onto one of the mailing lists?
Sure. I had cc'ed SeaBIOS mailing list this time.
Stefan
>
> -Kevin
>
More information about the SeaBIOS
mailing list