[SeaBIOS] Saving a few bytes across a reboot

Laszlo Ersek lersek at redhat.com
Thu Jan 11 15:02:02 CET 2018


On 01/11/18 13:40, Igor Mammedov wrote:
> On Wed, 10 Jan 2018 17:45:52 +0100
> Laszlo Ersek <lersek at redhat.com> wrote:

>> (My understanding is that the guest has to populate the CRB, and then
>> kick the hypervisor, so at least the register used for kicking must be
>> in MMIO (or IO) space. And firmware cannot allocate MMIO or IO space
>> (for platform devices). Thus, the register block must reside at a
>> QEMU-determined GPA. Once we do that, why bother about RAM allocation?)
> 
> MMIO doesn't have to be fixed nor exist at all, we could use
> linker write to file operation in FW for switching from guest
> to QEMU. That's obviously intrusive work for FW and QEMU
> compared to hardcodded address in both QEMU and FW but as
> benefit changes to QEMU and FW don't have to be tightly coupled
> and layout could be changed whenever need arises.

Marc-André wrote, "The [CRB] region is registered at the same address as
TIS (it's not entirely clear from the spec it is supposed to be there,
but my laptop tpm use the same)."

And, the spec declares the register block at the fixed range
FED4_0000h-FED4_4FFFh.

How about this:

(1) stick with the TPM specs and implement the TIS and/or CRB interfaces,

(2) *except* make the base address of the register block a compat
property for the QEMU device,

(3) generate data tables (TPM2) and AML tables (SSDT/_DSM) that expose
the device to the guest OS as ACPI or ACPI+CRB (i.e., "fTPM"), *not* TIS
and/or CRB

(4) in the generated ACPI payload, adhere to the compat property (i.e.,
generate the base address values from the compat prop),

(5) expose the base address stand-alone in a new fw_cfg file as well.


Benefits as I see it:

- register block can move around from one QEMU release to next,

- migration remains functional (ACPI comes from source host, but it
  matches the device model on the target host, due to the compat prop),

- firmware remains dumb about TPM activations (OS calls ACPI calls
  virtual hardware),

- the ACPI-to-hardware interface is dictated by an industry spec, so we
  don't have to invent and document a paravirtual interface. If it ever
  becomes necessary for the firmware to directly access the TPM
  hardware (for example, to replay physical presence commands queued by
  the OS), fw can rely on the same industry spec, only the base address
  has to be updated -- which is available stand-alone from the named
  fw_cfg file.

Thanks
Laszlo



More information about the SeaBIOS mailing list