From nobody Fri Apr 3 11:11:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5178F39479D for ; Tue, 24 Mar 2026 18:12:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375977; cv=none; b=dbL3cCHOcgLplNmVhDfAtFtUugHC6vNYzzFKxbFyAezei7JlMoGjd9FidKjV8yzqcxt/EO49pT8WtOEQzveoHhppb945OS3ByfvGStsE+lbPq6ISA+GgI12p0tHYCoLPWmpoBkU0VPRUhMH1gf/17BXAcqQ5GX5VlkkAmt7VQbs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375977; c=relaxed/simple; bh=WeNCUoEkhbHBR1L+eUPV0IJb754Qql/HDyY7uARnIF8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MWRr1QgDsF4fqcUAqF6D7Ehic03UJFZN9u9o0Acfu3pvo8oXx4qvVDqr/Ktu3pMFY8oA4MalGLs60hUd5wdcOqZotJtgauZs9DLiTmXblNDKDLV5yPSgek5eQ+tGisQorHTqb1brS0gr0j/1NrpRLRQWC+iudaZJKCGgoM3L7JM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=HdP7bUuO; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=o/fUXNCu; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="HdP7bUuO"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="o/fUXNCu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774375975; 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=Ax2GNDsKFff6oK1rOIrS956WsnSbTzO+ePG1MDmG/EM=; b=HdP7bUuOmObMfdEhsLAT434RjDqD8uqjSqORrHJIP2/N0iTUHXNOsH1mOlYyDwP1+zsfEV D7jXpiBLiTJfjTWrKabmWgXx+CTXgSbw7Ih35VcfIkOuksMtueaB+3jNg6h12KB4fXBU13 IXmDtn65yIzp8FwmCqlgbSN2GASeowM= 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-553-C6wFNQqJMjW2NxoSNUfAdw-1; Tue, 24 Mar 2026 14:12:53 -0400 X-MC-Unique: C6wFNQqJMjW2NxoSNUfAdw-1 X-Mimecast-MFC-AGG-ID: C6wFNQqJMjW2NxoSNUfAdw_1774375973 Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-b62da7602a0so3123346a12.2 for ; Tue, 24 Mar 2026 11:12:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1774375972; x=1774980772; darn=vger.kernel.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=Ax2GNDsKFff6oK1rOIrS956WsnSbTzO+ePG1MDmG/EM=; b=o/fUXNCukz0oq2pcfG7O5/H9EIYK5EMLPnqfPdR7vLKX3nV6BvG/2L2/AQkMkl3thH K0AksKgY9nUN+NnuPd8L1FiaYztvZlNYaHCPSj7kF7DC5AMK9qiord/vM1ftGr6OBMFc yeIbC5ZxoWn28I02pzwwjRxoZ+P4cIshoLPXFjxqxLoxUW/0zR3jbkCs3Ac/hlOd8wrI bYRvfI2BHCVDI8VVKKbqQWD20xYfM+Ij25j83NlzJu+iomTTWhK8uHi3C/fQP8LX0IQ4 1N1bM0EQvTCZ7wNGMR+HrgJ98jCHs8d583jMmYHFSkVU4qZNfWZeSwlvME8iRxMSBeUU SV5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774375972; x=1774980772; 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=Ax2GNDsKFff6oK1rOIrS956WsnSbTzO+ePG1MDmG/EM=; b=mzH0WjcSyRNb9XDWzXZz1Jj2SNu8RRJ2a9BBK/iKL1XZ4yZZOGp2sI1EiB1WcJoYoh SSea03CO01oIgQB2zAWJDPMDrH6u9MAfzW56m9txwvByOm48ISkOgbOq7WZDPC6CVG/5 mJm6MkGRH43ykrq32hmgSimOvKIf1TLRWv85KWLEWroPvOJc7ZliKrF/l3hGFNxpIqgf Tv1UnvaABR6wf5nNf0l0p2u/g3rK/IjTZt11qvQFgujezzsyetj5C6vIsMOiU5GaR34a SnlyT6hSXnRVr8Skw8RbMxk7DVd7w9M/Wni82VUVQuGqlhqGskbX2LcqmwiZYh+/wr41 uMrQ== X-Gm-Message-State: AOJu0YzKCisLutMvnTAbQcUx6t4yBH2wYcRy06O37OTnLAye1vWMX9yO Ds4zDkZPXaAqV/W72yStLt2s5haxNWENY1e80WmpysxpXiSsRhgVYWbekUoHURAYZx30wPBb6ow eTk4HvcFBIcvQfRfY42AeZUfM6UY1hw9g1ROkapkM3GDIBsbQ0AB80CORboYe7eQyuc9i7ywv3c 0H2nO4yuV5oxCbINrV+lp5dA8ZBOdhb0ETqVHQdP7SBzFtI3MP X-Gm-Gg: ATEYQzyBmaVVEuGYsA6lYp0eagJ1xlFjpnFQoFaTAVp4a80hxuc046OP02laMWFTRkH TdcufV3yHFquyJGia4EZ53ruYkcC2bGRbciWPIpwYDIsRC/CE2W2nRpA/t+NIcaEbLHUVBU3U/P yK5U22v976SWk36XiL6Ig6nXfWBA4EQ5rGsXnSnBKeEMb1aihHtcZo/azg/l/PP5yjaDWEWTc1n DD/2StXDqNa/oc0KT1Na7aJm2bXrwkDdEzCrIygvYlXQP3uXmyIO9eBY2F7pzwpDgLR0bW5GU5A vCt2RDH36vfYrs4s8TWHhjW5+hrsdkTaB8goRkIFtc1TanTZQO6QEsIRbVVp5D/l1yDJD7dcLjT fq/1QSEU1eWWCusK4USgWa8rxnY3cVoIfQt5TQwXsxhun501Oa3YzPtGbnKKJ+A== X-Received: by 2002:a05:6a00:2185:b0:829:8c08:d1f4 with SMTP id d2e1a72fcca58-82c6e0eaf1fmr501992b3a.39.1774375972249; Tue, 24 Mar 2026 11:12:52 -0700 (PDT) X-Received: by 2002:a05:6a00:2185:b0:829:8c08:d1f4 with SMTP id d2e1a72fcca58-82c6e0eaf1fmr501965b3a.39.1774375971745; Tue, 24 Mar 2026 11:12:51 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.108.16]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0410b1bdsm16654229b3a.57.2026.03.24.11.12.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 11:12:51 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Peter Huewe , Jason Gunthorpe , Arun Menon Subject: [RFC v2 1/5] tpm_crb: Add register definitions of TPM CRB chunking fields Date: Tue, 24 Mar 2026 23:42:40 +0530 Message-ID: <20260324181244.17741-2-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181244.17741-1-armenon@redhat.com> References: <20260324181244.17741-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Post-quantum cryptographic (PQC) algorithms can require buffer sizes that exceed the physical capacity of the TPM's Command/Response Buffer (CRB). To support these larger payloads, the TPM 2.0 CRB specification [1] allows for data chunking when the physical MMIO window is smaller than the required buffer size. To support this protocol, the TPM driver must be able to detect the chunking capability, and signal the backend using specific start method flags, also known as the control area start register bits. As per sections 6.4.2.2 and 6.5.3.9 of the specification document [1] Add 2 new bit flags to the existing enum crb_start and add the capability bit. - CRB_INTF_CAP_CRB_CHUNK: A capability bit used to detect if the backend supports chunking. - CRB_START_NEXT_CHUNK: A control bit to signal the TPM to consume the current command buffer, or to get the next chunk from the response buffer. - CRB_START_RESP_RETRY: A control bit to signal retransmission of a response buffer. [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 --- drivers/char/tpm/tpm_crb.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index 6c25305c256ef..67c0061d4cab7 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -56,12 +56,18 @@ enum crb_ctrl_sts { =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 { CRB_CANCEL_INVOKE =3D BIT(0), }; =20 +enum crb_intf { + CRB_INTF_CAP_CRB_CHUNK =3D BIT(10), +}; + struct crb_regs_head { u32 loc_state; u32 reserved1; --=20 2.53.0 From nobody Fri Apr 3 11:11:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3543B3890F9 for ; Tue, 24 Mar 2026 18:12:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375980; cv=none; b=oME+ZeIABlzpm6xglzjgHrxjZxjswSdNmPigh4bWuHp3w6fy3M1DrO+6D/QvrUMayL7JAhvBFWjgZXE2YKzs9O/LCgQSP+HTgh5QILiPcVylX8JdNiF16YLAapQ0rC2RPuw6bn7ElVN0eRCOhC3ce2gMNcGM8UQwELHU4pmuLrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375980; c=relaxed/simple; bh=CbKw7uCHTcASIbjhrtIAbyn29K0D1wi28B2cF/M0q3o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nqqRUO1glyhy0fwtt4vpFm3Ojdo/PWTPy6sPSZComRkR8MfhQGRWtOCAujkSloaf0P7aYUo1mRqoRR+26e+DFbiCt5vtY5MdKAFHvgVJg8qeV3HcfbZ1IoJIDq4mqR8QqkQFaY6qdO6uqu84yFG9EyLoMzjSnHIBSpG4bijfTQI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=XRpXLmIc; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=M7FAE+0m; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="XRpXLmIc"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="M7FAE+0m" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774375978; 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=LlOqs7sUxhA26BwtIb2xj4ODpYuCm+x9OqSh9XodAHs=; b=XRpXLmIc/0GN43XK/p8b32AKFSFsylfOx33aOVjLzEHs+B4n5G4Qpd1JSTzOiOmgKSm5RI olIy5NvWD3HXsmwy8p4kuEGBWrjNicAqqB9jO5HQ82tkrdo/TYynq0K5jtXDEcz+4pT8XP Icihxy7vgUcBoNzQltL8TvpjnLAMZKY= 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-382-nu_QfpXrOJyDalXIqY-igw-1; Tue, 24 Mar 2026 14:12:56 -0400 X-MC-Unique: nu_QfpXrOJyDalXIqY-igw-1 X-Mimecast-MFC-AGG-ID: nu_QfpXrOJyDalXIqY-igw_1774375975 Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c741b950511so2633464a12.0 for ; Tue, 24 Mar 2026 11:12:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1774375975; x=1774980775; darn=vger.kernel.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=LlOqs7sUxhA26BwtIb2xj4ODpYuCm+x9OqSh9XodAHs=; b=M7FAE+0mjYNgCoKn7pY92s3VqoMSL2XyzYy3qalGByZu1/REhTVdOasphR2CO0OBUw Lehzrd9ovv/bUzdgbE1lbi6KHKdNDDDF+UtjxYoNwsk42L/YWcX3OQutgAQVbbKnligq BPoTl+J1xnyvNjZs3kRAGysvtJaig9G31IUojIYFejVmJ2/2OxCGkXSG6jiXJZoeybbL E43EoJviikfNTSDu4lctDM0l5AEmkIIwKnOEjq27p0k+2OafIV0QA3y20Ul8iMJh4x0P cHRUfnVG5ZOn/VHBIKUiGgUt33aq2kHFoHmhXY74gdll5NyyqmMiPzAC7+/5QCIG6ALo XWEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774375975; x=1774980775; 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=LlOqs7sUxhA26BwtIb2xj4ODpYuCm+x9OqSh9XodAHs=; b=OqzGT3zHzo2/ZS/SIu88r1yRCKyFK+Ad0eEojNVDzpwbW+SBe8yZ9Hef5qA/wDllxs BobOOA56x3N9vY/0hI7v4u/7qMk3PHyMPH/+Q/vxixhpI1H9EibF5x9WcFbuVuHuADqp 0vjjnRn4plKKgIs5HOZVGslEq59CGEjb04zmRY9TVwwBjaYgrSIn4XRZ/YxGP5g6LIXL Nyyi+jrsBjgem7482q9LbtRj0IG8o+3wHvVgSzMwwn8QP9+lv6WV+AJmpT9WEUmbtGFf GQPO0tYtaj8GXZdWHINdnxVTm83UkJkZTsB3taT2/Ll1tUFCKqtfw8AqyEMxT1vxfVAi imVw== X-Gm-Message-State: AOJu0YwWhViY4yPKsk+wygsDVVtb/gaZ8aUSkVq4tUpDjqsR5INSZ6ew QfPPrrtUJ9OrsgniecAfQuMS9abRz5i8YcluiazZdb3W3oID1qDo7Ih51m8Ep7CHJHPo7JDcROZ JdhWxitGFjTj+AFFW0FjLgChEFi2MmcdWRJrA2PTA5ta376dNpHfu1IyQFnDBJEIUdBP2IGdKdO KMi7U+grIWeLeAyw4p36q2ekCmyIhtP25Lu8msZEDZR3yPJyVV X-Gm-Gg: ATEYQzwywvNs799JatyUxL4HxzbjMlGdY59SOFPKCOcNXQF0D9ZRuFj2BFEZ38n5ec5 l/udifIpsdsq5J0FVttjvktk43hlb/J5PotLKNlqAyqsLJGfJtbrlrmIYws0A4zcKgr4gVebNr3 CFUlg7RhbZOh86NzS4pIZpTSbBNQGyN9Cghv6EdSL1qmHIXMjfACrsCap2BpfF4uopANrm1gQuw oXcTQdXksoVuZtacRV1A+/2aM9P0f0WUzjjXVkx0WWV4nBFiK/DKy3jaJ22c8sHJ/WsaEgyRAoJ R3A5pBCj4AaIn/gBDXkLwyBjc1wKGzVxhH7IhUTxjfHFxDRWgn8ui41e+0/cHjXYfyIrJcI35QW G1IU3wVXlnEuU12M0dTfEks/sehlvFhfX+SEVBjVnBIwdFkYa/Ma0sUD9ePYiXQ== X-Received: by 2002:a05:6a00:3924:b0:829:7d31:dd99 with SMTP id d2e1a72fcca58-82c6e0eb05bmr509175b3a.38.1774375974919; Tue, 24 Mar 2026 11:12:54 -0700 (PDT) X-Received: by 2002:a05:6a00:3924:b0:829:7d31:dd99 with SMTP id d2e1a72fcca58-82c6e0eb05bmr509150b3a.38.1774375974343; Tue, 24 Mar 2026 11:12:54 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.108.16]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0410b1bdsm16654229b3a.57.2026.03.24.11.12.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 11:12:54 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Peter Huewe , Jason Gunthorpe , Arun Menon Subject: [RFC v2 2/5] tpm_crb: Add new wrapper function to invoke start method Date: Tue, 24 Mar 2026 23:42:41 +0530 Message-ID: <20260324181244.17741-3-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181244.17741-1-armenon@redhat.com> References: <20260324181244.17741-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The current implementation handles different platform start methods (ACPI, ARM SMC, and ARM FFA) directly within crb_send(), but it is limited to triggering the CRB_START_INVOKE bit. To support cmd/rsp chunking, the driver must be able to send other control bits, like CRB_START_NEXT_CHUNK, using these same platform-specific paths. By moving this logic into a new helper function, crb_trigger_tpm(), the driver can now send any required control bit across all supported platforms. This prepares the driver for the upcoming chunking support. No functional change is intended. Signed-off-by: Arun Menon --- drivers/char/tpm/tpm_crb.c | 50 ++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index 67c0061d4cab7..922bcf7a69ad5 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -445,6 +445,32 @@ static int tpm_crb_smc_start(struct device *dev, unsig= ned long func_id) } #endif =20 +static int crb_trigger_tpm(struct tpm_chip *chip, u32 start_cmd) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + int rc =3D 0; + /* The reason for the extra quirk is that the PTT in 4th Gen Core CPUs + * report only ACPI start but in practice seems to require both + * CRB start, hence invoking CRB start method if hid =3D=3D MSFT0101. + */ + if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER || + priv->sm =3D=3D ACPI_TPM2_MEMORY_MAPPED || + !strcmp(priv->hid, "MSFT0101")) + iowrite32(start_cmd, &priv->regs_t->ctrl_start); + if (priv->sm =3D=3D ACPI_TPM2_START_METHOD || + priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) + rc =3D crb_do_acpi_start(chip); + if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) { + iowrite32(start_cmd, &priv->regs_t->ctrl_start); + rc =3D tpm_crb_smc_start(&chip->dev, priv->smc_func_id); + } + if (priv->sm =3D=3D ACPI_TPM2_CRB_WITH_ARM_FFA) { + iowrite32(start_cmd, &priv->regs_t->ctrl_start); + rc =3D tpm_crb_ffa_start(CRB_FFA_START_TYPE_COMMAND, chip->locality); + } + return rc; +} + static int crb_send(struct tpm_chip *chip, u8 *buf, size_t bufsiz, size_t = len) { struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); @@ -470,29 +496,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, si= ze_t bufsiz, size_t len) /* Make sure that cmd is populated before issuing start. */ wmb(); =20 - /* The reason for the extra quirk is that the PTT in 4th Gen Core CPUs - * report only ACPI start but in practice seems to require both - * CRB start, hence invoking CRB start method if hid =3D=3D MSFT0101. - */ - if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER || - priv->sm =3D=3D ACPI_TPM2_MEMORY_MAPPED || - !strcmp(priv->hid, "MSFT0101")) - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); - - if (priv->sm =3D=3D ACPI_TPM2_START_METHOD || - priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) - rc =3D crb_do_acpi_start(chip); - - if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) { - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); - rc =3D tpm_crb_smc_start(&chip->dev, priv->smc_func_id); - } - - if (priv->sm =3D=3D ACPI_TPM2_CRB_WITH_ARM_FFA) { - iowrite32(CRB_START_INVOKE, &priv->regs_t->ctrl_start); - rc =3D tpm_crb_ffa_start(CRB_FFA_START_TYPE_COMMAND, chip->locality); - } - + rc =3D crb_trigger_tpm(chip, CRB_START_INVOKE); if (rc) return rc; =20 --=20 2.53.0 From nobody Fri Apr 3 11:11:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FA2C38F227 for ; Tue, 24 Mar 2026 18:13:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375984; cv=none; b=jubqVyVlSU6BqJf44H0R4ae8KWlgaTjej6PUqAd2gjYttPX01mk8tmAY+fxtaVsDVG58AFeJEYxUtgPYXumKPutjNoTk3jpVY/GCyVzrzhOFmzyfsXBZhOeOTR08v0HPQV+wbrDqoKT7DngaWLz/IaO1uGV+eS0kASlKmPx7I64= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375984; c=relaxed/simple; bh=orXh+Es5W797mVKPf+s7K9KOo+YnHs2Q86rzO0qqpVY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YPf5YaLbz/B4Wf0Edd55EXMLfzfTPRGxDk8o4/AnBLm1dEKxc8OBsHRH34wbzHqNxiOYuKe7KlccsAhSkhyIYtlhczAXInFCx9D+CwgWgIxXJYo7vJZQGad4FSXot4lLFTCLH3aC3ShQ2z+ywgyRPuHIssk9G/cP6wapPr/qKHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=WiesThDs; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Nf7s45Cz; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="WiesThDs"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Nf7s45Cz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774375980; 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=fxd0G1I4kWf+JoknGoSmowxDRTwU4glRvJ0760l4ojQ=; b=WiesThDs+ekKUp0x5xuwjXIw9CCkOmqsjynfeO1bvx/gNG6j3qJ+2lCW0nZVUXWPsC0A1b AHTr860KCQk/EAxSwcIL1q5k5ZjOmwUNGOZa+XF1F0hOnqPwi56a9Y37yV4cZaZdPt9yaw PpsbBFiNfDNx1eOTYjZc7t32VveJlis= Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-627-dk8MHrdKOM6ZqsUQFejJ6w-1; Tue, 24 Mar 2026 14:12:59 -0400 X-MC-Unique: dk8MHrdKOM6ZqsUQFejJ6w-1 X-Mimecast-MFC-AGG-ID: dk8MHrdKOM6ZqsUQFejJ6w_1774375978 Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-35a032cdd78so6297398a91.1 for ; Tue, 24 Mar 2026 11:12:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1774375978; x=1774980778; darn=vger.kernel.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=fxd0G1I4kWf+JoknGoSmowxDRTwU4glRvJ0760l4ojQ=; b=Nf7s45Cz/dxOgZ5TRLMzdayaJU2mwpgvN7Qb3kauNEHW6A3szDvKRyxLONY85ZqOAh 87FzJ2TUYZ53l9z76KpvHCCFPULHC28KOCWhDE5m/Lg/4VAfNa29gTOocxWBvjDZ+4m+ b9o17SPMSCiCXzaY/lJl0yl1LTeNi0Tbcb5fTlZ/NV0EDSfwKy+0LLt/F8btjqe414sT o/hLK9op76TMPXROmMRWW3BTY008ByqtblmlnxV10bfvBem5bkpA0rCky3eCGX931XeM H1u8PCf4Kx337L8jp4gMU255Ry74XA8KNzHOo5RyRCnHE8y6mglWCQeFjwFs81uLpCTD XkWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774375978; x=1774980778; 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=fxd0G1I4kWf+JoknGoSmowxDRTwU4glRvJ0760l4ojQ=; b=JuI55AZ2Ok/BIq9ngFhVryEhMr5QiQj53kaZCHAIo9rKHP+SuBnNpBK6PAfo7mu6WZ aKFJgRHsNkvch5E0epEUIJoUyP0/2EAQx/EyK/kIwBzAG7o7ysH3r8Coo97xCE/9bUTt DNOeaeVanl2sB978U2zgs3m7hvUs2Tb/JxBPRwDHjQq8vkElwMcwZNzuUYomwVnuUJhd FYUAsYRiekW+oNwe+4ydKZW6NF663XXrAa5ZBOjB/jmrcabtDYsDoV1zXh/wAZLWUZgg 9fuBk5cfAtmFa1BLVBDgPe036EF8eu6QAbOA5xrM0pws+GgSy9qUWwy3vnmVDFW8f6XJ X6NA== X-Gm-Message-State: AOJu0Yx732qirJD9dnES+nzT6NbuFmG6AB4WJ90EPH4NBLaEOXG+l0YX vtm0RHKzxwA1S6sgTnFhBIK0Z2H+6jGKDAKRqRvrjiCPvoYFofbUqWw9Uy9T5Ti9szFEtmZ8peH zBrRFezTtqtRB5Ysza0K4Tj6e5mB0OvgzvlekYBQM4mgSXctsts1DV6u5hwXwEa7kA/2Drz5E1L PPmMT5O3lwRVqC/uOux2JHsGw/vnHym5dAvbYEmHCbsMJN1Zxn X-Gm-Gg: ATEYQzykTrMEyggkaAh9L4MHcSnZg+nzj+Bz59o39MMRQ2BsWDYAkv09vMxYKIKo4UK pxG2V9mDr0/7Zj9yG7e03cfz7aeODfsPRYoyG4c2UNEJC0k+0FyanduPWoOUbBvHaAvmz+6Gfic AsHVb8UqCAOWzsZqj2qOl8QeWVkZGUdeeBrl0n2gqEma+SuLO3i1pzRcfuc7QpaRZNn3BVPYCm6 sijKnw4Txgeffs72TGEvtGHll4zyLBBQQL/bNefLeN8vzDsCbmCLELVwu/oLUI1kuaIIJgFRCLl 1rQwzAHfUAAVdE5Gw4aEH6ONVmEOIxeT8PX0SY59LimWPBlkeM0DAGzMES5yZuu0CLHwqsQMws1 cpVteQ7o4kbokQ1t+dKxs7jFDHbs1rIutE5gSx2I8OVZvh6lhNDS/6ZjqXVHy2g== X-Received: by 2002:a05:6a20:158a:b0:38b:eadd:449a with SMTP id adf61e73a8af0-39c4ad52483mr738123637.38.1774375977942; Tue, 24 Mar 2026 11:12:57 -0700 (PDT) X-Received: by 2002:a05:6a20:158a:b0:38b:eadd:449a with SMTP id adf61e73a8af0-39c4ad52483mr738086637.38.1774375977199; Tue, 24 Mar 2026 11:12:57 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.108.16]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0410b1bdsm16654229b3a.57.2026.03.24.11.12.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 11:12:56 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Peter Huewe , Jason Gunthorpe , Arun Menon Subject: [RFC v2 3/5] tpm_crb: Implement command and response chunking logic Date: Tue, 24 Mar 2026 23:42:42 +0530 Message-ID: <20260324181244.17741-4-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181244.17741-1-armenon@redhat.com> References: <20260324181244.17741-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With the introduction of support for Post Quantum Cryptography algorithms in TPM, the commands and responses will grow in size. Some TPMs have a physical hardware memory window (MMIO) that is smaller than the commands we need to send. Therefore this commit implements the core logic of sending/receiving data in chunks. Instead of sending the whole command at once, the driver now sends it in small chunks. After each chunk, it signals the TPM using a nextChunk signal, and waits for the TPM to consume the data. Once the final piece is delivered, the driver signals the TPM to begin execution by toggling the start invoke bit. We use the same logic in reverse to read large responses from the TPM. This allows the driver to handle large payloads even when the hardware interface has limited memory. This kernel-side support corresponds to the backend implementation in QEMU [1]. QEMU reassembles the chunks before passing them to the TPM emulator. [1] https://lore.kernel.org/qemu-devel/20260319135316.37412-1-armenon@redha= t.com/ Signed-off-by: Arun Menon --- drivers/char/tpm/tpm_crb.c | 155 +++++++++++++++++++++++++++---------- 1 file changed, 114 insertions(+), 41 deletions(-) diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c index 922bcf7a69ad5..a97fc5e9927e3 100644 --- a/drivers/char/tpm/tpm_crb.c +++ b/drivers/char/tpm/tpm_crb.c @@ -104,11 +104,13 @@ struct crb_priv { u8 __iomem *cmd; u8 __iomem *rsp; u32 cmd_size; + u32 rsp_size; u32 smc_func_id; u32 __iomem *pluton_start_addr; u32 __iomem *pluton_reply_addr; u8 ffa_flags; u8 ffa_attributes; + bool chunking_supported; }; =20 struct tpm2_crb_smc { @@ -368,38 +370,6 @@ static u8 crb_status(struct tpm_chip *chip) return sts; } =20 -static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count) -{ - struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); - unsigned int expected; - - /* A sanity check that the upper layer wants to get at least the header - * as that is the minimum size for any TPM response. - */ - if (count < TPM_HEADER_SIZE) - return -EIO; - - /* If this bit is set, according to the spec, the TPM is in - * unrecoverable condition. - */ - if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR) - return -EIO; - - /* Read the first 8 bytes in order to get the length of the response. - * We read exactly a quad word in order to make sure that the remaining - * reads will be aligned. - */ - memcpy_fromio(buf, priv->rsp, 8); - - expected =3D be32_to_cpup((__be32 *)&buf[2]); - if (expected > count || expected < TPM_HEADER_SIZE) - return -EIO; - - memcpy_fromio(&buf[8], &priv->rsp[8], expected - 8); - - return expected; -} - static int crb_do_acpi_start(struct tpm_chip *chip) { union acpi_object *obj; @@ -474,6 +444,8 @@ static int crb_trigger_tpm(struct tpm_chip *chip, u32 s= tart_cmd) static int crb_send(struct tpm_chip *chip, u8 *buf, size_t bufsiz, size_t = len) { struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + size_t offset =3D 0; + size_t chunk_size; int rc =3D 0; =20 /* Zero the cancel register so that the next command will not get @@ -481,7 +453,7 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, siz= e_t bufsiz, size_t len) */ iowrite32(0, &priv->regs_t->ctrl_cancel); =20 - if (len > priv->cmd_size) { + if (len > priv->cmd_size && !priv->chunking_supported) { dev_err(&chip->dev, "invalid command count value %zd %d\n", len, priv->cmd_size); return -E2BIG; @@ -491,18 +463,108 @@ static int crb_send(struct tpm_chip *chip, u8 *buf, = size_t bufsiz, size_t len) if (priv->sm =3D=3D ACPI_TPM2_COMMAND_BUFFER_WITH_PLUTON) __crb_cmd_ready(&chip->dev, priv, chip->locality); =20 - memcpy_toio(priv->cmd, buf, len); + while (offset < len) { + chunk_size =3D min_t(size_t, len - offset, priv->cmd_size); =20 - /* Make sure that cmd is populated before issuing start. */ - wmb(); - - rc =3D crb_trigger_tpm(chip, CRB_START_INVOKE); - if (rc) - return rc; + if (chunk_size =3D=3D 0) + break; =20 + memcpy_toio(priv->cmd, buf + offset, chunk_size); + offset +=3D chunk_size; + + /* Make sure that cmd is populated before issuing start. */ + wmb(); + if (offset < len) { + rc =3D crb_trigger_tpm(chip, CRB_START_NEXT_CHUNK); + if (rc) + return rc; + if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_start, + CRB_START_NEXT_CHUNK, 0, TPM2_TIMEOUT_C)) { + dev_err(&chip->dev, + "Timeout waiting for backend to consume chunk\n"); + return -ETIME; + } + } else { + rc =3D crb_trigger_tpm(chip, CRB_START_INVOKE); + if (rc) + return rc; + } + } return crb_try_pluton_doorbell(priv, false); } =20 +static int crb_recv(struct tpm_chip *chip, u8 *buf, size_t count) +{ + struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); + unsigned int expected; + size_t offset =3D 0; + size_t chunk_size; + size_t first_read; + int rc; + + /* A sanity check that the upper layer wants to get at least the header + * as that is the minimum size for any TPM response. + */ + if (count < TPM_HEADER_SIZE) + return -EIO; + + /* If this bit is set, according to the spec, the TPM is in + * unrecoverable condition. + */ + if (ioread32(&priv->regs_t->ctrl_sts) & CRB_CTRL_STS_ERROR) + return -EIO; + + /* Read the first 8 bytes in order to get the length of the response. + * We read exactly a quad word in order to make sure that the remaining + * reads will be aligned. + */ + memcpy_fromio(buf, priv->rsp, 8); + + expected =3D be32_to_cpup((__be32 *)&buf[2]); + if (expected > count || expected < TPM_HEADER_SIZE) + return -EIO; + + /* + * Set chunk_size by comparing the size of the buffer that the upper laye= r has + * allocated (count) to the hardware tpm limit (priv->rsp_size). + * This is to prevent buffer overflow while writing to buf. + */ + chunk_size =3D min_t(size_t, count, priv->rsp_size); + if (chunk_size < 8) + return -EIO; + + /* + * Compare the actual size of the response we found in the header to the = chunk_size. + */ + first_read =3D min_t(size_t, expected, chunk_size); + + memcpy_fromio(&buf[8], &priv->rsp[8], first_read - 8); + offset =3D first_read; + + while (offset < expected) { + if (!priv->chunking_supported) { + dev_err(&chip->dev, "Response larger than MMIO and chunking not support= ed\n"); + return -EIO; + } + + rc =3D crb_trigger_tpm(chip, CRB_START_NEXT_CHUNK); + if (rc) + return rc; + + if (!crb_wait_for_reg_32(&priv->regs_t->ctrl_start, + CRB_START_NEXT_CHUNK, 0, TPM2_TIMEOUT_C)) { + dev_err(&chip->dev, "Timeout waiting for backend response\n"); + return -ETIME; + } + + chunk_size =3D min_t(size_t, expected - offset, priv->rsp_size); + memcpy_fromio(buf + offset, priv->rsp, chunk_size); + offset +=3D chunk_size; + } + + return expected; +} + static void crb_cancel(struct tpm_chip *chip) { struct crb_priv *priv =3D dev_get_drvdata(&chip->dev); @@ -727,6 +789,15 @@ static int crb_map_io(struct acpi_device *device, stru= ct crb_priv *priv, goto out; } =20 + if (priv->regs_h) { + u32 intf_id =3D ioread32((u32 __iomem *)&priv->regs_h->intf_id); + + if (intf_id & CRB_INTF_CAP_CRB_CHUNK) { + priv->chunking_supported =3D true; + dev_info(dev, "CRB Chunking is supported by backend\n"); + } + } + memcpy_fromio(&__rsp_pa, &priv->regs_t->ctrl_rsp_pa, 8); rsp_pa =3D le64_to_cpu(__rsp_pa); rsp_size =3D ioread32(&priv->regs_t->ctrl_rsp_size); @@ -764,8 +835,10 @@ static int crb_map_io(struct acpi_device *device, stru= ct crb_priv *priv, priv->rsp =3D priv->cmd; =20 out: - if (!ret) + if (!ret) { priv->cmd_size =3D cmd_size; + priv->rsp_size =3D rsp_size; + } =20 __crb_go_idle(dev, priv, 0); =20 --=20 2.53.0 From nobody Fri Apr 3 11:11:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6213A3890F9 for ; Tue, 24 Mar 2026 18:13:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375985; cv=none; b=dtA0m8Kq47W9o1H2emnuKdecuTyl77/KG/r4x62HfpEimx1KLPEdFWeSGacJe/kJpvKbju1S4poIIxMVuWfmzZcRx+JHoKZIpNr6++SSJVt2xF3Rv4dzbN1Q4ndPPka5WEJDeuojK34x4ybiJ8F3YEz8UAKkKr+NODJYG28jLMA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375985; c=relaxed/simple; bh=hPL25OKm9bNXmRnz6cKeOMLxQeuKkk2o8t12Orj5iNI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IrjPNO1i7lDijr2ZO4Zt3nQdmMp++qy0PRqCGpfdcdaMi6S4/Ya/NF1yIgmy17iUAy813znSuoGmkP3jLthv6EdHfHUbhCo5eyalZI+EyuLgi0jz5qjw2CWrHdBO3E3ayF1C0PQle3imb6HH9hAOle4d++CgKf/7GS3wFBHgkuA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Dtd/q1S+; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=GXyWSQja; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Dtd/q1S+"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="GXyWSQja" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774375983; 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=imwEJb99lBD32TauVrG1INXQ5z6pQWDRIPso/BjwfkI=; b=Dtd/q1S+Innh0wZISIiAfVVUtCgI7NAxl7KA9z/QSYvmxYuyhX0Atr2AqLUtFNa4M4wJkt o0ytixgMiGIgZmwQY2qlebdy3+CFixxNO2sVqBbzCkCccvhuwVK7xmjiPkN4ap0Pc9MseT 2qNDPlBWrqJTxmm/UiihzYrkTPZkACY= Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-671-Or7_7xEJPcOFOG_rtXbDow-1; Tue, 24 Mar 2026 14:13:01 -0400 X-MC-Unique: Or7_7xEJPcOFOG_rtXbDow-1 X-Mimecast-MFC-AGG-ID: Or7_7xEJPcOFOG_rtXbDow_1774375980 Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-82c245a88a5so105857b3a.1 for ; Tue, 24 Mar 2026 11:13:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1774375980; x=1774980780; darn=vger.kernel.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=imwEJb99lBD32TauVrG1INXQ5z6pQWDRIPso/BjwfkI=; b=GXyWSQjaOiKIPiBmOP7/hSxhZIiu1GvuCa+CMvvbN0xOySN3uKhFqSdUK+Ft4sSeN6 0AaoD30aseDgPzeqQ2F9NCZTh88EOp247Sqd4JjOZ5dFRqmLIhTljnmfVqiAIor91jgS W+FAjg0hl3Mmda0x30JM+TEOL+yqbDd6ZnWR2LZsx3RVwb2yeEgxYL1pAb5j0qL1oFaT GNYq+MFEmvF3CX632SzgLK+0js6z1O8UzTsNTyxqbaeOoBmBrCcTToMIcKae4L4pJMPP hMik7QwigcdkeiJnvYu4j2u9MOVoJx14tpPxqNA7KcKJ1dCl6pI6bRfPG3qIbfAlU9Kl RP7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774375980; x=1774980780; 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=imwEJb99lBD32TauVrG1INXQ5z6pQWDRIPso/BjwfkI=; b=LwDv8HmZjwMPynVCDb3kbMMZr6dHIvgYkTdYCLmcijwgvc+2A7+WEFws7ChOFNjmh9 LBPJFodfLuLYpvE/fzm6K8pn7G9IZXarh+xf7q/idyZbq5Gvil+HFSlsz0qWyU5RweFy ETx9+YovhREVwwXakmpIKFENXqG29p43cne8TFj8Xvuho7QvoLK+nYZ8uogEK5zu4EhD wescHXvExqoxEqkGgbRTnsz+O6pLg57EEVJbjko7nfL4I/h+/egOmN2IrwzD/gVHm52z pewcuASoY5zZaQAZPgm2MPveLu/tfZAe1FOKIqw5RhXDuV0GMUC99cVVWBBPVQl1Ae1s otKQ== X-Gm-Message-State: AOJu0Yzn22jC/hdqvKw4kOhzwtSuwPXvOIqPiYE65rouM7g+cBGIl7lU nYEMFZ6z8mEhGelQK73gp1icnonapgZOl00regOxeMf67UkY4UcIyuNFN0k2YencLZ7/xXWBc+J QEwMw0gZHnsJB+1t3A8MTaNBbRd2X3STNoL3ghX7gipq6aYsfhjjDTpR6ikoYAC5Td1vcwpuLk6 Fx7b2379+NO9HdCX905n/pVgYjvw4c++cV8BKj45cSMSwNMheV X-Gm-Gg: ATEYQzz8SiE6G9h4MfiYn6xhqTRjr3l0ZH2W8Km7Y6+ahSCvqHzwkrZh1cboK3l33Zj k/4IKNlR+UAwO0yGBmuLCwogKhuT3CcMmEx/Jeruq/TFLb0Nm11V1GHd/gTIML2CnsPdjYFkCPj AXZ4HtwH+04HrY2sF+fOJXJRtELnkahSt9H65qlAWF+pDDxVIv+sUPFmSMU9RKrHZ5a4HzPs2K2 1Gbse1vhKETMAorc9bXq43VLcJi7bco7jGDb1SdhmvkdFceU8RGrhtqbSnAd5iTC6k6g+o3xTQO PjDPeosrTBwJTAo+89356Uf1AECpMn6d4cMK0IYWe4xNkhhihodZYX3xYvCCbLyiJWqjuV2lJAF +2M0x1Dg1dG1fae3fcuY+5z/TeOQNUwGDva/PYsCOxoRX9tmKTPCv90v9O3rogg== X-Received: by 2002:a05:6a00:3497:b0:81f:c6d1:5608 with SMTP id d2e1a72fcca58-82c6d846a06mr610593b3a.1.1774375980273; Tue, 24 Mar 2026 11:13:00 -0700 (PDT) X-Received: by 2002:a05:6a00:3497:b0:81f:c6d1:5608 with SMTP id d2e1a72fcca58-82c6d846a06mr610560b3a.1.1774375979655; Tue, 24 Mar 2026 11:12:59 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.108.16]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0410b1bdsm16654229b3a.57.2026.03.24.11.12.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 11:12:59 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Peter Huewe , Jason Gunthorpe , Arun Menon Subject: [RFC v2 4/5] tpm: Increase TPM_BUFSIZE to 8kB for chunking support Date: Tue, 24 Mar 2026 23:42:43 +0530 Message-ID: <20260324181244.17741-5-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181244.17741-1-armenon@redhat.com> References: <20260324181244.17741-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The size of the command is checked against TPM_BUFSIZE early on before even sending it to the backend. We therefore need to increase the TPM_BUFSIZE to allow support for larger commands. For now, 8KB seems sufficient for ML-KEM and ML-DSA algorithms and it is also order-1 safe. Signed-off-by: Arun Menon --- drivers/char/tpm/tpm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index 87d68ddf270a7..26c3765fbd732 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h @@ -33,7 +33,7 @@ #endif =20 #define TPM_MINOR 224 /* officially assigned */ -#define TPM_BUFSIZE 4096 +#define TPM_BUFSIZE 8192 #define TPM_NUM_DEVICES 65536 #define TPM_RETRY 50 =20 --=20 2.53.0 From nobody Fri Apr 3 11:11:28 2026 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05B08396D30 for ; Tue, 24 Mar 2026 18:13:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375988; cv=none; b=bm7vdUTuPMl5YUM4XT6wVfc4JSIdk/pn/Vqr1mOdb7fVnCerTnqGiR8OKhABKA/gYwubiWD9EgctbGAI2H+a1qfIvY2QbqlnqxXT3sASJ0ZCVQr6k+1p6+9VCbdFJx7ZDokRLxgYXc5UUukymQYNxoGIF6Hpv1NUfnod1O4+Nrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774375988; c=relaxed/simple; bh=NVqoURi6GkLCUA6hulCm/FUPyOAGzXe36crCDX+t3B4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VlXw1WiX/PPbroAhsCOmv1i0lrVHpERl5d/RqGI7TUPnZDrl29JNTI8yVaDXNh8at2/MF4tPffApWq4coax776uJEJbEpwtJpXqevZ3dQKRljyX1m40qYt7uovJujki2xi8kMgsgr7PeT2DsLhjQyw+Jv+taoMKEMGKl6Zp1xQk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=bOt0XwfJ; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=ChRQdfky; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="bOt0XwfJ"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="ChRQdfky" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1774375986; 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=qjOFiAc+loOVh0FFRv70s4LnEAsNKmBF0aaLgN5vhcY=; b=bOt0XwfJ1HpzqDfxHzMGPtEkM+Los43FMP5n8EgqfwNu5C4Dd6wYMnr8I+MmAZUWGFeNHm QfKKiz1/i5Je63Ab8GydYm80VQBqOLF4c+sZ7cNTv8wzMqYKisi2hFx51W5nuUPe/OCFcj kLIziyTiHIIh1XP00Lubgm8/Hn8rLiM= Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-59-I7L8GNk4NW6xJpi5wCLc9g-1; Tue, 24 Mar 2026 14:13:04 -0400 X-MC-Unique: I7L8GNk4NW6xJpi5wCLc9g-1 X-Mimecast-MFC-AGG-ID: I7L8GNk4NW6xJpi5wCLc9g_1774375983 Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-82a6c70f1f8so4872509b3a.0 for ; Tue, 24 Mar 2026 11:13:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1774375983; x=1774980783; darn=vger.kernel.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=qjOFiAc+loOVh0FFRv70s4LnEAsNKmBF0aaLgN5vhcY=; b=ChRQdfkybmRvpdr0WrG4YksrkfpVxC1tSrRxecVzOzSL/zqjaHpqUm684ORDdeDGak OCGYSbMA8jTYH7Ud831Y1zADs7BulHlX/d031r5oKtDMBz/AGNwgxj3yHN/diqxFN3hX 1DX2fak124+MSpdvJTsZKy2H7za+qD/mZNY0WOltmtLqNfC1KntqSWJlzp7YGIM75yBr ZlDNYWybhAyIVoK2crDDE0Zz7Rid2l1Se/wT5/va8Nw0P6O6rnnqof5k9at33qseMuwR 31/BydTN6ythUwjGFSGCul6aIRGaVbqS1PWJZjBTjFgNHltQV455pZrS4h/YpyJikAuP hSHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774375983; x=1774980783; 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=qjOFiAc+loOVh0FFRv70s4LnEAsNKmBF0aaLgN5vhcY=; b=GEVqG31gN50iKpRGqI97sIRCQkGOBeqeXuOCNxHFBcGGqO0Ou3uiiI8LMZuiLeNQQN AArICks1bagOAC6DJAuzyBmojfXNCfiTrkaLpkNuWndv9EsQHQRYo4zqq5DC8X++TOe7 eOxch33iB1wfrYi1pH0CoUtTlNAxitnuTFXHUyPjPn2PLkvsWfjMxj05dBZPKukEvPko ePQJEYmfN4jM60vcq+8m/AjzQjWtUk0zivkT4vYqLnXaGf4kMlbxcVhl4OY1BDsCPfbI DQTZrdPRfmRvDgD9wN3OLykBD2LsqId8bGlOa2nZ1ZDjSnYBoODqeDIPNP625DBX4Q1V Il4g== X-Gm-Message-State: AOJu0Yz04xm/nPBqcDgmIhBCzu3GG7K4XlUseExgjEgKyFmTmDL5KNZ9 QgQH5vI9D8BIXIMJQmt5ec9F93iGTcR1D0LxSL4oTLmyCCaZ2QROjzWtzqOuAhy55O5BpilnjN0 cISTYCxiNrwbfkZsE1ozzjdWRjiQoNhAzO9WL/c38EDh0XIwTcJ8dS41b0LMpjUStXSBLENTTQK rABvx1a6a5vbAbekGqLYQ92JwwQFZ9JlpXXO69L2cZaipvbdX0 X-Gm-Gg: ATEYQzwz4xUXnibc+lImSurYcEID5sUPGZTj+3C0a9iSUi0xkQTfqrMZF9gXV1uHDot DUUGH9JtMl9RF7ar2UdafKBr3N4jMyUNTbk2cdO3thSY7+q900Sk72JOBQxKRkXcMLzXKU4hzoM umcgTCWue79k2WRpxxLi/7upO6lfXs+SSybtgT0P8kmDBHi595XyIvXGbYDJ5VqxSYptFKeqhQ+ kPKBxPPRM3bDG1Hn7p2HzH++Ek5x4LG1EgLKx0VHH+iMbpPKnS42M4mPNbwA/d3SIrMU8T8U/24 hLrVsf63i+Idg0terxmuWFrJzjtu3r0MyyY6yyXTQhHfneLP1lQkwQ6yVgbAlji7GJpJgmUECXL fvCSNZeR4rGRlvEg9h/38/BYx7bJvRyAEfTxHwLnHxNym36XpFYip6iBBljLv3Q== X-Received: by 2002:a05:6a00:27a7:b0:82c:6da7:2d3d with SMTP id d2e1a72fcca58-82c6de7adbfmr532189b3a.11.1774375983021; Tue, 24 Mar 2026 11:13:03 -0700 (PDT) X-Received: by 2002:a05:6a00:27a7:b0:82c:6da7:2d3d with SMTP id d2e1a72fcca58-82c6de7adbfmr532160b3a.11.1774375982417; Tue, 24 Mar 2026 11:13:02 -0700 (PDT) Received: from fedora.armenon-thinkpadp16vgen1.bengluru.csb ([49.36.108.16]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0410b1bdsm16654229b3a.57.2026.03.24.11.13.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 11:13:01 -0700 (PDT) From: Arun Menon To: linux-kernel@vger.kernel.org Cc: Jarkko Sakkinen , linux-integrity@vger.kernel.org, Peter Huewe , Jason Gunthorpe , Arun Menon Subject: [RFC v2 5/5] tpm: tis_i2c: Use local 4KB buffer to limit memory usage Date: Tue, 24 Mar 2026 23:42:44 +0530 Message-ID: <20260324181244.17741-6-armenon@redhat.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260324181244.17741-1-armenon@redhat.com> References: <20260324181244.17741-1-armenon@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The global increase of TPM_BUFSIZE to 8KB is necessary to support Post-Quantum Cryptography (PQC) payloads. However, applying this increase to the tpm_tis_i2c driver is unnecessary and wasteful due to physical transport limitations as pointed out in [1] This commit introduces a local buffer limit that is used in the i2c driver. [1] https://sashiko.dev/#/patchset/20260324071803.324774-1-armenon%40redhat= .com?patch=3D8319 Signed-off-by: Arun Menon --- drivers/char/tpm/tpm_tis_i2c.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/char/tpm/tpm_tis_i2c.c b/drivers/char/tpm/tpm_tis_i2c.c index 6cd07dd34507e..db19d459ea1e1 100644 --- a/drivers/char/tpm/tpm_tis_i2c.c +++ b/drivers/char/tpm/tpm_tis_i2c.c @@ -54,6 +54,8 @@ #define TPM_INTF_CAPABILITY_ZERO 0x0FFFF000 #define TPM_I2C_INTERFACE_CAPABILITY_ZERO 0x80000000 =20 +#define TPM_I2C_BUFSIZE 4096 + struct tpm_tis_i2c_phy { struct tpm_tis_data priv; struct i2c_client *i2c_client; @@ -232,7 +234,7 @@ static int tpm_tis_i2c_write_bytes(struct tpm_tis_data = *data, u32 addr, u16 len, int ret; u16 wrote =3D 0; =20 - if (len > TPM_BUFSIZE - 1) + if (len > TPM_I2C_BUFSIZE - 1) return -EIO; =20 phy->io_buf[0] =3D reg; @@ -339,7 +341,7 @@ static int tpm_tis_i2c_probe(struct i2c_client *dev) if (!phy) return -ENOMEM; =20 - phy->io_buf =3D devm_kzalloc(&dev->dev, TPM_BUFSIZE, GFP_KERNEL); + phy->io_buf =3D devm_kzalloc(&dev->dev, TPM_I2C_BUFSIZE, GFP_KERNEL); if (!phy->io_buf) return -ENOMEM; =20 --=20 2.53.0