[{"id":3684010,"web_url":"http://patchwork.ozlabs.org/comment/3684010/","msgid":"<afHsSJlhvtjYCJ_e@fedora>","list_archive_url":null,"date":"2026-04-29T11:32:24","subject":"Re: [PATCH 6/6] tests: Add a TPM TIS I2C swtpm test","submitter":{"id":91136,"url":"http://patchwork.ozlabs.org/api/people/91136/","name":"Arun Menon","email":"armenon@redhat.com"},"content":"On Tue, Apr 28, 2026 at 01:07:18PM +0000, Stefan Berger wrote:\n> Add a test case testing the TPM TIS over I2C with swtpm.\n> \n> Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>\n> ---\n>  tests/qtest/meson.build              |  5 +-\n>  tests/qtest/tpm-tis-i2c-swtpm-test.c | 86 ++++++++++++++++++++++++++++\n>  tests/qtest/tpm-tis-i2c-util.c       | 38 ++++++++++++\n>  tests/qtest/tpm-tis-i2c-util.h       |  4 ++\n>  4 files changed, 131 insertions(+), 2 deletions(-)\n>  create mode 100644 tests/qtest/tpm-tis-i2c-swtpm-test.c\n> \n> diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build\n> index 823be192e7..1a94f20f7f 100644\n> --- a/tests/qtest/meson.build\n> +++ b/tests/qtest/meson.build\n> @@ -241,7 +241,7 @@ qtests_arm = \\\n>    (config_all_devices.has_key('CONFIG_ASPEED_SOC') ? qtests_aspeed : []) + \\\n>    (config_all_devices.has_key('CONFIG_NPCM7XX') ? qtests_npcm7xx : []) + \\\n>    (config_all_devices.has_key('CONFIG_GENERIC_LOADER') ? ['hexloader-test'] : []) + \\\n> -  (config_all_devices.has_key('CONFIG_TPM_TIS_I2C') ? ['tpm-tis-i2c-test'] : []) + \\\n> +  (config_all_devices.has_key('CONFIG_TPM_TIS_I2C') ? ['tpm-tis-i2c-test', 'tpm-tis-i2c-swtpm-test'] : []) + \\\n>    (config_all_devices.has_key('CONFIG_VEXPRESS') ? ['test-arm-mptimer'] : []) + \\\n>    (config_all_devices.has_key('CONFIG_MICROBIT') ? ['microbit-test'] : []) + \\\n>    (config_all_devices.has_key('CONFIG_STM32L4X5_SOC') ? qtests_stm32l4x5 : []) + \\\n> @@ -260,7 +260,7 @@ qtests_aarch64 = \\\n>    (config_all_devices.has_key('CONFIG_XLNX_VERSAL') ? ['xlnx-canfd-test', 'xlnx-versal-trng-test'] : []) + \\\n>    (config_all_devices.has_key('CONFIG_RASPI') ? ['bcm2835-dma-test', 'bcm2835-i2c-test'] : []) +  \\\n>    (config_all_accel.has_key('CONFIG_TCG') and                                            \\\n> -   config_all_devices.has_key('CONFIG_TPM_TIS_I2C') ? ['tpm-tis-i2c-test'] : []) + \\\n> +   config_all_devices.has_key('CONFIG_TPM_TIS_I2C') ? ['tpm-tis-i2c-test', 'tpm-tis-i2c-swtpm-test'] : []) + \\\n>    (config_all_devices.has_key('CONFIG_ASPEED_SOC') ? qtests_aspeed64 : []) + \\\n>    (config_all_devices.has_key('CONFIG_NPCM8XX') ? qtests_npcm8xx : []) + \\\n>    (config_all_devices.has_key('CONFIG_IOMMU_TESTDEV') and\n> @@ -398,6 +398,7 @@ qtests = {\n>    'tpm-tis-swtpm-test': [io, tpmemu_files, 'tpm-tis-util.c'],\n>    'tpm-tis-test': [io, tpmemu_files, 'tpm-tis-util.c'],\n>    'tpm-tis-i2c-test': [io, tpmemu_files, 'tpm-tis-i2c-util.c', 'qtest_aspeed.c'],\n> +  'tpm-tis-i2c-swtpm-test': [io, tpmemu_files, 'tpm-tis-i2c-util.c', 'qtest_aspeed.c'],\n>    'tpm-tis-device-swtpm-test': [io, tpmemu_files, 'tpm-tis-util.c'],\n>    'tpm-tis-device-test': [io, tpmemu_files, 'tpm-tis-util.c'],\n>    'virtio-net-failover': test_migration_files,\n> diff --git a/tests/qtest/tpm-tis-i2c-swtpm-test.c b/tests/qtest/tpm-tis-i2c-swtpm-test.c\n> new file mode 100644\n> index 0000000000..54a84251f8\n> --- /dev/null\n> +++ b/tests/qtest/tpm-tis-i2c-swtpm-test.c\n> @@ -0,0 +1,86 @@\n> +/*\n> + * SPDX-License-Identifier: GPL-2.0-or-later\n> + *\n> + * QTest testcase for TPM TIS over I2C talking to external swtpm\n> + *\n> + * Copyright (c) 2018, 2026 IBM Corporation\n> + *  with parts borrowed from migration-test.c that is:\n> + *     Copyright (c) 2016-2018 Red Hat, Inc. and/or its affiliates\n> + *\n> + * Authors:\n> + *   Stefan Berger <stefanb@linux.ibm.com>\n> + *\n> + */\n> +\n> +#include \"qemu/osdep.h\"\n> +\n> +#include \"libqtest.h\"\n> +#include \"qemu/module.h\"\n> +#include \"tpm-tests.h\"\n> +#include \"tpm-tis-i2c-util.h\"\n> +#include \"qtest_aspeed.h\"\n> +\n> +typedef struct TestState {\n> +    char *src_tpm_path;\n> +    char *dst_tpm_path;\n> +    char *uri;\n> +    const char *machine_options;\n> +    char *ifmodel;\n> +} TestState;\n> +\n> +static void tpm_tis_i2c_swtpm_test(const void *data)\n> +{\n> +    const TestState *ts = data;\n> +\n> +    aspeed_i2c_restart();\n> +\n> +    tpm_test_swtpm_test(ts->src_tpm_path, tpm_tis_i2c_transfer,\n> +                        ts->ifmodel, ts->machine_options);\n> +}\n> +\n> +static void tpm_tis_swtpm_migration_test(const void *data)\n> +{\n> +    const TestState *ts = data;\n> +\n> +    aspeed_i2c_restart();\n> +\n> +    tpm_test_swtpm_migration_test(ts->src_tpm_path, ts->dst_tpm_path,\n> +                                  ts->uri, tpm_tis_i2c_transfer,\n> +                                  ts->ifmodel, ts->machine_options);\n> +}\n> +\n> +\n> +int main(int argc, char **argv)\n> +{\n> +    int ret;\n> +    TestState ts;\n> +\n> +    ts.src_tpm_path = g_dir_make_tmp(\"qemu-tpm-tis-i2c-swtpm-test.XXXXXX\",\n> +                                     NULL);\n> +    ts.dst_tpm_path = g_dir_make_tmp(\"qemu-tpm-tis-i2c-swtpm-test.XXXXXX\",\n> +                                     NULL);\n> +    ts.uri = g_strdup_printf(\"unix:%s/migsocket\", ts.src_tpm_path);\n> +    ts.machine_options = \"-machine rainier-bmc -accel tcg\";\n> +    ts.ifmodel = g_strdup_printf(\n> +                            \"tpm-tis-i2c,bus=aspeed.i2c.bus.%d,address=0x%x\",\n> +                            I2C_DEV_BUS_NUM, I2C_SLAVE_ADDR);\n> +\n> +    module_call_init(MODULE_INIT_QOM);\n> +    g_test_init(&argc, &argv, NULL);\n> +\n> +    aspeed_bus_addr = ast2600_i2c_calc_bus_addr(I2C_DEV_BUS_NUM);\n> +\n> +    qtest_add_data_func(\"/tpm/tis-i2c-swtpm/test\", &ts, tpm_tis_i2c_swtpm_test);\n> +    qtest_add_data_func(\"/tpm/tis-i2c-swtpm-migration/test\", &ts,\n> +                        tpm_tis_swtpm_migration_test);\n> +    ret = g_test_run();\n> +\n> +    tpm_util_rmdir(ts.dst_tpm_path);\n> +    g_free(ts.dst_tpm_path);\n> +    tpm_util_rmdir(ts.src_tpm_path);\n> +    g_free(ts.src_tpm_path);\n> +    g_free(ts.uri);\n> +    g_free(ts.ifmodel);\n> +\n> +    return ret;\n> +}\n> diff --git a/tests/qtest/tpm-tis-i2c-util.c b/tests/qtest/tpm-tis-i2c-util.c\n> index 6e724a4a47..c73420ec5b 100644\n> --- a/tests/qtest/tpm-tis-i2c-util.c\n> +++ b/tests/qtest/tpm-tis-i2c-util.c\n> @@ -15,6 +15,7 @@\n>  #include \"libqtest-single.h\"\n>  #include \"qtest_aspeed.h\"\n>  #include \"tpm-tis-i2c-util.h\"\n> +#include \"tpm-emu.h\"\n>  \n>  uint32_t aspeed_bus_addr;\n>  \n> @@ -62,3 +63,40 @@ void tpm_tis_i2c_writel(QTestState *s, uint8_t locty, uint8_t reg, uint32_t v)\n>      }\n>      aspeed_i2c_writel(s, aspeed_bus_addr, I2C_SLAVE_ADDR, reg, v);\n>  }\n> +\n> +void tpm_tis_i2c_transfer(QTestState *s,\n> +                          const unsigned char *req, size_t req_size,\n> +                          unsigned char *rsp, size_t rsp_size)\n> +{\n> +    uint32_t sts;\n> +    size_t i;\n> +\n> +    /* request use of locality 0 */\n> +    tpm_tis_i2c_writeb(s, 0, TPM_I2C_REG_ACCESS, TPM_TIS_ACCESS_REQUEST_USE);\n> +\n> +    tpm_tis_i2c_writel(s, 0, TPM_I2C_REG_STS, TPM_TIS_STS_COMMAND_READY);\n> +\n> +    /* transmit command */\n> +    for (i = 0; i < req_size; i++) {\n> +        tpm_tis_i2c_writeb(s, 0, TPM_I2C_REG_DATA_FIFO, req[i]);\n> +    }\n> +\n> +    /* start processing */\n> +    tpm_tis_i2c_writeb(s, 0, TPM_I2C_REG_STS, TPM_TIS_STS_TPM_GO);\n> +\n> +    uint64_t end_time = g_get_monotonic_time() + 50 * G_TIME_SPAN_SECOND;\n> +    do {\n> +        sts = tpm_tis_i2c_readl(s, 0, TPM_I2C_REG_STS);\n> +        if ((sts & TPM_TIS_STS_DATA_AVAILABLE) != 0) {\n> +            break;\n> +        }\n> +    } while (g_get_monotonic_time() < end_time);\n> +\n> +    /* read response */\n> +    for (i = 0; i < rsp_size; i++) {\n> +        rsp[i] = tpm_tis_i2c_readb(s, 0, TPM_I2C_REG_DATA_FIFO);\n> +    }\n> +    /* relinquish use of locality 0 */\n> +    tpm_tis_i2c_writeb(s, 0,\n> +                       TPM_I2C_REG_ACCESS, TPM_TIS_ACCESS_ACTIVE_LOCALITY);\n> +}\n> diff --git a/tests/qtest/tpm-tis-i2c-util.h b/tests/qtest/tpm-tis-i2c-util.h\n> index 3289545f61..499bf4964a 100644\n> --- a/tests/qtest/tpm-tis-i2c-util.h\n> +++ b/tests/qtest/tpm-tis-i2c-util.h\n> @@ -27,4 +27,8 @@ uint32_t tpm_tis_i2c_readl(QTestState *s, uint8_t locty, uint8_t reg);\n>  void tpm_tis_i2c_writeb(QTestState *s, uint8_t locty, uint8_t reg, uint8_t v);\n>  void tpm_tis_i2c_writel(QTestState *s, uint8_t locty, uint8_t reg, uint32_t v);\n>  \n> +void tpm_tis_i2c_transfer(QTestState *s,\n> +                          const unsigned char *req, size_t req_size,\n> +                          unsigned char *rsp, size_t rsp_size);\n> +\n>  #endif /* TESTS_TPM_TIS_I2C_UTIL_H */\n> -- \n> 2.43.0\n> \n\nReviewed-by: Arun Menon <armenon@redhat.com>\n\nRegards,\nArun Menon","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=GWMK39uc;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=google header.b=di0wuQ7J;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5FXx0wtmz1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 21:33:05 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wI39s-0004iP-Mb; Wed, 29 Apr 2026 07:32:53 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <armenon@redhat.com>)\n id 1wI39j-0004ga-Ok\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 07:32:41 -0400","from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <armenon@redhat.com>)\n id 1wI39f-0000jC-RH\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 07:32:37 -0400","from mail-pl1-f198.google.com (mail-pl1-f198.google.com\n [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-36-w0zHImdnPFuWCTSlGlTrOg-1; Wed, 29 Apr 2026 07:32:31 -0400","by mail-pl1-f198.google.com with SMTP id\n d9443c01a7336-2b24308165dso178893095ad.1\n for <qemu-devel@nongnu.org>; Wed, 29 Apr 2026 04:32:31 -0700 (PDT)","from fedora ([49.36.106.198]) by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2b98893f132sm20046805ad.49.2026.04.29.04.32.28\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 29 Apr 2026 04:32:29 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777462355;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n in-reply-to:in-reply-to:references:references;\n bh=WEfpl/T+syi3v38UyNihVZXbXMtDsLRzVNxbEldEB5E=;\n b=GWMK39uc0K+LhEigPTIjN2GxF0CVFOe9y9CyaECrD98HiTJIFp8hzbzJcI9lx9lYE4htF5\n MCl0MPR86uNcZVnOx2dJDzpvXYGfOo+5sh7vY510JhuD+3RCZ4bofBARLXS24Me8QIuVEG\n TUWk5D5SCcnqZUU7nbrD4jeAMC9ruaw=","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=redhat.com; s=google; t=1777462350; x=1778067150; darn=nongnu.org;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;\n bh=WEfpl/T+syi3v38UyNihVZXbXMtDsLRzVNxbEldEB5E=;\n b=di0wuQ7JyNVeQoFn8nXJgO8LA+ZyHIWmpz13p7YoJ61BrXUj5QErtEX2DVOvBfp34o\n BBgF5fBQnt9Xq2QoZMXqQUZWZpuxpw3oLkMy2ecVbN9ndUHYQ4Ir3ZoqM0wMvtJs6NBN\n Ojj3QDeUMwXLYZHZ1aHxToqZ/MYJbt09guLbnFNT1r+vDYQUeoRZrjZXOBUosXRlmody\n FeDc2RfRGgR1jOhRIqTpKwwaxh7ajaqy7KYk/KfDjweqheQSWmoqzIqZHzSaYGSS8RIz\n IBUJcCUvDiZHY4zpWnd+pS1mmRII6NEKdshDK4pCFGt3Iq66LySNjVnrBkJ7JBQ8O5NI\n SjiQ=="],"X-MC-Unique":"w0zHImdnPFuWCTSlGlTrOg-1","X-Mimecast-MFC-AGG-ID":"w0zHImdnPFuWCTSlGlTrOg_1777462350","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777462350; x=1778067150;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=WEfpl/T+syi3v38UyNihVZXbXMtDsLRzVNxbEldEB5E=;\n b=VZtxPczr/ZlyHgsCWjidhLLRVLXMkgATh/ncSowTXzmQfYqdF+vPO5xq6kMi0a3iyg\n ohc6c1UL8vqe2tiSiR/ZR9NVGxG1he7Y1wXNvhy1CRMnVnKQHMjoa7tqf238FqCZTrCa\n BJXOwh8nNT86Q0F0LtLWBPuqrGr4Hrt3oGnwB236ecD5GJKxBqMNg3Hoj18cZwnF+xC8\n O/mA78N58CXspb69EccOi8RAbpJ+q+cqBBv1ZvhSN9oajuaELoPfkjBMiP/xD52/O9OK\n WAINzE6eNkh0uu2i/TnuoitoLKQ7dtPEL9MRrS5vS6yPAkszru/swC3Ug0p30GKTJtRv\n cWnA==","X-Gm-Message-State":"AOJu0YzQTUx8ytBw7NGynR/qSCm1YXHCPgOiCKAcvXMvSipSwTRHov7Y\n VB1jCR9YKKZnDK/a157NwSaZrcYBEvZWUsmHBgHM5t1XB2mFEBGyBunShHdmvVmBK4sXifsLapS\n eK+DIKvHgur29jad5w77DNcNzHduM9jm1BmjwKUaOtJQBkIZ0YyeIaIfJ","X-Gm-Gg":"AeBDieuAoEBAQd1RWCNkhohG9E/bLZKj4XKdVeBMocS8XvAAr2Qu/T7rCxLojGAz7pS\n eM69y05ToNR4F71+Z0l8zOj/94H0sHPq4q592VgORy1y6SXs5+bG0ZewdXJD2VWl/Y0zB5jJMSx\n QT4JRCjWIZf/PaAGhjL0DYlLdrnpW3mC8nkLUht6RyqA6C2gNw+o6ZM3fdnhYBxcLaRS2iXrXtm\n nrn90PK0LkiopJuiiGJGZmeha7pqbdHWj9JAW52MGieCJ2r+DuDN3ErurLP4Z4EgqIrKdcFUOuH\n 081tyjeDnj/2Vku802MmtfupcUcGE4GC5K+DH+zv3ywqtsV8cOKio5cOWAXtFVwaSIxIjgrE3v9\n nvRV62BNgyl6uVvDOOT6H68g=","X-Received":["by 2002:a17:903:2ac5:b0:2b7:abc0:3bd7 with SMTP id\n d9443c01a7336-2b97c3fe759mr72552375ad.9.1777462350383;\n Wed, 29 Apr 2026 04:32:30 -0700 (PDT)","by 2002:a17:903:2ac5:b0:2b7:abc0:3bd7 with SMTP id\n d9443c01a7336-2b97c3fe759mr72551875ad.9.1777462349809;\n Wed, 29 Apr 2026 04:32:29 -0700 (PDT)"],"Date":"Wed, 29 Apr 2026 17:02:24 +0530","From":"Arun Menon <armenon@redhat.com>","To":"Stefan Berger <stefanb@linux.ibm.com>","Cc":"qemu-devel@nongnu.org, marcandre.lureau@redhat.com","Subject":"Re: [PATCH 6/6] tests: Add a TPM TIS I2C swtpm test","Message-ID":"<afHsSJlhvtjYCJ_e@fedora>","References":"<20260428130718.1325177-1-stefanb@linux.ibm.com>\n <20260428130718.1325177-7-stefanb@linux.ibm.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20260428130718.1325177-7-stefanb@linux.ibm.com>","Received-SPF":"pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]