On 01/11/2018 12:38 PM, Laszlo Ersek wrote:
On 01/11/18 18:16, Stefan Berger wrote:
I can only point to the standard for the address. If QEMU has an API where we can first try to allocate fed4 0000 and if that fails ask for another address, then we can use that. But does driver initialization work that way that we can first let all other devices register their MMIO requirements and then the TPM device ask whether fed4 0000 is available and then falls back to using a random address?
As far as I understand, QEMU would keep the base address generally fixed, but it could be moved if (a) another platform device comes along that needs a large contiguous area and it cannot be accommodated without moving other devices around, or (b) the user wanted to move the address on the command line for whatever reason.
(a) can be handled by changing a #define (b) would be a bit more work.
I am not sure whether there's a registry for base addresses for devices in the industry. Maybe it's just common knowledge that fed4 0000 per TCG spec is a standard base address for the TPM hardware interface.
A comment on the PPI device would be great. I would like to coordinate that with folks here before I make changes. The idea of the QEMU ACPI table that holds the base address of this device looks appealing to me unless there's that registry of base addresses and 0xffff 0000 .. 0xffff 00ff defines a well known PPI memory device.
So, I don't think the QEMU API that you describe exists, or that there's a use case for it. AFAICT board code is expected to place platform devices up-front so that the latter peacefully co-exist.
I want to add that TPM TIS works fine with Win10 and attached TPM 1.2 but not TPM 2, which seems to want a CRB.