From nobody Tue Apr 7 18:36:27 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=1773289080; cv=none; d=zohomail.com; s=zohoarc; b=RhLYzId2er259rebO0O/UifIc0lJUxeGP8qYHVNcuYyo0GGoewkcX95xDN3eMtyKOH0vHmLs7ZeKfbflIjZPJM9qBCvsWTSjRsTyhX1nRBjx6OAT3BFBLQpUrJVcb7psH0pIHZmLn+naaeYlFtTH4n1JPfuNcwsYcp8fi8E+10Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773289080; 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=nh4xFu25fP4+98Q20GIy5ie54KTLY9e5JyU0jfcgH0c=; b=JHr0p54xXgo4oc+iHmexYbR3rVCYmz1T1RziDNPZWELfTyldQv/RhgnKWhEUfX9BlF5KGhBj4IdTv2u64vY4RN5xHO/hDS/ouTy7HRvC0ttRkOedixVbqzi55EnZnz1xOnypJy1frMOH8KCTV/aCXORjN1shrp4820jyf05Pibc= 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 1773289080452347.66355548372724; Wed, 11 Mar 2026 21:18:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w0XTx-00005x-4D; Thu, 12 Mar 2026 00:17:09 -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 1w0XTu-000056-LR for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:06 -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 1w0XTs-0008Lk-PZ for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:06 -0400 Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-66-s7wLx-S0N46hX2I-uqxQDQ-1; Thu, 12 Mar 2026 00:17:02 -0400 Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c7380305a9aso974327a12.1 for ; Wed, 11 Mar 2026 21:17:01 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.66]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73cdf0e498sm3634490a12.3.2026.03.11.21.16.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 21:16:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773289023; 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=nh4xFu25fP4+98Q20GIy5ie54KTLY9e5JyU0jfcgH0c=; b=e3b0xfuYpwYK6qpXL248KTOsQ6qG7zvFeGDh8Prs5t8jRfuGnZU8D2k/xSAeyixDl1nXYg mmckzL4x8LTnWdGZUFw6+UJ2YpFO/mMqKGN5NqOwRWOPwYKXgpz7JMbjNuTh2YJfb1ywO8 sLo3Ut0LukB0Yq1r31NZNXiwjNFBrsQ= X-MC-Unique: s7wLx-S0N46hX2I-uqxQDQ-1 X-Mimecast-MFC-AGG-ID: s7wLx-S0N46hX2I-uqxQDQ_1773289021 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773289020; x=1773893820; 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=nh4xFu25fP4+98Q20GIy5ie54KTLY9e5JyU0jfcgH0c=; b=iLD7WvHkFFT8z9tHaK15ff0sBKyT/COVacwm2DE0t1o61UX1R1eoOVvbR6FYLPyRgr 99h+aLLP4ivskGo+QBM4wj8wbowCYRydT+TXUq0VM9W5M5U86zqtk+w9lyP8Qt1dzI3i syEu+69FegdeH2l33MRltY9cx4WiyF5w6XE6FLFVWpzKRIxH7LbpD4XqxT6iDzeXf488 vJ97DXXzXSZyE5r63O8FXbOGJMNHlbRSk+x/MTnPJnbbEQZbMR6Gbhi330A5CBE/4SnC ptVcCoAg4m6izl839EPyFTG0KP59xBKT7fCCadJIq96tyQXe3I0cjEvIbQ1/Acw7/po5 tHEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773289020; x=1773893820; 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=nh4xFu25fP4+98Q20GIy5ie54KTLY9e5JyU0jfcgH0c=; b=PqtgNoede4g5dqFWr4VR3hD00wAM8w5Q/OI3f+PcBZuHHBkalzM4WQG9rSrXk748XA i/nyWRf56FtjZeQfykL5FQvcGe5U8ZuPxoGt9Zs8hf0T7lhuEVQ9Qn2SWjlIFZ6d9i36 2KxFnHO+oos8zQNvRyEbtXfkHWr5j7TeDw4O7NeN7dGumg3IBL37JqkcNjZVF9KoVpfF GIKRTCgqMVV+lEgbR4EGWXVI3MB73pPAlrGMKPGUBo/WWPKuOoIwy1IujXpJKyQjLSQM 8d90J/5svaLh0Zmw/5I+SfR/IaLlZpy+CFBSoYCuN/wDHKTVsCrzovObhMmEaO2PN5uw mgOA== X-Gm-Message-State: AOJu0YwBHbi1khIUqJHd7GTAOyiRydYY4oKDxXkBtaCFtNl9XxYaq5L+ bekItmevjyvGU1FpuneBi4kMpEo5SzbHfZddOm/umPTmY2+ptCql63d3XAuU5EwB2KD+SUEare0 lduAUJQuCGPnzZo2XesvIxXGj5HSyq6wH6Y0z5KH2kUNLhuqUi2rZwFYwNiB+AsrY2P/he9dUKC YFA6FFTw1OCclJBh9ZmbnVDgTDIztZ6T+WTkiWSkM= X-Gm-Gg: ATEYQzxEVBfYcuce8YJOcKyf1Jux5rfXrsWFL0yHdJVtWtA1v/uT+dbXV1x5vGpfhln rPLhoP7ZqWwK6dQwprt45ZxW0OqEwiJydFUBjeuOOi6Qxn5BdP2eWiUfXXv5VA5mkmcJH40tmxn u+aHVekF865UJzt0nP4QQgepITugc8BHLDHajCFwYCrhfetODDuTAOV7UfyR0xUZBlwxVnwo/WB TrbObVFXcM/Lw5PyfBqZspyt3avT/9vP/dpItwk2fem4+vdejbiqHjyybPbki5kg1hHskNBuQX9 fNQqNObXs/9zE2BPdw+uE3+vdBf1Q+Q9sFkmo1dMJRiSqP5ENZkDKLaBgWaN6nfkObuBdmoD3Q/ UU94joS+LhQPS7yQ1AsioY4+FeCPUWlSiQXsQi0O+vTRTptbO/sr5CZGxK3Ryhw== X-Received: by 2002:a05:6a21:102:b0:398:a97a:e758 with SMTP id adf61e73a8af0-398d78a44f8mr1836607637.21.1773289020634; Wed, 11 Mar 2026 21:17:00 -0700 (PDT) X-Received: by 2002:a05:6a21:102:b0:398:a97a:e758 with SMTP id adf61e73a8af0-398d78a44f8mr1836581637.21.1773289020212; Wed, 11 Mar 2026 21:17:00 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Stefan Berger , Ani Sinha , Paolo Bonzini , marcandre.lureau@redhat.com, Fabiano Rosas , Laurent Vivier , "Michael S. Tsirkin" , Igor Mammedov , Arun Menon Subject: [RFC 1/5] hw/tpm: Add TPM CRB chunking fields Date: Thu, 12 Mar 2026 09:46:46 +0530 Message-ID: <20260312041650.181411-2-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260312041650.181411-1-armenon@redhat.com> References: <20260312041650.181411-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: 1773289081855154100 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 Tue Apr 7 18:36:27 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=1773289087; cv=none; d=zohomail.com; s=zohoarc; b=mMPRLgCT101CVXglLNCGSdwp4v0ziqL07M6bzgm4HbFe7JMwMu+MAAt6IKzRaMnxMCF57xKot47WMlsgUUJejupzeqS7pzZAa4MVwIsFbMlGYNFJXoNdDGtszqc/SBNo5mOcmC2cfGHrwEh6fU/I4NZ6ovp8cbQ1L12HZpJwnUI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773289087; 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=qop9iAmQn1QJUZ8RAGJLSEnZxR8JmQrzT1EQUFiNBPI=; b=FksXTKzmS+YCGs7/zaEnt2HsGdlHn/1Bo4/PzSwn0xOfjmEUFLbO357pfltLkeySmIw0Wu+gzWRzxHcBcY9TdhfWdEn5+tg2+rN4iLW2i9C3g1M9aPZRK8m6L58It2vvodYKgJILTeRLKOgb7zpo/iHN5Q/cMR+VaC/jqG7VHHE= 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 1773289087557648.305117961226; Wed, 11 Mar 2026 21:18:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w0XTy-00006P-VS; Thu, 12 Mar 2026 00:17:11 -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 1w0XTx-00006E-Er for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:09 -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 1w0XTw-0008ML-2F for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:09 -0400 Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-372-6aqRynNqNTSOcb9M2aDsWA-1; Thu, 12 Mar 2026 00:17:06 -0400 Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c73935acff2so273510a12.2 for ; Wed, 11 Mar 2026 21:17:05 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.66]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73cdf0e498sm3634490a12.3.2026.03.11.21.17.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 21:17:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773289027; 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=qop9iAmQn1QJUZ8RAGJLSEnZxR8JmQrzT1EQUFiNBPI=; b=br3DEBhujqiN0ZDCqU7sIJgZZJQDQAhJeJBY5JX+Pf2O99pCA+kjjJHVT7XBYmTduq8UG+ mqRl1pG8f6U/WBBjOH2UkAYA8i9/aG1Ns4YBJ9EnFsMY813QfjoY4Qk0kAS2ek4FgYmnvH NWuqccmTF3lCtBZsSX2IXQZi3xtL2t0= X-MC-Unique: 6aqRynNqNTSOcb9M2aDsWA-1 X-Mimecast-MFC-AGG-ID: 6aqRynNqNTSOcb9M2aDsWA_1773289025 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773289024; x=1773893824; 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=qop9iAmQn1QJUZ8RAGJLSEnZxR8JmQrzT1EQUFiNBPI=; b=TjOfP+BPbSeJHxKQosD+1GGc0WUPo9ocTwu1nWZPNFwvNPoJ047nS1q50vxP70qHzx g1pFBJ8gJ1K9VCSr8ChvdH5P5ws0sPvfyzO31Ktn3ujBi17UINK7vNexEXRATIu/B0x0 7qDwkRKbEa6r3orH/1JCPYNaN759od5rVuAOYNPe6bk5IK24sqUao/ojOha7TB79aQpY 3tZ/TDpUAfIxNkyk/1P83VglnFuQdekvS34AXvDpFBrhnLFgEDvEiJp+V+BuUsiKoQ4g ODLOqkMceQee+6BPf4d2gIUhoJslAKzyZ7jrCfe65WGCG3yyDT6ZAFBqdyk3WD/IY5hF MC6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773289024; x=1773893824; 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=qop9iAmQn1QJUZ8RAGJLSEnZxR8JmQrzT1EQUFiNBPI=; b=reeoNRVP1afIZU6u1iFCL9ZwzmSs7OmcuKxMS7e2EriCCISC9vuWCuZxZhUDFo/Z1K qp+VeYP36oP31WhleQExcPs5z5Yymfqt7n6+VP4R0RRVbmv+rNsSkht+ONihLJOgWEQw ZrxcpvfC1FkZ70P4dcebjtUD4X3iHJi9yhSZ5xUhkYBKJ8p5KRdfXh0KHcApnRNHIgB9 7BsrNZSjuhs2YCqitMJST0dohXDiU/st6XmPkfILjeQfdJ+8e9HG62OJxQUlX6VkKw4q tRmvjl4z2a1q0jlrDJxLxYh0hyHsqMZFvG1PrJS/8WZC0f58cp+ZdTrlBUslnu2emdp1 K75w== X-Gm-Message-State: AOJu0YyaEDL5axCYzq0ZgkAmpVXrjSAEQFeB+W5Xju2kffqlBiXTa2To vH3tf9rMqd4gC9/y112kUL4vq+x3K3GPFp+Y7g41XW55oOE3bzREkgCbnm4rPDABIX71edXfvnp 2vKBi8gAH5Z500UJ6If8HqN0VBRtmXGeS189mrREBJTMFsPhOuIswuw3rIUvPWosWHoCTgzt+7E B2+JCDh6RpwSqM/5fNnuLllkK1pcylr7WbTi+4TBw= X-Gm-Gg: ATEYQzxsfRxQbtEPkVBNsj/rzkuANl8Tfw/yTKLSfb2hBXh+mmi9QcA0713wyY3UsqV Z1C4x2cnIRMrxhNRXDlKLaCNgvR7AeH0xDe6qX+B/drzbHSpwB3yXHKGytRBdt7wh44SZQfeBKf R0xrINJQgWCtWA92a04/sE8wImlRszZUqHfW38QiSjO9a+1qj9l/y+RIRdfoGFdUk6gsb004KRt U18LtHihhtElvxoHX97uS3VSQq49NcUq8oVY1EVUi5KcxD/WitS0UEt3MGsOFEoHIChsBr08MiB V8DVNvuu1jS0HjVEwMU460quhLEGfwAnhzYPAlIt2yewVdeCFvgbWMP4xUzRonA09+60U4Ydrtg HnD22N9sZexsnFFib43cilVQh3xGm3x9GHn8xvoUWAYppnpCLG5PkzLPCCm1JLA== X-Received: by 2002:a05:6a21:a43:b0:398:78c0:6dca with SMTP id adf61e73a8af0-398c5e6dab8mr4736425637.15.1773289024383; Wed, 11 Mar 2026 21:17:04 -0700 (PDT) X-Received: by 2002:a05:6a21:a43:b0:398:78c0:6dca with SMTP id adf61e73a8af0-398c5e6dab8mr4736395637.15.1773289023928; Wed, 11 Mar 2026 21:17:03 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Stefan Berger , Ani Sinha , Paolo Bonzini , marcandre.lureau@redhat.com, Fabiano Rosas , Laurent Vivier , "Michael S. Tsirkin" , Igor Mammedov , Arun Menon Subject: [RFC 2/5] hw/tpm: Refactor CRB_CTRL_START register access Date: Thu, 12 Mar 2026 09:46:47 +0530 Message-ID: <20260312041650.181411-3-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260312041650.181411-1-armenon@redhat.com> References: <20260312041650.181411-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: 1773289109394158500 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 Tue Apr 7 18:36:27 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=1773289104; cv=none; d=zohomail.com; s=zohoarc; b=SyZ3HSHD3SDlaPsl1SSK6d4LnwsZRDNtzBHJtMPcvHgAY1knGFu/kAeQiXDkqM8nBvzQ/FfcFIjjz0yFEG6mDEZVCUgDWI0JNr+YIzxM46+wAnTafEN5z1Y9qEDaoQr9161Naa5rogrgcdQlQzx0ZRXty5EO4lWY3fQPoOPacGU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773289104; 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=iyHsIVcMeieCcJbB/1d6f1EKgW7CFkbVfPr7B7rZR9aj9pd7ZPFmPOhqTJEWSXsVlDyEGqHMrBlyvmV4ifuJOBjQYJQkDEPUX2YB2dqsH/bEd6l8S+IcPpXn+fau4068/k0YmCs+VS98Y7liW35/fAE1l/egrq5l4o1QESX46RI= 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 1773289104087720.5726019462917; Wed, 11 Mar 2026 21:18:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w0XU2-000072-9e; Thu, 12 Mar 2026 00:17:14 -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 1w0XU0-00006r-W5 for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:13 -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 1w0XTz-0008Mr-BH for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:12 -0400 Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-542-Jk-85O8VPy2H5wDiuMwRdA-1; Thu, 12 Mar 2026 00:17:09 -0400 Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-b62da7602a0so495294a12.2 for ; Wed, 11 Mar 2026 21:17:09 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.66]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73cdf0e498sm3634490a12.3.2026.03.11.21.17.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 21:17:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773289030; 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=K/j5vU4HOcIoyD8NUb7R2LDUVAuRKLK/W/Zt/x79DpYTPANJK2ft10nSH3Z47VfnCE4lV9 P0i8noavmhMlAQQh1ezV+QxHi3P3Tcgf4zuG5KV5d8d9oNbja9E3BdWInLCBPP1KbJO66j Wl5wm4VrctzpD5EA40taL+htqjI9x2U= X-MC-Unique: Jk-85O8VPy2H5wDiuMwRdA-1 X-Mimecast-MFC-AGG-ID: Jk-85O8VPy2H5wDiuMwRdA_1773289028 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773289028; x=1773893828; 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=faSlKOk6OCj4ZFY23DuAEVX/nY3qZMRDAr+vXISrnXoJRgyBXAr1Oj4R+kH8qksALq 52jmWrjqphamapOjNtvK5o+8fRloyf8nzDTj0zS3cOk22cVR4SGq4dyAPS9TCORC1cI1 BdX5xnvrcl/MGf2CaYkaS8syl2hpOcxIpbLtUxZ0no0Glmo7z4oz1TFOqO+CSoOXDvgJ mh/p6ajaTz0D8c1knoYTVm7/EFUHY2FiX531VBQYmRq/w8K1JhN2JF1rha+rgUI0CBQi D0oI1REyaokusm4ojQLildWEkDd8WmLxYBEypPrJoCtWhUD748IrHpgT9Kea8IizZS/H ki5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773289028; x=1773893828; 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=ACyUZu4ko4mFTi1xzHfHJ6n/srU2XfLgWgvs07Fhr0iz3tbovfSmO2v+RqndHa6PVY gEraQI980ON0YfceRzY/X2oQSXl3ocwrbKgd8fCTlPru4PGLfL560Ahme/cYbWBBzJJ2 TXk0I0orzFApMZbBXkLXPtdOi9fn/kdQEiTPmVeQv5zMBMXwzerWgTLo81RGW8StZbis /c7tYmI87kpm9Mdi5TCSJSgUD5QKgwDjS+arqspWjWDxaRRjstT2JX2gsMV5jRJvf6Ru sFbdsMYVS+yGCoEebHo0ZZAL8naFVhUo5hFh+WaxLCqb8yy2RYnsVW5YljNg0FVkGE4p O0Vw== X-Gm-Message-State: AOJu0YxscjOqcU0oRbxqwVlDdQKarI0KQ+CqXKWB2rZAzWnNRcF/33Hc /aS1bsqselXIpxxCDDfzp67bJteXikD+6PTLSv5ecPXl8AFKPcTWhB6Vqs5U5RGMNFdK/zqxmCP qzPu1MwZB6W7z/Md1holYa4eglAdjuPC4XeHrpiQUFgSFT2vLZnMyD0OdHJ6DQn/+e6Ezu7Buo1 Mcru0wTcnSuLZCWxbum7C3soLC/L+pn9Niw1CxK6A= X-Gm-Gg: ATEYQzzi/URtpFr6JUNQd5XOu3do5kOovh8WA5CLm9r+P07CKmKLeIlloQq2dRGSu7u TgH01+MztUYLw4c9UH5UQRADqAR676X6vU4gpq1rIN2i9BEfod09eCr0RT3b4Ff6Ow/lwaF3B6t UojUe05Dcpiiq3ldu5K/gKAIFEU0gIW/3Rj4AsxcwwpUr2zDcggAnWY4pMfKaG72/z4iIRctiWp 9aePjtQ9Yfrnq93cJBv3HGOAdnvHl8tD4C8afFH/ErKa+zB8BZRSV4vz+873GfvfEYLODN+0uaX cRaxiGecuyMlxUTPlEeb4gGXARzZbZctnr5VelKziVyuXK7dCP69vIe/SINyqQwjz5wcUe/ojog iVBN3z5SyM+OnV2TOfonL6T4wnEplfGc/2f3hGIiNNft6LnEqh1rJ7JyL7ucZPw== X-Received: by 2002:a05:6a21:494:b0:38d:ee68:2c60 with SMTP id adf61e73a8af0-398c612ba54mr4868387637.52.1773289028034; Wed, 11 Mar 2026 21:17:08 -0700 (PDT) X-Received: by 2002:a05:6a21:494:b0:38d:ee68:2c60 with SMTP id adf61e73a8af0-398c612ba54mr4868350637.52.1773289027514; Wed, 11 Mar 2026 21:17:07 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Stefan Berger , Ani Sinha , Paolo Bonzini , marcandre.lureau@redhat.com, Fabiano Rosas , Laurent Vivier , "Michael S. Tsirkin" , Igor Mammedov , Arun Menon Subject: [RFC 3/5] hw/tpm: Add internal buffer state for chunking Date: Thu, 12 Mar 2026 09:46:48 +0530 Message-ID: <20260312041650.181411-4-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260312041650.181411-1-armenon@redhat.com> References: <20260312041650.181411-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: 1773289105533158500 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 Tue Apr 7 18:36:27 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=1773289065; cv=none; d=zohomail.com; s=zohoarc; b=LbTNeWdfbDbCBVOOIP/Vr0qRJ5xbVC5wjUNYOUOnYA7f/KqOcfKdOfBfsBfkrITey4Nre6FMyUrRQsvpQMrRQZHTATStUj68tj4ksIr/HoNKy2SGvqdtg7D2SYFKznmO1HUcyY86BxQnI8wpmPMFGijCu8vNx/EKROrpckxsC9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773289065; 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=9pL8kP9UQL8dUaqHGVHVwkA0K6NVXnOF01OJHrxYgrc=; b=G9Cm2sp7sHj/oe1QgEUl+nvIKNnQl9G+Sc9hxXueyhGWNdALMLoCRrWFrElpzJChrEiAS4JHYpgzQsj+wy0jz0EPCanXvkpNtC9QLAQp/82wdNSVfsv44riS0hHlEjBn1yS4fvXAtxLx3RBW9poslqT/D9PcyOkHBhljFrC/Q7A= 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 1773289065850884.9861387344215; Wed, 11 Mar 2026 21:17:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w0XUB-000085-NF; Thu, 12 Mar 2026 00:17:23 -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 1w0XU7-00007l-Sc for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:19 -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 1w0XU4-0008NT-LW for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:18 -0400 Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-121-sZLelzITMx63v-7qq9lw-A-1; Thu, 12 Mar 2026 00:17:13 -0400 Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2ae44db60c2so6917715ad.2 for ; Wed, 11 Mar 2026 21:17:12 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.66]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73cdf0e498sm3634490a12.3.2026.03.11.21.17.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 21:17:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773289035; 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=9pL8kP9UQL8dUaqHGVHVwkA0K6NVXnOF01OJHrxYgrc=; b=iUUSfJV5Xp5xVxclXohPUDNZVhcQVD8gH/INchqhNCU9PXL/HhRtHwsZCpPF06XuL3O99j SPssztWac3NgJ5QJaI1If758buOZHUk0zl7im7mba3NfxSgvIzbRmWto28o9BsGiN+A6t/ g+giQmvgtfQKujAUmiK+32QcyZoanYA= X-MC-Unique: sZLelzITMx63v-7qq9lw-A-1 X-Mimecast-MFC-AGG-ID: sZLelzITMx63v-7qq9lw-A_1773289032 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773289032; x=1773893832; 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=9pL8kP9UQL8dUaqHGVHVwkA0K6NVXnOF01OJHrxYgrc=; b=Dxh3eW3jPSd3bwdGXaeri2LhxmCsw0pUnHsw/XEp+A9oDkZ6Zhjf0Kgf+WeJlzc3b0 JUMGwnRSTMINevGfsXJMZfbpuXAe6rwDOlMcQo8XEMj+odZxqgkL8I1JZHdkJ2HS7gDU d3NxQbo4mPjzcb1KsP8VFJTVUvcXNeb/jWOj+LUjSMztqM+8TENJKmDIWjnfddjhD8sI fCf6qxA4pGTqSIK/2f06JTw2sCmO/T9YwGdC/vYTqClmJuTLMP1kmhCKjvFCdQc4qoYk TADfBYpt+K4C7Y2RaJKQOrrZFNhi2JWIM0mG6xzdlKhJDnallTlCxGm9EOTHf5vcyOJv 4Wcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773289032; x=1773893832; 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=9pL8kP9UQL8dUaqHGVHVwkA0K6NVXnOF01OJHrxYgrc=; b=w9bfOiKoIrC3+H2ny2VaNKUqmK8kp5aVL4b5eYcZs+fsFGMVSApV/4in9X8og9UWzr NdG5UODOuHtKjLj6C9sRo46K/Bi6utI1nMLyPIXdqHxvji0g047LnktvwAkdo5MdXsjH SMMg6htEAjWhHl22idmp1KOup23QABVZ31GLm+iUo2A9X8adHz6cd6lXNaMeqWEOBWbV 5mlKzS4yrclUcZzf3LyttjZmXRRii7ENNXco3xo7hjKAKfwi1xbfVaNH0jHWaSuvxu9B gwrC7dyRP/tkIn+hPcG2MWMKnPEDecuewW0lu4jxBONP8hZ2ArBD7eiiN4kekJqM9f9b vGkA== X-Gm-Message-State: AOJu0YwznICR3jGguBwevfvYY3o49Bheo0oe92GqOLrpS6oNy0KrY1MN nwO9+92fxVPWZFUQWSeu3ZW70sC+iwixuBn6QGYttJdJaSjKtYlK7rvj3OD5d0+gbZtmPk/cnQc dLAvONk/ufBxWOr1TtBgc1fEggkgn+MGMuN+9xTfDUBxOu86i5DF70aLsgtMMSGRK38AVvY1W3/ +mvyPJAib0CvJZjVeY3DOoMvFl1AsNNWvBcIxqpJk= X-Gm-Gg: ATEYQzzPOgpLQNO9YAa4JKEFFvRVz/hiG9zYs65IY7thexxhEQ1+y3G1TuywZNiRjZY 9KL10EBY2Qqjoigfpy3OQMrPt/kCedLZmOtkkvP8HobF0xGi9M6qM7UGEkhGS49bmVJEv6XUAts yhz1BrRRKPJrlNzHgvcKMZ9SNh1dbfS5pEkvyJ/ZM3kXvLK2LOSTw9CUVhLMNhCsVSFsWqMC5YO ZrOaj26LZduIwmHtZupRUqEXMZp3bUIqAEPb0cL8I+wbDA3dcov2VntQ6X6Qtwaq2hC/AMG/jZT Q7BpmidOz+OVxdPoKUnh4pDf+eXGxEozl+3wBOwIKUy7lf5i01C1rD15vTaOWtLruwE3WOjo6he m4IWic9Uqmew4Au/qLpH3FspBf9lHrkie8pAxUDPMohBSj1Hj3JTFxH8IAabXqg== X-Received: by 2002:a17:902:e88f:b0:2ad:ba80:df62 with SMTP id d9443c01a7336-2aeae892983mr54604865ad.37.1773289031828; Wed, 11 Mar 2026 21:17:11 -0700 (PDT) X-Received: by 2002:a17:902:e88f:b0:2ad:ba80:df62 with SMTP id d9443c01a7336-2aeae892983mr54604515ad.37.1773289031209; Wed, 11 Mar 2026 21:17:11 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Stefan Berger , Ani Sinha , Paolo Bonzini , marcandre.lureau@redhat.com, Fabiano Rosas , Laurent Vivier , "Michael S. Tsirkin" , Igor Mammedov , Arun Menon Subject: [RFC 4/5] hw/tpm: Implement TPM CRB chunking logic Date: Thu, 12 Mar 2026 09:46:49 +0530 Message-ID: <20260312041650.181411-5-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260312041650.181411-1-armenon@redhat.com> References: <20260312041650.181411-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_H4=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: 1773289067703154100 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 | 138 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 122 insertions(+), 16 deletions(-) diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index 5ea1a4a970..845f9c6c9f 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,58 @@ 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) +{ + 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) +{ + 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 +208,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 +289,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 +395,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 Tue Apr 7 18:36:27 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=1773289103; cv=none; d=zohomail.com; s=zohoarc; b=j6mFjgtdOV0PgP7IpG38HH6FglTZnMhJTf/L7Fr2mmQtRvilKp5vpR3lrS2t1wWehvwCKuegG2VTE+l9/sZI5ui83j8TUy/UlBY1bKYZVQzbB0c+HzahjOxkZ8fjDGQXe2JbuNzj4N5OGzDYIskmX/0GrRWiwKp41gAxzj5PAtU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773289103; 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=IxzOKiF8RPBv/6bl3AO49sH9RYZ73DNdYBieKZ2Pg+Y=; b=E4XcuyxVuzW19RiAJplIDd+TWP3rDH9vMVtkL9AFL+DlbNP8nB6ydZu65owQovEONxUQgrjFWXvL6eNbrm21vZ+axNhEQvjeo9He52lzG1yf5jXOt3X/hO+QkVtpM+qU/AouvLfkEhb6CHlQLsz19Pavr7ZNPYt4uSsnhqMMOMs= 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 1773289103929551.7693902223235; Wed, 11 Mar 2026 21:18:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w0XUL-00009e-Pl; Thu, 12 Mar 2026 00:17:33 -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 1w0XU9-00007v-Pd for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:23 -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 1w0XU7-0008No-KE for qemu-devel@nongnu.org; Thu, 12 Mar 2026 00:17:21 -0400 Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-394-fsb07u6wO0yetgQnrJ8BCQ-1; Thu, 12 Mar 2026 00:17:16 -0400 Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c70ea91bfe1so345081a12.1 for ; Wed, 11 Mar 2026 21:17:16 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.110.66]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c73cdf0e498sm3634490a12.3.2026.03.11.21.17.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 21:17:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773289037; 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=IxzOKiF8RPBv/6bl3AO49sH9RYZ73DNdYBieKZ2Pg+Y=; b=WgZnkgNGTx5MdGbporyysRYnduqtgYGmJ6hHtxfCoeGFbpAJZhjqjAHXFFbZ0VOEyiEwZI KsfxdwaBbXEf7NMYxW1eb9hwiOfFZIFLwwmty3BNF3MjJeKLJdOi5kDh/iD6eVpCcc7RLJ xDkSmYOEbguzp0skCwlctGW9Fh+k3Sc= X-MC-Unique: fsb07u6wO0yetgQnrJ8BCQ-1 X-Mimecast-MFC-AGG-ID: fsb07u6wO0yetgQnrJ8BCQ_1773289036 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1773289035; x=1773893835; 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=IxzOKiF8RPBv/6bl3AO49sH9RYZ73DNdYBieKZ2Pg+Y=; b=BfQ8axE44rBCsBEB4tuzTaApZSWgvJM4ME2MKlCq1YMgKD+PlpcZbVxZt8dBz8Mnea jYzyk0s1jnjGhRGs/Rlv1m7HUOnpbCMDBIaKXTNMuLRDCar+I9wJ+k94QukbGHYGcufJ rCDPCJNVoJlWec/7ZWmoLMrdD91fYkcrpuq4SlbPkd9qFjND7l221TTcuTBP+qBOEy93 uSuYXYxWcxBSB+p4gKqd78NttdM+Lt5JGRn0ka3Ks8fY2h7WY6rrpG54zS/IN99Qb0vx nM/mJaFo7yX1USI457EwfIuC/i0KIEKeHN1nnBZjsRgNWjQHn6Uy/68rZdZl1jjauI84 yI8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773289035; x=1773893835; 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=IxzOKiF8RPBv/6bl3AO49sH9RYZ73DNdYBieKZ2Pg+Y=; b=TrVXu7jZgm0pQu/sLT6uKURXG3PzwxRWOplRZAlcydeNFL6PfuIsGk1YbhYGJaNmZ6 9qmaiiqQRLRCo4X+5NjmXc2QUDPO64a5JBPvz8U8tcB4nJoTgK/BSfTweK0URutpXfWW x1PyCh5uF/HpAEtYfqKkfyBMLUKPrOYRIXVadmlu/MTsl8YvmTbE4jzqbtW0WILS7SJl 0dz3fBfQM9Wuxd0XiGsx/3VaiWIJo4LdDn2kSBSLUI+OLJF72RRCUMGDxruqr3YvuRiY vQq0pck0xxKGnxKVwYPLnvZQe2qesblR+e1bMJcWG93Pj27navcty8vmPQeQKFMgUd8V Nu+w== X-Gm-Message-State: AOJu0YzU2/ruqIBfcZHA9lJdi3E78oV7BgMlE0ufou9yqilNimghOzQ3 8dUKlGjc1hokliVSQZnL6nFpJqWBwvoAHf03UPE6M2DUa4gy0AFUvBcyneLk1umWpcr6lV+kT66 20wEcnxJ+g6sPwcRhHpRohc35jwVU1UDEMtl5GOc32sC2vamlSz4XSNXEg9lN1eNBzrj94UwWs1 J5keji7gFymx8O2hfSy9T+LEi3dC7zC/B5kP+981g= X-Gm-Gg: ATEYQzy9NNcmPXWI1ZSRi0IDGgu5w05nnq4LiC23Mx79oLZIFKNGCovp+hxXm95vfkD xmKl4YYECh9vlXt7ElFSAz8iu97heINon9TfcZGmwdEoN2Sb9cqLMlwFOt0ZcYGSP9f6UBLgvse ZmjMJVWHTQAkyo7dUC/zJtjAYDCijDISgnSZdD2UQzhMPQsZQSDQLJ2Q0o2ICyZpWHXi/CaG5Kg vj89XA5ZSED8xpNdEPRL0q9Q/5NLcmVxaWZFATWWej/XRM+7oCRhOm1cJVsB1+6yfUrSrCFGQbN o5fYEra28UXfNXGXzXQE7sVwcvalAo39d8qqUMiCOuuW6nUXMC3wFXJG+4rHNVyNsZe+IrSaHdo Nm2uDWMMhmK7yNkWxfm+lsHiK/K+F3msSq2JbQQNu/rJWInjUDwinPzJlOfyDfg== X-Received: by 2002:a05:6a21:1309:b0:38e:9220:ebbe with SMTP id adf61e73a8af0-398c5f49f5dmr4698944637.23.1773289035301; Wed, 11 Mar 2026 21:17:15 -0700 (PDT) X-Received: by 2002:a05:6a21:1309:b0:38e:9220:ebbe with SMTP id adf61e73a8af0-398c5f49f5dmr4698918637.23.1773289034799; Wed, 11 Mar 2026 21:17:14 -0700 (PDT) From: Arun Menon To: qemu-devel@nongnu.org Cc: Stefan Berger , Ani Sinha , Paolo Bonzini , marcandre.lureau@redhat.com, Fabiano Rosas , Laurent Vivier , "Michael S. Tsirkin" , Igor Mammedov , Arun Menon Subject: [RFC 5/5] test/qtest: Add test for tpm crb chunking Date: Thu, 12 Mar 2026 09:46:50 +0530 Message-ID: <20260312041650.181411-6-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260312041650.181411-1-armenon@redhat.com> References: <20260312041650.181411-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: 1773289105959154100 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..0a861a9e69 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