From nobody Sun Mar 22 14:11:53 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1773928429; cv=none; d=zohomail.com; s=zohoarc; b=hvhj8+HQRY7MUhlgnuB2w4MUu3tiI6B+diKJ628I63n5RwAXZd42xL0gS+tRslLAELPgDAGUnamSUAFBIeh2gGWGJ1wyx3OqxjqENLxiCoeODhAe24V6DcbcOMGTngoEccsDy9iLmDebBzOfZVGpTemAYzTB7cDPZRtQcrfpy8o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773928429; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=c7XFCbg+RalMNcf1QfRP5PRTwEgFZvtOws8lguSobZs=; b=KYmvmmVmhDeO11YUo4mdjwpn1ERuDSnpOTcPNpV+Y4mJostX/VB4XOSoyl4QQjaFfi/5WX3ipOT6DtQq7vmOpr3d6BAnitCavHiPvw/hYhN1pgCaCa+5+LfmJ/vubnLDa0CIu6T1jFVINCd2tg1G0yKu0Hd3YtDjGee1IUmkRdo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773928429450386.2675226187364; Thu, 19 Mar 2026 06:53:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Doi-0005Sa-57; Thu, 19 Mar 2026 09:53:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dof-0005MA-HJ for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:37 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dod-0000so-BL for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:37 -0400 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-628-uWBfVolGPracFgcyREiRjw-1; Thu, 19 Mar 2026 09:53:33 -0400 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2aecfe69196so8769875ad.1 for ; Thu, 19 Mar 2026 06:53:29 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e6216c5sm77287025ad.73.2026.03.19.06.53.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 06:53:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773928414; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=c7XFCbg+RalMNcf1QfRP5PRTwEgFZvtOws8lguSobZs=; b=Dp7zh5ZhYxZbhgBqEeXkcLlk6FvluvxuwVQ3cTtfr5NnFV4kEqRIRH69FSS5t+u9oMbJ6H AxspkrkCs/zHQmzJEB0q1AFbWA5/h2oFchwDYTJltyNQliA3kGgoDJva9aiG+X8Fy/DEfj AEBWymKHCt9Wj9XglW0A7fgdkSoUqU8= X-MC-Unique: uWBfVolGPracFgcyREiRjw-1 X-Mimecast-MFC-AGG-ID: uWBfVolGPracFgcyREiRjw_1773928409 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773928408; x=1774533208; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=c7XFCbg+RalMNcf1QfRP5PRTwEgFZvtOws8lguSobZs=; b=FzryI2b/GO96CYYu6Bt9gRzEDxIZpn4m4heXdu3Xh/MtP0kIHsXpZvcI2qFIIsKaQl qhS3vpHRwOgk8OiGzbbgpIlwqWfClbaaueQVdiSUIcWEH139vjvwI1Hj//sapiJ9Yqjh GtN0xzmAtWWqUNbs6ZcYnyZpf73bQFWHhnBi+DkrOeYTRewP45VC8q24guX7eQrgf5F9 taiQWIHpbCj+6dIjvGp6CZevMB9Vev5pHSf0z22/sT9OmqUwxdTUktM2uL/5+Awcum6C HPSTKxgG0bFn5lE8CN+5aH7YT8WHFDmDsqZgPLSZDifxkn39BuV0/NE5aZAywjVCEcEt x4jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773928408; x=1774533208; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=c7XFCbg+RalMNcf1QfRP5PRTwEgFZvtOws8lguSobZs=; b=e1ts0ZUejlYVMj4hM6+naowU6RD/G88f9iAA6NWcBYZhCIbummuVflp8n/uPQZNLoI 6tzCiy6BBqsrCW7+XSpUZYD9zuZNdGgWIrlWckxNGS3B3nypEE/mSBNV3aM2FNxpgs6T RKv//2zCH8vb+SHEqRHX7j/Sn1+VDtPm18DXHnL3frQI0urrq6CutEe4fOrMGoIKGD9i d68vgnuANBZ6QcKo+f1GW+EYfp0CzLbz14d0+n8Dlv0Vs8e3xhOHMSpL07g6ILmSA1x3 F2tbhlpsdzNXw5YKRufuH8jpanxgD8SKMOxYSzNoyKiWEAVHUxKo/b7RkVX+nPkxE27m sIEw== X-Gm-Message-State: AOJu0Yxj4x+qvG6xIjHK/8V5FjmZGfovKiEY6KaKP/mTwSvZ2LW3w21J d9ff7t0kTzfSmlwyefYGSB4oBaDGsOoyxtQ+7RRHsVTxZFOJ93okXwuyf/68T6ORdkRqmlFIyK5 KoWnPNR7dJJgjlJSvPyDq6HGDsIgcC47P5wL68MPszFLX0Go5Vme7GTciDDve7zOmVGvDGEU7Hm rHfycQZFcipzVJ5aLDQLxLx13/Udi9Kdv/Hi0tuf8= X-Gm-Gg: ATEYQzzMwftEl/kNOi/tQabyExe8jXXbVQD73O5D2thczl+ZVXpRVUTHi0vV+/2jmVc CQI3SSH/IE3XCIL6dmV6nBqorB69urv5WRKHIaV3z/uYqBzLf8DtkqJi03+tH2WEHDXdp9uC10F UgOTQfqbMAv+Sv27UKMyRsUfZWu1kGd5dmjgGf3Lh24DjprrtLv6E2HY+Hj3BmOxScJh0b3VPoU 9bAc4CCfYxJwfPO+1wWqD/F4FqFTAGy9kuTkfzt5sMxL+hTprRmULJvOKulfDLN3JPX1jI9xK9D c3fJrTRts5jEbzi9mBQAnPOkpvw17Yi8k+uaM+P7OjZlAF0Nn9YGtrNwsr4ERTdbtocsSY8Od8L SswW1/OOLJBtEwwLRh63kBDTq/wbuFhk+iJPPU8/qeaxQEW+4rb6y+sfEHhFlaw== X-Received: by 2002:a17:902:f705:b0:2b0:5d60:7f3f with SMTP id d9443c01a7336-2b06e35b4demr74891405ad.16.1773928408548; Thu, 19 Mar 2026 06:53:28 -0700 (PDT) X-Received: by 2002:a17:902:f705:b0:2b0:5d60:7f3f with SMTP id d9443c01a7336-2b06e35b4demr74890995ad.16.1773928407949; Thu, 19 Mar 2026 06:53:27 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Marcel Apfelbaum , Laurent Vivier , Zhao Liu , "Michael S. Tsirkin" , Stefan Berger , marcandre.lureau@redhat.com, Fabiano Rosas , Paolo Bonzini , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Arun Menon , Stefan Berger Subject: [RFC v2 1/7] hw/tpm: Add TPM CRB chunking fields Date: Thu, 19 Mar 2026 19:23:10 +0530 Message-ID: <20260319135316.37412-2-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319135316.37412-1-armenon@redhat.com> References: <20260319135316.37412-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1773928431788158500 Content-Type: text/plain; charset="utf-8" - Add new fields to the CRB Interface Identifier and the CRB Control Start registers. - CRB_CTRL_START now has 2 new settings, that can be toggled using the nextChunk and crbRspRetry bits. - CapCRBChunk bit (10) was Reserved1 previously. The field is reused in this revision of the specification. - Refer to section 6.4.2.2 of [1] [1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific= -Platform-TPM-Profile-for-TPM-2p0-v1p07_rc1_121225.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger --- hw/tpm/tpm_crb.c | 3 +++ include/hw/acpi/tpm.h | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 8723536f93..0a1c7ecdc6 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -59,6 +59,7 @@ DECLARE_INSTANCE_CHECKER(CRBState, CRB, #define CRB_INTF_CAP_FIFO_NOT_SUPPORTED 0b0 #define CRB_INTF_CAP_CRB_SUPPORTED 0b1 #define CRB_INTF_IF_SELECTOR_CRB 0b1 +#define CRB_INTF_CAP_CRB_CHUNK 0b1 =20 #define CRB_CTRL_CMD_SIZE (TPM_CRB_ADDR_SIZE - A_CRB_DATA_BUFFER) =20 @@ -262,6 +263,8 @@ static void tpm_crb_reset(void *dev) CapCRB, CRB_INTF_CAP_CRB_SUPPORTED); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, InterfaceSelector, CRB_INTF_IF_SELECTOR_CRB); + ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, + CapCRBChunk, CRB_INTF_CAP_CRB_CHUNK); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID, RID, 0b0000); ARRAY_FIELD_DP32(s->regs, CRB_INTF_ID2, diff --git a/include/hw/acpi/tpm.h b/include/hw/acpi/tpm.h index d2bf6637c5..03d452d2b5 100644 --- a/include/hw/acpi/tpm.h +++ b/include/hw/acpi/tpm.h @@ -149,7 +149,7 @@ REG32(CRB_INTF_ID, 0x30) FIELD(CRB_INTF_ID, InterfaceVersion, 4, 4) FIELD(CRB_INTF_ID, CapLocality, 8, 1) FIELD(CRB_INTF_ID, CapCRBIdleBypass, 9, 1) - FIELD(CRB_INTF_ID, Reserved1, 10, 1) + FIELD(CRB_INTF_ID, CapCRBChunk, 10, 1) FIELD(CRB_INTF_ID, CapDataXferSizeSupport, 11, 2) FIELD(CRB_INTF_ID, CapFIFO, 13, 1) FIELD(CRB_INTF_ID, CapCRB, 14, 1) @@ -168,6 +168,9 @@ REG32(CRB_CTRL_STS, 0x44) FIELD(CRB_CTRL_STS, tpmIdle, 1, 1) REG32(CRB_CTRL_CANCEL, 0x48) REG32(CRB_CTRL_START, 0x4C) + FIELD(CRB_CTRL_START, invoke, 0, 1) + FIELD(CRB_CTRL_START, crbRspRetry, 1, 1) + FIELD(CRB_CTRL_START, nextChunk, 2, 1) REG32(CRB_INT_ENABLED, 0x50) REG32(CRB_INT_STS, 0x54) REG32(CRB_CTRL_CMD_SIZE, 0x58) --=20 2.53.0 From nobody Sun Mar 22 14:11:53 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1773928491; cv=none; d=zohomail.com; s=zohoarc; b=HfUiJlIFuzBdDY50k/aFAXoKU+tTueTFoKe2YoSpZQWnfkxi1EYu9VG/HziagO9d7MbGDrZ8oF+Q8iLXsmQBFOWr4rDpc5eEfM73I0blYkYzsLXIMzUcZkT+e1sZBeA1kCYB/jGL3Bwf4snHbb0YWVO00ocpGTxb2k1+MplKerA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773928491; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aDofQv4vt201Zh/k4snhVYsy/sQVoI5UURNb8/LcQl8=; b=UCDmzTxUYQlpiJpCNCnBb5UGdSIaeDqDOIJkJOpewX9Jk7oKqfZBZROjT0fOZQJSUbvSUKx8RW7XW5BilEZxWuwGV+2IaM5xoJJar/xeHceRgvqhg01eXh/mTrBpKNBX8f/hI6G1DNqjtmC1X6P2rzjPksbQUsLqNide9WlYPOs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773928491079516.681155422917; Thu, 19 Mar 2026 06:54:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Doo-0005cm-VJ; Thu, 19 Mar 2026 09:53:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dog-0005PT-QU for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:39 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dof-0000w8-BV for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:38 -0400 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-609-TSK_zKBnPIOvRxdggoI1gg-1; Thu, 19 Mar 2026 09:53:35 -0400 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b061bf1a2dso7834935ad.1 for ; Thu, 19 Mar 2026 06:53:35 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e6216c5sm77287025ad.73.2026.03.19.06.53.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 06:53:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773928416; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aDofQv4vt201Zh/k4snhVYsy/sQVoI5UURNb8/LcQl8=; b=GQnodTA9hNwD1YhCImcc42qVocpnj9w/rMDvIsmYVexrqb0IFGUU7xoxKFWsvONZU5EWS7 zZ1mKFS/Wks5IEWld9NYSj2lrjlWzgcwce15lbO+ovhpJp1IDh6iWgMURcxvkJ+5mf20ty IDz3XNSeirfSIMeSSt0ULLPw90sDZLM= X-MC-Unique: TSK_zKBnPIOvRxdggoI1gg-1 X-Mimecast-MFC-AGG-ID: TSK_zKBnPIOvRxdggoI1gg_1773928414 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773928414; x=1774533214; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aDofQv4vt201Zh/k4snhVYsy/sQVoI5UURNb8/LcQl8=; b=cDCXbqyK+WWAqTwee/gz+WvGogi5U0FG849qQ7LlMn3gROb9mNKutauhu7dVR5q/SG bZLa86as8FmP7DNh9TqDbuygCPM++nuM0j6EFxQ5V+Dj0XgxGrL4ICftA7Oso8UfvtxE Xg6r/Urd6vWwOxNxtzMRFQoaERfPcX8cJAymlOwr0fBEyQVrRr5wZ9VOoeBq55Qnusj6 FJFbfprrxjuEvlTv1r1COhOy/tLYNq73cIzSb5/sv12c+KfqXvqNl5J93ZqvnkgdaVNd sJ5fHybcHVQmP45WrmoG53/1yuCZnH4OiRN9viSsIUWRvdTQsFfn+76fobvnoSrzn4gz 24fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773928414; x=1774533214; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=aDofQv4vt201Zh/k4snhVYsy/sQVoI5UURNb8/LcQl8=; b=rXYh0fdJcY0Eow1kbvjlG5IiRo9vsl5dPQpJ+NwNkN9M+tsok7Cg5D0qq/iPT+M2Qy ANRfRapiqYUuhEpuKRCORk8oAYR3XxUCD4DEbQ3A9gZTY4j0bvgFE35B5gwEXDcvqKso oV8mB+c9mOZQvIOwEypoIINlySkgffHjzG0rbZNGgPfSg48EFKINrRqm1yKJPXnF8sY9 E2kxusMqX8/CcMzG4SeCbxAaQql+ptLiDPkx/gKaxx3roNzrdaeS/z+hU0bsKmTeUuZC QE8DZaMioSfK41Ko844cGHVe8Aojvpqfu0gpLB0l1cSTrAHCpplrEvDMpWrbKHMgWM7N aRaw== X-Gm-Message-State: AOJu0YxN+v9Pq39ae41czVHdLsFrvqLKkrK0kToCqXqIyflOrUyQv6iH yfMohfLJFe8Jre19jZhgdaT8z0PCVPeGiBQwyzKbaCyBR+37tOtNlQ4q0txEoBf6wz6Vu+4j21m WKb/s4AR+mro6GP0F8YaNvcb2riRw6YwUPQWhDF74fbunm6OjOunMbacFQ3dxkcEMQLDuv0LOi7 +X2h4/CGll7zSioqaTPYA8qRK5DwIAkFU4xQT9QPQ= X-Gm-Gg: ATEYQzxabJ0AFy/pESTZdkFx5j0ormET1xRnfU9/Vvz7JOB4IUarTHiVeH0W+V5HTEx zdpYhagizrq6BFFtp6PIvowSWeMt6d1z3rF4b+sXv4lksiqn29QpWDznQ4fQt+vZVf/GVXqqmjG hefkaihySdku29mBNdPZrEJEbfw2pWvDkyl23g3YQ4BWUDtiXA9Qtdtc0TWxzujEiNT7HE6gK6K cXxCboXSg+SgqV2vPOwf8gt0woj+hucwA89g6N+meX8xNZjfO6OWCyk7WD04SdGll6VsQp+vp3H NSIU1D4Wh63spzTil3yN7CpeP41FygHdDA7A9AWy0X4mAmnQqTScACfNy1eLHHTgrCigrfILFuX K5nAurt1x0J7dNk/nUvyCm0eh4hp3vLhoAuEqUQt8gkEMwYCyoxrkHaydX6Bxdg== X-Received: by 2002:a17:903:1ac8:b0:2ae:471b:e55 with SMTP id d9443c01a7336-2b06e3c5c83mr75583295ad.30.1773928414122; Thu, 19 Mar 2026 06:53:34 -0700 (PDT) X-Received: by 2002:a17:903:1ac8:b0:2ae:471b:e55 with SMTP id d9443c01a7336-2b06e3c5c83mr75582925ad.30.1773928413659; Thu, 19 Mar 2026 06:53:33 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Marcel Apfelbaum , Laurent Vivier , Zhao Liu , "Michael S. Tsirkin" , Stefan Berger , marcandre.lureau@redhat.com, Fabiano Rosas , Paolo Bonzini , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Arun Menon , Stefan Berger Subject: [RFC v2 2/7] hw/tpm: Refactor CRB_CTRL_START register access Date: Thu, 19 Mar 2026 19:23:11 +0530 Message-ID: <20260319135316.37412-3-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319135316.37412-1-armenon@redhat.com> References: <20260319135316.37412-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1773928493382158500 Content-Type: text/plain; charset="utf-8" Replace manual bitwise operations with ARRAY_FIELD_DP32 macros No functional changes. Signed-off-by: Arun Menon Reviewed-by: Stefan Berger --- hw/tpm/tpm_crb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 0a1c7ecdc6..bc55908786 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -145,7 +145,7 @@ static void tpm_crb_mmio_write(void *opaque, hwaddr add= r, tpm_crb_get_active_locty(s) =3D=3D locty) { void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); =20 - s->regs[R_CRB_CTRL_START] |=3D CRB_START_INVOKE; + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, invoke, 1); s->cmd =3D (TPMBackendCmd) { .in =3D mem, .in_len =3D MIN(tpm_cmd_get_size(mem), s->be_buffer_size), @@ -194,7 +194,7 @@ static void tpm_crb_request_completed(TPMIf *ti, int re= t) { CRBState *s =3D CRB(ti); =20 - s->regs[R_CRB_CTRL_START] &=3D ~CRB_START_INVOKE; + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, invoke, 0); if (ret !=3D 0) { ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); /* fatal error */ --=20 2.53.0 From nobody Sun Mar 22 14:11:53 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1773928472; cv=none; d=zohomail.com; s=zohoarc; b=ldxSU7TgzKVz7qexE9keSjsXMT7+6r7LHz97a38LY3z2qefH2WF/jlnUih3i7rqct3yCP17PT8/oRrGhaeVQVFtWBB7dyLFn/QSyUDr2xbZcCN32YOmcHdTy/H6XhIGMyDjDhbodYc8O1817r8WBLCvV1XCUhs9598YvX0qgBKQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773928472; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Nn9cnFzQCohdSXh/nDWLLWO6UQoCzNVf3KGkEpV9fas=; b=LridnAOFTRfG3H2hSgfLPpykYQgpEcGOvQNNUuy0MPbheMsj7fMdDRwpKSBdDDu7CkRGtYWRLJtV5HajA+tRaOiWEyvI+tLjQoRHUPVbjKgWJ1V98i27EhBRLo40jfufkE3Dy/PzF/mn3l0oxL4kXW+5gsxq5HtINEicW4MW29g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773928472442131.29887709623176; Thu, 19 Mar 2026 06:54:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Dp3-0005pu-5e; Thu, 19 Mar 2026 09:54:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dom-0005d7-FC for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:46 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dok-00010i-DU for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:43 -0400 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-139-16uOYFV4N3qCej-GzOE_Xw-1; Thu, 19 Mar 2026 09:53:40 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b059511554so66493815ad.0 for ; Thu, 19 Mar 2026 06:53:39 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e6216c5sm77287025ad.73.2026.03.19.06.53.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 06:53:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773928421; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Nn9cnFzQCohdSXh/nDWLLWO6UQoCzNVf3KGkEpV9fas=; b=DWL9MzO55FSxJrGmoKCE3dieLR4DZ7lrHcnQgsAunuEaTMaTdI/6UVIAEiKm2YPxzaOHXo 5vqrky9GC4Cix6em2Mi5beD50B6FG+AKm7Iepnqq1f+aJQnguFDneBsGQtn2n9I6WS51PO m+515/VASvisbL/rWmDFA5mQkiug3OQ= X-MC-Unique: 16uOYFV4N3qCej-GzOE_Xw-1 X-Mimecast-MFC-AGG-ID: 16uOYFV4N3qCej-GzOE_Xw_1773928419 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773928418; x=1774533218; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Nn9cnFzQCohdSXh/nDWLLWO6UQoCzNVf3KGkEpV9fas=; b=XEsYE5ci5S3VKiXocNaVplDpN/ZsPhpkL/Y1aQsXHZ1ePPOisu99FHdBLo37sdkA0c pTvlnZo5vEuFmVqmNQq7PD3WdLP5qlR0tNDrFcGc3qFgF9/8asQYtfoDP5LI9H3JJQD8 9JVLMsD0P12SEa1XY3sQpap93sdLL8dZJ7YBkAfBmjEWr/pUBcmmQlA+qy9WyN5u0XVU +RHXs2wz7aBFGzbwEJDFO3aREb7xepb24O66duvJxdVLkI8YLvvP7AP25Wg2NlIUuHxu Gukx4qacIFk8KTRhPiak2q8YFVhaLNOnFDZCSdrJbq0jWzSbF54p76EBY3o8XnbZhiCj u2BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773928418; x=1774533218; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Nn9cnFzQCohdSXh/nDWLLWO6UQoCzNVf3KGkEpV9fas=; b=nh9/0jIi691t+IK/GD5fSj0tROlhR9FT6pqkKrwA50NgW1FvdQr+ZObbgF6WhDc/Bu jHRgDdj7/+VZYfPK038FdcKfB7G4PAWncvtYTAMv0ypZ8UXDY7FgTSBHJpb2mPo/iJ+5 waY/KIKkqC1U6ahFK5kAK3CTQDTZugjsDaB2MtjX3i9P6D8nqWEzc1cCHn431cEX2SMT pgMGOBAS9Ja3kdJIU+CzlAccTJf0eLJdzKjpsCdcw6hXWhH1hBjdsux67qg/1a4tDU+/ HecYE5BrNVQXrVkrQW3BBEd3IagiX4XpOz4ggvnlkumiaxslQbArtdpc0dIqxVCvOlYo Qgdw== X-Gm-Message-State: AOJu0YxMCQjYtp/2MRdyqHQe1GBCTOIzWyI7jMbP1lkTohkuteZZ5SeY qltGyITQxKf+rGic2Ykkis+KfLkQ1819jsLPb0R2gGhy/ore+CLvLMTMe1IXgb+x26S4LODOclu Zp6j0tEr4w3pfToCxOJ+MWpMQwzbF6MqqOYBpD+RGzDKCPtIQiBlxRCH6E8bkoN0VFtpo/GpLPw VBh2wxBqstyaXQM4BK1qkc4qfBrU/sxpebTVW58R0= X-Gm-Gg: ATEYQzyO2yLKA4kLdzBAYObuW4HdHMXIdtHrthf/g7YujVXjppoju7+OkB/hsCNDqwd 3Hh6ojiufHudntuyrvVJas1lIqgu7B86+bcleAnbAlfSCKp6Zl9+kFfjjaoBZXpoNaOfbr0k8dJ Lbwo3jH1hfwYCwcrxLtBChBGF7BKsSPVbDJx+Tc2Tm88SWfZere6IlfKn9OGR1HxKkr3S7vLZfq 1T2/QwRV8FfwQd4wL5L9qcaCfizBJ8oxk3lPeeBrDEW+8bDAfDgby0r0Cz+vm0F9q5zPaqczH6N 0Kt9+nmQMpA8iODS/0/MyCAwY26hH+dzUI4LaStXAnlGqpWTqu/wo4MQ3Z9+a2+w99MxHKWPjWi xMwpKD8N5GuZQhtbZY4mCMPlCHF7Gri007hj5auNGbOZyAqMDi2QsNrzh/9BGIQ== X-Received: by 2002:a17:903:1a0e:b0:2ae:59d3:27f8 with SMTP id d9443c01a7336-2b06e364b30mr72596275ad.19.1773928418632; Thu, 19 Mar 2026 06:53:38 -0700 (PDT) X-Received: by 2002:a17:903:1a0e:b0:2ae:59d3:27f8 with SMTP id d9443c01a7336-2b06e364b30mr72595915ad.19.1773928418109; Thu, 19 Mar 2026 06:53:38 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Marcel Apfelbaum , Laurent Vivier , Zhao Liu , "Michael S. Tsirkin" , Stefan Berger , marcandre.lureau@redhat.com, Fabiano Rosas , Paolo Bonzini , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Arun Menon Subject: [RFC v2 3/7] hw/tpm: Add internal buffer state for chunking Date: Thu, 19 Mar 2026 19:23:12 +0530 Message-ID: <20260319135316.37412-4-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319135316.37412-1-armenon@redhat.com> References: <20260319135316.37412-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1773928474056154100 Content-Type: text/plain; charset="utf-8" - Introduce GByteArray buffers to hold the command request and response data during chunked TPM CRB transactions. - Add helper function to clean them. Signed-off-by: Arun Menon --- hw/tpm/tpm_crb.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index bc55908786..5ea1a4a970 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -38,10 +38,13 @@ struct CRBState { TPMBackend *tpmbe; TPMBackendCmd cmd; uint32_t regs[TPM_CRB_R_MAX]; + size_t be_buffer_size; MemoryRegion mmio; MemoryRegion cmdmem; =20 - size_t be_buffer_size; + GByteArray *command_buffer; + GByteArray *response_buffer; + size_t response_offset; =20 bool ppi_enabled; TPMPPI ppi; @@ -85,6 +88,13 @@ enum crb_cancel { =20 #define TPM_CRB_NO_LOCALITY 0xff =20 +static void tpm_crb_clear_internal_buffers(CRBState *s) +{ + g_byte_array_set_size(s->response_buffer, 0); + g_byte_array_set_size(s->command_buffer, 0); + s->response_offset =3D 0; +} + static uint64_t tpm_crb_mmio_read(void *opaque, hwaddr addr, unsigned size) { @@ -134,9 +144,11 @@ static void tpm_crb_mmio_write(void *opaque, hwaddr ad= dr, } break; case A_CRB_CTRL_CANCEL: - if (val =3D=3D CRB_CANCEL_INVOKE && - s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) { - tpm_backend_cancel_cmd(s->tpmbe); + if (val =3D=3D CRB_CANCEL_INVOKE) { + if (s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) { + tpm_backend_cancel_cmd(s->tpmbe); + } + tpm_crb_clear_internal_buffers(s); } break; case A_CRB_CTRL_START: @@ -240,6 +252,7 @@ static void tpm_crb_reset(void *dev) tpm_ppi_reset(&s->ppi); } tpm_backend_reset(s->tpmbe); + tpm_crb_clear_internal_buffers(s); =20 memset(s->regs, 0, sizeof(s->regs)); =20 @@ -306,6 +319,9 @@ static void tpm_crb_realize(DeviceState *dev, Error **e= rrp) memory_region_add_subregion(get_system_memory(), TPM_CRB_ADDR_BASE + sizeof(s->regs), &s->cmdmem); =20 + s->command_buffer =3D g_byte_array_new(); + s->response_buffer =3D g_byte_array_new(); + if (s->ppi_enabled) { tpm_ppi_init(&s->ppi, get_system_memory(), TPM_PPI_ADDR_BASE, OBJECT(s)); --=20 2.53.0 From nobody Sun Mar 22 14:11:53 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1773928463; cv=none; d=zohomail.com; s=zohoarc; b=Bcld+4kTwFDWVZJhJqhKVZ7P6TcyxGoi+1KMICqmb7GXiujg3aCUmccF3a5BSxJ3WYygAPwB24GAhQRYzZIJkkyVteFfyyqZNSso8e2EGA+uzzxp0r61tXvysDa2ITE/+Zj2spNqG7GLjEWNzGXz+CCOIU4phlUrfseE2zrKCxE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773928463; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hf079Y/m3kO1LPhEzEnZCyPp1ng+shFS8YzdsaWuWYs=; b=hXBBaKLoToca7Y4VjatfiPLbnK5r3xuVhhWyIpAnTPzc0pDC6VneitRG5e+SV8IW2/A0zDT8FzK7Yfgg4EYMHtKjcHD0hT1jQa+0A+vQ7S04XjoONRiRttTtW+L0hf3gOzY+SSxtEPz0PBHKB3T1jgQmUYn6nZR2DYDSn8elQSQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773928463698349.3124018191247; Thu, 19 Mar 2026 06:54:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Doz-0005ol-TV; Thu, 19 Mar 2026 09:53:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dor-0005im-Lw for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:50 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dop-000194-Ou for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:49 -0400 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-136-6BVCks1WMRycIYO7L9m-eA-1; Thu, 19 Mar 2026 09:53:46 -0400 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b068299665so15664165ad.3 for ; Thu, 19 Mar 2026 06:53:44 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e6216c5sm77287025ad.73.2026.03.19.06.53.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 06:53:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773928427; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hf079Y/m3kO1LPhEzEnZCyPp1ng+shFS8YzdsaWuWYs=; b=jT/Rgm3XV3+EYW7GVeYkGpmAR4r7mohdHQtR2YgPcGQgmn9a2ViiOkHGsEXfHhHH2AvtdP 5E+wiLpo+w3bLCNQ6NLqhEv0auTBogVjSYafDDtuhyX6O0IXWjf8cQEIkEDHMsGbhols1V tlDuZ55vcGuVc3eLO0ps0iVH/Ccz+IM= X-MC-Unique: 6BVCks1WMRycIYO7L9m-eA-1 X-Mimecast-MFC-AGG-ID: 6BVCks1WMRycIYO7L9m-eA_1773928424 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773928424; x=1774533224; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hf079Y/m3kO1LPhEzEnZCyPp1ng+shFS8YzdsaWuWYs=; b=Jox8tKynQH9zB5/2VzS25/QfIAJrVrQOyjW9Jz1c2JMgo5MWxHO6UAtMMGK2KCDFC9 J7o87pnrHKgl4/jbA39YKE9xWFEl0Yo+vv/hFfk6eoZZYI+6wwJQ3/VxlP1oOAxbvfkd wcZpQFTyagdVQh+IAkgLW8EoJF1eNXGFI39pJlfKOfIxci98EJ5Nxh1rYavSVq/9HfLS 3PCcdLhYu+oM9633qlbuDwb6UxC84qQUGLTsFdXuD2y8uPls7oAlHQBNutcVKCsm9aLR r1D1ccwEzfhPc98uQ86wceb7M7M3y5DgEF44PX8L1tOHOXzpo/ZbP6u4P6ecuF6b9ESH f5Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773928424; x=1774533224; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=hf079Y/m3kO1LPhEzEnZCyPp1ng+shFS8YzdsaWuWYs=; b=jnA3+oPXt7GS+ZfYLux5LjXfMlG84+goJkvFj1/NL4E0qnOM7RdamGwFJ84hu8YFUz SKjDdCwXGwDAlHZL4S7nVn9MwgRnsbLlFWQYfKmLWwhezQquIiHePtVeDOphRClysukO ObLaQjl3Kp5UoNxB8sYDKV02gnvFbstVUq/4/8LpKMYkTASO0ndS3unV66wFMG7VYyL4 anu0eyeUD+b562JPH+GwqxTBdeTDkgvTZp6ktqFflFpVTtISDWRP5QjxSMJoc8mfqGBu lxLd69HwIM611zq3rADLpQ7InjddOXUvTST1ugCGF+dDRTNbIktNkOaJhp7n4w1crRta yjOA== X-Gm-Message-State: AOJu0YwCpqF1KcXMAniQnyQOo02o8AOuWtCS8sPUosYEghgXhTJl5NMU D/PrF1I/UuHG7YQdczsc8qwwQsEbnuacWL306cRaSfBG+3EIrUxf9LvkckuxQ1gWewMiJxu7oP2 erduCT1fP/zrY+nmye+WaMFxobC0hvhVIO0fHZRkRnst7AnRgpoKx35c3IM9oEVJDJYVv+ix3vM bD6W6HYEMtZZU08B4MnMk9fxEcFF8fXA11HguanMw= X-Gm-Gg: ATEYQzxXzmhAYsxjxM2EmnAXTeZc2o99EoAqmBefm8CAjsGWJk1FYbYWiTHdsw8bZix MdIg1XZK2nFhvrI1SwIG/rSc7xX++YPEqjH+DhB2LpqUsURCZ9R2A491l+PT7MVFqXxiKcWWb7X QkTiOnKBrzDquSbwZ85Ouzms09sbzK9It8/rDO2j1bXjNKYMyVDi1yzYkaUvg3x3I+FVot2yiNB YckZ8RjeV983AprD2vb19S1POVtXvYzRKfOkuBQa7PITTnU4lwGhCABdFGWN598MZMO8uq0khSb pNU7TrbKpcpwiLNalIrjkFEfrNxwxSj8iwTKV9YLjI80jJg8Eg/ENB562+HC/TYMwns3IudA9vm ZaXdAPix5y097vZh1M57eN8uKQNkSXTdfDG+n3Ui/kJTt3Xobccbf88EzZGpNFA== X-Received: by 2002:a17:902:d4d2:b0:2ae:825b:49a5 with SMTP id d9443c01a7336-2b06e1fe6b0mr80211785ad.0.1773928423558; Thu, 19 Mar 2026 06:53:43 -0700 (PDT) X-Received: by 2002:a17:902:d4d2:b0:2ae:825b:49a5 with SMTP id d9443c01a7336-2b06e1fe6b0mr80211395ad.0.1773928422955; Thu, 19 Mar 2026 06:53:42 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Marcel Apfelbaum , Laurent Vivier , Zhao Liu , "Michael S. Tsirkin" , Stefan Berger , marcandre.lureau@redhat.com, Fabiano Rosas , Paolo Bonzini , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Arun Menon , Stefan Berger Subject: [RFC v2 4/7] hw/tpm: Implement TPM CRB chunking logic Date: Thu, 19 Mar 2026 19:23:13 +0530 Message-ID: <20260319135316.37412-5-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319135316.37412-1-armenon@redhat.com> References: <20260319135316.37412-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1773928466292154100 Content-Type: text/plain; charset="utf-8" - Add logic to populate internal TPM command request and response buffers and to toggle the control registers after each operation. - The chunk size is limited to CRB_CTRL_CMD_SIZE which is (TPM_CRB_ADDR_SIZE - A_CRB_DATA_BUFFER). This comes out as 3968 bytes (4096 - 128 or 0x1000 - 0x80), because 128 bytes are reserved for control and status registers. In other words, only 3968 bytes are available for the TPM data. - With this feature, guests can send commands larger than 3968 bytes. - Refer section 6.5.3.9 of [1] for implementation details. [1] https://trustedcomputinggroup.org/wp-content/uploads/PC-Client-Specific= -Platform-TPM-Profile-for-TPM-2p0-v1p07_rc1_121225.pdf Signed-off-by: Arun Menon Reviewed-by: Stefan Berger --- hw/tpm/tpm_crb.c | 148 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 132 insertions(+), 16 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 5ea1a4a970..e61c04aee0 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -17,6 +17,7 @@ #include "qemu/osdep.h" =20 #include "qemu/module.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "system/address-spaces.h" #include "hw/core/qdev-properties.h" @@ -65,6 +66,7 @@ DECLARE_INSTANCE_CHECKER(CRBState, CRB, #define CRB_INTF_CAP_CRB_CHUNK 0b1 =20 #define CRB_CTRL_CMD_SIZE (TPM_CRB_ADDR_SIZE - A_CRB_DATA_BUFFER) +#define TPM_HEADER_SIZE 10 =20 enum crb_loc_ctrl { CRB_LOC_CTRL_REQUEST_ACCESS =3D BIT(0), @@ -80,6 +82,8 @@ enum crb_ctrl_req { =20 enum crb_start { CRB_START_INVOKE =3D BIT(0), + CRB_START_RESP_RETRY =3D BIT(1), + CRB_START_NEXT_CHUNK =3D BIT(2), }; =20 enum crb_cancel { @@ -122,6 +126,68 @@ static uint8_t tpm_crb_get_active_locty(CRBState *s) return ARRAY_FIELD_EX32(s->regs, CRB_LOC_STATE, activeLocality); } =20 +static bool tpm_crb_append_command_request(CRBState *s) +{ + /* + * The linux guest writes the TPM command to the MMIO region in chunks. + * This function appends a chunk from the MMIO region to internal + * command_buffer. + */ + void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); + uint32_t to_copy =3D 0; + uint32_t total_request_size =3D 0; + + /* + * The initial call extracts the total TPM command size + * from its header. For the subsequent calls, the data already + * appended in the command_buffer is used to calculate the total + * size, as its header stays the same. + */ + if (s->command_buffer->len =3D=3D 0) { + total_request_size =3D tpm_cmd_get_size(mem); + if (total_request_size < TPM_HEADER_SIZE) { + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, invoke, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); + tpm_crb_clear_internal_buffers(s); + error_report("Command size '%d' less than TPM header size '%d'= ", + total_request_size, TPM_HEADER_SIZE); + return false; + } + } else { + total_request_size =3D tpm_cmd_get_size(s->command_buffer->data); + } + total_request_size =3D MIN(total_request_size, s->be_buffer_size); + + if (total_request_size > s->command_buffer->len) { + uint32_t remaining =3D total_request_size - s->command_buffer->len; + to_copy =3D MIN(remaining, CRB_CTRL_CMD_SIZE); + g_byte_array_append(s->command_buffer, (guint8 *)mem, to_copy); + } + return true; +} + +static void tpm_crb_fill_command_response(CRBState *s) +{ + /* + * Response from the tpm backend will be stored in the internal + * response_buffer. This function will serve that accumulated response + * to the linux guest in chunks by writing it back to MMIO region. + */ + void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); + uint32_t remaining =3D s->response_buffer->len - s->response_offset; + uint32_t to_copy =3D MIN(CRB_CTRL_CMD_SIZE, remaining); + + memcpy(mem, s->response_buffer->data + s->response_offset, to_copy); + + if (to_copy < CRB_CTRL_CMD_SIZE) { + memset((guint8 *)mem + to_copy, 0, CRB_CTRL_CMD_SIZE - to_copy); + } + + s->response_offset +=3D to_copy; + memory_region_set_dirty(&s->cmdmem, 0, CRB_CTRL_CMD_SIZE); +} + static void tpm_crb_mmio_write(void *opaque, hwaddr addr, uint64_t val, unsigned size) { @@ -152,20 +218,48 @@ static void tpm_crb_mmio_write(void *opaque, hwaddr a= ddr, } break; case A_CRB_CTRL_START: - if (val =3D=3D CRB_START_INVOKE && - !(s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE) && - tpm_crb_get_active_locty(s) =3D=3D locty) { - void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); - - ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, invoke, 1); - s->cmd =3D (TPMBackendCmd) { - .in =3D mem, - .in_len =3D MIN(tpm_cmd_get_size(mem), s->be_buffer_size), - .out =3D mem, - .out_len =3D s->be_buffer_size, - }; - - tpm_backend_deliver_request(s->tpmbe, &s->cmd); + if (tpm_crb_get_active_locty(s) !=3D locty) { + break; + } + if (val & CRB_START_INVOKE) { + if (!(s->regs[R_CRB_CTRL_START] & CRB_START_INVOKE)) { + if (!tpm_crb_append_command_request(s)) { + break; + } + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, invoke, 1); + g_byte_array_set_size(s->response_buffer, s->be_buffer_siz= e); + s->cmd =3D (TPMBackendCmd) { + .in =3D s->command_buffer->data, + .in_len =3D s->command_buffer->len, + .out =3D s->response_buffer->data, + .out_len =3D s->response_buffer->len, + }; + tpm_backend_deliver_request(s->tpmbe, &s->cmd); + } + } else if (val & CRB_START_NEXT_CHUNK) { + /* + * nextChunk is used both while sending and receiving data. + * To distinguish between the two, response_buffer is checked + * If it does not have data, then that means we have not yet + * sent the command to the tpm backend, and therefore call + * tpm_crb_append_command_request() + */ + if (s->response_buffer->len > 0 && + s->response_offset < s->response_buffer->len) { + tpm_crb_fill_command_response(s); + } else { + if (!tpm_crb_append_command_request(s)) { + break; + } + } + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); + } else if (val & CRB_START_RESP_RETRY) { + if (s->response_buffer->len > 0) { + s->response_offset =3D 0; + tpm_crb_fill_command_response(s); + } + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, crbRspRetry, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); } break; case A_CRB_LOC_CTRL: @@ -205,13 +299,36 @@ static const MemoryRegionOps tpm_crb_memory_ops =3D { static void tpm_crb_request_completed(TPMIf *ti, int ret) { CRBState *s =3D CRB(ti); + void *mem =3D memory_region_get_ram_ptr(&s->cmdmem); =20 ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, invoke, 0); if (ret !=3D 0) { ARRAY_FIELD_DP32(s->regs, CRB_CTRL_STS, tpmSts, 1); /* fatal error */ + tpm_crb_clear_internal_buffers(s); + } else { + uint32_t actual_resp_size =3D tpm_cmd_get_size(s->response_buffer-= >data); + uint32_t total_resp_size =3D MIN(actual_resp_size, s->be_buffer_si= ze); + g_byte_array_set_size(s->response_buffer, total_resp_size); + s->response_offset =3D 0; + + /* + * Send the first chunk. Subsequent chunks will be sent using + * tpm_crb_fill_command_response() + */ + uint32_t to_copy =3D MIN(CRB_CTRL_CMD_SIZE, s->response_buffer->le= n); + memcpy(mem, s->response_buffer->data, to_copy); + + if (to_copy < CRB_CTRL_CMD_SIZE) { + memset((guint8 *)mem + to_copy, 0, CRB_CTRL_CMD_SIZE - to_copy= ); + } + s->response_offset +=3D to_copy; } memory_region_set_dirty(&s->cmdmem, 0, CRB_CTRL_CMD_SIZE); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, invoke, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, nextChunk, 0); + ARRAY_FIELD_DP32(s->regs, CRB_CTRL_START, crbRspRetry, 0); + g_byte_array_set_size(s->command_buffer, 0); } =20 static enum TPMVersion tpm_crb_get_version(TPMIf *ti) @@ -288,8 +405,7 @@ static void tpm_crb_reset(void *dev) s->regs[R_CRB_CTRL_RSP_SIZE] =3D CRB_CTRL_CMD_SIZE; s->regs[R_CRB_CTRL_RSP_ADDR] =3D TPM_CRB_ADDR_BASE + A_CRB_DATA_BUFFER; =20 - s->be_buffer_size =3D MIN(tpm_backend_get_buffer_size(s->tpmbe), - CRB_CTRL_CMD_SIZE); + s->be_buffer_size =3D tpm_backend_get_buffer_size(s->tpmbe); =20 if (tpm_backend_startup_tpm(s->tpmbe, s->be_buffer_size) < 0) { exit(1); --=20 2.53.0 From nobody Sun Mar 22 14:11:53 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1773928496; cv=none; d=zohomail.com; s=zohoarc; b=mnSe8eOBZOxKB7ONptwW2RcPJdqERFHrLYuQGfaIhzWwG0KbnWUhQr1pfocsiCxbgz+fqZrqIx6ZhSkCDwGd9S72E5DUIcFC/1Um2APCACszG/1j7PQX4UOagtUrOA/wqd7TyG7HeMgPCsiiYLg5IwjT2+ktMqmHqZcioClTjIk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773928496; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gQPI6WkJx9rs4KYo3QAUSEyEpqdbt7RFH0oOqRA2y6E=; b=NnKFPUT/Au+Jt33ndP0ljhD2iAFVQbnPTB1aS51rIPQg/hHUIt8VpcuSW7y8xc2DJhec/7pv1oCgUMsNkdRcCLAYQ5jPEjYO4hECgF7G1+XDT1UfnTuJjePE9yZ8uESjAxNp6yorScyh1573O25h5tF7G+E22MZWTWwI32uHbCo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773928496683918.4941431998626; Thu, 19 Mar 2026 06:54:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Dpc-00069U-3R; Thu, 19 Mar 2026 09:54:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dou-0005nj-NU for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:53 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dot-0001Al-2Q for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:52 -0400 Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-588-PmSxEuzkPy6Nkr0fQlcpGg-1; Thu, 19 Mar 2026 09:53:49 -0400 Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2b064f043adso10987145ad.0 for ; Thu, 19 Mar 2026 06:53:49 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e6216c5sm77287025ad.73.2026.03.19.06.53.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 06:53:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773928430; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gQPI6WkJx9rs4KYo3QAUSEyEpqdbt7RFH0oOqRA2y6E=; b=RoJpWO7IQ3aYdSoZQzyO7w/ahEzRl7z4mZhSef/TbbkNMvY7IPWSw8c1059gp0ETt6UyUh e2lbzDd3aPYx8srkz/pVHYvtu+AAslSlbZ6wMqEjtEBvhv4DNoQxrqAW6tYpEGTYecX8C6 AUin8741KYO+PSVDcVR6YbLNxi7FwTA= X-MC-Unique: PmSxEuzkPy6Nkr0fQlcpGg-1 X-Mimecast-MFC-AGG-ID: PmSxEuzkPy6Nkr0fQlcpGg_1773928428 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773928428; x=1774533228; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gQPI6WkJx9rs4KYo3QAUSEyEpqdbt7RFH0oOqRA2y6E=; b=YiC5le898MdzhVk4aEXh4K+aILf8jsSjh6smUhsDd5SReLaLxvSGIym6SMQ4KmFcXP pxZpt9ENrbg0vMM0eFySCuxoJ7TfJ9xF4mPVNf+eqmOv2swFBqRZ5QANsVuJB3NWmlQE xNk3kDsnMYBJWmLi4AwU3WDRwqOhpraxHX0SYuQmMbRpAgYCdpZ/qKFBgblKXmAvA6/A tPhHrst+gbiqAw7YYtv+xF2PyZvIV4fvQ4osLT3YHFr1jf9B3/Ze5UWY4JeHH116iIta KWFjL3Bi5mv7Qdtl3EMuHaMd2CUswa5Bk903yXttJ7WyU+AK9SGUo8n9cXAcdHWwGWTc Nedw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773928428; x=1774533228; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=gQPI6WkJx9rs4KYo3QAUSEyEpqdbt7RFH0oOqRA2y6E=; b=elSFHvdiiKQv3vwLxmp8wl3XYHzYVOMfk0KHHPJQjxdR+cbSrxddp5bkJMZ1IqorP6 8Sq227eoENCULFIogjfgNaH1VHGHPoO75aea343e30QSRa7v9x/FbqDWOPFUACcSTVFS 2oXpeRoLxwRET4Xxvczaa7HZeZ9yEWfJm/zNc2hkPUTE4PqZKQptgJ9co41xm2xDbrUF N2z9JfgH4oBJ7nWGY2a/QJc3R6/WiyZnQFWEMI7L9kAItg7Z83ppNsVD2EJ2k5V/xhUw WTRgHz/o722JC44dplg0haC0/Uz7zr5vMxzp/V0wcpITy8LSvUnnVOFUZakJaRjhoLeW o2Vg== X-Gm-Message-State: AOJu0YxrpBETGQz1ems08Jdr5zRU71wGMMV/Ut/OJOmaMBpFttzk4vnF NC3+5MNfnaDDlIEuqgcWIJ1rkhbCbfI8l+WHQmLmIVtgclTbGZei+lFG8uOsTFm2ypOSuUrlOrH hjcDZyykwfjttqSk9CXY6plU+WVuzVIHaEe8o3PM7KCIrMpKpLzQDwav+qeE5gf6bLKHoZ5OH83 wp69lowjvYqRHWLuVjRLBLQ51lsrSylSiM1jrfo6E= X-Gm-Gg: ATEYQzxvjmmIOYmtjBeLN7Y0H4gErt9DTUV0DIKsB6hmSF40ieueF+NtkNaOJ6AyPPB 8eu8du1+qDxf04WHkLnTyaXSJNbN5ahyWHdmxUDe79b00P2bYnh7QlcR1a3r/on3Q9jL8YyWGzf AqnOecYiGckaNFRp0BXoCIgl7uR0wPHqE+xCyBK9zM6y22y5vRugjDYN0nMY4H58NvLaFBQG7s4 ABK90qTfqqfsCxn52IdRJbuVP2re7eTuuW02gXiIzXpdOZ/A9QYmCs4CGm1vnXse7qHMNkK54mX sG7JPhKHValTBUe+cfYnEyuLxYmhZ5QA+Bhg7twgVfgmbtD/4HYFS5pQA9w/CSgoW2oUDoYR0Ov K6UXPKHkklPgwDpmfZAMQEK+TWVDtXRwJBGQn8PTh0X2WnUBXktFo66c5eEZaIg== X-Received: by 2002:a17:902:ce12:b0:2b0:692d:78bd with SMTP id d9443c01a7336-2b06e4307aamr66616795ad.46.1773928427983; Thu, 19 Mar 2026 06:53:47 -0700 (PDT) X-Received: by 2002:a17:902:ce12:b0:2b0:692d:78bd with SMTP id d9443c01a7336-2b06e4307aamr66616415ad.46.1773928427488; Thu, 19 Mar 2026 06:53:47 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Marcel Apfelbaum , Laurent Vivier , Zhao Liu , "Michael S. Tsirkin" , Stefan Berger , marcandre.lureau@redhat.com, Fabiano Rosas , Paolo Bonzini , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Arun Menon Subject: [RFC v2 5/7] test/qtest: Add test for tpm crb chunking Date: Thu, 19 Mar 2026 19:23:14 +0530 Message-ID: <20260319135316.37412-6-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319135316.37412-1-armenon@redhat.com> References: <20260319135316.37412-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1773928497479158500 Content-Type: text/plain; charset="utf-8" - New test case added to the swtpm test. Data is written and read from the buffer in chunks. - The chunk size is dynamically calculated by reading the CRB_CTRL_CMD_SIZE address. This can be changed manually to test. - Add a helper function tpm_wait_till_bit_clear() Signed-off-by: Arun Menon --- tests/qtest/tpm-crb-swtpm-test.c | 10 +++ tests/qtest/tpm-util.c | 106 ++++++++++++++++++++++++++----- tests/qtest/tpm-util.h | 5 ++ 3 files changed, 106 insertions(+), 15 deletions(-) diff --git a/tests/qtest/tpm-crb-swtpm-test.c b/tests/qtest/tpm-crb-swtpm-t= est.c index ffeb1c396b..050c7b0c1f 100644 --- a/tests/qtest/tpm-crb-swtpm-test.c +++ b/tests/qtest/tpm-crb-swtpm-test.c @@ -33,6 +33,14 @@ static void tpm_crb_swtpm_test(const void *data) "tpm-crb", NULL); } =20 +static void tpm_crb_chunk_swtpm_test(const void *data) +{ + const TestState *ts =3D data; + + tpm_test_swtpm_test(ts->src_tpm_path, tpm_util_crb_chunk_transfer, + "tpm-crb", NULL); +} + static void tpm_crb_swtpm_migration_test(const void *data) { const TestState *ts =3D data; @@ -54,6 +62,8 @@ int main(int argc, char **argv) g_test_init(&argc, &argv, NULL); =20 qtest_add_data_func("/tpm/crb-swtpm/test", &ts, tpm_crb_swtpm_test); + qtest_add_data_func("/tpm/crb-chunk-swtpm/test", &ts, + tpm_crb_chunk_swtpm_test); qtest_add_data_func("/tpm/crb-swtpm-migration/test", &ts, tpm_crb_swtpm_migration_test); ret =3D g_test_run(); diff --git a/tests/qtest/tpm-util.c b/tests/qtest/tpm-util.c index 2cb2dd4796..dfc1fd70b7 100644 --- a/tests/qtest/tpm-util.c +++ b/tests/qtest/tpm-util.c @@ -14,16 +14,42 @@ =20 #include "qemu/osdep.h" #include +#include "system/memory.h" =20 #include "hw/acpi/tpm.h" #include "libqtest.h" #include "tpm-util.h" #include "qobject/qdict.h" =20 +#define CRB_ADDR_START (TPM_CRB_ADDR_BASE + A_CRB_CTRL_START) +#define CRB_CTRL_STS (TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS) +#define CRB_CTRL_CMD_SIZE (TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_SIZE) + +#define BIT_START_INVOKE (1 << 0) +#define BIT_RETRY_RESPONSE (1 << 1) +#define BIT_NEXT_CHUNK (1 << 2) + +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask) +{ + uint32_t sts; + uint64_t end_time =3D g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; + + while (true) { + sts =3D qtest_readl(s, addr); + if ((sts & mask) =3D=3D 0) { + break; + } + if (g_get_monotonic_time() >=3D end_time) { + break; + } + } +} + void tpm_util_crb_transfer(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size) { + uint32_t tpmSts; uint64_t caddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_L= ADDR); uint64_t raddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_A= DDR); =20 @@ -31,24 +57,74 @@ void tpm_util_crb_transfer(QTestState *s, =20 qtest_memwrite(s, caddr, req, req_size); =20 - uint32_t sts, start =3D 1; - uint64_t end_time =3D g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND; - qtest_writel(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START, start); - while (true) { - start =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START); - if ((start & 1) =3D=3D 0) { - break; + qtest_writel(s, CRB_ADDR_START, BIT_START_INVOKE); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, BIT_START_INVOKE); + + tpmSts =3D qtest_readl(s, CRB_CTRL_STS); + g_assert_cmpint(tpmSts & 1, =3D=3D, 0); + + qtest_memread(s, raddr, rsp, rsp_size); +} + +void tpm_util_crb_chunk_transfer(QTestState *s, + const unsigned char *req, size_t req_size, + unsigned char *rsp, size_t rsp_size) +{ + uint32_t tpmSts; + + uint64_t caddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_CMD_L= ADDR); + uint64_t raddr =3D qtest_readq(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_RSP_A= DDR); + uint32_t crb_ctrl_cmd_size =3D qtest_readl(s, CRB_CTRL_CMD_SIZE); + + size_t chunk_size =3D crb_ctrl_cmd_size; + + qtest_writeb(s, TPM_CRB_ADDR_BASE + A_CRB_LOC_CTRL, 1); + + for (size_t i =3D 0 ; i < req_size; i +=3D chunk_size) { + bool last_chunk =3D false; + size_t current_chunk_size =3D chunk_size ; + + if (i + chunk_size > req_size) { + last_chunk =3D true; + current_chunk_size =3D req_size - i; } - if (g_get_monotonic_time() >=3D end_time) { - break; + + qtest_memwrite(s, caddr, req + i, current_chunk_size); + + if (last_chunk) { + qtest_writel(s, CRB_ADDR_START , BIT_START_INVOKE); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, BIT_START_INVOKE); + } else { + qtest_writel(s, CRB_ADDR_START , BIT_NEXT_CHUNK); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, BIT_NEXT_CHUNK); } - }; - start =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_START); - g_assert_cmpint(start & 1, =3D=3D, 0); - sts =3D qtest_readl(s, TPM_CRB_ADDR_BASE + A_CRB_CTRL_STS); - g_assert_cmpint(sts & 1, =3D=3D, 0); + } + tpmSts =3D qtest_readl(s, CRB_CTRL_STS); + g_assert_cmpint(tpmSts & 1, =3D=3D, 0); =20 - qtest_memread(s, raddr, rsp, rsp_size); + /* + * Read response in chunks + */ + + unsigned char header[10]; + qtest_memread(s, raddr, header, sizeof(header)); + + uint32_t actual_response_size =3D ldl_be_p(&header[2]); + + if (actual_response_size > rsp_size) { + actual_response_size =3D rsp_size; + } + + for (size_t i =3D 0; i < actual_response_size; i +=3D chunk_size) { + size_t to_read =3D i + chunk_size > actual_response_size + ? actual_response_size - i + : chunk_size; + if (i > 0) { + qtest_writel(s, CRB_ADDR_START, BIT_NEXT_CHUNK); + tpm_wait_till_bit_clear(s, CRB_ADDR_START, BIT_NEXT_CHUNK); + } + qtest_memread(s, raddr, rsp + i, to_read); + } } =20 void tpm_util_startup(QTestState *s, tx_func *tx) diff --git a/tests/qtest/tpm-util.h b/tests/qtest/tpm-util.h index 0cb28dd6e5..681544e7d8 100644 --- a/tests/qtest/tpm-util.h +++ b/tests/qtest/tpm-util.h @@ -24,10 +24,15 @@ typedef void (tx_func)(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size); =20 +void tpm_wait_till_bit_clear(QTestState *s, uint64_t addr, uint32_t mask); void tpm_util_crb_transfer(QTestState *s, const unsigned char *req, size_t req_size, unsigned char *rsp, size_t rsp_size); =20 +void tpm_util_crb_chunk_transfer(QTestState *s, + const unsigned char *req, size_t req_size, + unsigned char *rsp, size_t rsp_size); + void tpm_util_startup(QTestState *s, tx_func *tx); void tpm_util_pcrextend(QTestState *s, tx_func *tx); void tpm_util_pcrread(QTestState *s, tx_func *tx, --=20 2.53.0 From nobody Sun Mar 22 14:11:53 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1773928504; cv=none; d=zohomail.com; s=zohoarc; b=ZmM8vITuZF226syRWNLCjQFcihz12tfpie0OlJ/2wKedC9stsTZmpktkBWNHPUzFmB1aUrziNopZhqnIhovjqUsI3Yq3otfXQAixmxnsfAEtDEr6aVWdg8ePBD839Q0GnkbSLyGaZMkH3R0msy5RsQnEGnqd3Z5G8aMW01Nj2/I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773928504; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=RCrFXcagDckZtx6RGogtV/lXhSBL8xu18Ng4LTBb39I=; b=ZrPSojjUu/8eny2bobUdt37wZXlPC2sL8pcfedKtnS6ZaI0ZoeO3YlslG6yckqA5CbeUksIDQn6mGKO1vItcdJCVQzC3YyktP4+NRp+uFKSoMrte17bfo//aQ6JdGsWCSHB7mPDCsmYJaFJ3Kxp97SLOSuTWujJK/O5sl1OPDGc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773928504457509.600744795928; Thu, 19 Mar 2026 06:55:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Dpa-00068A-SA; Thu, 19 Mar 2026 09:54:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dp0-0005pv-3P for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:59 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Doy-0001B3-CV for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:53:57 -0400 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-463-BCyx5lniNaa34uEGxr_CyQ-1; Thu, 19 Mar 2026 09:53:54 -0400 Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2b06b68783dso12016325ad.3 for ; Thu, 19 Mar 2026 06:53:53 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e6216c5sm77287025ad.73.2026.03.19.06.53.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 06:53:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773928435; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RCrFXcagDckZtx6RGogtV/lXhSBL8xu18Ng4LTBb39I=; b=cLJ8id6bhnhXYPoFpdxxJZyzDBziua41/58YzFJB+0S7euqIbFO1qSUDgUGVOBavJgoDrw PwyRU3M8FrQtTSk+l7xG6cwIZGW//Zr2PNJeOytHt4uUecQxWZDuDpTzW48jSG3BwKlOdP Mm/FzI5DIjocX4FYwg5LtMKkJkNS6hY= X-MC-Unique: BCyx5lniNaa34uEGxr_CyQ-1 X-Mimecast-MFC-AGG-ID: BCyx5lniNaa34uEGxr_CyQ_1773928433 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773928432; x=1774533232; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RCrFXcagDckZtx6RGogtV/lXhSBL8xu18Ng4LTBb39I=; b=BvB5VrfOAQPFj8KKErLUvTAcvs/WkNUbJhqeBulIBkVIQtfeEWWaKav1pyFbc+A1I5 C6C6NwDmx+14m9EGE8+PtS/8EUf7AlorMWlpeAZ6pt87bp7Jq3wou4Xmh400ww575GcR ntS7bKHF0b/HpgBTk/NVt3ro6qqv3KKTjII4Y5hv0QbNNmAVsVYgiXUZvZ0YeopbnvbI wDeFG5ljbPtSRttqWlAsYg9YzBfLV2ijPx7PugJR48bv7W/kk0pxD9B0LEpcSyvU2xVl T0tjj+/s/KvC3i+EN4s/gfw+DSIfbIwd50w5ODlqJ5VhGmkXKhVIaXhc1ZJfGAKeZiVP NmbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773928432; x=1774533232; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=RCrFXcagDckZtx6RGogtV/lXhSBL8xu18Ng4LTBb39I=; b=OHupn4LH/IETO/kz/RqMANSYh76tUXwC6HDLgOGohchWnextCPKNN2+Qv7m+u2vWx7 H3SVHa7Kp6+bRjvtVBVJaI06hIO9E+SptdyxfT8iwBVWSkaW1b6UR56g0Nl4aZIGwknd /lnC00Q1CQ9/Si9RwGbWm9cz+nFsTPlYE8D8u1nCV/SVR8jcvt30I9vAJrXIkcb0/dc/ 6pL0Hrhy3L0xcnJZFp5gIC6Wqii2mRUXqLXBi1kJC73tJ484G9USyC+Lich1hgB1IFuM hX6fP8Cg5XrYxVIM+0tQVedvt4vXnd870BLNdULX4RTt2peC673OEmkzdfUT5iRcCarC VEIw== X-Gm-Message-State: AOJu0Yye4EpoBUGinG2m6y1ppTF7VJKk8jtXUqh/M+8bkcM7ipGbvi0i SXB1cAfKc/ZJRug/7O7Gk8ENpqYFJZDL1eJiJtLQ6vDvwMXrQQD07id/2xsB5WRsDfFAWE51CUu rJqZ2qsS/n35RApJInb8jPJv2riKMnYaoXKx5ikwOBxKP3n2WK1/Ag7kUdbmVsksVzbPw63L792 vqsfSWHtmyfgiCtBDFy5dBQF382y9bXeAKgAOhMDc= X-Gm-Gg: ATEYQzxXlFe6XycSYNDBTIq1q5I74g1G7wW6RxZdkiUA2O7TUV3mXWpDGBXFm0YacCO tHST+EM0sNFJAqvCowYl62XHvWYrRmdwtnVCdo3aEy4EHTkZ//ju9jhl0nzTJ6wmw8SB/niF9Ur 3Ix0dwEHQVJIQjd7Ssl2nbtFxvIgdnHMEzFV8HFVQS9H9Y8JfioCsxULYXgaTN2UuTgIhp7rHth AIlO9ODbOp2/p73VD9SJfaVbse422oR8GmiMm0/G24iRCPK7+ZfxqUKTDJi2zbbgktgAyTHBFTa ZhWwDpBiUNPdkQGacRelLld5Limkx8bhfdmGkfSKknONVCqwdFr89gOy6YUtYXeedtt4EyCd73T 6c5FXvUN8GXo1Mkpn8YzwSpfcHvvnkkow+3PFYYXR9vV5Kb4HCWwPpvHw5b8Gdg== X-Received: by 2002:a17:903:1a88:b0:2b0:4f82:74d0 with SMTP id d9443c01a7336-2b06e43d36cmr80690665ad.46.1773928432590; Thu, 19 Mar 2026 06:53:52 -0700 (PDT) X-Received: by 2002:a17:903:1a88:b0:2b0:4f82:74d0 with SMTP id d9443c01a7336-2b06e43d36cmr80690285ad.46.1773928432005; Thu, 19 Mar 2026 06:53:52 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Marcel Apfelbaum , Laurent Vivier , Zhao Liu , "Michael S. Tsirkin" , Stefan Berger , marcandre.lureau@redhat.com, Fabiano Rosas , Paolo Bonzini , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Arun Menon Subject: [RFC v2 6/7] hw/tpm: Add support for VM migration with TPM CRB chunking Date: Thu, 19 Mar 2026 19:23:15 +0530 Message-ID: <20260319135316.37412-7-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319135316.37412-1-armenon@redhat.com> References: <20260319135316.37412-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1773928505508158500 Content-Type: text/plain; charset="utf-8" - Add subsection in VMState for TPM CRB with the newly introduced command and response buffers, along with a needed callback, so that newer QEMU only sends the buffers if it is necessary. - Add hw_compat blocker because the feature is only supported for machine type 11.0 and higher. - If the VM has no pending chunked TPM commands in the internal buffers during a VM migration, or if the machine type does not support newly introduced buffers, then the needed callback will return false, as it checks the hw_compat blocker and thus the subsection will not be sent to the destination host. - Since the original command and response buffers are of type GByteArray, they are serialized in pre-save hook before sending them to the destination host and then restored back into original buffer using the post-load hook. Signed-off-by: Arun Menon --- hw/core/machine.c | 1 + hw/tpm/tpm_crb.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index 6cf0e2f404..fcd6043c99 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -40,6 +40,7 @@ =20 GlobalProperty hw_compat_10_2[] =3D { { "scsi-block", "migrate-pr", "off" }, + { "tpm-crb", "migrate-buffers", "off"}, }; const size_t hw_compat_10_2_len =3D G_N_ELEMENTS(hw_compat_10_2); =20 diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index e61c04aee0..9ce342fe8a 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -33,6 +33,17 @@ #include "trace.h" #include "qom/object.h" =20 +/* command and response buffers; part of VM state when migrating */ +typedef struct TPMCRBMigState { + uint32_t cmd_size; + uint8_t *cmd_tmp; + + uint32_t rsp_size; + uint8_t *rsp_tmp; + + uint32_t rsp_offset; +} TPMCRBMigState; + struct CRBState { DeviceState parent_obj; =20 @@ -49,6 +60,9 @@ struct CRBState { =20 bool ppi_enabled; TPMPPI ppi; + + bool migrate_buffers; + TPMCRBMigState mig; }; typedef struct CRBState CRBState; =20 @@ -347,18 +361,118 @@ static int tpm_crb_pre_save(void *opaque) return 0; } =20 +static bool tpm_crb_chunk_needed(void *opaque) +{ + CRBState *s =3D opaque; + + if (!s->migrate_buffers) { + return false; + } + + return ((s->command_buffer && s->command_buffer->len > 0) || + (s->response_buffer && s->response_buffer->len > 0)); +} + +static int tpm_crb_chunk_pre_save(void *opaque) +{ + CRBState *s =3D opaque; + + if (s->command_buffer) { + s->mig.cmd_size =3D s->command_buffer->len; + s->mig.cmd_tmp =3D s->command_buffer->data; + } else { + s->mig.cmd_tmp =3D NULL; + s->mig.cmd_size =3D 0; + } + + if (s->response_buffer) { + s->mig.rsp_size =3D s->response_buffer->len; + s->mig.rsp_tmp =3D s->response_buffer->data; + } else { + s->mig.rsp_tmp =3D NULL; + s->mig.rsp_size =3D 0; + } + s->mig.rsp_offset =3D (uint32_t)s->response_offset; + return 0; +} + +static bool tpm_crb_chunk_post_load(void *opaque, int version_id, Error **= errp) +{ + CRBState *s =3D opaque; + + if (s->mig.cmd_size > s->be_buffer_size || + s->mig.rsp_size > s->be_buffer_size || + s->mig.rsp_offset > s->mig.rsp_size) { + error_setg(errp, + "tpm-crb-chunk: incoming buffer %u, exceeds limits %zu " + "or offset %u exceeds size %u", + s->mig.cmd_size, s->be_buffer_size, + s->mig.rsp_offset, s->mig.rsp_size); + g_free(s->mig.cmd_tmp); + s->mig.cmd_tmp =3D NULL; + g_free(s->mig.rsp_tmp); + s->mig.rsp_tmp =3D NULL; + return false; + } + + if (s->mig.cmd_tmp) { + if (s->command_buffer) { + g_byte_array_unref(s->command_buffer); + } + s->command_buffer =3D g_byte_array_new_take(s->mig.cmd_tmp, + s->mig.cmd_size); + s->mig.cmd_tmp =3D NULL; + } else { + if (s->command_buffer) { + g_byte_array_set_size(s->command_buffer, 0); + } + } + if (s->mig.rsp_tmp) { + if (s->response_buffer) { + g_byte_array_unref(s->response_buffer); + } + s->response_buffer =3D g_byte_array_new_take(s->mig.rsp_tmp, + s->mig.rsp_size); + s->mig.rsp_tmp =3D NULL; + } + return true; +} + +static const VMStateDescription vmstate_tpm_crb_chunk =3D { + .name =3D "tpm-crb/chunk", + .version_id =3D 1, + .needed =3D tpm_crb_chunk_needed, + .pre_save =3D tpm_crb_chunk_pre_save, + .post_load_errp =3D tpm_crb_chunk_post_load, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(mig.cmd_size, CRBState), + VMSTATE_VBUFFER_ALLOC_UINT32(mig.cmd_tmp, CRBState, 0, NULL, + mig.cmd_size), + VMSTATE_UINT32(mig.rsp_size, CRBState), + VMSTATE_VBUFFER_ALLOC_UINT32(mig.rsp_tmp, CRBState, 0, NULL, + mig.rsp_size), + VMSTATE_UINT32(mig.rsp_offset, CRBState), + VMSTATE_END_OF_LIST() + } +}; + static const VMStateDescription vmstate_tpm_crb =3D { .name =3D "tpm-crb", .pre_save =3D tpm_crb_pre_save, .fields =3D (const VMStateField[]) { VMSTATE_UINT32_ARRAY(regs, CRBState, TPM_CRB_R_MAX), VMSTATE_END_OF_LIST(), + }, + .subsections =3D (const VMStateDescription * const []) { + &vmstate_tpm_crb_chunk, + NULL, } }; =20 static const Property tpm_crb_properties[] =3D { DEFINE_PROP_TPMBE("tpmdev", CRBState, tpmbe), DEFINE_PROP_BOOL("ppi", CRBState, ppi_enabled, true), + DEFINE_PROP_BOOL("migrate-buffers", CRBState, migrate_buffers, true), }; =20 static void tpm_crb_reset(void *dev) --=20 2.53.0 From nobody Sun Mar 22 14:11:53 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1773928508; cv=none; d=zohomail.com; s=zohoarc; b=e1tB/91SyN50eowZ+W0RVKIj19jqccx+dobx0EyOKRObjjEIooFNrPzMZlp8SE99f43YhMq/HQyKlNLJ54ECS4F9EZSngAUzlyN8A6Soe/teknMX//BKt3VP4Vd3S83z1i2RZCAl8eIh6yhAJIrybFvoFdPqcY8tef+tqjNhiBQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773928508; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kxfUlYvRhQQX4MoWCMkv8SkJv+/DpoVuRBZT3qErhg0=; b=haHhEbCPhNJ5Lky9IEWlBWDJvmWuNuCJr2Jq9sZibXiilfFlsasL2+bkGhzWMTaNoFI84wlIRlw2gQAEWu0qymuTZemDd+nOh+Gd7Ugpa8ItP2CkvCYHfnL0QQceF8yRotyuaPrdrLdLHQXl5vfV5c1TBcLZuNVb0b/bYpbpJIg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773928508504482.9368877395127; Thu, 19 Mar 2026 06:55:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w3Dpn-0006OR-GP; Thu, 19 Mar 2026 09:54:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dp4-0005rx-VG for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:54:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w3Dp2-0001Bb-At for qemu-devel@nongnu.org; Thu, 19 Mar 2026 09:54:01 -0400 Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-328-W3oSUbCiMnaymjgZiS4lCg-1; Thu, 19 Mar 2026 09:53:58 -0400 Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b059ab124dso17492035ad.1 for ; Thu, 19 Mar 2026 06:53:58 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.104.12]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b06e6216c5sm77287025ad.73.2026.03.19.06.53.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Mar 2026 06:53:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773928439; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kxfUlYvRhQQX4MoWCMkv8SkJv+/DpoVuRBZT3qErhg0=; b=KTFPQcIt4nXo4FUWz6783fMrCIA+hNjgI9Gv/8Ocpk/9vO9aL4E0gUEGJdI3+T2VzGNWjX hzgcyW8u1wuXBT4YcucNlF3RFv/8ahjHGfLHRT14zbo8JoupuQIdyI9wxqZFpQshbqTlPv MLAuR7jU/LHM8LfzLIxk+4t3ize1R6Y= X-MC-Unique: W3oSUbCiMnaymjgZiS4lCg-1 X-Mimecast-MFC-AGG-ID: W3oSUbCiMnaymjgZiS4lCg_1773928437 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773928437; x=1774533237; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kxfUlYvRhQQX4MoWCMkv8SkJv+/DpoVuRBZT3qErhg0=; b=jX+aLMwQnLqWUmPMsfi+6oR3GnT9CbRAafoIT05//0IkISHJVqdSw7hL5Z2wlDfBi0 6MVeyWW5s0zeBbKWG4AAw+3l3Q3H9RgVJnlmy54SesOvmW0WpFgA/KVtsSZDJBrzZkiD ErrKJ5c5nkmPRjeQMpKcVnVWp69Fev0VG+2e69qHDQGMy5l2fbAo+nHDm+0xa+UOL0lh dJzXHpuc6Kx/oCznKJwoEms0J7AuiWlNWF722G0ReluT1DtlNZZvKdSoIuYCe4Ep0s82 JFjEVvmk7TxvFzvT0Rc2bLbWR3Z2f+Peh2P1Dn9d7sRta3d+gp9wiPgAs/aGgkWYjoLV NabQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773928437; x=1774533237; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=kxfUlYvRhQQX4MoWCMkv8SkJv+/DpoVuRBZT3qErhg0=; b=NdXAJxk8tGW5tsXHzsayHtcT3e0BXMnCiaVz6aLblXkw46If6wWfvpgoMzcZCb/nmu hRXTZTjARbKOsKoAJu5t6ANZEdbxMgExrZWH/WGNq+ScKEx1mt/AKkkTDGz9kNFabrEX wzDwbtBZvY7/h/SIebF7l7qGWsFYcYC7AJhrGNdJTfv8M7hTm/QGbQzD0zDn0ojJKlqg NkjA0sc1iAVJffx90b3gCinqObIFyYogr0Af2WwIribeYDEihfLDf8GKGcl7oZ0W3FVL npQ32rSqSBiW6WhGVJxC/XZ+2oQWndw+evLX8usGrnEdjbfTdFlTo0zHY6EFViydoI/T MjoQ== X-Gm-Message-State: AOJu0YwBmHt4RVVpRZLUW36zldEyQBFBO/mw8MfQGMSyiL4OljsKlKwE 8ik1zzwvzghM104eJ8igGPrT+tz15XiZFQ9ExZ8WToFD4vv4X5nS1IAOUlSFgC4aqujpfAmTUO8 HA0rCx/4ZLouohoZClSuWQnbV0wu6DX+M1UCstWANZYHDgFLoH/yc6+/tgJlGOvugAT2Vl2Aq8s nzKCrHZnz2+JreczhrY1SI8G0YhvmOM8zn+7lM8wQ= X-Gm-Gg: ATEYQzwyPViCD2bymoNE4KSgDdAnruhR0J9TbCFktLpcY+b+MAHezoeQTfmtwQuBS2G ElWcmv2JIDHegEtF4jmdD6ZK4iGh9ARgujS0RlEzlmYr8l5gXPwTOAgxJmnnhMg9oRy4XFOfzVE h+oxlO62pSEia4IheyDMdXgVU6Wplpw7rjYYHB3KXv1g5N7aC9eNYN+ch352kn1iZzbzV70HhVa v4SX19Oh9XCxkvg9NNFB/aMrnJ1NDkBEKFdM/CydYwfvRHHUp4f8PmQIMh9YPzBFG9BGWagEfWx sao7aShm3Q4zU72hksysMH1yqZGKyxAJzzW4H68GPzScat1GYzpYz2P+X6kjQA+QD1WNsppOhJ7 M//8GnzeBQuszO7/XF6eo4pXGBwkKEGvWr1eV7WSLs9I6Y/s51JbAuwOfMhXkNA== X-Received: by 2002:a17:903:3510:b0:2ae:4f6a:d2e6 with SMTP id d9443c01a7336-2b06e33b9f3mr59986955ad.20.1773928437169; Thu, 19 Mar 2026 06:53:57 -0700 (PDT) X-Received: by 2002:a17:903:3510:b0:2ae:4f6a:d2e6 with SMTP id d9443c01a7336-2b06e33b9f3mr59986565ad.20.1773928436467; Thu, 19 Mar 2026 06:53:56 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Ani Sinha , Marcel Apfelbaum , Laurent Vivier , Zhao Liu , "Michael S. Tsirkin" , Stefan Berger , marcandre.lureau@redhat.com, Fabiano Rosas , Paolo Bonzini , Igor Mammedov , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Yanan Wang , Arun Menon Subject: [RFC v2 7/7] hw/tpm: Increase TPM TIS max buffer size to 8192 Date: Thu, 19 Mar 2026 19:23:16 +0530 Message-ID: <20260319135316.37412-8-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260319135316.37412-1-armenon@redhat.com> References: <20260319135316.37412-1-armenon@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armenon@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -3 X-Spam_score: -0.4 X-Spam_bar: / X-Spam_report: (-0.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.819, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.903, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1773928509678158500 Content-Type: text/plain; charset="utf-8" - Double the size from 4096 to 8192 so that we can have bigger buffer enabling support for PQC algorithms in the TPM TIS interface. - v185 of TCG TPM rolls out PQC algorithm support. [1] [1] section 46 https://members.trustedcomputinggroup.org/wg/TCG/document/pr= eviewpdf/45151 Signed-off-by: Arun Menon --- hw/tpm/tpm_tis.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/tpm/tpm_tis.h b/hw/tpm/tpm_tis.h index 184632ff66..0df35d5a54 100644 --- a/hw/tpm/tpm_tis.h +++ b/hw/tpm/tpm_tis.h @@ -33,7 +33,7 @@ =20 #define TPM_TIS_IS_VALID_LOCTY(x) ((x) < TPM_TIS_NUM_LOCALITIES) =20 -#define TPM_TIS_BUFFER_MAX 4096 +#define TPM_TIS_BUFFER_MAX 8192 =20 typedef enum { TPM_TIS_STATE_IDLE =3D 0, --=20 2.53.0