* [PATCH v6 0/3] vTPM/aarch64 ACPI support
@ 2020-06-19 14:18 Eric Auger
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
` (3 more replies)
0 siblings, 4 replies; 13+ messages in thread
From: Eric Auger @ 2020-06-19 14:18 UTC (permalink / raw)
To: eric.auger.pro, eric.auger, stefanb, qemu-devel, qemu-arm,
peter.maydell, mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
Those patches bring MMIO TPM TIS ACPI support in machvirt.
On ARM, the TPM2 table is added when the TPM TIS sysbus
device is dynamically instantiated in machvirt.
Also the TPM2 device object is described in the DSDT.
Many thanks to Ard for his support.
Tested with LUKS partition automatic decryption. Also
tested with new bios-tables-test dedicated tests,
sent separately.
Best Regards
Eric
This series can be found at:
https://github.com/eauger/qemu/tree/v5.0-tpm-acpi-v6
History:
v5 -> v6:
- added reference to the spec
- add some comments about LAML and LASA fields which are
strangely undocumented in the spec for TPM2.0. So I kept
the decision to keep the Acpi20TPM2 struct for documentation
purpose.
v4 -> v5:
- Move of build_tpm2() in the generic acpi code was upstreamed
but this does not correspond to latest proposed version.
- Rebase on top of edfcb1f21a
v3 -> v4:
- some rework in build_tpm2() as suggested by Igor
- Restored tpm presence check in acpi_dsdt_add_tpm()
- add the doc related patch
v2 -> v3:
- Rebase on top of Stefan's
"acpi: tpm: Do not build TCPA table for TPM 2"
- brings conversion to build_append
v1 -> v2:
- move build_tpm2() in the generic code (Michael)
- collect Stefan's R-b on 3/3
Eric Auger (3):
acpi: Some build_tpm2() code reshape
arm/acpi: Add the TPM2.0 device under the DSDT
docs/specs/tpm: ACPI boot now supported for TPM/ARM
docs/specs/tpm.rst | 2 --
hw/acpi/aml-build.c | 54 ++++++++++++++++++++++++++--------------
hw/arm/virt-acpi-build.c | 34 +++++++++++++++++++++++++
3 files changed, 69 insertions(+), 21 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v6 1/3] acpi: Some build_tpm2() code reshape
2020-06-19 14:18 [PATCH v6 0/3] vTPM/aarch64 ACPI support Eric Auger
@ 2020-06-19 14:18 ` Eric Auger
2020-06-19 15:07 ` Stefan Berger
` (2 more replies)
2020-06-19 14:18 ` [PATCH v6 2/3] arm/acpi: Add the TPM2.0 device under the DSDT Eric Auger
` (2 subsequent siblings)
3 siblings, 3 replies; 13+ messages in thread
From: Eric Auger @ 2020-06-19 14:18 UTC (permalink / raw)
To: eric.auger.pro, eric.auger, stefanb, qemu-devel, qemu-arm,
peter.maydell, mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
Remove any reference to Acpi20TPM2 and adopt an implementation
similar to build_ghes_v2().
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Suggested-by: Igor Mammedov <imammedo@redhat.com>
---
v5 -> v6:
- add reference to the spec + comment about LAML and LASA fields
- also moved LASA intro comment above build_append_int_noprefix()
as requested by Igor
---
hw/acpi/aml-build.c | 54 +++++++++++++++++++++++++++++----------------
1 file changed, 35 insertions(+), 19 deletions(-)
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index 2cb7b991ef..1cc08a3eb9 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -1878,48 +1878,64 @@ build_hdr:
"FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_id);
}
+/*
+ * build_tpm2 - Build the TPM2 table as specified in table 7 of
+ * "TCG ACPI Specification; Family 1.2 and 2.0;
+ * Level 00 Revision 00.37, December 19, 2014"
+ * Note: the LASA and LAML fields are optional for TPM-2.0 (the above
+ * table does not mention them) but are needed at least for SeaBIOS.
+ * See the Acpi20TPM2 struct for the corresponding layout.
+ */
void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog)
{
- Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
- unsigned log_addr_size = sizeof(tpm2_ptr->log_area_start_address);
- unsigned log_addr_offset =
- (char *)&tpm2_ptr->log_area_start_address - table_data->data;
uint8_t start_method_params[12] = {};
+ unsigned log_addr_offset, tpm2_start;
+ uint64_t control_area_start_address;
TPMIf *tpmif = tpm_find();
+ uint32_t start_method;
+ void *tpm2_ptr;
- /* platform class */
+ tpm2_start = table_data->len;
+ tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
+
+ /* Platform Class */
build_append_int_noprefix(table_data, TPM2_ACPI_CLASS_CLIENT, 2);
- /* reserved */
+ /* Reserved */
build_append_int_noprefix(table_data, 0, 2);
if (TPM_IS_TIS_ISA(tpmif) || TPM_IS_TIS_SYSBUS(tpmif)) {
- /* address of control area */
- build_append_int_noprefix(table_data, 0, 8);
- /* start method */
- build_append_int_noprefix(table_data, TPM2_START_METHOD_MMIO, 4);
+ control_area_start_address = 0;
+ start_method = TPM2_START_METHOD_MMIO;
} else if (TPM_IS_CRB(tpmif)) {
- build_append_int_noprefix(table_data, TPM_CRB_ADDR_CTRL, 8);
- build_append_int_noprefix(table_data, TPM2_START_METHOD_CRB, 4);
+ control_area_start_address = TPM_CRB_ADDR_CTRL;
+ start_method = TPM2_START_METHOD_CRB;
} else {
- g_warn_if_reached();
+ g_assert_not_reached();
}
+ /* Address of Control Area */
+ build_append_int_noprefix(table_data, control_area_start_address, 8);
+ /* Start Method */
+ build_append_int_noprefix(table_data, start_method, 4);
- /* platform specific parameters */
- g_array_append_vals(table_data, &start_method_params, 12);
+ /* Platform Specific Parameters */
+ g_array_append_vals(table_data, &start_method_params,
+ ARRAY_SIZE(start_method_params));
- /* log area minimum length */
+ /* Log Area Minimum Length */
build_append_int_noprefix(table_data, TPM_LOG_AREA_MINIMUM_SIZE, 4);
acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
bios_linker_loader_alloc(linker, ACPI_BUILD_TPMLOG_FILE, tcpalog, 1,
false);
- /* log area start address to be filled by Guest linker */
+ log_addr_offset = table_data->len;
+
+ /* Log Area Start Address to be filled by Guest linker */
build_append_int_noprefix(table_data, 0, 8);
bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE,
- log_addr_offset, log_addr_size,
+ log_addr_offset, 8,
ACPI_BUILD_TPMLOG_FILE, 0);
build_header(linker, table_data,
- (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL, NULL);
+ tpm2_ptr, "TPM2", table_data->len - tpm2_start, 4, NULL, NULL);
}
/* ACPI 5.0: 6.4.3.8.2 Serial Bus Connection Descriptors */
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v6 2/3] arm/acpi: Add the TPM2.0 device under the DSDT
2020-06-19 14:18 [PATCH v6 0/3] vTPM/aarch64 ACPI support Eric Auger
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
@ 2020-06-19 14:18 ` Eric Auger
2020-06-22 12:48 ` Igor Mammedov
2020-06-19 14:18 ` [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM Eric Auger
2020-06-19 15:13 ` [PATCH v6 0/3] vTPM/aarch64 ACPI support no-reply
3 siblings, 1 reply; 13+ messages in thread
From: Eric Auger @ 2020-06-19 14:18 UTC (permalink / raw)
To: eric.auger.pro, eric.auger, stefanb, qemu-devel, qemu-arm,
peter.maydell, mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
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>
---
v3 -> v4:
- check the presence of the tpm in acpi_dsdt_add_tpm
as it was done in v2
v2 -> v3:
- use SYS_BUS_DEVICE() instead of
(SysBusDevice *)object_dynamic_cast(OBJECT())
v1 -> v2:
- use memory_region_size
- fix mingw compilation issue by casting to uint32_t
- added Stefan's R-b
---
hw/arm/virt-acpi-build.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
index ca31f70f7f..1384a2cf2a 100644
--- a/hw/arm/virt-acpi-build.c
+++ b/hw/arm/virt-acpi-build.c
@@ -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);
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM
2020-06-19 14:18 [PATCH v6 0/3] vTPM/aarch64 ACPI support Eric Auger
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
2020-06-19 14:18 ` [PATCH v6 2/3] arm/acpi: Add the TPM2.0 device under the DSDT Eric Auger
@ 2020-06-19 14:18 ` Eric Auger
2020-06-19 16:10 ` Stefan Berger
2020-06-22 12:47 ` Igor Mammedov
2020-06-19 15:13 ` [PATCH v6 0/3] vTPM/aarch64 ACPI support no-reply
3 siblings, 2 replies; 13+ messages in thread
From: Eric Auger @ 2020-06-19 14:18 UTC (permalink / raw)
To: eric.auger.pro, eric.auger, stefanb, qemu-devel, qemu-arm,
peter.maydell, mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
ACPI boot now is supported. Let's remove the comment
saying it is not.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
---
docs/specs/tpm.rst | 2 --
1 file changed, 2 deletions(-)
diff --git a/docs/specs/tpm.rst b/docs/specs/tpm.rst
index 5e61238bc5..eeeb93730a 100644
--- a/docs/specs/tpm.rst
+++ b/docs/specs/tpm.rst
@@ -346,8 +346,6 @@ In case an Arm virt machine is emulated, use the following command line:
-drive if=pflash,format=raw,file=flash0.img,readonly \
-drive if=pflash,format=raw,file=flash1.img
- On Arm, ACPI boot with TPM is not yet supported.
-
In case SeaBIOS is used as firmware, it should show the TPM menu item
after entering the menu with 'ESC'.
--
2.20.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v6 1/3] acpi: Some build_tpm2() code reshape
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
@ 2020-06-19 15:07 ` Stefan Berger
2020-06-19 15:34 ` Auger Eric
2020-06-19 16:09 ` Stefan Berger
2020-06-22 12:51 ` Igor Mammedov
2 siblings, 1 reply; 13+ messages in thread
From: Stefan Berger @ 2020-06-19 15:07 UTC (permalink / raw)
To: Eric Auger, eric.auger.pro, qemu-devel, qemu-arm, peter.maydell,
mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
On 6/19/20 10:18 AM, Eric Auger wrote:
> Remove any reference to Acpi20TPM2 and adopt an implementation
> similar to build_ghes_v2().
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Suggested-by: Igor Mammedov <imammedo@redhat.com>
>
> ---
>
> v5 -> v6:
> - add reference to the spec + comment about LAML and LASA fields
> - also moved LASA intro comment above build_append_int_noprefix()
> as requested by Igor
> ---
> hw/acpi/aml-build.c | 54 +++++++++++++++++++++++++++++----------------
> 1 file changed, 35 insertions(+), 19 deletions(-)
>
> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> index 2cb7b991ef..1cc08a3eb9 100644
> --- a/hw/acpi/aml-build.c
> +++ b/hw/acpi/aml-build.c
> @@ -1878,48 +1878,64 @@ build_hdr:
> "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_id);
> }
>
> +/*
> + * build_tpm2 - Build the TPM2 table as specified in table 7 of
> + * "TCG ACPI Specification; Family 1.2 and 2.0;
> + * Level 00 Revision 00.37, December 19, 2014"
> + * Note: the LASA and LAML fields are optional for TPM-2.0 (the above
> + * table does not mention them) but are needed at least for SeaBIOS.
> + * See the Acpi20TPM2 struct for the corresponding layout.
> + */
> void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog)
> {
> - Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> - unsigned log_addr_size = sizeof(tpm2_ptr->log_area_start_address);
> - unsigned log_addr_offset =
> - (char *)&tpm2_ptr->log_area_start_address - table_data->data;
> uint8_t start_method_params[12] = {};
> + unsigned log_addr_offset, tpm2_start;
> + uint64_t control_area_start_address;
> TPMIf *tpmif = tpm_find();
> + uint32_t start_method;
> + void *tpm2_ptr;
>
> - /* platform class */
> + tpm2_start = table_data->len;
> + tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> +
> + /* Platform Class */
> build_append_int_noprefix(table_data, TPM2_ACPI_CLASS_CLIENT, 2);
> - /* reserved */
> + /* Reserved */
> build_append_int_noprefix(table_data, 0, 2);
> if (TPM_IS_TIS_ISA(tpmif) || TPM_IS_TIS_SYSBUS(tpmif)) {
> - /* address of control area */
> - build_append_int_noprefix(table_data, 0, 8);
> - /* start method */
> - build_append_int_noprefix(table_data, TPM2_START_METHOD_MMIO, 4);
> + control_area_start_address = 0;
> + start_method = TPM2_START_METHOD_MMIO;
> } else if (TPM_IS_CRB(tpmif)) {
> - build_append_int_noprefix(table_data, TPM_CRB_ADDR_CTRL, 8);
> - build_append_int_noprefix(table_data, TPM2_START_METHOD_CRB, 4);
> + control_area_start_address = TPM_CRB_ADDR_CTRL;
> + start_method = TPM2_START_METHOD_CRB;
> } else {
> - g_warn_if_reached();
> + g_assert_not_reached();
> }
> + /* Address of Control Area */
> + build_append_int_noprefix(table_data, control_area_start_address, 8);
> + /* Start Method */
> + build_append_int_noprefix(table_data, start_method, 4);
>
> - /* platform specific parameters */
> - g_array_append_vals(table_data, &start_method_params, 12);
> + /* Platform Specific Parameters */
> + g_array_append_vals(table_data, &start_method_params,
> + ARRAY_SIZE(start_method_params));
>
> - /* log area minimum length */
> + /* Log Area Minimum Length */
> build_append_int_noprefix(table_data, TPM_LOG_AREA_MINIMUM_SIZE, 4);
>
> acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
> bios_linker_loader_alloc(linker, ACPI_BUILD_TPMLOG_FILE, tcpalog, 1,
> false);
>
> - /* log area start address to be filled by Guest linker */
> + log_addr_offset = table_data->len;
> +
Don't have to subtract tpm2_start from it ?
> + /* Log Area Start Address to be filled by Guest linker */
> build_append_int_noprefix(table_data, 0, 8);
> bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE,
> - log_addr_offset, log_addr_size,
> + log_addr_offset, 8,
> ACPI_BUILD_TPMLOG_FILE, 0);
> build_header(linker, table_data,
> - (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL, NULL);
> + tpm2_ptr, "TPM2", table_data->len - tpm2_start, 4, NULL, NULL);
> }
>
> /* ACPI 5.0: 6.4.3.8.2 Serial Bus Connection Descriptors */
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 0/3] vTPM/aarch64 ACPI support
2020-06-19 14:18 [PATCH v6 0/3] vTPM/aarch64 ACPI support Eric Auger
` (2 preceding siblings ...)
2020-06-19 14:18 ` [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM Eric Auger
@ 2020-06-19 15:13 ` no-reply
3 siblings, 0 replies; 13+ messages in thread
From: no-reply @ 2020-06-19 15:13 UTC (permalink / raw)
To: eric.auger
Cc: peter.maydell, thuth, drjones, mst, philmd, shannon.zhaosl,
qemu-devel, eric.auger, qemu-arm, marcandre.lureau, imammedo,
eric.auger.pro, lersek, ardb, stefanb
Patchew URL: https://patchew.org/QEMU/20200619141851.16272-1-eric.auger@redhat.com/
Hi,
This series failed the asan build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.
=== TEST SCRIPT BEGIN ===
#!/bin/bash
export ARCH=x86_64
make docker-image-fedora V=1 NETWORK=1
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1
=== TEST SCRIPT END ===
CC qga/commands-posix.o
CC qga/channel-posix.o
CC qga/qapi-generated/qga-qapi-types.o
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
CC qga/qapi-generated/qga-qapi-visit.o
CC qga/qapi-generated/qga-qapi-commands.o
CC qga/qapi-generated/qga-qapi-init-commands.o
---
GEN docs/interop/qemu-ga-ref.html
GEN docs/interop/qemu-ga-ref.txt
GEN docs/interop/qemu-ga-ref.7
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
AS pc-bios/optionrom/multiboot.o
CC pc-bios/optionrom/linuxboot_dma.o
AS pc-bios/optionrom/kvmvapic.o
---
BUILD pc-bios/optionrom/pvh.img
BUILD pc-bios/optionrom/pvh.raw
SIGN pc-bios/optionrom/pvh.bin
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK ivshmem-client
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK ivshmem-server
LINK qemu-nbd
LINK qemu-storage-daemon
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-img
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-io
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-edid
LINK fsdev/virtfs-proxy-helper
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK scsi/qemu-pr-helper
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK qemu-bridge-helper
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
LINK virtiofsd
LINK vhost-user-input
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
GEN x86_64-softmmu/hmp-commands.h
GEN x86_64-softmmu/config-devices.h
GEN x86_64-softmmu/hmp-commands-info.h
---
CC x86_64-softmmu/gdbstub-xml.o
CC x86_64-softmmu/trace/generated-helpers.o
LINK x86_64-softmmu/qemu-system-x86_64
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
common.rc: line 50: test: check: binary operator expected
(printf '#define QEMU_PKGVERSION ""\n'; printf '#define QEMU_FULL_VERSION "5.0.50"\n'; ) > qemu-version.h.tmp
make -C /tmp/qemu-test/src/slirp BUILD_DIR="/tmp/qemu-test/build/slirp" PKG_CONFIG="pkg-config" CC="clang" AR="ar" LD="ld" RANLIB="ranlib" CFLAGS="-I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -I/tmp/qemu-test/src/tests -I/tmp/qemu-test/src/tests/qtest -g " LDFLAGS="-Wl,--warn-common -fsanitize=undefined -fsanitize=address -Wl,-z,relro -Wl,-z,now -pie -m64 -fstack-protector-strong"
---
clang -iquote /tmp/qemu-test/build/tests/qtest -iquote tests/qtest -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -I/tmp/qemu-test/src/tests -I/tmp/qemu-test/src/tests/qtest -MMD -MP -MT tests/qtest/ide-test.o -MF tests/qtest/ide-test.d -g -c -o tests/qtest/ide-test.o /tmp/qemu-test/src/tests/qtest/ide-test.c
clang -iquote /tmp/qemu-test/build/tests/qtest/libqos -iquote tests/qtest/libqos -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -I/tmp/qemu-test/src/tests -I/tmp/qemu-test/src/tests/qtest -MMD -MP -MT tests/qtest/libqos/pci.o -MF tests/qtest/libqos/pci.d -g -c -o tests/qtest/libqos/pci.o /tmp/qemu-test/src/tests/qtest/libqos/pci.c
clang -iquote /tmp/qemu-test/build/tests/qtest/libqos -iquote tests/qtest/libqos -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -I/tmp/qemu-test/src/tests -I/tmp/qemu-test/src/tests/qtest -MMD -MP -MT tests/qtest/libqos/fw_cfg.o -MF tests/qtest/libqos/fw_cfg.d -g -c -o tests/qtest/libqos/fw_cfg.o /tmp/qemu-test/src/tests/qtest/libqos/fw_cfg.c
/tmp/qemu-test/src/tests/qht-bench.c:287:29: error: implicit conversion from 'unsigned long' to 'double' changes value from 18446744073709551615 to 18446744073709551616 [-Werror,-Wimplicit-int-float-conversion]
*threshold = rate * UINT64_MAX;
~ ^~~~~~~~~~
/usr/include/stdint.h:130:23: note: expanded from macro 'UINT64_MAX'
---
18446744073709551615UL
^~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make: *** [/tmp/qemu-test/src/rules.mak:69: tests/qht-bench.o] Error 1
make: *** Waiting for unfinished jobs....
clang -iquote /tmp/qemu-test/build/. -iquote . -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/tmp/qemu-test/src/tests/fp -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/include -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/8086-SSE -I/tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -DHW_POISON_H -DTARGET_ARM -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 -DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_INT64 -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD -DLONG_DOUBLE_IS_EXTFLOAT80 -MMD -MP -MT softfloat.o -MF ./softfloat.d -g -c -o softfloat.o /tmp/qemu-test/src/fpu/softfloat.c
clang -iquote /tmp/qemu-test/build/. -iquote . -iquote /tmp/qemu-test/src/tcg/i386 -isystem /tmp/qemu-test/src/linux-headers -isystem /tmp/qemu-test/build/linux-headers -iquote . -iquote /tmp/qemu-test/src -iquote /tmp/qemu-test/src/accel/tcg -iquote /tmp/qemu-test/src/include -iquote /tmp/qemu-test/src/disas/libvixl -I/tmp/qemu-test/src/tests/fp -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/include -I/tmp/qemu-test/src/tests/fp/berkeley-softfloat-3/source/8086-SSE -I/tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source -I/usr/include/pixman-1 -Werror -fsanitize=undefined -fsanitize=address -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -I/usr/include/p11-kit-1 -DSTRUCT_IOVEC_DEFINED -I/usr/include/libpng16 -I/usr/include/spice-1 -I/usr/include/spice-server -I/usr/include/cacard -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/nss3 -I/usr/include/nspr4 -pthread -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/pixman-1 -DHW_POISON_H -DTARGET_ARM -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 -DSOFTFLOAT_FAST_DIV64TO32 -DSOFTFLOAT_FAST_INT64 -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD -DLONG_DOUBLE_IS_EXTFLOAT80 -Wno-strict-prototypes -Wno-unknown-pragmas -Wno-uninitialized -Wno-missing-prototypes -Wno-return-type -Wno-unused-function -Wno-error -MMD -MP -MT uint128_inline.o -MF ./uint128_inline.d -g -c -o uint128_inline.o /tmp/qemu-test/src/tests/fp/berkeley-testfloat-3/source/uint128_inline.c
---
rm -f libtestfloat.a && ar rcs libtestfloat.a uint128_inline.o uint128.o fail.o functions_common.o functionInfos.o standardFunctionInfos.o random.o genCases_common.o genCases_ui32.o genCases_ui64.o genCases_i32.o genCases_i64.o genCases_f16.o genCases_f32.o genCases_f64.o genCases_extF80.o genCases_f128.o genCases_writeTestsTotal.o verCases_inline.o verCases_common.o verCases_writeFunctionName.o readHex.o writeHex.o writeCase_a_ui32.o writeCase_a_ui64.o writeCase_a_f16.o writeCase_ab_f16.o writeCase_abc_f16.o writeCase_a_f32.o writeCase_ab_f32.o writeCase_abc_f32.o writeCase_a_f64.o writeCase_ab_f64.o writeCase_abc_f64.o writeCase_a_extF80M.o writeCase_ab_extF80M.o writeCase_a_f128M.o writeCase_ab_f128M.o writeCase_abc_f128M.o writeCase_z_bool.o writeCase_z_ui32.o writeCase_z_ui64.o writeCase_z_f16.o writeCase_z_f32.o writeCase_z_f64.o writeCase_z_extF80M.o writeCase_z_f128M.o testLoops_common.o test_a_ui32_z_f16.o test_a_ui32_z_f32.o test_a_ui32_z_f64.o test_a_ui32_z_extF80.o test_a_ui32_z_f128.o test_a_ui64_z_f16.o test_a_ui64_z_f32.o test_a_ui64_z_f64.o test_a_ui64_z_extF80.o test_a_ui64_z_f128.o test_a_i32_z_f16.o test_a_i32_z_f32.o test_a_i32_z_f64.o test_a_i32_z_extF80.o test_a_i32_z_f128.o test_a_i64_z_f16.o test_a_i64_z_f32.o test_a_i64_z_f64.o test_a_i64_z_extF80.o test_a_i64_z_f128.o test_a_f16_z_ui32_rx.o test_a_f16_z_ui64_rx.o test_a_f16_z_i32_rx.o test_a_f16_z_i64_rx.o test_a_f16_z_ui32_x.o test_a_f16_z_ui64_x.o test_a_f16_z_i32_x.o test_a_f16_z_i64_x.o test_a_f16_z_f32.o test_a_f16_z_f64.o test_a_f16_z_extF80.o test_a_f16_z_f128.o test_az_f16.o test_az_f16_rx.o test_abz_f16.o test_abcz_f16.o test_ab_f16_z_bool.o test_a_f32_z_ui32_rx.o test_a_f32_z_ui64_rx.o test_a_f32_z_i32_rx.o test_a_f32_z_i64_rx.o test_a_f32_z_ui32_x.o test_a_f32_z_ui64_x.o test_a_f32_z_i32_x.o test_a_f32_z_i64_x.o test_a_f32_z_f16.o test_a_f32_z_f64.o test_a_f32_z_extF80.o test_a_f32_z_f128.o test_az_f32.o test_az_f32_rx.o test_abz_f32.o test_abcz_f32.o test_ab_f32_z_bool.o test_a_f64_z_ui32_rx.o test_a_f64_z_ui64_rx.o test_a_f64_z_i32_rx.o test_a_f64_z_i64_rx.o test_a_f64_z_ui32_x.o test_a_f64_z_ui64_x.o test_a_f64_z_i32_x.o test_a_f64_z_i64_x.o test_a_f64_z_f16.o test_a_f64_z_f32.o test_a_f64_z_extF80.o test_a_f64_z_f128.o test_az_f64.o test_az_f64_rx.o test_abz_f64.o test_abcz_f64.o test_ab_f64_z_bool.o test_a_extF80_z_ui32_rx.o test_a_extF80_z_ui64_rx.o test_a_extF80_z_i32_rx.o test_a_extF80_z_i64_rx.o test_a_extF80_z_ui32_x.o test_a_extF80_z_ui64_x.o test_a_extF80_z_i32_x.o test_a_extF80_z_i64_x.o test_a_extF80_z_f16.o test_a_extF80_z_f32.o test_a_extF80_z_f64.o test_a_extF80_z_f128.o test_az_extF80.o test_az_extF80_rx.o test_abz_extF80.o test_ab_extF80_z_bool.o test_a_f128_z_ui32_rx.o test_a_f128_z_ui64_rx.o test_a_f128_z_i32_rx.o test_a_f128_z_i64_rx.o test_a_f128_z_ui32_x.o test_a_f128_z_ui64_x.o test_a_f128_z_i32_x.o test_a_f128_z_i64_x.o test_a_f128_z_f16.o test_a_f128_z_f32.o test_a_f128_z_f64.o test_a_f128_z_extF80.o test_az_f128.o test_az_f128_rx.o test_abz_f128.o test_abcz_f128.o test_ab_f128_z_bool.o
rm -f libsoftfloat.a && ar rcs libsoftfloat.a s_eq128.o s_le128.o s_lt128.o s_shortShiftLeft128.o s_shortShiftRight128.o s_shortShiftRightJam64.o s_shortShiftRightJam64Extra.o s_shortShiftRightJam128.o s_shortShiftRightJam128Extra.o s_shiftRightJam32.o s_shiftRightJam64.o s_shiftRightJam64Extra.o s_shiftRightJam128.o s_shiftRightJam128Extra.o s_shiftRightJam256M.o s_countLeadingZeros8.o s_countLeadingZeros16.o s_countLeadingZeros32.o s_countLeadingZeros64.o s_add128.o s_add256M.o s_sub128.o s_sub256M.o s_mul64ByShifted32To128.o s_mul64To128.o s_mul128By32.o s_mul128To256M.o s_approxRecip_1Ks.o s_approxRecip32_1.o s_approxRecipSqrt_1Ks.o s_approxRecipSqrt32_1.o s_roundToUI32.o s_roundToUI64.o s_roundToI32.o s_roundToI64.o s_normSubnormalF16Sig.o s_roundPackToF16.o s_normRoundPackToF16.o s_addMagsF16.o s_subMagsF16.o s_mulAddF16.o s_normSubnormalF32Sig.o s_roundPackToF32.o s_normRoundPackToF32.o s_addMagsF32.o s_subMagsF32.o s_mulAddF32.o s_normSubnormalF64Sig.o s_roundPackToF64.o s_normRoundPackToF64.o s_addMagsF64.o s_subMagsF64.o s_mulAddF64.o s_normSubnormalExtF80Sig.o s_roundPackToExtF80.o s_normRoundPackToExtF80.o s_addMagsExtF80.o s_subMagsExtF80.o s_normSubnormalF128Sig.o s_roundPackToF128.o s_normRoundPackToF128.o s_addMagsF128.o s_subMagsF128.o s_mulAddF128.o softfloat_state.o ui32_to_f16.o ui32_to_f32.o ui32_to_f64.o ui32_to_extF80.o ui32_to_extF80M.o ui32_to_f128.o ui32_to_f128M.o ui64_to_f16.o ui64_to_f32.o ui64_to_f64.o ui64_to_extF80.o ui64_to_extF80M.o ui64_to_f128.o ui64_to_f128M.o i32_to_f16.o i32_to_f32.o i32_to_f64.o i32_to_extF80.o i32_to_extF80M.o i32_to_f128.o i32_to_f128M.o i64_to_f16.o i64_to_f32.o i64_to_f64.o i64_to_extF80.o i64_to_extF80M.o i64_to_f128.o i64_to_f128M.o f16_to_ui32.o f16_to_ui64.o f16_to_i32.o f16_to_i64.o f16_to_ui32_r_minMag.o f16_to_ui64_r_minMag.o f16_to_i32_r_minMag.o f16_to_i64_r_minMag.o f16_to_f32.o f16_to_f64.o f16_to_extF80.o f16_to_extF80M.o f16_to_f128.o f16_to_f128M.o f16_roundToInt.o f16_add.o f16_sub.o f16_mul.o f16_mulAdd.o f16_div.o f16_rem.o f16_sqrt.o f16_eq.o f16_le.o f16_lt.o f16_eq_signaling.o f16_le_quiet.o f16_lt_quiet.o f16_isSignalingNaN.o f32_to_ui32.o f32_to_ui64.o f32_to_i32.o f32_to_i64.o f32_to_ui32_r_minMag.o f32_to_ui64_r_minMag.o f32_to_i32_r_minMag.o f32_to_i64_r_minMag.o f32_to_f16.o f32_to_f64.o f32_to_extF80.o f32_to_extF80M.o f32_to_f128.o f32_to_f128M.o f32_roundToInt.o f32_add.o f32_sub.o f32_mul.o f32_mulAdd.o f32_div.o f32_rem.o f32_sqrt.o f32_eq.o f32_le.o f32_lt.o f32_eq_signaling.o f32_le_quiet.o f32_lt_quiet.o f32_isSignalingNaN.o f64_to_ui32.o f64_to_ui64.o f64_to_i32.o f64_to_i64.o f64_to_ui32_r_minMag.o f64_to_ui64_r_minMag.o f64_to_i32_r_minMag.o f64_to_i64_r_minMag.o f64_to_f16.o f64_to_f32.o f64_to_extF80.o f64_to_extF80M.o f64_to_f128.o f64_to_f128M.o f64_roundToInt.o f64_add.o f64_sub.o f64_mul.o f64_mulAdd.o f64_div.o f64_rem.o f64_sqrt.o f64_eq.o f64_le.o f64_lt.o f64_eq_signaling.o f64_le_quiet.o f64_lt_quiet.o f64_isSignalingNaN.o extF80_to_ui32.o extF80_to_ui64.o extF80_to_i32.o extF80_to_i64.o extF80_to_ui32_r_minMag.o extF80_to_ui64_r_minMag.o extF80_to_i32_r_minMag.o extF80_to_i64_r_minMag.o extF80_to_f16.o extF80_to_f32.o extF80_to_f64.o extF80_to_f128.o extF80_roundToInt.o extF80_add.o extF80_sub.o extF80_mul.o extF80_div.o extF80_rem.o extF80_sqrt.o extF80_eq.o extF80_le.o extF80_lt.o extF80_eq_signaling.o extF80_le_quiet.o extF80_lt_quiet.o extF80_isSignalingNaN.o extF80M_to_ui32.o extF80M_to_ui64.o extF80M_to_i32.o extF80M_to_i64.o extF80M_to_ui32_r_minMag.o extF80M_to_ui64_r_minMag.o extF80M_to_i32_r_minMag.o extF80M_to_i64_r_minMag.o extF80M_to_f16.o extF80M_to_f32.o extF80M_to_f64.o extF80M_to_f128M.o extF80M_roundToInt.o extF80M_add.o extF80M_sub.o extF80M_mul.o extF80M_div.o extF80M_rem.o extF80M_sqrt.o extF80M_eq.o extF80M_le.o extF80M_lt.o extF80M_eq_signaling.o extF80M_le_quiet.o extF80M_lt_quiet.o f128_to_ui32.o f128_to_ui64.o f128_to_i32.o f128_to_i64.o f128_to_ui32_r_minMag.o f128_to_ui64_r_minMag.o f128_to_i32_r_minMag.o f128_to_i64_r_minMag.o f128_to_f16.o f128_to_f32.o f128_to_extF80.o f128_to_f64.o f128_roundToInt.o f128_add.o f128_sub.o f128_mul.o f128_mulAdd.o f128_div.o f128_rem.o f128_sqrt.o f128_eq.o f128_le.o f128_lt.o f128_eq_signaling.o f128_le_quiet.o f128_lt_quiet.o f128_isSignalingNaN.o f128M_to_ui32.o f128M_to_ui64.o f128M_to_i32.o f128M_to_i64.o f128M_to_ui32_r_minMag.o f128M_to_ui64_r_minMag.o f128M_to_i32_r_minMag.o f128M_to_i64_r_minMag.o f128M_to_f16.o f128M_to_f32.o f128M_to_extF80M.o f128M_to_f64.o f128M_roundToInt.o f128M_add.o f128M_sub.o f128M_mul.o f128M_mulAdd.o f128M_div.o f128M_rem.o f128M_sqrt.o f128M_eq.o f128M_le.o f128M_lt.o f128M_eq_signaling.o f128M_le_quiet.o f128M_lt_quiet.o softfloat_raiseFlags.o s_f16UIToCommonNaN.o s_commonNaNToF16UI.o s_propagateNaNF16UI.o s_f32UIToCommonNaN.o s_commonNaNToF32UI.o s_propagateNaNF32UI.o s_f64UIToCommonNaN.o s_commonNaNToF64UI.o s_propagateNaNF64UI.o extF80M_isSignalingNaN.o s_extF80UIToCommonNaN.o s_commonNaNToExtF80UI.o s_propagateNaNExtF80UI.o f128M_isSignalingNaN.o s_f128UIToCommonNaN.o s_commonNaNToF128UI.o s_propagateNaNF128UI.o
clang++ -g -Wl,--warn-common -fsanitize=undefined -fsanitize=address -Wl,-z,relro -Wl,-z,now -pie -m64 -fstack-protector-strong -o fp-test fp-test.o slowfloat.o softfloat.o libtestfloat.a libsoftfloat.a /tmp/qemu-test/build/libqemuutil.a -lm -lz -lgthread-2.0 -pthread -lglib-2.0 -lnettle -lgnutls -lzstd -lrt
/usr/bin/ld: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
make[1]: Leaving directory '/tmp/qemu-test/build/tests/fp'
Traceback (most recent call last):
File "./tests/docker/docker.py", line 669, in <module>
---
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sudo', '-n', 'docker', 'run', '--label', 'com.qemu.instance.uuid=845468490b4e4b8f9f17772bd75c35f6', '-u', '1001', '--security-opt', 'seccomp=unconfined', '--rm', '-e', 'TARGET_LIST=x86_64-softmmu', '-e', 'EXTRA_CONFIGURE_OPTS=', '-e', 'V=', '-e', 'J=14', '-e', 'DEBUG=', '-e', 'SHOW_ENV=', '-e', 'CCACHE_DIR=/var/tmp/ccache', '-v', '/home/patchew/.cache/qemu-docker-ccache:/var/tmp/ccache:z', '-v', '/var/tmp/patchew-tester-tmp-cj69f6a0/src/docker-src.2020-06-19-11.08.53.5595:/var/tmp/qemu:z,ro', 'qemu:fedora', '/var/tmp/qemu/run', 'test-debug']' returned non-zero exit status 2.
filter=--filter=label=com.qemu.instance.uuid=845468490b4e4b8f9f17772bd75c35f6
make[1]: *** [docker-run] Error 1
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-cj69f6a0/src'
make: *** [docker-run-test-debug@fedora] Error 2
real 5m0.490s
user 0m9.446s
The full log is available at
http://patchew.org/logs/20200619141851.16272-1-eric.auger@redhat.com/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 1/3] acpi: Some build_tpm2() code reshape
2020-06-19 15:07 ` Stefan Berger
@ 2020-06-19 15:34 ` Auger Eric
0 siblings, 0 replies; 13+ messages in thread
From: Auger Eric @ 2020-06-19 15:34 UTC (permalink / raw)
To: Stefan Berger, eric.auger.pro, qemu-devel, qemu-arm,
peter.maydell, mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
Hi Stefan,
On 6/19/20 5:07 PM, Stefan Berger wrote:
> On 6/19/20 10:18 AM, Eric Auger wrote:
>> Remove any reference to Acpi20TPM2 and adopt an implementation
>> similar to build_ghes_v2().
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>> Suggested-by: Igor Mammedov <imammedo@redhat.com>
>>
>> ---
>>
>> v5 -> v6:
>> - add reference to the spec + comment about LAML and LASA fields
>> - also moved LASA intro comment above build_append_int_noprefix()
>> as requested by Igor
>> ---
>> hw/acpi/aml-build.c | 54 +++++++++++++++++++++++++++++----------------
>> 1 file changed, 35 insertions(+), 19 deletions(-)
>>
>> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
>> index 2cb7b991ef..1cc08a3eb9 100644
>> --- a/hw/acpi/aml-build.c
>> +++ b/hw/acpi/aml-build.c
>> @@ -1878,48 +1878,64 @@ build_hdr:
>> "FACP", tbl->len - fadt_start, f->rev, oem_id,
>> oem_table_id);
>> }
>> +/*
>> + * build_tpm2 - Build the TPM2 table as specified in table 7 of
>> + * "TCG ACPI Specification; Family 1.2 and 2.0;
>> + * Level 00 Revision 00.37, December 19, 2014"
>> + * Note: the LASA and LAML fields are optional for TPM-2.0 (the above
>> + * table does not mention them) but are needed at least for SeaBIOS.
>> + * See the Acpi20TPM2 struct for the corresponding layout.
>> + */
>> void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray
>> *tcpalog)
>> {
>> - Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data,
>> sizeof(AcpiTableHeader));
>> - unsigned log_addr_size = sizeof(tpm2_ptr->log_area_start_address);
>> - unsigned log_addr_offset =
>> - (char *)&tpm2_ptr->log_area_start_address - table_data->data;
>> uint8_t start_method_params[12] = {};
>> + unsigned log_addr_offset, tpm2_start;
>> + uint64_t control_area_start_address;
>> TPMIf *tpmif = tpm_find();
>> + uint32_t start_method;
>> + void *tpm2_ptr;
>> - /* platform class */
>> + tpm2_start = table_data->len;
>> + tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
>> +
>> + /* Platform Class */
>> build_append_int_noprefix(table_data, TPM2_ACPI_CLASS_CLIENT, 2);
>> - /* reserved */
>> + /* Reserved */
>> build_append_int_noprefix(table_data, 0, 2);
>> if (TPM_IS_TIS_ISA(tpmif) || TPM_IS_TIS_SYSBUS(tpmif)) {
>> - /* address of control area */
>> - build_append_int_noprefix(table_data, 0, 8);
>> - /* start method */
>> - build_append_int_noprefix(table_data, TPM2_START_METHOD_MMIO,
>> 4);
>> + control_area_start_address = 0;
>> + start_method = TPM2_START_METHOD_MMIO;
>> } else if (TPM_IS_CRB(tpmif)) {
>> - build_append_int_noprefix(table_data, TPM_CRB_ADDR_CTRL, 8);
>> - build_append_int_noprefix(table_data, TPM2_START_METHOD_CRB, 4);
>> + control_area_start_address = TPM_CRB_ADDR_CTRL;
>> + start_method = TPM2_START_METHOD_CRB;
>> } else {
>> - g_warn_if_reached();
>> + g_assert_not_reached();
>> }
>> + /* Address of Control Area */
>> + build_append_int_noprefix(table_data, control_area_start_address,
>> 8);
>> + /* Start Method */
>> + build_append_int_noprefix(table_data, start_method, 4);
>> - /* platform specific parameters */
>> - g_array_append_vals(table_data, &start_method_params, 12);
>> + /* Platform Specific Parameters */
>> + g_array_append_vals(table_data, &start_method_params,
>> + ARRAY_SIZE(start_method_params));
>> - /* log area minimum length */
>> + /* Log Area Minimum Length */
>> build_append_int_noprefix(table_data, TPM_LOG_AREA_MINIMUM_SIZE,
>> 4);
>> acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
>> bios_linker_loader_alloc(linker, ACPI_BUILD_TPMLOG_FILE,
>> tcpalog, 1,
>> false);
>> - /* log area start address to be filled by Guest linker */
>> + log_addr_offset = table_data->len;
>> +
>
> Don't have to subtract tpm2_start from it ?
no that's the absolute offset. It was
unsigned log_addr_offset =
(char *)&tpm2_ptr->log_area_start_address - table_data->data;
Thanks
Eric
>
>
>> + /* Log Area Start Address to be filled by Guest linker */
>> build_append_int_noprefix(table_data, 0, 8);
>> bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE,
>> - log_addr_offset, log_addr_size,
>> + log_addr_offset, 8,
>> ACPI_BUILD_TPMLOG_FILE, 0);
>> build_header(linker, table_data,
>> - (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4,
>> NULL, NULL);
>> + tpm2_ptr, "TPM2", table_data->len - tpm2_start, 4,
>> NULL, NULL);
>> }
>> /* ACPI 5.0: 6.4.3.8.2 Serial Bus Connection Descriptors */
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 1/3] acpi: Some build_tpm2() code reshape
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
2020-06-19 15:07 ` Stefan Berger
@ 2020-06-19 16:09 ` Stefan Berger
2020-06-19 16:14 ` Auger Eric
2020-06-22 12:51 ` Igor Mammedov
2 siblings, 1 reply; 13+ messages in thread
From: Stefan Berger @ 2020-06-19 16:09 UTC (permalink / raw)
To: Eric Auger, eric.auger.pro, qemu-devel, qemu-arm, peter.maydell,
mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
On 6/19/20 10:18 AM, Eric Auger wrote:
> Remove any reference to Acpi20TPM2 and adopt an implementation
> similar to build_ghes_v2().
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Suggested-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Tested-by: Stefan Berger <stefanb@linux.ibm.com>
>
> ---
>
> v5 -> v6:
> - add reference to the spec + comment about LAML and LASA fields
> - also moved LASA intro comment above build_append_int_noprefix()
> as requested by Igor
> ---
> hw/acpi/aml-build.c | 54 +++++++++++++++++++++++++++++----------------
> 1 file changed, 35 insertions(+), 19 deletions(-)
>
> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> index 2cb7b991ef..1cc08a3eb9 100644
> --- a/hw/acpi/aml-build.c
> +++ b/hw/acpi/aml-build.c
> @@ -1878,48 +1878,64 @@ build_hdr:
> "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_id);
> }
>
> +/*
> + * build_tpm2 - Build the TPM2 table as specified in table 7 of
> + * "TCG ACPI Specification; Family 1.2 and 2.0;
> + * Level 00 Revision 00.37, December 19, 2014"
> + * Note: the LASA and LAML fields are optional for TPM-2.0 (the above
> + * table does not mention them) but are needed at least for SeaBIOS.
> + * See the Acpi20TPM2 struct for the corresponding layout.
> + */
> void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog)
> {
> - Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> - unsigned log_addr_size = sizeof(tpm2_ptr->log_area_start_address);
> - unsigned log_addr_offset =
> - (char *)&tpm2_ptr->log_area_start_address - table_data->data;
> uint8_t start_method_params[12] = {};
> + unsigned log_addr_offset, tpm2_start;
> + uint64_t control_area_start_address;
> TPMIf *tpmif = tpm_find();
> + uint32_t start_method;
> + void *tpm2_ptr;
>
> - /* platform class */
> + tpm2_start = table_data->len;
> + tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> +
> + /* Platform Class */
> build_append_int_noprefix(table_data, TPM2_ACPI_CLASS_CLIENT, 2);
> - /* reserved */
> + /* Reserved */
> build_append_int_noprefix(table_data, 0, 2);
> if (TPM_IS_TIS_ISA(tpmif) || TPM_IS_TIS_SYSBUS(tpmif)) {
> - /* address of control area */
> - build_append_int_noprefix(table_data, 0, 8);
> - /* start method */
> - build_append_int_noprefix(table_data, TPM2_START_METHOD_MMIO, 4);
> + control_area_start_address = 0;
> + start_method = TPM2_START_METHOD_MMIO;
> } else if (TPM_IS_CRB(tpmif)) {
> - build_append_int_noprefix(table_data, TPM_CRB_ADDR_CTRL, 8);
> - build_append_int_noprefix(table_data, TPM2_START_METHOD_CRB, 4);
> + control_area_start_address = TPM_CRB_ADDR_CTRL;
> + start_method = TPM2_START_METHOD_CRB;
> } else {
> - g_warn_if_reached();
> + g_assert_not_reached();
> }
> + /* Address of Control Area */
> + build_append_int_noprefix(table_data, control_area_start_address, 8);
> + /* Start Method */
> + build_append_int_noprefix(table_data, start_method, 4);
>
> - /* platform specific parameters */
> - g_array_append_vals(table_data, &start_method_params, 12);
> + /* Platform Specific Parameters */
> + g_array_append_vals(table_data, &start_method_params,
> + ARRAY_SIZE(start_method_params));
>
> - /* log area minimum length */
> + /* Log Area Minimum Length */
> build_append_int_noprefix(table_data, TPM_LOG_AREA_MINIMUM_SIZE, 4);
>
> acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
> bios_linker_loader_alloc(linker, ACPI_BUILD_TPMLOG_FILE, tcpalog, 1,
> false);
>
> - /* log area start address to be filled by Guest linker */
> + log_addr_offset = table_data->len;
> +
> + /* Log Area Start Address to be filled by Guest linker */
> build_append_int_noprefix(table_data, 0, 8);
> bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE,
> - log_addr_offset, log_addr_size,
> + log_addr_offset, 8,
> ACPI_BUILD_TPMLOG_FILE, 0);
> build_header(linker, table_data,
> - (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL, NULL);
> + tpm2_ptr, "TPM2", table_data->len - tpm2_start, 4, NULL, NULL);
> }
>
> /* ACPI 5.0: 6.4.3.8.2 Serial Bus Connection Descriptors */
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM
2020-06-19 14:18 ` [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM Eric Auger
@ 2020-06-19 16:10 ` Stefan Berger
2020-06-22 12:47 ` Igor Mammedov
1 sibling, 0 replies; 13+ messages in thread
From: Stefan Berger @ 2020-06-19 16:10 UTC (permalink / raw)
To: Eric Auger, eric.auger.pro, qemu-devel, qemu-arm, peter.maydell,
mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
On 6/19/20 10:18 AM, Eric Auger wrote:
> ACPI boot now is supported. Let's remove the comment
> saying it is not.
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> ---
> docs/specs/tpm.rst | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/docs/specs/tpm.rst b/docs/specs/tpm.rst
> index 5e61238bc5..eeeb93730a 100644
> --- a/docs/specs/tpm.rst
> +++ b/docs/specs/tpm.rst
> @@ -346,8 +346,6 @@ In case an Arm virt machine is emulated, use the following command line:
> -drive if=pflash,format=raw,file=flash0.img,readonly \
> -drive if=pflash,format=raw,file=flash1.img
>
> - On Arm, ACPI boot with TPM is not yet supported.
> -
> In case SeaBIOS is used as firmware, it should show the TPM menu item
> after entering the menu with 'ESC'.
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 1/3] acpi: Some build_tpm2() code reshape
2020-06-19 16:09 ` Stefan Berger
@ 2020-06-19 16:14 ` Auger Eric
0 siblings, 0 replies; 13+ messages in thread
From: Auger Eric @ 2020-06-19 16:14 UTC (permalink / raw)
To: Stefan Berger, eric.auger.pro, qemu-devel, qemu-arm,
peter.maydell, mst, imammedo
Cc: thuth, lersek, drjones, shannon.zhaosl, marcandre.lureau, philmd,
ardb
Hi Stefan,
On 6/19/20 6:09 PM, Stefan Berger wrote:
> On 6/19/20 10:18 AM, Eric Auger wrote:
>> Remove any reference to Acpi20TPM2 and adopt an implementation
>> similar to build_ghes_v2().
>>
>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>> Suggested-by: Igor Mammedov <imammedo@redhat.com>
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
>
> Tested-by: Stefan Berger <stefanb@linux.ibm.com>
Thanks!
Eric
>
>
>>
>> ---
>>
>> v5 -> v6:
>> - add reference to the spec + comment about LAML and LASA fields
>> - also moved LASA intro comment above build_append_int_noprefix()
>> as requested by Igor
>> ---
>> hw/acpi/aml-build.c | 54 +++++++++++++++++++++++++++++----------------
>> 1 file changed, 35 insertions(+), 19 deletions(-)
>>
>> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
>> index 2cb7b991ef..1cc08a3eb9 100644
>> --- a/hw/acpi/aml-build.c
>> +++ b/hw/acpi/aml-build.c
>> @@ -1878,48 +1878,64 @@ build_hdr:
>> "FACP", tbl->len - fadt_start, f->rev, oem_id,
>> oem_table_id);
>> }
>> +/*
>> + * build_tpm2 - Build the TPM2 table as specified in table 7 of
>> + * "TCG ACPI Specification; Family 1.2 and 2.0;
>> + * Level 00 Revision 00.37, December 19, 2014"
>> + * Note: the LASA and LAML fields are optional for TPM-2.0 (the above
>> + * table does not mention them) but are needed at least for SeaBIOS.
>> + * See the Acpi20TPM2 struct for the corresponding layout.
>> + */
>> void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray
>> *tcpalog)
>> {
>> - Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data,
>> sizeof(AcpiTableHeader));
>> - unsigned log_addr_size = sizeof(tpm2_ptr->log_area_start_address);
>> - unsigned log_addr_offset =
>> - (char *)&tpm2_ptr->log_area_start_address - table_data->data;
>> uint8_t start_method_params[12] = {};
>> + unsigned log_addr_offset, tpm2_start;
>> + uint64_t control_area_start_address;
>> TPMIf *tpmif = tpm_find();
>> + uint32_t start_method;
>> + void *tpm2_ptr;
>> - /* platform class */
>> + tpm2_start = table_data->len;
>> + tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
>> +
>> + /* Platform Class */
>> build_append_int_noprefix(table_data, TPM2_ACPI_CLASS_CLIENT, 2);
>> - /* reserved */
>> + /* Reserved */
>> build_append_int_noprefix(table_data, 0, 2);
>> if (TPM_IS_TIS_ISA(tpmif) || TPM_IS_TIS_SYSBUS(tpmif)) {
>> - /* address of control area */
>> - build_append_int_noprefix(table_data, 0, 8);
>> - /* start method */
>> - build_append_int_noprefix(table_data, TPM2_START_METHOD_MMIO,
>> 4);
>> + control_area_start_address = 0;
>> + start_method = TPM2_START_METHOD_MMIO;
>> } else if (TPM_IS_CRB(tpmif)) {
>> - build_append_int_noprefix(table_data, TPM_CRB_ADDR_CTRL, 8);
>> - build_append_int_noprefix(table_data, TPM2_START_METHOD_CRB, 4);
>> + control_area_start_address = TPM_CRB_ADDR_CTRL;
>> + start_method = TPM2_START_METHOD_CRB;
>> } else {
>> - g_warn_if_reached();
>> + g_assert_not_reached();
>> }
>> + /* Address of Control Area */
>> + build_append_int_noprefix(table_data, control_area_start_address,
>> 8);
>> + /* Start Method */
>> + build_append_int_noprefix(table_data, start_method, 4);
>> - /* platform specific parameters */
>> - g_array_append_vals(table_data, &start_method_params, 12);
>> + /* Platform Specific Parameters */
>> + g_array_append_vals(table_data, &start_method_params,
>> + ARRAY_SIZE(start_method_params));
>> - /* log area minimum length */
>> + /* Log Area Minimum Length */
>> build_append_int_noprefix(table_data, TPM_LOG_AREA_MINIMUM_SIZE,
>> 4);
>> acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
>> bios_linker_loader_alloc(linker, ACPI_BUILD_TPMLOG_FILE,
>> tcpalog, 1,
>> false);
>> - /* log area start address to be filled by Guest linker */
>> + log_addr_offset = table_data->len;
>> +
>> + /* Log Area Start Address to be filled by Guest linker */
>> build_append_int_noprefix(table_data, 0, 8);
>> bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE,
>> - log_addr_offset, log_addr_size,
>> + log_addr_offset, 8,
>> ACPI_BUILD_TPMLOG_FILE, 0);
>> build_header(linker, table_data,
>> - (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4,
>> NULL, NULL);
>> + tpm2_ptr, "TPM2", table_data->len - tpm2_start, 4,
>> NULL, NULL);
>> }
>> /* ACPI 5.0: 6.4.3.8.2 Serial Bus Connection Descriptors */
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM
2020-06-19 14:18 ` [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM Eric Auger
2020-06-19 16:10 ` Stefan Berger
@ 2020-06-22 12:47 ` Igor Mammedov
1 sibling, 0 replies; 13+ messages in thread
From: Igor Mammedov @ 2020-06-22 12:47 UTC (permalink / raw)
To: Eric Auger
Cc: peter.maydell, thuth, drjones, mst, lersek, qemu-devel,
shannon.zhaosl, qemu-arm, marcandre.lureau, eric.auger.pro,
philmd, ardb, stefanb
On Fri, 19 Jun 2020 16:18:51 +0200
Eric Auger <eric.auger@redhat.com> wrote:
> ACPI boot now is supported. Let's remove the comment
> saying it is not.
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> docs/specs/tpm.rst | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/docs/specs/tpm.rst b/docs/specs/tpm.rst
> index 5e61238bc5..eeeb93730a 100644
> --- a/docs/specs/tpm.rst
> +++ b/docs/specs/tpm.rst
> @@ -346,8 +346,6 @@ In case an Arm virt machine is emulated, use the following command line:
> -drive if=pflash,format=raw,file=flash0.img,readonly \
> -drive if=pflash,format=raw,file=flash1.img
>
> - On Arm, ACPI boot with TPM is not yet supported.
> -
> In case SeaBIOS is used as firmware, it should show the TPM menu item
> after entering the menu with 'ESC'.
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 2/3] arm/acpi: Add the TPM2.0 device under the DSDT
2020-06-19 14:18 ` [PATCH v6 2/3] arm/acpi: Add the TPM2.0 device under the DSDT Eric Auger
@ 2020-06-22 12:48 ` Igor Mammedov
0 siblings, 0 replies; 13+ messages in thread
From: Igor Mammedov @ 2020-06-22 12:48 UTC (permalink / raw)
To: Eric Auger
Cc: peter.maydell, thuth, drjones, mst, philmd, qemu-devel,
shannon.zhaosl, qemu-arm, marcandre.lureau, eric.auger.pro,
lersek, ardb, stefanb
On Fri, 19 Jun 2020 16:18:50 +0200
Eric Auger <eric.auger@redhat.com> wrote:
> 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>
>
> ---
>
> v3 -> v4:
> - check the presence of the tpm in acpi_dsdt_add_tpm
> as it was done in v2
>
> v2 -> v3:
> - use SYS_BUS_DEVICE() instead of
> (SysBusDevice *)object_dynamic_cast(OBJECT())
>
> v1 -> v2:
> - use memory_region_size
> - fix mingw compilation issue by casting to uint32_t
> - added Stefan's R-b
> ---
> hw/arm/virt-acpi-build.c | 34 ++++++++++++++++++++++++++++++++++
> 1 file changed, 34 insertions(+)
>
> diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
> index ca31f70f7f..1384a2cf2a 100644
> --- a/hw/arm/virt-acpi-build.c
> +++ b/hw/arm/virt-acpi-build.c
> @@ -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);
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v6 1/3] acpi: Some build_tpm2() code reshape
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
2020-06-19 15:07 ` Stefan Berger
2020-06-19 16:09 ` Stefan Berger
@ 2020-06-22 12:51 ` Igor Mammedov
2 siblings, 0 replies; 13+ messages in thread
From: Igor Mammedov @ 2020-06-22 12:51 UTC (permalink / raw)
To: Eric Auger
Cc: peter.maydell, thuth, drjones, mst, lersek, qemu-devel,
shannon.zhaosl, qemu-arm, marcandre.lureau, eric.auger.pro,
philmd, ardb, stefanb
On Fri, 19 Jun 2020 16:18:49 +0200
Eric Auger <eric.auger@redhat.com> wrote:
> Remove any reference to Acpi20TPM2 and adopt an implementation
> similar to build_ghes_v2().
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Suggested-by: Igor Mammedov <imammedo@redhat.com>
with struct Acpi20TPM2 removed completely and pointer to the spec as we discussed ealier
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
>
> ---
>
> v5 -> v6:
> - add reference to the spec + comment about LAML and LASA fields
> - also moved LASA intro comment above build_append_int_noprefix()
> as requested by Igor
> ---
> hw/acpi/aml-build.c | 54 +++++++++++++++++++++++++++++----------------
> 1 file changed, 35 insertions(+), 19 deletions(-)
>
> diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
> index 2cb7b991ef..1cc08a3eb9 100644
> --- a/hw/acpi/aml-build.c
> +++ b/hw/acpi/aml-build.c
> @@ -1878,48 +1878,64 @@ build_hdr:
> "FACP", tbl->len - fadt_start, f->rev, oem_id, oem_table_id);
> }
>
> +/*
> + * build_tpm2 - Build the TPM2 table as specified in table 7 of
> + * "TCG ACPI Specification; Family 1.2 and 2.0;
> + * Level 00 Revision 00.37, December 19, 2014"
> + * Note: the LASA and LAML fields are optional for TPM-2.0 (the above
> + * table does not mention them) but are needed at least for SeaBIOS.
> + * See the Acpi20TPM2 struct for the corresponding layout.
> + */
> void build_tpm2(GArray *table_data, BIOSLinker *linker, GArray *tcpalog)
> {
> - Acpi20TPM2 *tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> - unsigned log_addr_size = sizeof(tpm2_ptr->log_area_start_address);
> - unsigned log_addr_offset =
> - (char *)&tpm2_ptr->log_area_start_address - table_data->data;
> uint8_t start_method_params[12] = {};
> + unsigned log_addr_offset, tpm2_start;
> + uint64_t control_area_start_address;
> TPMIf *tpmif = tpm_find();
> + uint32_t start_method;
> + void *tpm2_ptr;
>
> - /* platform class */
> + tpm2_start = table_data->len;
> + tpm2_ptr = acpi_data_push(table_data, sizeof(AcpiTableHeader));
> +
> + /* Platform Class */
> build_append_int_noprefix(table_data, TPM2_ACPI_CLASS_CLIENT, 2);
> - /* reserved */
> + /* Reserved */
> build_append_int_noprefix(table_data, 0, 2);
> if (TPM_IS_TIS_ISA(tpmif) || TPM_IS_TIS_SYSBUS(tpmif)) {
> - /* address of control area */
> - build_append_int_noprefix(table_data, 0, 8);
> - /* start method */
> - build_append_int_noprefix(table_data, TPM2_START_METHOD_MMIO, 4);
> + control_area_start_address = 0;
> + start_method = TPM2_START_METHOD_MMIO;
> } else if (TPM_IS_CRB(tpmif)) {
> - build_append_int_noprefix(table_data, TPM_CRB_ADDR_CTRL, 8);
> - build_append_int_noprefix(table_data, TPM2_START_METHOD_CRB, 4);
> + control_area_start_address = TPM_CRB_ADDR_CTRL;
> + start_method = TPM2_START_METHOD_CRB;
> } else {
> - g_warn_if_reached();
> + g_assert_not_reached();
> }
> + /* Address of Control Area */
> + build_append_int_noprefix(table_data, control_area_start_address, 8);
> + /* Start Method */
> + build_append_int_noprefix(table_data, start_method, 4);
>
> - /* platform specific parameters */
> - g_array_append_vals(table_data, &start_method_params, 12);
> + /* Platform Specific Parameters */
> + g_array_append_vals(table_data, &start_method_params,
> + ARRAY_SIZE(start_method_params));
>
> - /* log area minimum length */
> + /* Log Area Minimum Length */
> build_append_int_noprefix(table_data, TPM_LOG_AREA_MINIMUM_SIZE, 4);
>
> acpi_data_push(tcpalog, TPM_LOG_AREA_MINIMUM_SIZE);
> bios_linker_loader_alloc(linker, ACPI_BUILD_TPMLOG_FILE, tcpalog, 1,
> false);
>
> - /* log area start address to be filled by Guest linker */
> + log_addr_offset = table_data->len;
> +
> + /* Log Area Start Address to be filled by Guest linker */
> build_append_int_noprefix(table_data, 0, 8);
> bios_linker_loader_add_pointer(linker, ACPI_BUILD_TABLE_FILE,
> - log_addr_offset, log_addr_size,
> + log_addr_offset, 8,
> ACPI_BUILD_TPMLOG_FILE, 0);
> build_header(linker, table_data,
> - (void *)tpm2_ptr, "TPM2", sizeof(*tpm2_ptr), 4, NULL, NULL);
> + tpm2_ptr, "TPM2", table_data->len - tpm2_start, 4, NULL, NULL);
> }
>
> /* ACPI 5.0: 6.4.3.8.2 Serial Bus Connection Descriptors */
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-06-22 12:52 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-19 14:18 [PATCH v6 0/3] vTPM/aarch64 ACPI support Eric Auger
2020-06-19 14:18 ` [PATCH v6 1/3] acpi: Some build_tpm2() code reshape Eric Auger
2020-06-19 15:07 ` Stefan Berger
2020-06-19 15:34 ` Auger Eric
2020-06-19 16:09 ` Stefan Berger
2020-06-19 16:14 ` Auger Eric
2020-06-22 12:51 ` Igor Mammedov
2020-06-19 14:18 ` [PATCH v6 2/3] arm/acpi: Add the TPM2.0 device under the DSDT Eric Auger
2020-06-22 12:48 ` Igor Mammedov
2020-06-19 14:18 ` [PATCH v6 3/3] docs/specs/tpm: ACPI boot now supported for TPM/ARM Eric Auger
2020-06-19 16:10 ` Stefan Berger
2020-06-22 12:47 ` Igor Mammedov
2020-06-19 15:13 ` [PATCH v6 0/3] vTPM/aarch64 ACPI support no-reply
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).