arm/acpi: Add the TPM2.0 device under the DSDT
In case it is dynamically instantiated, add the TPM 2.0 device object under the DSDT table in the ACPI namespace. Its HID is MSFT0101 while its current resource settings (CRS) property is initialized with the guest physical address and MMIO size of the device. Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20200622140620.17229-3-eric.auger@redhat.com> Tested-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
e27e1e63ce
commit
5ab540e9b7
@ -46,6 +46,7 @@
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/arm/virt.h"
|
||||
#include "hw/mem/nvdimm.h"
|
||||
#include "hw/platform-bus.h"
|
||||
#include "sysemu/numa.h"
|
||||
#include "sysemu/reset.h"
|
||||
#include "sysemu/tpm.h"
|
||||
@ -364,6 +365,38 @@ static void acpi_dsdt_add_power_button(Aml *scope)
|
||||
aml_append(scope, dev);
|
||||
}
|
||||
|
||||
static void acpi_dsdt_add_tpm(Aml *scope, VirtMachineState *vms)
|
||||
{
|
||||
PlatformBusDevice *pbus = PLATFORM_BUS_DEVICE(vms->platform_bus_dev);
|
||||
hwaddr pbus_base = vms->memmap[VIRT_PLATFORM_BUS].base;
|
||||
SysBusDevice *sbdev = SYS_BUS_DEVICE(tpm_find());
|
||||
MemoryRegion *sbdev_mr;
|
||||
hwaddr tpm_base;
|
||||
|
||||
if (!sbdev) {
|
||||
return;
|
||||
}
|
||||
|
||||
tpm_base = platform_bus_get_mmio_addr(pbus, sbdev, 0);
|
||||
assert(tpm_base != -1);
|
||||
|
||||
tpm_base += pbus_base;
|
||||
|
||||
sbdev_mr = sysbus_mmio_get_region(sbdev, 0);
|
||||
|
||||
Aml *dev = aml_device("TPM0");
|
||||
aml_append(dev, aml_name_decl("_HID", aml_string("MSFT0101")));
|
||||
aml_append(dev, aml_name_decl("_UID", aml_int(0)));
|
||||
|
||||
Aml *crs = aml_resource_template();
|
||||
aml_append(crs,
|
||||
aml_memory32_fixed(tpm_base,
|
||||
(uint32_t)memory_region_size(sbdev_mr),
|
||||
AML_READ_WRITE));
|
||||
aml_append(dev, aml_name_decl("_CRS", crs));
|
||||
aml_append(scope, dev);
|
||||
}
|
||||
|
||||
static void
|
||||
build_iort(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||||
{
|
||||
@ -762,6 +795,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms)
|
||||
}
|
||||
|
||||
acpi_dsdt_add_power_button(scope);
|
||||
acpi_dsdt_add_tpm(scope, vms);
|
||||
|
||||
aml_append(dsdt, scope);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user